From 093512faa99cb64b9c1a42e4ae76678d852334c6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 8 Mar 2024 03:54:17 +0000 Subject: [PATCH] Rebuild pages at bd02268b67f2a034fa7e2f3e990e13546f3aa123 --- .../authorship.json | 2 +- AY2324S2-CS2103-F08-2_tp_master/commits.json | 2 +- .../authorship.json | 2 +- AY2324S2-CS2103-F08-4_tp_master/commits.json | 2 +- .../authorship.json | 2 +- AY2324S2-CS2103-F09-2_tp_master/commits.json | 2 +- .../authorship.json | 2 +- AY2324S2-CS2103-F09-4_tp_master/commits.json | 2 +- .../authorship.json | 2 +- AY2324S2-CS2103T-F10-2_tp_master/commits.json | 2 +- .../authorship.json | 2 +- AY2324S2-CS2103T-F14-1_tp_master/commits.json | 2 +- .../authorship.json | 2 +- AY2324S2-CS2103T-T09-2_tp_master/commits.json | 2 +- .../authorship.json | 2 +- AY2324S2-CS2103T-T14-1_tp_master/commits.json | 2 +- .../authorship.json | 2 +- AY2324S2-CS2103T-W09-2_tp_master/commits.json | 2 +- archive.zip | Bin 2106363 -> 2121735 bytes reposense-logs/reposense.log.0 | 2654 ++++++++--------- summary.json | 2 +- 21 files changed, 1346 insertions(+), 1346 deletions(-) diff --git a/AY2324S2-CS2103-F08-2_tp_master/authorship.json b/AY2324S2-CS2103-F08-2_tp_master/authorship.json index 34446c8c..c23e0aff 100644 --- a/AY2324S2-CS2103-F08-2_tp_master/authorship.json +++ b/AY2324S2-CS2103-F08-2_tp_master/authorship.json @@ -1 +1 @@ -[{"path":".github/ISSUE_TEMPLATE/bug_report.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"tankh99"},"content":"---","lastModifiedDate":"2024-02-26"},{"lineNumber":2,"author":{"gitId":"tankh99"},"content":"name: Bug report","lastModifiedDate":"2024-02-26"},{"lineNumber":3,"author":{"gitId":"tankh99"},"content":"about: Create a report to help us improve","lastModifiedDate":"2024-02-26"},{"lineNumber":4,"author":{"gitId":"tankh99"},"content":"title: \u0027\u0027","lastModifiedDate":"2024-02-26"},{"lineNumber":5,"author":{"gitId":"tankh99"},"content":"labels: \u0027\u0027","lastModifiedDate":"2024-02-26"},{"lineNumber":6,"author":{"gitId":"tankh99"},"content":"assignees: \u0027\u0027","lastModifiedDate":"2024-02-26"},{"lineNumber":7,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"tankh99"},"content":"---","lastModifiedDate":"2024-02-26"},{"lineNumber":9,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":10,"author":{"gitId":"tankh99"},"content":"**Describe the bug**","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"tankh99"},"content":"A clear and concise description of what the bug is.","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"tankh99"},"content":"**To Reproduce**","lastModifiedDate":"2024-02-26"},{"lineNumber":14,"author":{"gitId":"tankh99"},"content":"Steps to reproduce the behavior:","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"tankh99"},"content":"1. Go to \u0027...\u0027","lastModifiedDate":"2024-02-26"},{"lineNumber":16,"author":{"gitId":"tankh99"},"content":"2. Click on \u0027....\u0027","lastModifiedDate":"2024-02-26"},{"lineNumber":17,"author":{"gitId":"tankh99"},"content":"3. Scroll down to \u0027....\u0027","lastModifiedDate":"2024-02-26"},{"lineNumber":18,"author":{"gitId":"tankh99"},"content":"4. See error","lastModifiedDate":"2024-02-26"},{"lineNumber":19,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":20,"author":{"gitId":"tankh99"},"content":"**Expected behavior**","lastModifiedDate":"2024-02-26"},{"lineNumber":21,"author":{"gitId":"tankh99"},"content":"A clear and concise description of what you expected to happen.","lastModifiedDate":"2024-02-26"},{"lineNumber":22,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":23,"author":{"gitId":"tankh99"},"content":"**Screenshots**","lastModifiedDate":"2024-02-26"},{"lineNumber":24,"author":{"gitId":"tankh99"},"content":"If applicable, add screenshots to help explain your problem.","lastModifiedDate":"2024-02-26"},{"lineNumber":25,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":26,"author":{"gitId":"tankh99"},"content":"**Additional context**","lastModifiedDate":"2024-02-26"},{"lineNumber":27,"author":{"gitId":"tankh99"},"content":"Add any other context about the problem here.","lastModifiedDate":"2024-02-26"}],"authorContributionMap":{"tankh99":27}},{"path":".github/ISSUE_TEMPLATE/user-story.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"tankh99"},"content":"---","lastModifiedDate":"2024-03-06"},{"lineNumber":2,"author":{"gitId":"tankh99"},"content":"name: User story","lastModifiedDate":"2024-03-06"},{"lineNumber":3,"author":{"gitId":"tankh99"},"content":"about: User story","lastModifiedDate":"2024-03-06"},{"lineNumber":4,"author":{"gitId":"tankh99"},"content":"title: \"As a\"","lastModifiedDate":"2024-03-06"},{"lineNumber":5,"author":{"gitId":"tankh99"},"content":"labels: \u0027\u0027","lastModifiedDate":"2024-03-06"},{"lineNumber":6,"author":{"gitId":"tankh99"},"content":"assignees: \u0027\u0027","lastModifiedDate":"2024-03-06"},{"lineNumber":7,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":8,"author":{"gitId":"tankh99"},"content":"---","lastModifiedDate":"2024-03-06"},{"lineNumber":9,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":10,"author":{"gitId":"tankh99"},"content":"...so that","lastModifiedDate":"2024-03-06"}],"authorContributionMap":{"tankh99":10}},{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"tankh99"},"content":"[![codecov](https://codecov.io/gh/AY2324S2-CS2103-F08-2/tp/graph/badge.svg?token\u003dPBBJNYE8U5)](https://codecov.io/gh/AY2324S2-CS2103-F08-2/tp)","lastModifiedDate":"2024-03-07"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-17"},{"lineNumber":3,"author":{"gitId":"tankh99"},"content":"[![CI Status](https://github.com/AY2324S2-CS2103-F08-2/tp/workflows/Java%20CI/badge.svg)](https://github.com/AY2324S2-CS2103-F08-2/tp/actions)","lastModifiedDate":"2024-03-06"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"![Ui](docs/images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":7,"author":{"gitId":"-"},"content":"* This is **a sample project for Software Engineering (SE) students**. pu\u003cbr\u003e","lastModifiedDate":"2024-02-22"},{"lineNumber":8,"author":{"gitId":"-"},"content":" Example usages:","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":" * as a starting point of a course project (as opposed to writing everything from scratch)","lastModifiedDate":"2020-05-23"},{"lineNumber":10,"author":{"gitId":"-"},"content":" * as a case study","lastModifiedDate":"2020-05-23"},{"lineNumber":11,"author":{"gitId":"-"},"content":"* The project simulates an ongoing software project for a desktop application (called _AddressBook_) used for managing contact details.","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"-"},"content":" * It is **written in OOP fashion**. It provides a **reasonably well-written** code base **bigger** (around 6 KLoC) than what students usually write in beginner-level SE modules, without being overwhelmingly big.","lastModifiedDate":"2020-05-23"},{"lineNumber":13,"author":{"gitId":"-"},"content":" * It comes with a **reasonable level of user and developer documentation**.","lastModifiedDate":"2020-05-23"},{"lineNumber":14,"author":{"gitId":"-"},"content":"* It is named `AddressBook Level 3` (`AB3` for short) because it was initially created as a part of a series of `AddressBook` projects (`Level 1`, `Level 2`, `Level 3` ...).","lastModifiedDate":"2020-05-23"},{"lineNumber":15,"author":{"gitId":"-"},"content":"* For the detailed documentation of this project, see the **[Address Book Product Website](https://se-education.org/addressbook-level3)**.","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"-"},"content":"* This project is a **part of the se-education.org** initiative. If you would like to contribute code to this project, see [se-education.org](https://se-education.org#https://se-education.org/#contributing) for more info.","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"tankh99":2,"-":14}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"About Us\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"We are a team based in the [School of Computing, National University of Singapore](http://www.comp.nus.edu.sg).","lastModifiedDate":"2020-05-23"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":8,"author":{"gitId":"-"},"content":"You can reach us at the email `seer[at]comp.nus.edu.sg`","lastModifiedDate":"2020-06-17"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-06-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"## Project team","lastModifiedDate":"2020-06-07"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"Jerome-j"},"content":"### Jerome Chua","lastModifiedDate":"2024-03-01"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":14,"author":{"gitId":"Jerome-j"},"content":"\u003cimg src\u003d\"images/jerome-j.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-01"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"Jerome-j"},"content":"[[github](http://github.com/Jerome-j)] [[portfolio](team/jerome-j.md)]","lastModifiedDate":"2024-03-06"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"Jerome-j"},"content":"* Responsibilities: Integration","lastModifiedDate":"2024-03-01"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"vnnamng"},"content":"### Nguyen Xuan Nam","lastModifiedDate":"2024-03-06"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":23,"author":{"gitId":"vnnamng"},"content":"\u003cimg src\u003d\"images/vnnamng.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-06"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":25,"author":{"gitId":"vnnamng"},"content":"[[github](http://github.com/vnnamng)] [[portfolio](team/vnnamng.md)]","lastModifiedDate":"2024-03-06"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":27,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"Jerome-j"},"content":"* Responsibilities: Integration","lastModifiedDate":"2024-03-01"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"caitlyntang"},"content":"### Caitlyn Tang","lastModifiedDate":"2024-03-04"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"caitlyntang"},"content":"\u003cimg src\u003d\"images/caitlyntang.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"caitlyntang"},"content":"[[github](http://github.com/caitlyntang)]","lastModifiedDate":"2024-03-04"},{"lineNumber":35,"author":{"gitId":"caitlyntang"},"content":"[[portfolio](team/caitlyntang.md)]","lastModifiedDate":"2024-03-04"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":37,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":"* Responsibilities: Dev Ops + Threading","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":40,"author":{"gitId":"tankh99"},"content":"### Tan Khang Hou","lastModifiedDate":"2024-03-05"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"tankh99"},"content":"\u003cimg src\u003d\"images/tankh99.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"tankh99"},"content":"[[github](http://github.com/tankh99)]","lastModifiedDate":"2024-03-05"},{"lineNumber":45,"author":{"gitId":"tankh99"},"content":"[[portfolio](team/tankh99.md)]","lastModifiedDate":"2024-03-05"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"tankh99"},"content":"* Responsibilities: Code quality","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"caitlyntang":4,"Jerome-j":5,"tankh99":5,"vnnamng":3,"-":31}},{"path":"docs/DeveloperGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"Developer Guide\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":" pageNav: 3","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"caitlyntang"},"content":"# CogniCare Developer Guide","lastModifiedDate":"2024-03-07"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c!-- * Table of Contents --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003cpage-nav-print /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":14,"author":{"gitId":"-"},"content":"## **Acknowledgements**","lastModifiedDate":"2021-07-30"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":16,"author":{"gitId":"caitlyntang"},"content":"Code base adapted from [Address Book Level-3](https://github.com/nus-cs2103-AY2324S2/tp)","lastModifiedDate":"2024-03-07"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":18,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2021-07-30"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"-"},"content":"## **Setting up, getting started**","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"Refer to the guide [_Setting up and getting started_](SettingUp.md).","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"-"},"content":"## **Design**","lastModifiedDate":"2020-05-23"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":"### Architecture","lastModifiedDate":"2021-07-31"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ArchitectureDiagram.puml\" width\u003d\"280\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"-"},"content":"The ***Architecture Diagram*** given above explains the high-level design of the App.","lastModifiedDate":"2021-07-31"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"-"},"content":"Given below is a quick overview of main components and how they interact with each other.","lastModifiedDate":"2021-07-31"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":36,"author":{"gitId":"-"},"content":"**Main components of the architecture**","lastModifiedDate":"2021-07-31"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":"**`Main`** (consisting of classes [`Main`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/Main.java) and [`MainApp`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/MainApp.java)) is in charge of the app launch and shut down.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"-"},"content":"* At app launch, it initializes the other components in the correct sequence, and connects them up with each other.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"-"},"content":"* At shut down, it shuts down the other components and invokes cleanup methods where necessary.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":"The bulk of the app\u0027s work is done by the following four components:","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"-"},"content":"* [**`UI`**](#ui-component): The UI of the App.","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":"* [**`Logic`**](#logic-component): The command executor.","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":"* [**`Model`**](#model-component): Holds the data of the App in memory.","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* [**`Storage`**](#storage-component): Reads data from, and writes data to, the hard disk.","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"-"},"content":"[**`Commons`**](#common-classes) represents a collection of classes used by multiple other components.","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"-"},"content":"**How the architecture components interact with each other**","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":"The *Sequence Diagram* below shows how the components interact with each other for the scenario where the user issues the command `delete 1`.","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ArchitectureSequenceDiagram.puml\" width\u003d\"574\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":57,"author":{"gitId":"-"},"content":"Each of the four main components (also shown in the diagram above),","lastModifiedDate":"2021-07-31"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":59,"author":{"gitId":"-"},"content":"* defines its *API* in an `interface` with the same name as the Component.","lastModifiedDate":"2021-07-31"},{"lineNumber":60,"author":{"gitId":"-"},"content":"* implements its functionality using a concrete `{Component Name}Manager` class (which follows the corresponding API `interface` mentioned in the previous point.","lastModifiedDate":"2021-07-31"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":62,"author":{"gitId":"-"},"content":"For example, the `Logic` component defines its API in the `Logic.java` interface and implements its functionality using the `LogicManager.java` class which follows the `Logic` interface. Other components interact with a given component through its interface rather than the concrete class (reason: to prevent outside component\u0027s being coupled to the implementation of a component), as illustrated in the (partial) class diagram below.","lastModifiedDate":"2021-07-31"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":64,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ComponentManagers.puml\" width\u003d\"300\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":66,"author":{"gitId":"-"},"content":"The sections below give more details of each component.","lastModifiedDate":"2020-05-23"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":68,"author":{"gitId":"-"},"content":"### UI component","lastModifiedDate":"2020-05-23"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":70,"author":{"gitId":"-"},"content":"The **API** of this component is specified in [`Ui.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/Ui.java)","lastModifiedDate":"2021-07-31"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":72,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UiClassDiagram.puml\" alt\u003d\"Structure of the UI Component\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":74,"author":{"gitId":"-"},"content":"The UI consists of a `MainWindow` that is made up of parts e.g.`CommandBox`, `ResultDisplay`, `PersonListPanel`, `StatusBarFooter` etc. All these, including the `MainWindow`, inherit from the abstract `UiPart` class which captures the commonalities between classes that represent parts of the visible GUI.","lastModifiedDate":"2021-07-31"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":76,"author":{"gitId":"-"},"content":"The `UI` component uses the JavaFx UI framework. The layout of these UI parts are defined in matching `.fxml` files that are in the `src/main/resources/view` folder. For example, the layout of the [`MainWindow`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/MainWindow.java) is specified in [`MainWindow.fxml`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/resources/view/MainWindow.fxml)","lastModifiedDate":"2021-07-31"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":78,"author":{"gitId":"-"},"content":"The `UI` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":80,"author":{"gitId":"-"},"content":"* executes user commands using the `Logic` component.","lastModifiedDate":"2021-07-31"},{"lineNumber":81,"author":{"gitId":"-"},"content":"* listens for changes to `Model` data so that the UI can be updated with the modified data.","lastModifiedDate":"2021-07-31"},{"lineNumber":82,"author":{"gitId":"-"},"content":"* keeps a reference to the `Logic` component, because the `UI` relies on the `Logic` to execute commands.","lastModifiedDate":"2021-07-31"},{"lineNumber":83,"author":{"gitId":"-"},"content":"* depends on some classes in the `Model` component, as it displays `Person` object residing in the `Model`.","lastModifiedDate":"2021-07-31"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":85,"author":{"gitId":"-"},"content":"### Logic component","lastModifiedDate":"2020-05-23"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":87,"author":{"gitId":"-"},"content":"**API** : [`Logic.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/logic/Logic.java)","lastModifiedDate":"2021-07-31"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":89,"author":{"gitId":"-"},"content":"Here\u0027s a (partial) class diagram of the `Logic` component:","lastModifiedDate":"2021-07-31"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":91,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/LogicClassDiagram.puml\" width\u003d\"550\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":93,"author":{"gitId":"-"},"content":"The sequence diagram below illustrates the interactions within the `Logic` component, taking `execute(\"delete 1\")` API call as an example.","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":95,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/DeleteSequenceDiagram.puml\" alt\u003d\"Interactions Inside the Logic Component for the `delete 1` Command\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":97,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":98,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":99,"author":{"gitId":"-"},"content":"**Note:** The lifeline for `DeleteCommandParser` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline continues till the end of diagram.","lastModifiedDate":"2023-09-12"},{"lineNumber":100,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":101,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":102,"author":{"gitId":"-"},"content":"How the `Logic` component works:","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"-"},"content":"1. When `Logic` is called upon to execute a command, it is passed to an `AddressBookParser` object which in turn creates a parser that matches the command (e.g., `DeleteCommandParser`) and uses it to parse the command.","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"-"},"content":"1. This results in a `Command` object (more precisely, an object of one of its subclasses e.g., `DeleteCommand`) which is executed by the `LogicManager`.","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"-"},"content":"1. The command can communicate with the `Model` when it is executed (e.g. to delete a person).\u003cbr\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":107,"author":{"gitId":"-"},"content":" Note that although this is shown as a single step in the diagram above (for simplicity), in the code it can take several interactions (between the command object and the `Model`) to achieve.","lastModifiedDate":"2024-02-09"},{"lineNumber":108,"author":{"gitId":"-"},"content":"1. The result of the command execution is encapsulated as a `CommandResult` object which is returned back from `Logic`.","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"-"},"content":"Here are the other classes in `Logic` (omitted from the class diagram above) that are used for parsing a user command:","lastModifiedDate":"2021-07-31"},{"lineNumber":111,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":112,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ParserClasses.puml\" width\u003d\"600\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":114,"author":{"gitId":"-"},"content":"How the parsing works:","lastModifiedDate":"2021-07-31"},{"lineNumber":115,"author":{"gitId":"-"},"content":"* When called upon to parse a user command, the `AddressBookParser` class creates an `XYZCommandParser` (`XYZ` is a placeholder for the specific command name e.g., `AddCommandParser`) which uses the other classes shown above to parse the user command and create a `XYZCommand` object (e.g., `AddCommand`) which the `AddressBookParser` returns back as a `Command` object.","lastModifiedDate":"2021-07-31"},{"lineNumber":116,"author":{"gitId":"-"},"content":"* All `XYZCommandParser` classes (e.g., `AddCommandParser`, `DeleteCommandParser`, ...) inherit from the `Parser` interface so that they can be treated similarly where possible e.g, during testing.","lastModifiedDate":"2021-07-31"},{"lineNumber":117,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":118,"author":{"gitId":"-"},"content":"### Model component","lastModifiedDate":"2021-07-31"},{"lineNumber":119,"author":{"gitId":"-"},"content":"**API** : [`Model.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/model/Model.java)","lastModifiedDate":"2020-05-23"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":121,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ModelClassDiagram.puml\" width\u003d\"450\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":122,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":123,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":124,"author":{"gitId":"-"},"content":"The `Model` component,","lastModifiedDate":"2021-07-31"},{"lineNumber":125,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":126,"author":{"gitId":"-"},"content":"* stores the address book data i.e., all `Person` objects (which are contained in a `UniquePersonList` object).","lastModifiedDate":"2021-07-31"},{"lineNumber":127,"author":{"gitId":"-"},"content":"* stores the currently \u0027selected\u0027 `Person` objects (e.g., results of a search query) as a separate _filtered_ list which is exposed to outsiders as an unmodifiable `ObservableList\u003cPerson\u003e` that can be \u0027observed\u0027 e.g. the UI can be bound to this list so that the UI automatically updates when the data in the list change.","lastModifiedDate":"2021-07-31"},{"lineNumber":128,"author":{"gitId":"-"},"content":"* stores a `UserPref` object that represents the user’s preferences. This is exposed to the outside as a `ReadOnlyUserPref` objects.","lastModifiedDate":"2021-07-31"},{"lineNumber":129,"author":{"gitId":"-"},"content":"* does not depend on any of the other three components (as the `Model` represents data entities of the domain, they should make sense on their own without depending on other components)","lastModifiedDate":"2021-07-31"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":131,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":132,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":133,"author":{"gitId":"-"},"content":"**Note:** An alternative (arguably, a more OOP) model is given below. It has a `Tag` list in the `AddressBook`, which `Person` references. This allows `AddressBook` to only require one `Tag` object per unique tag, instead of each `Person` needing their own `Tag` objects.\u003cbr\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":134,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":135,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/BetterModelClassDiagram.puml\" width\u003d\"450\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":137,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":138,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":139,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":140,"author":{"gitId":"-"},"content":"### Storage component","lastModifiedDate":"2020-05-23"},{"lineNumber":141,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":142,"author":{"gitId":"-"},"content":"**API** : [`Storage.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/storage/Storage.java)","lastModifiedDate":"2020-05-23"},{"lineNumber":143,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":144,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/StorageClassDiagram.puml\" width\u003d\"550\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":145,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":146,"author":{"gitId":"-"},"content":"The `Storage` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":147,"author":{"gitId":"-"},"content":"* can save both address book data and user preference data in JSON format, and read them back into corresponding objects.","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"-"},"content":"* inherits from both `AddressBookStorage` and `UserPrefStorage`, which means it can be treated as either one (if only the functionality of only one is needed).","lastModifiedDate":"2021-07-31"},{"lineNumber":149,"author":{"gitId":"-"},"content":"* depends on some classes in the `Model` component (because the `Storage` component\u0027s job is to save/retrieve objects that belong to the `Model`)","lastModifiedDate":"2021-07-21"},{"lineNumber":150,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":151,"author":{"gitId":"-"},"content":"### Common classes","lastModifiedDate":"2020-05-23"},{"lineNumber":152,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":153,"author":{"gitId":"-"},"content":"Classes used by multiple components are in the `seedu.addressbook.commons` package.","lastModifiedDate":"2020-05-23"},{"lineNumber":154,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":155,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":156,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":157,"author":{"gitId":"-"},"content":"## **Implementation**","lastModifiedDate":"2020-05-23"},{"lineNumber":158,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":159,"author":{"gitId":"-"},"content":"This section describes some noteworthy details on how certain features are implemented.","lastModifiedDate":"2020-05-23"},{"lineNumber":160,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":161,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Undo/redo feature","lastModifiedDate":"2020-06-07"},{"lineNumber":162,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":163,"author":{"gitId":"-"},"content":"#### Proposed Implementation","lastModifiedDate":"2020-05-23"},{"lineNumber":164,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":165,"author":{"gitId":"-"},"content":"The proposed undo/redo mechanism is facilitated by `VersionedAddressBook`. It extends `AddressBook` with an undo/redo history, stored internally as an `addressBookStateList` and `currentStatePointer`. Additionally, it implements the following operations:","lastModifiedDate":"2020-05-23"},{"lineNumber":166,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":167,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#commit()` — Saves the current address book state in its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":168,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#undo()` — Restores the previous address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":169,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#redo()` — Restores a previously undone address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":170,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":171,"author":{"gitId":"-"},"content":"These operations are exposed in the `Model` interface as `Model#commitAddressBook()`, `Model#undoAddressBook()` and `Model#redoAddressBook()` respectively.","lastModifiedDate":"2020-05-23"},{"lineNumber":172,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":173,"author":{"gitId":"-"},"content":"Given below is an example usage scenario and how the undo/redo mechanism behaves at each step.","lastModifiedDate":"2020-05-23"},{"lineNumber":174,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":175,"author":{"gitId":"-"},"content":"Step 1. The user launches the application for the first time. The `VersionedAddressBook` will be initialized with the initial address book state, and the `currentStatePointer` pointing to that single address book state.","lastModifiedDate":"2020-05-23"},{"lineNumber":176,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":177,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState0.puml\" alt\u003d\"UndoRedoState0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":178,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":179,"author":{"gitId":"-"},"content":"Step 2. The user executes `delete 5` command to delete the 5th person in the address book. The `delete` command calls `Model#commitAddressBook()`, causing the modified state of the address book after the `delete 5` command executes to be saved in the `addressBookStateList`, and the `currentStatePointer` is shifted to the newly inserted address book state.","lastModifiedDate":"2020-05-23"},{"lineNumber":180,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":181,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState1.puml\" alt\u003d\"UndoRedoState1\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":182,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":183,"author":{"gitId":"-"},"content":"Step 3. The user executes `add n/David …​` to add a new person. The `add` command also calls `Model#commitAddressBook()`, causing another modified address book state to be saved into the `addressBookStateList`.","lastModifiedDate":"2020-05-23"},{"lineNumber":184,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":185,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState2.puml\" alt\u003d\"UndoRedoState2\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":186,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":187,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":188,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":189,"author":{"gitId":"-"},"content":"**Note:** If a command fails its execution, it will not call `Model#commitAddressBook()`, so the address book state will not be saved into the `addressBookStateList`.","lastModifiedDate":"2023-09-12"},{"lineNumber":190,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":191,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":192,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":193,"author":{"gitId":"-"},"content":"Step 4. The user now decides that adding the person was a mistake, and decides to undo that action by executing the `undo` command. The `undo` command will call `Model#undoAddressBook()`, which will shift the `currentStatePointer` once to the left, pointing it to the previous address book state, and restores the address book to that state.","lastModifiedDate":"2020-05-23"},{"lineNumber":194,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":195,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState3.puml\" alt\u003d\"UndoRedoState3\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":196,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":197,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":198,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":199,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":200,"author":{"gitId":"-"},"content":"**Note:** If the `currentStatePointer` is at index 0, pointing to the initial AddressBook state, then there are no previous AddressBook states to restore. The `undo` command uses `Model#canUndoAddressBook()` to check if this is the case. If so, it will return an error to the user rather","lastModifiedDate":"2023-09-12"},{"lineNumber":201,"author":{"gitId":"-"},"content":"than attempting to perform the undo.","lastModifiedDate":"2020-05-23"},{"lineNumber":202,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":203,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":204,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":205,"author":{"gitId":"-"},"content":"The following sequence diagram shows how an undo operation goes through the `Logic` component:","lastModifiedDate":"2024-02-09"},{"lineNumber":206,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":207,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoSequenceDiagram-Logic.puml\" alt\u003d\"UndoSequenceDiagram-Logic\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":208,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":209,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":210,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":211,"author":{"gitId":"-"},"content":"**Note:** The lifeline for `UndoCommand` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram.","lastModifiedDate":"2023-09-12"},{"lineNumber":212,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":213,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":214,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":215,"author":{"gitId":"-"},"content":"Similarly, how an undo operation goes through the `Model` component is shown below:","lastModifiedDate":"2024-02-09"},{"lineNumber":216,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":217,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoSequenceDiagram-Model.puml\" alt\u003d\"UndoSequenceDiagram-Model\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":218,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":219,"author":{"gitId":"-"},"content":"The `redo` command does the opposite — it calls `Model#redoAddressBook()`, which shifts the `currentStatePointer` once to the right, pointing to the previously undone state, and restores the address book to that state.","lastModifiedDate":"2020-05-23"},{"lineNumber":220,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":221,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":222,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":223,"author":{"gitId":"-"},"content":"**Note:** If the `currentStatePointer` is at index `addressBookStateList.size() - 1`, pointing to the latest address book state, then there are no undone AddressBook states to restore. The `redo` command uses `Model#canRedoAddressBook()` to check if this is the case. If so, it will return an error to the user rather than attempting to perform the redo.","lastModifiedDate":"2023-09-12"},{"lineNumber":224,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":225,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":226,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":227,"author":{"gitId":"-"},"content":"Step 5. The user then decides to execute the command `list`. Commands that do not modify the address book, such as `list`, will usually not call `Model#commitAddressBook()`, `Model#undoAddressBook()` or `Model#redoAddressBook()`. Thus, the `addressBookStateList` remains unchanged.","lastModifiedDate":"2020-05-23"},{"lineNumber":228,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":229,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState4.puml\" alt\u003d\"UndoRedoState4\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":230,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":231,"author":{"gitId":"-"},"content":"Step 6. The user executes `clear`, which calls `Model#commitAddressBook()`. Since the `currentStatePointer` is not pointing at the end of the `addressBookStateList`, all address book states after the `currentStatePointer` will be purged. Reason: It no longer makes sense to redo the `add n/David …​` command. This is the behavior that most modern desktop applications follow.","lastModifiedDate":"2020-05-23"},{"lineNumber":232,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":233,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState5.puml\" alt\u003d\"UndoRedoState5\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":234,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":235,"author":{"gitId":"-"},"content":"The following activity diagram summarizes what happens when a user executes a new command:","lastModifiedDate":"2020-05-23"},{"lineNumber":236,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":237,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/CommitActivityDiagram.puml\" width\u003d\"250\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":238,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":239,"author":{"gitId":"-"},"content":"#### Design considerations:","lastModifiedDate":"2021-07-31"},{"lineNumber":240,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":241,"author":{"gitId":"-"},"content":"**Aspect: How undo \u0026 redo executes:**","lastModifiedDate":"2021-07-31"},{"lineNumber":242,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":243,"author":{"gitId":"-"},"content":"* **Alternative 1 (current choice):** Saves the entire address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":244,"author":{"gitId":"-"},"content":" * Pros: Easy to implement.","lastModifiedDate":"2020-05-23"},{"lineNumber":245,"author":{"gitId":"-"},"content":" * Cons: May have performance issues in terms of memory usage.","lastModifiedDate":"2020-05-23"},{"lineNumber":246,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":247,"author":{"gitId":"-"},"content":"* **Alternative 2:** Individual command knows how to undo/redo by","lastModifiedDate":"2020-05-23"},{"lineNumber":248,"author":{"gitId":"-"},"content":" itself.","lastModifiedDate":"2020-05-23"},{"lineNumber":249,"author":{"gitId":"-"},"content":" * Pros: Will use less memory (e.g. for `delete`, just save the person being deleted).","lastModifiedDate":"2020-05-23"},{"lineNumber":250,"author":{"gitId":"-"},"content":" * Cons: We must ensure that the implementation of each individual command are correct.","lastModifiedDate":"2020-05-23"},{"lineNumber":251,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":252,"author":{"gitId":"-"},"content":"_{more aspects and alternatives to be added}_","lastModifiedDate":"2020-05-23"},{"lineNumber":253,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":254,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Data archiving","lastModifiedDate":"2020-05-23"},{"lineNumber":255,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":256,"author":{"gitId":"-"},"content":"_{Explain here how the data archiving feature will be implemented}_","lastModifiedDate":"2020-05-23"},{"lineNumber":257,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":258,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":259,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":260,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":261,"author":{"gitId":"-"},"content":"## **Documentation, logging, testing, configuration, dev-ops**","lastModifiedDate":"2020-06-07"},{"lineNumber":262,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":263,"author":{"gitId":"-"},"content":"* [Documentation guide](Documentation.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":264,"author":{"gitId":"-"},"content":"* [Testing guide](Testing.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":265,"author":{"gitId":"-"},"content":"* [Logging guide](Logging.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":266,"author":{"gitId":"-"},"content":"* [Configuration guide](Configuration.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":267,"author":{"gitId":"-"},"content":"* [DevOps guide](DevOps.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":268,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":269,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":270,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":271,"author":{"gitId":"-"},"content":"## **Appendix: Requirements**","lastModifiedDate":"2020-05-23"},{"lineNumber":272,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":273,"author":{"gitId":"-"},"content":"### Product scope","lastModifiedDate":"2020-05-23"},{"lineNumber":274,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":275,"author":{"gitId":"-"},"content":"**Target user profile**:","lastModifiedDate":"2020-05-23"},{"lineNumber":276,"author":{"gitId":"Jerome-j"},"content":"* Staff at SoC Center for Future Graduates (CFG)","lastModifiedDate":"2024-03-05"},{"lineNumber":277,"author":{"gitId":"Jerome-j"},"content":"* has a need to manage a significant number of contacts due to the large number of students requiring counselling services","lastModifiedDate":"2024-03-05"},{"lineNumber":278,"author":{"gitId":"-"},"content":"* prefer desktop apps over other types","lastModifiedDate":"2020-05-23"},{"lineNumber":279,"author":{"gitId":"-"},"content":"* can type fast","lastModifiedDate":"2020-05-23"},{"lineNumber":280,"author":{"gitId":"-"},"content":"* prefers typing to mouse interactions","lastModifiedDate":"2020-05-26"},{"lineNumber":281,"author":{"gitId":"-"},"content":"* is reasonably comfortable using CLI apps","lastModifiedDate":"2020-05-23"},{"lineNumber":282,"author":{"gitId":"Jerome-j"},"content":"* only a single user","lastModifiedDate":"2024-03-05"},{"lineNumber":283,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":284,"author":{"gitId":"Jerome-j"},"content":"**Value proposition**: Manage students that are being counselled by him faster than a typical mouse/GUI application.","lastModifiedDate":"2024-03-05"},{"lineNumber":285,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":286,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":287,"author":{"gitId":"-"},"content":"### User stories","lastModifiedDate":"2020-06-07"},{"lineNumber":288,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":289,"author":{"gitId":"Jerome-j"},"content":"Priorities: High (must have) - `* * * *`, Medium (nice to have) - `* * *`, Low (unlikely to have) - `* *`, Not essential (implement only if got time) - ` * `","lastModifiedDate":"2024-03-05"},{"lineNumber":290,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":291,"author":{"gitId":"-"},"content":"| Priority | As a …​ | I want to …​ | So that I can…​ |","lastModifiedDate":"2020-05-23"},{"lineNumber":292,"author":{"gitId":"vnnamng"},"content":"|-----------|------------------|-----------------------------------------------------------|------------------------------------------------------------------------------------------------------------|","lastModifiedDate":"2024-03-07"},{"lineNumber":293,"author":{"gitId":"Jerome-j"},"content":"| `* * * *` | Counsellor | create new patients | store their data for future sessions. |","lastModifiedDate":"2024-03-05"},{"lineNumber":294,"author":{"gitId":"Jerome-j"},"content":"| `* * * *` | Counsellor | view patient data | view their contact information and contact them. |","lastModifiedDate":"2024-03-05"},{"lineNumber":295,"author":{"gitId":"Jerome-j"},"content":"| `* * * *` | Counsellor | delete patient data at a given index | discharge the patient. |","lastModifiedDate":"2024-03-05"},{"lineNumber":296,"author":{"gitId":"Jerome-j"},"content":"| `* * * *` | Counsellor | search for a patient | quickly access and review patient status. |","lastModifiedDate":"2024-03-05"},{"lineNumber":297,"author":{"gitId":"Jerome-j"},"content":"| `* * * *` | Counsellor | list patient at the given index | quickly access patients that come regularly. |","lastModifiedDate":"2024-03-05"},{"lineNumber":298,"author":{"gitId":"caitlyntang"},"content":"| `* * * *` | Counsellor | schedule appointments | avoid scheduling overlapping appointments with other patients. |","lastModifiedDate":"2024-03-07"},{"lineNumber":299,"author":{"gitId":"caitlyntang"},"content":"| `* * * *` | Counsellor | delete an appointment for a specific patient | appointments can be changed in cases of cancellation. |","lastModifiedDate":"2024-03-07"},{"lineNumber":300,"author":{"gitId":"caitlyntang"},"content":"| `* * * *` | Counsellor | view one appointment for a specified patient | quickly find and review the appointment notes. |","lastModifiedDate":"2024-03-07"},{"lineNumber":301,"author":{"gitId":"tankh99"},"content":"| `* * * *` | Counsellor | view all appointments for a specified patient | quickly view all appointments related to a student without having to remember the appointment ID or dates. |","lastModifiedDate":"2024-03-07"},{"lineNumber":302,"author":{"gitId":"vnnamng"},"content":"| `* * * *` | Counsellor | view patient case logs | understand where I left off with the patient last time. |","lastModifiedDate":"2024-03-07"},{"lineNumber":303,"author":{"gitId":"vnnamng"},"content":"| `* * * *` | Counsellor | create patient logs | note down what I went through with the patient during the session. |","lastModifiedDate":"2024-03-07"},{"lineNumber":304,"author":{"gitId":"vnnamng"},"content":"| `* * * *` | Counsellor | update counselling sessions | fix mistakes for a prior counselling session. |","lastModifiedDate":"2024-03-07"},{"lineNumber":305,"author":{"gitId":"Jerome-j"},"content":"| `* * *` | Counsellor | to categorise / tag my patients | patients with more serious issues can be attended to first. |","lastModifiedDate":"2024-03-05"},{"lineNumber":306,"author":{"gitId":"caitlyntang"},"content":"| `* * * ` | Counsellor | know how many patients I am seeing in a week | better manage my own time and emotions. |","lastModifiedDate":"2024-03-07"},{"lineNumber":307,"author":{"gitId":"tankh99"},"content":"| `* * *` | Counsellor | know what mistakes I make when creating patients | easily understand how to rectify my mistakes |","lastModifiedDate":"2024-03-07"},{"lineNumber":308,"author":{"gitId":"tankh99"},"content":"| `* * *` | Counsellor | know know what mistakes I make when creating appointments | easily understand how to rectify my mistakes |","lastModifiedDate":"2024-03-07"},{"lineNumber":309,"author":{"gitId":"caitlyntang"},"content":"| `* * *` | Counsellor | be able to mark whether a patient attended a session | properly document patients’ attendance |","lastModifiedDate":"2024-03-07"},{"lineNumber":310,"author":{"gitId":"Jerome-j"},"content":"| `* * *` | New User | have a help function | so that I know how to use the application. |","lastModifiedDate":"2024-03-05"},{"lineNumber":311,"author":{"gitId":"Jerome-j"},"content":"| `* *` | Counsellor | sort patients based on their priority tag | more serious patients can be attended first. |","lastModifiedDate":"2024-03-05"},{"lineNumber":312,"author":{"gitId":"tankh99"},"content":"| `* *` | Experienced User | navigate through my history of written commands | avoid retyping a command just to make minor modifications to a previous command. |","lastModifiedDate":"2024-03-07"},{"lineNumber":313,"author":{"gitId":"tankh99"},"content":"| `*` | Experienced User | mass delete patient data | patient data is not compromised. |","lastModifiedDate":"2024-03-07"},{"lineNumber":314,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":315,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":316,"author":{"gitId":"-"},"content":"### Use cases","lastModifiedDate":"2020-06-07"},{"lineNumber":317,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":318,"author":{"gitId":"Jerome-j"},"content":"(For all use cases below, the **System** is the `CogniCare` application and the **Actor** is the `user`, unless specified otherwise)","lastModifiedDate":"2024-03-05"},{"lineNumber":319,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":320,"author":{"gitId":"Jerome-j"},"content":"**Use case: Search a student**","lastModifiedDate":"2024-03-05"},{"lineNumber":321,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":322,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2020-05-23"},{"lineNumber":323,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":324,"author":{"gitId":"Jerome-j"},"content":"1. User requests to list persons using the specified constraints","lastModifiedDate":"2024-03-05"},{"lineNumber":325,"author":{"gitId":"Jerome-j"},"content":"2. CogniCare shows a list of persons that meets the criteria","lastModifiedDate":"2024-03-05"},{"lineNumber":326,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":327,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":328,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":329,"author":{"gitId":"-"},"content":"**Extensions**","lastModifiedDate":"2020-05-23"},{"lineNumber":330,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":331,"author":{"gitId":"Jerome-j"},"content":"* 1a. The query has missing parameters","lastModifiedDate":"2024-03-05"},{"lineNumber":332,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":333,"author":{"gitId":"Jerome-j"},"content":" * 1a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-05"},{"lineNumber":334,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":335,"author":{"gitId":"Jerome-j"},"content":" * 1a2. CogniCare returns all information about a patient.","lastModifiedDate":"2024-03-05"},{"lineNumber":336,"author":{"gitId":"Jerome-j"},"content":" ","lastModifiedDate":"2024-03-05"},{"lineNumber":337,"author":{"gitId":"Jerome-j"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":338,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":339,"author":{"gitId":"-"},"content":"* 2a. The list is empty.","lastModifiedDate":"2020-05-23"},{"lineNumber":340,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":341,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":342,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":343,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":344,"author":{"gitId":"Jerome-j"},"content":"**Use case: Delete a student**","lastModifiedDate":"2024-03-05"},{"lineNumber":345,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":346,"author":{"gitId":"Jerome-j"},"content":"**MSS**","lastModifiedDate":"2024-03-05"},{"lineNumber":347,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":348,"author":{"gitId":"Jerome-j"},"content":"1. User requests to delete a patient at the given index.","lastModifiedDate":"2024-03-05"},{"lineNumber":349,"author":{"gitId":"Jerome-j"},"content":"2. CogniCare displays the patient information prior to deletion, and confirms with the user prior to deletion.","lastModifiedDate":"2024-03-05"},{"lineNumber":350,"author":{"gitId":"Jerome-j"},"content":"3. CogniCare deletes the patient.","lastModifiedDate":"2024-03-05"},{"lineNumber":351,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":352,"author":{"gitId":"Jerome-j"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":353,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":354,"author":{"gitId":"Jerome-j"},"content":"**Extensions**","lastModifiedDate":"2024-03-05"},{"lineNumber":355,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":356,"author":{"gitId":"Jerome-j"},"content":"* 1a. The query has missing parameters","lastModifiedDate":"2024-03-05"},{"lineNumber":357,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":358,"author":{"gitId":"Jerome-j"},"content":" * 1a1. CogniCare shows an error message that the index is invalid.","lastModifiedDate":"2024-03-05"},{"lineNumber":359,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":360,"author":{"gitId":"Jerome-j"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":361,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":362,"author":{"gitId":"Jerome-j"},"content":"* 2a. User does not want to delete.","lastModifiedDate":"2024-03-05"},{"lineNumber":363,"author":{"gitId":"caitlyntang"},"content":" * 2a1. CogniCare shows an error message that the user cancelled the delete operation.","lastModifiedDate":"2024-03-07"},{"lineNumber":364,"author":{"gitId":"Jerome-j"},"content":" ","lastModifiedDate":"2024-03-05"},{"lineNumber":365,"author":{"gitId":"Jerome-j"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":366,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":367,"author":{"gitId":"caitlyntang"},"content":"**Use case: Search for an appointment of a specific student**","lastModifiedDate":"2024-03-07"},{"lineNumber":368,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":369,"author":{"gitId":"caitlyntang"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":370,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":371,"author":{"gitId":"caitlyntang"},"content":"1. User searches for specific student.","lastModifiedDate":"2024-03-07"},{"lineNumber":372,"author":{"gitId":"caitlyntang"},"content":"2. CogniCare shows a list of students that meet the criteria.","lastModifiedDate":"2024-03-07"},{"lineNumber":373,"author":{"gitId":"caitlyntang"},"content":"3. User requests to list all appointments at the given the student index.","lastModifiedDate":"2024-03-07"},{"lineNumber":374,"author":{"gitId":"caitlyntang"},"content":"4. CogniCare shows a list of appointments that meet the criteria.","lastModifiedDate":"2024-03-07"},{"lineNumber":375,"author":{"gitId":"caitlyntang"},"content":"5. User requests to find an appointment at the given student and appointment.","lastModifiedDate":"2024-03-07"},{"lineNumber":376,"author":{"gitId":"caitlyntang"},"content":"6. CogniCare shows the appointment that meets the criteria.","lastModifiedDate":"2024-03-07"},{"lineNumber":377,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":378,"author":{"gitId":"caitlyntang"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":379,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":380,"author":{"gitId":"caitlyntang"},"content":"**Extensions**","lastModifiedDate":"2024-03-07"},{"lineNumber":381,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":382,"author":{"gitId":"caitlyntang"},"content":"* 1a. The query has missing parameters","lastModifiedDate":"2024-03-07"},{"lineNumber":383,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":384,"author":{"gitId":"caitlyntang"},"content":" * 1a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":385,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":386,"author":{"gitId":"caitlyntang"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":387,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":388,"author":{"gitId":"caitlyntang"},"content":"* 2a. The list of students is empty.","lastModifiedDate":"2024-03-07"},{"lineNumber":389,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":390,"author":{"gitId":"caitlyntang"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":391,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":392,"author":{"gitId":"caitlyntang"},"content":"* 3a. The query has missing parameters","lastModifiedDate":"2024-03-07"},{"lineNumber":393,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":394,"author":{"gitId":"caitlyntang"},"content":" * 3a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":395,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":396,"author":{"gitId":"caitlyntang"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":397,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":398,"author":{"gitId":"caitlyntang"},"content":"* 4a. The list of appointments is empty.","lastModifiedDate":"2024-03-07"},{"lineNumber":399,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":400,"author":{"gitId":"caitlyntang"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":401,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":402,"author":{"gitId":"caitlyntang"},"content":"* 5a. The query has missing parameters","lastModifiedDate":"2024-03-07"},{"lineNumber":403,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":404,"author":{"gitId":"caitlyntang"},"content":" * 5a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":405,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":406,"author":{"gitId":"caitlyntang"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":407,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":408,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":409,"author":{"gitId":"caitlyntang"},"content":"**Use case: Delete an appointment for a specific student**","lastModifiedDate":"2024-03-07"},{"lineNumber":410,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":411,"author":{"gitId":"caitlyntang"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":412,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":413,"author":{"gitId":"caitlyntang"},"content":"1. User requests to delete an appointment at the given student and appointment index. ","lastModifiedDate":"2024-03-07"},{"lineNumber":414,"author":{"gitId":"caitlyntang"},"content":"2. CogniCare displays the appointment information prior to deletion, and confirms with the user prior to deletion.","lastModifiedDate":"2024-03-07"},{"lineNumber":415,"author":{"gitId":"caitlyntang"},"content":"3. CogniCare deletes the appointment.","lastModifiedDate":"2024-03-07"},{"lineNumber":416,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":417,"author":{"gitId":"caitlyntang"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":418,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":419,"author":{"gitId":"caitlyntang"},"content":"**Extensions**","lastModifiedDate":"2024-03-07"},{"lineNumber":420,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":421,"author":{"gitId":"caitlyntang"},"content":"* 1a. The query has missing parameters","lastModifiedDate":"2024-03-07"},{"lineNumber":422,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":423,"author":{"gitId":"caitlyntang"},"content":" * 1a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":424,"author":{"gitId":"caitlyntang"},"content":" ","lastModifiedDate":"2024-03-07"},{"lineNumber":425,"author":{"gitId":"caitlyntang"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":426,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":427,"author":{"gitId":"caitlyntang"},"content":"* 2a. User does not want to delete.","lastModifiedDate":"2024-03-07"},{"lineNumber":428,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":429,"author":{"gitId":"caitlyntang"},"content":" * 2a1. CogniCare shows an error message that the user cancelled the delete operation.","lastModifiedDate":"2024-03-07"},{"lineNumber":430,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":431,"author":{"gitId":"caitlyntang"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":432,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":433,"author":{"gitId":"vnnamng"},"content":"**Use case: View one case log of an appointment of a specific student**","lastModifiedDate":"2024-03-07"},{"lineNumber":434,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":435,"author":{"gitId":"vnnamng"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":436,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":437,"author":{"gitId":"vnnamng"},"content":"1. User searches for specific student.","lastModifiedDate":"2024-03-07"},{"lineNumber":438,"author":{"gitId":"vnnamng"},"content":"2. CogniCare shows a list of students that meet the criteria.","lastModifiedDate":"2024-03-07"},{"lineNumber":439,"author":{"gitId":"vnnamng"},"content":"3. User requests to list all appointments at the given the student index.","lastModifiedDate":"2024-03-07"},{"lineNumber":440,"author":{"gitId":"vnnamng"},"content":"4. CogniCare shows a list of appointments that meet the criteria.","lastModifiedDate":"2024-03-07"},{"lineNumber":441,"author":{"gitId":"vnnamng"},"content":"5. User requests to find the case log of the appointment at the given student and appointment.","lastModifiedDate":"2024-03-07"},{"lineNumber":442,"author":{"gitId":"vnnamng"},"content":"6. CogniCare shows the case log that meets the criteria.","lastModifiedDate":"2024-03-07"},{"lineNumber":443,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":444,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":445,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":446,"author":{"gitId":"vnnamng"},"content":"**Extensions**","lastModifiedDate":"2024-03-07"},{"lineNumber":447,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":448,"author":{"gitId":"vnnamng"},"content":"* 1a. The query has missing parameters","lastModifiedDate":"2024-03-07"},{"lineNumber":449,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":450,"author":{"gitId":"vnnamng"},"content":" * 1a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":451,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":452,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":453,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":454,"author":{"gitId":"vnnamng"},"content":"* 2a. The list of students is empty.","lastModifiedDate":"2024-03-07"},{"lineNumber":455,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":456,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":457,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":458,"author":{"gitId":"vnnamng"},"content":"* 3a. The query has missing parameters","lastModifiedDate":"2024-03-07"},{"lineNumber":459,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":460,"author":{"gitId":"vnnamng"},"content":" * 3a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":461,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":462,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":463,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":464,"author":{"gitId":"vnnamng"},"content":"* 4a. The list of appointments is empty.","lastModifiedDate":"2024-03-07"},{"lineNumber":465,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":466,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":467,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":468,"author":{"gitId":"vnnamng"},"content":"* 5a. The query has missing/out of bound parameters","lastModifiedDate":"2024-03-07"},{"lineNumber":469,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":470,"author":{"gitId":"vnnamng"},"content":" * 5a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":471,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":472,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":473,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":474,"author":{"gitId":"vnnamng"},"content":"* 6a. There is no case log for such appointment","lastModifiedDate":"2024-03-07"},{"lineNumber":475,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":476,"author":{"gitId":"vnnamng"},"content":" * 6a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":477,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":478,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":479,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":480,"author":{"gitId":"vnnamng"},"content":"**Use case: View many case logs of a specific student**","lastModifiedDate":"2024-03-07"},{"lineNumber":481,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":482,"author":{"gitId":"vnnamng"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":483,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":484,"author":{"gitId":"vnnamng"},"content":"1. User searches for specific student.","lastModifiedDate":"2024-03-07"},{"lineNumber":485,"author":{"gitId":"vnnamng"},"content":"2. CogniCare shows a list of students that meet the criteria.","lastModifiedDate":"2024-03-07"},{"lineNumber":486,"author":{"gitId":"vnnamng"},"content":"3. User requests to see all appointments\u0027 case log at the given the student index.","lastModifiedDate":"2024-03-07"},{"lineNumber":487,"author":{"gitId":"vnnamng"},"content":"4. CogniCare shows a list of all appointments\u0027 case log that meet the criteria.","lastModifiedDate":"2024-03-07"},{"lineNumber":488,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":489,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":490,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":491,"author":{"gitId":"vnnamng"},"content":"**Extensions**","lastModifiedDate":"2024-03-07"},{"lineNumber":492,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":493,"author":{"gitId":"vnnamng"},"content":"* 1a. The query has missing parameters","lastModifiedDate":"2024-03-07"},{"lineNumber":494,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":495,"author":{"gitId":"vnnamng"},"content":" * 1a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":496,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":497,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":498,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":499,"author":{"gitId":"vnnamng"},"content":"* 2a. The list of students is empty.","lastModifiedDate":"2024-03-07"},{"lineNumber":500,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":501,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":502,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":503,"author":{"gitId":"vnnamng"},"content":"* 3a. The query has missing parameters","lastModifiedDate":"2024-03-07"},{"lineNumber":504,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":505,"author":{"gitId":"vnnamng"},"content":" * 3a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":506,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":507,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":508,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":509,"author":{"gitId":"vnnamng"},"content":"* 4a. The list of appointments is empty.","lastModifiedDate":"2024-03-07"},{"lineNumber":510,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":511,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":512,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":513,"author":{"gitId":"vnnamng"},"content":"**Use case: Edit one case log of an appointment of a specific student**","lastModifiedDate":"2024-03-07"},{"lineNumber":514,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":515,"author":{"gitId":"vnnamng"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":516,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":517,"author":{"gitId":"vnnamng"},"content":"1. User searches for specific student.","lastModifiedDate":"2024-03-07"},{"lineNumber":518,"author":{"gitId":"vnnamng"},"content":"2. CogniCare shows a list of students that meet the criteria.","lastModifiedDate":"2024-03-07"},{"lineNumber":519,"author":{"gitId":"vnnamng"},"content":"3. User requests to see all appointments\u0027 case log at the given the student index.","lastModifiedDate":"2024-03-07"},{"lineNumber":520,"author":{"gitId":"vnnamng"},"content":"4. CogniCare shows a list of all appointments\u0027 case log that meet the criteria.","lastModifiedDate":"2024-03-07"},{"lineNumber":521,"author":{"gitId":"vnnamng"},"content":"5. User requests to edit the case log of the appointment at the given student and appointment.","lastModifiedDate":"2024-03-07"},{"lineNumber":522,"author":{"gitId":"vnnamng"},"content":"6. CogniCare edits the case log for the specified appointment and student.","lastModifiedDate":"2024-03-07"},{"lineNumber":523,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":524,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":525,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":526,"author":{"gitId":"vnnamng"},"content":"**Extensions**","lastModifiedDate":"2024-03-07"},{"lineNumber":527,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":528,"author":{"gitId":"vnnamng"},"content":"* 1a. The query has missing parameters","lastModifiedDate":"2024-03-07"},{"lineNumber":529,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":530,"author":{"gitId":"vnnamng"},"content":" * 1a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":531,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":532,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":533,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":534,"author":{"gitId":"vnnamng"},"content":"* 2a. The list of students is empty.","lastModifiedDate":"2024-03-07"},{"lineNumber":535,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":536,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":537,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":538,"author":{"gitId":"vnnamng"},"content":"* 3a. The query has missing parameters","lastModifiedDate":"2024-03-07"},{"lineNumber":539,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":540,"author":{"gitId":"vnnamng"},"content":" * 3a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":541,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":542,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":543,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":544,"author":{"gitId":"vnnamng"},"content":"* 4a. The list of appointments is empty.","lastModifiedDate":"2024-03-07"},{"lineNumber":545,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":546,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":547,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":548,"author":{"gitId":"vnnamng"},"content":"* 5a. The query has missing/out of bound parameters","lastModifiedDate":"2024-03-07"},{"lineNumber":549,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":550,"author":{"gitId":"vnnamng"},"content":" * 5a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":551,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":552,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":553,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":554,"author":{"gitId":"vnnamng"},"content":"**Use case: Create one case log of a appointment of a specific student**","lastModifiedDate":"2024-03-07"},{"lineNumber":555,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":556,"author":{"gitId":"vnnamng"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":557,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":558,"author":{"gitId":"vnnamng"},"content":"1. User searches for specific student.","lastModifiedDate":"2024-03-07"},{"lineNumber":559,"author":{"gitId":"vnnamng"},"content":"2. CogniCare shows a list of students that meet the criteria.","lastModifiedDate":"2024-03-07"},{"lineNumber":560,"author":{"gitId":"vnnamng"},"content":"3. User requests to list all appointments at the given the student index.","lastModifiedDate":"2024-03-07"},{"lineNumber":561,"author":{"gitId":"vnnamng"},"content":"4. CogniCare shows a list of appointments that meet the criteria.","lastModifiedDate":"2024-03-07"},{"lineNumber":562,"author":{"gitId":"vnnamng"},"content":"5. User requests to create the case log of the appointment at the given student and appointment.","lastModifiedDate":"2024-03-07"},{"lineNumber":563,"author":{"gitId":"vnnamng"},"content":"6. CogniCare create the case log for the specified appointment and student.","lastModifiedDate":"2024-03-07"},{"lineNumber":564,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":565,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":566,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":567,"author":{"gitId":"vnnamng"},"content":"**Extensions**","lastModifiedDate":"2024-03-07"},{"lineNumber":568,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":569,"author":{"gitId":"vnnamng"},"content":"* 1a. The query has missing parameters","lastModifiedDate":"2024-03-07"},{"lineNumber":570,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":571,"author":{"gitId":"vnnamng"},"content":" * 1a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":572,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":573,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":574,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":575,"author":{"gitId":"vnnamng"},"content":"* 2a. The list of students is empty.","lastModifiedDate":"2024-03-07"},{"lineNumber":576,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":577,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":578,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":579,"author":{"gitId":"vnnamng"},"content":"* 3a. The query has missing parameters","lastModifiedDate":"2024-03-07"},{"lineNumber":580,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":581,"author":{"gitId":"vnnamng"},"content":" * 3a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":582,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":583,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":584,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":585,"author":{"gitId":"vnnamng"},"content":"* 4a. The list of appointments is empty.","lastModifiedDate":"2024-03-07"},{"lineNumber":586,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":587,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":588,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":589,"author":{"gitId":"vnnamng"},"content":"* 5a. The query has missing/out of bound parameters","lastModifiedDate":"2024-03-07"},{"lineNumber":590,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":591,"author":{"gitId":"vnnamng"},"content":" * 5a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":592,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":593,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":594,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":595,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":596,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":597,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":598,"author":{"gitId":"-"},"content":"1. Should work on any _mainstream OS_ as long as it has Java `11` or above installed.","lastModifiedDate":"2020-05-23"},{"lineNumber":599,"author":{"gitId":"-"},"content":"2. Should be able to hold up to 1000 persons without a noticeable sluggishness in performance for typical usage.","lastModifiedDate":"2020-05-23"},{"lineNumber":600,"author":{"gitId":"-"},"content":"3. A user with above average typing speed for regular English text (i.e. not code, not system admin commands) should be able to accomplish most of the tasks faster using commands than using the mouse.","lastModifiedDate":"2020-05-23"},{"lineNumber":601,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":602,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":603,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":604,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":605,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":606,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":607,"author":{"gitId":"Jerome-j"},"content":"* **Mainstream OS**: Windows, Linux, Unix, macOS","lastModifiedDate":"2024-03-05"},{"lineNumber":608,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":609,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":610,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":611,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":612,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":613,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":614,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":615,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":616,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":617,"author":{"gitId":"-"},"content":"**Note:** These instructions only provide a starting point for testers to work on;","lastModifiedDate":"2023-09-12"},{"lineNumber":618,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":619,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":620,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":621,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":622,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":623,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":624,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":625,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":626,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":627,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":628,"author":{"gitId":"-"},"content":" 1. Double-click the jar file Expected: Shows the GUI with a set of sample contacts. The window size may not be optimum.","lastModifiedDate":"2020-05-23"},{"lineNumber":629,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":630,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":631,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":632,"author":{"gitId":"-"},"content":" 1. Resize the window to an optimum size. Move the window to a different location. Close the window.","lastModifiedDate":"2020-05-23"},{"lineNumber":633,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":634,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":635,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","lastModifiedDate":"2020-05-23"},{"lineNumber":636,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":637,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":638,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":639,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":640,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":641,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":642,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":643,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":644,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":645,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":646,"author":{"gitId":"-"},"content":" Expected: First contact is deleted from the list. Details of the deleted contact shown in the status message. Timestamp in the status bar is updated.","lastModifiedDate":"2020-05-23"},{"lineNumber":647,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":648,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":649,"author":{"gitId":"-"},"content":" Expected: No person is deleted. Error details shown in the status message. Status bar remains the same.","lastModifiedDate":"2020-05-23"},{"lineNumber":650,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":651,"author":{"gitId":"-"},"content":" 1. Other incorrect delete commands to try: `delete`, `delete x`, `...` (where x is larger than the list size)\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":652,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":653,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":654,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":655,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":656,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":657,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":658,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":659,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":660,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":661,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":662,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"caitlyntang":73,"Jerome-j":47,"tankh99":5,"vnnamng":165,"-":372}},{"path":"docs/index.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"Jerome-j"},"content":"# CogniCare","lastModifiedDate":"2024-03-01"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"tankh99"},"content":"[![CI Status](https://github.com/AY2324S2-CS2103-F08-2/tp/workflows/Java%20CI/badge.svg)](https://github.com/AY2324S2-CS2103-F08-2/tp/actions)","lastModifiedDate":"2024-03-06"},{"lineNumber":9,"author":{"gitId":"tankh99"},"content":"[![codecov](https://codecov.io/gh/nus-cs2103-AY2324S2/tp/graph/badge.svg?token\u003dPBBJNYE8U5)](https://codecov.io/gh/nus-cs2103-AY2324S2/tp)","lastModifiedDate":"2024-03-05"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":11,"author":{"gitId":"-"},"content":"![Ui](images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":13,"author":{"gitId":"Jerome-j"},"content":"**CogniCare is a desktop application for managing all the students that you are currently handling.** While it has a GUI, most of the user interactions happen using a CLI (Command Line Interface).","lastModifiedDate":"2024-03-01"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":15,"author":{"gitId":"Jerome-j"},"content":"* If you are interested in using CogniCare, head over to the [_Quick Start_ section of the **User Guide**](UserGuide.html#quick-start).","lastModifiedDate":"2024-03-01"},{"lineNumber":16,"author":{"gitId":"Jerome-j"},"content":"* If you are interested about developing CogniCare, the [**Developer Guide**](DeveloperGuide.html) is a good place to start.","lastModifiedDate":"2024-03-01"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"**Acknowledgements**","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"* Libraries used: [JavaFX](https://openjfx.io/), [Jackson](https://github.com/FasterXML/jackson), [JUnit5](https://github.com/junit-team/junit5)","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"Jerome-j"},"content":"* This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-03-01"},{"lineNumber":23,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-01"}],"authorContributionMap":{"Jerome-j":6,"tankh99":2,"-":15}},{"path":"docs/team/caitlyntang.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"caitlyntang"},"content":"---","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"caitlyntang"},"content":" layout: default.md","lastModifiedDate":"2024-03-04"},{"lineNumber":3,"author":{"gitId":"caitlyntang"},"content":" title: \"Caitlyn\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-04"},{"lineNumber":4,"author":{"gitId":"caitlyntang"},"content":"---","lastModifiedDate":"2024-03-04"},{"lineNumber":5,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":6,"author":{"gitId":"caitlyntang"},"content":"### Caitlyn\u0027s Project Portfolio Page","lastModifiedDate":"2024-03-04"},{"lineNumber":7,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"caitlyntang"},"content":"AddressBook - Level 3 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.","lastModifiedDate":"2024-03-04"},{"lineNumber":9,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":10,"author":{"gitId":"caitlyntang"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-03-04"},{"lineNumber":11,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":12,"author":{"gitId":"caitlyntang"},"content":"* **New Feature**: Added the ability to undo/redo previous commands.","lastModifiedDate":"2024-03-04"},{"lineNumber":13,"author":{"gitId":"caitlyntang"},"content":" * What it does: allows the user to undo all previous commands one at a time. Preceding undo commands can be reversed by using the redo command.","lastModifiedDate":"2024-03-04"},{"lineNumber":14,"author":{"gitId":"caitlyntang"},"content":" * Justification: This feature improves the product significantly because a user can make mistakes in commands and the app should provide a convenient way to rectify them.","lastModifiedDate":"2024-03-04"},{"lineNumber":15,"author":{"gitId":"caitlyntang"},"content":" * Highlights: This enhancement affects existing commands and commands to be added in future. It required an in-depth analysis of design alternatives. The implementation too was challenging as it required changes to existing commands.","lastModifiedDate":"2024-03-04"},{"lineNumber":16,"author":{"gitId":"caitlyntang"},"content":" * Credits: *{mention here if you reused any code/ideas from elsewhere or if a third-party library is heavily used in the feature so that a reader can make a more accurate judgement of how much effort went into the feature}*","lastModifiedDate":"2024-03-04"},{"lineNumber":17,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":18,"author":{"gitId":"caitlyntang"},"content":"* **New Feature**: Added a history command that allows the user to navigate to previous commands using up/down keys.","lastModifiedDate":"2024-03-04"},{"lineNumber":19,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":20,"author":{"gitId":"caitlyntang"},"content":"* **Code contributed**: [RepoSense link]()","lastModifiedDate":"2024-03-04"},{"lineNumber":21,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":22,"author":{"gitId":"caitlyntang"},"content":"* **Project management**:","lastModifiedDate":"2024-03-04"},{"lineNumber":23,"author":{"gitId":"caitlyntang"},"content":" * Managed releases `v1.3` - `v1.5rc` (3 releases) on GitHub","lastModifiedDate":"2024-03-04"},{"lineNumber":24,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":25,"author":{"gitId":"caitlyntang"},"content":"* **Enhancements to existing features**:","lastModifiedDate":"2024-03-04"},{"lineNumber":26,"author":{"gitId":"caitlyntang"},"content":" * Updated the GUI color scheme (Pull requests [\\#33](), [\\#34]())","lastModifiedDate":"2024-03-04"},{"lineNumber":27,"author":{"gitId":"caitlyntang"},"content":" * Wrote additional tests for existing features to increase coverage from 88% to 92% (Pull requests [\\#36](), [\\#38]())","lastModifiedDate":"2024-03-04"},{"lineNumber":28,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":29,"author":{"gitId":"caitlyntang"},"content":"* **Documentation**:","lastModifiedDate":"2024-03-04"},{"lineNumber":30,"author":{"gitId":"caitlyntang"},"content":" * User Guide:","lastModifiedDate":"2024-03-04"},{"lineNumber":31,"author":{"gitId":"caitlyntang"},"content":" * Added documentation for the features `delete` and `find` [\\#72]()","lastModifiedDate":"2024-03-04"},{"lineNumber":32,"author":{"gitId":"caitlyntang"},"content":" * Did cosmetic tweaks to existing documentation of features `clear`, `exit`: [\\#74]()","lastModifiedDate":"2024-03-04"},{"lineNumber":33,"author":{"gitId":"caitlyntang"},"content":" * Developer Guide:","lastModifiedDate":"2024-03-04"},{"lineNumber":34,"author":{"gitId":"caitlyntang"},"content":" * Added implementation details of the `delete` feature.","lastModifiedDate":"2024-03-04"},{"lineNumber":35,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":36,"author":{"gitId":"caitlyntang"},"content":"* **Community**:","lastModifiedDate":"2024-03-04"},{"lineNumber":37,"author":{"gitId":"caitlyntang"},"content":" * PRs reviewed (with non-trivial review comments): [\\#12](), [\\#32](), [\\#19](), [\\#42]()","lastModifiedDate":"2024-03-04"},{"lineNumber":38,"author":{"gitId":"caitlyntang"},"content":" * Contributed to forum discussions (examples: [1](), [2](), [3](), [4]())","lastModifiedDate":"2024-03-04"},{"lineNumber":39,"author":{"gitId":"caitlyntang"},"content":" * Reported bugs and suggestions for other teams in the class (examples: [1](), [2](), [3]())","lastModifiedDate":"2024-03-04"},{"lineNumber":40,"author":{"gitId":"caitlyntang"},"content":" * Some parts of the history feature I added was adopted by several other class mates ([1](), [2]())","lastModifiedDate":"2024-03-04"},{"lineNumber":41,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":42,"author":{"gitId":"caitlyntang"},"content":"* **Tools**:","lastModifiedDate":"2024-03-04"},{"lineNumber":43,"author":{"gitId":"caitlyntang"},"content":" * Integrated a third party library (Natty) to the project ([\\#42]())","lastModifiedDate":"2024-03-04"},{"lineNumber":44,"author":{"gitId":"caitlyntang"},"content":" * Integrated a new Github plugin (CircleCI) to the team repo","lastModifiedDate":"2024-03-04"},{"lineNumber":45,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":46,"author":{"gitId":"caitlyntang"},"content":"* _{you can add/remove categories in the list above}_","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"caitlyntang":46}},{"path":"docs/team/jerome-j.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"Jerome-j"},"content":"---","lastModifiedDate":"2024-03-01"},{"lineNumber":2,"author":{"gitId":"Jerome-j"},"content":" layout: default.md","lastModifiedDate":"2024-03-01"},{"lineNumber":3,"author":{"gitId":"Jerome-j"},"content":" title: \"Jerome-j\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-01"},{"lineNumber":4,"author":{"gitId":"Jerome-j"},"content":"---","lastModifiedDate":"2024-03-01"},{"lineNumber":5,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":6,"author":{"gitId":"Jerome-j"},"content":"### Jerome-j\u0027s Project Portfolio Page","lastModifiedDate":"2024-03-01"},{"lineNumber":7,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":8,"author":{"gitId":"Jerome-j"},"content":"AddressBook - Level 3 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.","lastModifiedDate":"2024-03-01"},{"lineNumber":9,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":10,"author":{"gitId":"Jerome-j"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-03-01"},{"lineNumber":11,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":12,"author":{"gitId":"Jerome-j"},"content":"* **New Feature**: Added the ability to undo/redo previous commands.","lastModifiedDate":"2024-03-01"},{"lineNumber":13,"author":{"gitId":"Jerome-j"},"content":" * What it does: allows the user to undo all previous commands one at a time. Preceding undo commands can be reversed by using the redo command.","lastModifiedDate":"2024-03-01"},{"lineNumber":14,"author":{"gitId":"Jerome-j"},"content":" * Justification: This feature improves the product significantly because a user can make mistakes in commands and the app should provide a convenient way to rectify them.","lastModifiedDate":"2024-03-01"},{"lineNumber":15,"author":{"gitId":"Jerome-j"},"content":" * Highlights: This enhancement affects existing commands and commands to be added in future. It required an in-depth analysis of design alternatives. The implementation too was challenging as it required changes to existing commands.","lastModifiedDate":"2024-03-01"},{"lineNumber":16,"author":{"gitId":"Jerome-j"},"content":" * Credits: *{mention here if you reused any code/ideas from elsewhere or if a third-party library is heavily used in the feature so that a reader can make a more accurate judgement of how much effort went into the feature}*","lastModifiedDate":"2024-03-01"},{"lineNumber":17,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":18,"author":{"gitId":"Jerome-j"},"content":"* **New Feature**: Added a history command that allows the user to navigate to previous commands using up/down keys.","lastModifiedDate":"2024-03-01"},{"lineNumber":19,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":20,"author":{"gitId":"Jerome-j"},"content":"* **Code contributed**: [RepoSense link]()","lastModifiedDate":"2024-03-01"},{"lineNumber":21,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":22,"author":{"gitId":"Jerome-j"},"content":"* **Project management**:","lastModifiedDate":"2024-03-01"},{"lineNumber":23,"author":{"gitId":"Jerome-j"},"content":" * Managed releases `v1.3` - `v1.5rc` (3 releases) on GitHub","lastModifiedDate":"2024-03-01"},{"lineNumber":24,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":25,"author":{"gitId":"Jerome-j"},"content":"* **Enhancements to existing features**:","lastModifiedDate":"2024-03-01"},{"lineNumber":26,"author":{"gitId":"Jerome-j"},"content":" * Updated the GUI color scheme (Pull requests [\\#33](), [\\#34]())","lastModifiedDate":"2024-03-01"},{"lineNumber":27,"author":{"gitId":"Jerome-j"},"content":" * Wrote additional tests for existing features to increase coverage from 88% to 92% (Pull requests [\\#36](), [\\#38]())","lastModifiedDate":"2024-03-01"},{"lineNumber":28,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":29,"author":{"gitId":"Jerome-j"},"content":"* **Documentation**:","lastModifiedDate":"2024-03-01"},{"lineNumber":30,"author":{"gitId":"Jerome-j"},"content":" * User Guide:","lastModifiedDate":"2024-03-01"},{"lineNumber":31,"author":{"gitId":"Jerome-j"},"content":" * Added documentation for the features `delete` and `find` [\\#72]()","lastModifiedDate":"2024-03-01"},{"lineNumber":32,"author":{"gitId":"Jerome-j"},"content":" * Did cosmetic tweaks to existing documentation of features `clear`, `exit`: [\\#74]()","lastModifiedDate":"2024-03-01"},{"lineNumber":33,"author":{"gitId":"Jerome-j"},"content":" * Developer Guide:","lastModifiedDate":"2024-03-01"},{"lineNumber":34,"author":{"gitId":"Jerome-j"},"content":" * Added implementation details of the `delete` feature.","lastModifiedDate":"2024-03-01"},{"lineNumber":35,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":36,"author":{"gitId":"Jerome-j"},"content":"* **Community**:","lastModifiedDate":"2024-03-01"},{"lineNumber":37,"author":{"gitId":"Jerome-j"},"content":" * PRs reviewed (with non-trivial review comments): [\\#12](), [\\#32](), [\\#19](), [\\#42]()","lastModifiedDate":"2024-03-01"},{"lineNumber":38,"author":{"gitId":"Jerome-j"},"content":" * Contributed to forum discussions (examples: [1](), [2](), [3](), [4]())","lastModifiedDate":"2024-03-01"},{"lineNumber":39,"author":{"gitId":"Jerome-j"},"content":" * Reported bugs and suggestions for other teams in the class (examples: [1](), [2](), [3]())","lastModifiedDate":"2024-03-01"},{"lineNumber":40,"author":{"gitId":"Jerome-j"},"content":" * Some parts of the history feature I added was adopted by several other class mates ([1](), [2]())","lastModifiedDate":"2024-03-01"},{"lineNumber":41,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":42,"author":{"gitId":"Jerome-j"},"content":"* **Tools**:","lastModifiedDate":"2024-03-01"},{"lineNumber":43,"author":{"gitId":"Jerome-j"},"content":" * Integrated a third party library (Natty) to the project ([\\#42]())","lastModifiedDate":"2024-03-01"},{"lineNumber":44,"author":{"gitId":"Jerome-j"},"content":" * Integrated a new Github plugin (CircleCI) to the team repo","lastModifiedDate":"2024-03-01"},{"lineNumber":45,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":46,"author":{"gitId":"Jerome-j"},"content":"* _{you can add/remove categories in the list above}_","lastModifiedDate":"2024-03-01"}],"authorContributionMap":{"Jerome-j":46}},{"path":"docs/team/tankh99.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"tankh99"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":2,"author":{"gitId":"tankh99"},"content":" layout: default.md","lastModifiedDate":"2024-03-05"},{"lineNumber":3,"author":{"gitId":"tankh99"},"content":" title: \"Khang Hou\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-05"},{"lineNumber":4,"author":{"gitId":"tankh99"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":5,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":6,"author":{"gitId":"tankh99"},"content":"### Khang Hou\u0027s Project Portfolio Page","lastModifiedDate":"2024-03-05"},{"lineNumber":7,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":8,"author":{"gitId":"tankh99"},"content":"AddressBook - Level 3 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.","lastModifiedDate":"2024-03-05"},{"lineNumber":9,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":10,"author":{"gitId":"tankh99"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-03-05"},{"lineNumber":11,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":12,"author":{"gitId":"tankh99"},"content":"* **New Feature**: Added the ability to undo/redo previous commands.","lastModifiedDate":"2024-03-05"},{"lineNumber":13,"author":{"gitId":"tankh99"},"content":" * What it does: allows the user to undo all previous commands one at a time. Preceding undo commands can be reversed by using the redo command.","lastModifiedDate":"2024-03-05"},{"lineNumber":14,"author":{"gitId":"tankh99"},"content":" * Justification: This feature improves the product significantly because a user can make mistakes in commands and the app should provide a convenient way to rectify them.","lastModifiedDate":"2024-03-05"},{"lineNumber":15,"author":{"gitId":"tankh99"},"content":" * Highlights: This enhancement affects existing commands and commands to be added in future. It required an in-depth analysis of design alternatives. The implementation too was challenging as it required changes to existing commands.","lastModifiedDate":"2024-03-05"},{"lineNumber":16,"author":{"gitId":"tankh99"},"content":" * Credits: *{mention here if you reused any code/ideas from elsewhere or if a third-party library is heavily used in the feature so that a reader can make a more accurate judgement of how much effort went into the feature}*","lastModifiedDate":"2024-03-05"},{"lineNumber":17,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":18,"author":{"gitId":"tankh99"},"content":"* **New Feature**: Added a history command that allows the user to navigate to previous commands using up/down keys.","lastModifiedDate":"2024-03-05"},{"lineNumber":19,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":20,"author":{"gitId":"tankh99"},"content":"* **Code contributed**: [RepoSense link]()","lastModifiedDate":"2024-03-05"},{"lineNumber":21,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":22,"author":{"gitId":"tankh99"},"content":"* **Project management**:","lastModifiedDate":"2024-03-05"},{"lineNumber":23,"author":{"gitId":"tankh99"},"content":" * Managed releases `v1.3` - `v1.5rc` (3 releases) on GitHub","lastModifiedDate":"2024-03-05"},{"lineNumber":24,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":25,"author":{"gitId":"tankh99"},"content":"* **Enhancements to existing features**:","lastModifiedDate":"2024-03-05"},{"lineNumber":26,"author":{"gitId":"tankh99"},"content":" * Updated the GUI color scheme (Pull requests [\\#33](), [\\#34]())","lastModifiedDate":"2024-03-05"},{"lineNumber":27,"author":{"gitId":"tankh99"},"content":" * Wrote additional tests for existing features to increase coverage from 88% to 92% (Pull requests [\\#36](), [\\#38]())","lastModifiedDate":"2024-03-05"},{"lineNumber":28,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":29,"author":{"gitId":"tankh99"},"content":"* **Documentation**:","lastModifiedDate":"2024-03-05"},{"lineNumber":30,"author":{"gitId":"tankh99"},"content":" * User Guide:","lastModifiedDate":"2024-03-05"},{"lineNumber":31,"author":{"gitId":"tankh99"},"content":" * Added documentation for the features `delete` and `find` [\\#72]()","lastModifiedDate":"2024-03-05"},{"lineNumber":32,"author":{"gitId":"tankh99"},"content":" * Did cosmetic tweaks to existing documentation of features `clear`, `exit`: [\\#74]()","lastModifiedDate":"2024-03-05"},{"lineNumber":33,"author":{"gitId":"tankh99"},"content":" * Developer Guide:","lastModifiedDate":"2024-03-05"},{"lineNumber":34,"author":{"gitId":"tankh99"},"content":" * Added implementation details of the `delete` feature.","lastModifiedDate":"2024-03-05"},{"lineNumber":35,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":36,"author":{"gitId":"tankh99"},"content":"* **Community**:","lastModifiedDate":"2024-03-05"},{"lineNumber":37,"author":{"gitId":"tankh99"},"content":" * PRs reviewed (with non-trivial review comments): [\\#12](), [\\#32](), [\\#19](), [\\#42]()","lastModifiedDate":"2024-03-05"},{"lineNumber":38,"author":{"gitId":"tankh99"},"content":" * Contributed to forum discussions (examples: [1](), [2](), [3](), [4]())","lastModifiedDate":"2024-03-05"},{"lineNumber":39,"author":{"gitId":"tankh99"},"content":" * Reported bugs and suggestions for other teams in the class (examples: [1](), [2](), [3]())","lastModifiedDate":"2024-03-05"},{"lineNumber":40,"author":{"gitId":"tankh99"},"content":" * Some parts of the history feature I added was adopted by several other class mates ([1](), [2]())","lastModifiedDate":"2024-03-05"},{"lineNumber":41,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":42,"author":{"gitId":"tankh99"},"content":"* **Tools**:","lastModifiedDate":"2024-03-05"},{"lineNumber":43,"author":{"gitId":"tankh99"},"content":" * Integrated a third party library (Natty) to the project ([\\#42]())","lastModifiedDate":"2024-03-05"},{"lineNumber":44,"author":{"gitId":"tankh99"},"content":" * Integrated a new Github plugin (CircleCI) to the team repo","lastModifiedDate":"2024-03-05"},{"lineNumber":45,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":46,"author":{"gitId":"tankh99"},"content":"* _{you can add/remove categories in the list above}_","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"tankh99":46}},{"path":"docs/team/vnnamng.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"vnnamng"},"content":"---","lastModifiedDate":"2024-03-06"},{"lineNumber":2,"author":{"gitId":"vnnamng"},"content":" layout: default.md","lastModifiedDate":"2024-03-06"},{"lineNumber":3,"author":{"gitId":"vnnamng"},"content":" title: \"vnnamng\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-06"},{"lineNumber":4,"author":{"gitId":"vnnamng"},"content":"---","lastModifiedDate":"2024-03-06"},{"lineNumber":5,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":6,"author":{"gitId":"vnnamng"},"content":"### vnnamng\u0027s Project Portfolio Page","lastModifiedDate":"2024-03-06"},{"lineNumber":7,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":8,"author":{"gitId":"vnnamng"},"content":"AddressBook - Level 3 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.","lastModifiedDate":"2024-03-06"},{"lineNumber":9,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":10,"author":{"gitId":"vnnamng"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-03-06"},{"lineNumber":11,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":12,"author":{"gitId":"vnnamng"},"content":"* **New Feature**: Added the ability to undo/redo previous commands.","lastModifiedDate":"2024-03-06"},{"lineNumber":13,"author":{"gitId":"vnnamng"},"content":" * What it does: allows the user to undo all previous commands one at a time. Preceding undo commands can be reversed by using the redo command.","lastModifiedDate":"2024-03-06"},{"lineNumber":14,"author":{"gitId":"vnnamng"},"content":" * Justification: This feature improves the product significantly because a user can make mistakes in commands and the app should provide a convenient way to rectify them.","lastModifiedDate":"2024-03-06"},{"lineNumber":15,"author":{"gitId":"vnnamng"},"content":" * Highlights: This enhancement affects existing commands and commands to be added in future. It required an in-depth analysis of design alternatives. The implementation too was challenging as it required changes to existing commands.","lastModifiedDate":"2024-03-06"},{"lineNumber":16,"author":{"gitId":"vnnamng"},"content":" * Credits: *{mention here if you reused any code/ideas from elsewhere or if a third-party library is heavily used in the feature so that a reader can make a more accurate judgement of how much effort went into the feature}*","lastModifiedDate":"2024-03-06"},{"lineNumber":17,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":18,"author":{"gitId":"vnnamng"},"content":"* **New Feature**: Added a history command that allows the user to navigate to previous commands using up/down keys.","lastModifiedDate":"2024-03-06"},{"lineNumber":19,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":20,"author":{"gitId":"vnnamng"},"content":"* **Code contributed**: [RepoSense link]()","lastModifiedDate":"2024-03-06"},{"lineNumber":21,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":22,"author":{"gitId":"vnnamng"},"content":"* **Project management**:","lastModifiedDate":"2024-03-06"},{"lineNumber":23,"author":{"gitId":"vnnamng"},"content":" * Managed releases `v1.3` - `v1.5rc` (3 releases) on GitHub","lastModifiedDate":"2024-03-06"},{"lineNumber":24,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":25,"author":{"gitId":"vnnamng"},"content":"* **Enhancements to existing features**:","lastModifiedDate":"2024-03-06"},{"lineNumber":26,"author":{"gitId":"vnnamng"},"content":" * Updated the GUI color scheme (Pull requests [\\#33](), [\\#34]())","lastModifiedDate":"2024-03-06"},{"lineNumber":27,"author":{"gitId":"vnnamng"},"content":" * Wrote additional tests for existing features to increase coverage from 88% to 92% (Pull requests [\\#36](), [\\#38]())","lastModifiedDate":"2024-03-06"},{"lineNumber":28,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":29,"author":{"gitId":"vnnamng"},"content":"* **Documentation**:","lastModifiedDate":"2024-03-06"},{"lineNumber":30,"author":{"gitId":"vnnamng"},"content":" * User Guide:","lastModifiedDate":"2024-03-06"},{"lineNumber":31,"author":{"gitId":"vnnamng"},"content":" * Added documentation for the features `delete` and `find` [\\#72]()","lastModifiedDate":"2024-03-06"},{"lineNumber":32,"author":{"gitId":"vnnamng"},"content":" * Did cosmetic tweaks to existing documentation of features `clear`, `exit`: [\\#74]()","lastModifiedDate":"2024-03-06"},{"lineNumber":33,"author":{"gitId":"vnnamng"},"content":" * Developer Guide:","lastModifiedDate":"2024-03-06"},{"lineNumber":34,"author":{"gitId":"vnnamng"},"content":" * Added implementation details of the `delete` feature.","lastModifiedDate":"2024-03-06"},{"lineNumber":35,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":36,"author":{"gitId":"vnnamng"},"content":"* **Community**:","lastModifiedDate":"2024-03-06"},{"lineNumber":37,"author":{"gitId":"vnnamng"},"content":" * PRs reviewed (with non-trivial review comments): [\\#12](), [\\#32](), [\\#19](), [\\#42]()","lastModifiedDate":"2024-03-06"},{"lineNumber":38,"author":{"gitId":"vnnamng"},"content":" * Contributed to forum discussions (examples: [1](), [2](), [3](), [4]())","lastModifiedDate":"2024-03-06"},{"lineNumber":39,"author":{"gitId":"vnnamng"},"content":" * Reported bugs and suggestions for other teams in the class (examples: [1](), [2](), [3]())","lastModifiedDate":"2024-03-06"},{"lineNumber":40,"author":{"gitId":"vnnamng"},"content":" * Some parts of the history feature I added was adopted by several other class mates ([1](), [2]())","lastModifiedDate":"2024-03-06"},{"lineNumber":41,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":42,"author":{"gitId":"vnnamng"},"content":"* **Tools**:","lastModifiedDate":"2024-03-06"},{"lineNumber":43,"author":{"gitId":"vnnamng"},"content":" * Integrated a third party library (Natty) to the project ([\\#42]())","lastModifiedDate":"2024-03-06"},{"lineNumber":44,"author":{"gitId":"vnnamng"},"content":" * Integrated a new Github plugin (CircleCI) to the team repo","lastModifiedDate":"2024-03-06"},{"lineNumber":45,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":46,"author":{"gitId":"vnnamng"},"content":"* _{you can add/remove categories in the list above}_","lastModifiedDate":"2024-03-06"}],"authorContributionMap":{"vnnamng":46}}] +[{"path":".github/ISSUE_TEMPLATE/bug_report.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"tankh99"},"content":"---","lastModifiedDate":"2024-02-26"},{"lineNumber":2,"author":{"gitId":"tankh99"},"content":"name: Bug report","lastModifiedDate":"2024-02-26"},{"lineNumber":3,"author":{"gitId":"tankh99"},"content":"about: Create a report to help us improve","lastModifiedDate":"2024-02-26"},{"lineNumber":4,"author":{"gitId":"tankh99"},"content":"title: \u0027\u0027","lastModifiedDate":"2024-02-26"},{"lineNumber":5,"author":{"gitId":"tankh99"},"content":"labels: \u0027\u0027","lastModifiedDate":"2024-02-26"},{"lineNumber":6,"author":{"gitId":"tankh99"},"content":"assignees: \u0027\u0027","lastModifiedDate":"2024-02-26"},{"lineNumber":7,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"tankh99"},"content":"---","lastModifiedDate":"2024-02-26"},{"lineNumber":9,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":10,"author":{"gitId":"tankh99"},"content":"**Describe the bug**","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"tankh99"},"content":"A clear and concise description of what the bug is.","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"tankh99"},"content":"**To Reproduce**","lastModifiedDate":"2024-02-26"},{"lineNumber":14,"author":{"gitId":"tankh99"},"content":"Steps to reproduce the behavior:","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"tankh99"},"content":"1. Go to \u0027...\u0027","lastModifiedDate":"2024-02-26"},{"lineNumber":16,"author":{"gitId":"tankh99"},"content":"2. Click on \u0027....\u0027","lastModifiedDate":"2024-02-26"},{"lineNumber":17,"author":{"gitId":"tankh99"},"content":"3. Scroll down to \u0027....\u0027","lastModifiedDate":"2024-02-26"},{"lineNumber":18,"author":{"gitId":"tankh99"},"content":"4. See error","lastModifiedDate":"2024-02-26"},{"lineNumber":19,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":20,"author":{"gitId":"tankh99"},"content":"**Expected behavior**","lastModifiedDate":"2024-02-26"},{"lineNumber":21,"author":{"gitId":"tankh99"},"content":"A clear and concise description of what you expected to happen.","lastModifiedDate":"2024-02-26"},{"lineNumber":22,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":23,"author":{"gitId":"tankh99"},"content":"**Screenshots**","lastModifiedDate":"2024-02-26"},{"lineNumber":24,"author":{"gitId":"tankh99"},"content":"If applicable, add screenshots to help explain your problem.","lastModifiedDate":"2024-02-26"},{"lineNumber":25,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":26,"author":{"gitId":"tankh99"},"content":"**Additional context**","lastModifiedDate":"2024-02-26"},{"lineNumber":27,"author":{"gitId":"tankh99"},"content":"Add any other context about the problem here.","lastModifiedDate":"2024-02-26"}],"authorContributionMap":{"tankh99":27}},{"path":".github/ISSUE_TEMPLATE/user-story.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"tankh99"},"content":"---","lastModifiedDate":"2024-03-06"},{"lineNumber":2,"author":{"gitId":"tankh99"},"content":"name: User story","lastModifiedDate":"2024-03-06"},{"lineNumber":3,"author":{"gitId":"tankh99"},"content":"about: User story","lastModifiedDate":"2024-03-06"},{"lineNumber":4,"author":{"gitId":"tankh99"},"content":"title: \"As a\"","lastModifiedDate":"2024-03-06"},{"lineNumber":5,"author":{"gitId":"tankh99"},"content":"labels: \u0027\u0027","lastModifiedDate":"2024-03-06"},{"lineNumber":6,"author":{"gitId":"tankh99"},"content":"assignees: \u0027\u0027","lastModifiedDate":"2024-03-06"},{"lineNumber":7,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":8,"author":{"gitId":"tankh99"},"content":"---","lastModifiedDate":"2024-03-06"},{"lineNumber":9,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":10,"author":{"gitId":"tankh99"},"content":"...so that","lastModifiedDate":"2024-03-06"}],"authorContributionMap":{"tankh99":10}},{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"tankh99"},"content":"[![codecov](https://codecov.io/gh/AY2324S2-CS2103-F08-2/tp/graph/badge.svg?token\u003dPBBJNYE8U5)](https://codecov.io/gh/AY2324S2-CS2103-F08-2/tp)","lastModifiedDate":"2024-03-07"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-17"},{"lineNumber":3,"author":{"gitId":"tankh99"},"content":"[![CI Status](https://github.com/AY2324S2-CS2103-F08-2/tp/workflows/Java%20CI/badge.svg)](https://github.com/AY2324S2-CS2103-F08-2/tp/actions)","lastModifiedDate":"2024-03-06"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"![Ui](docs/images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":7,"author":{"gitId":"Jerome-j"},"content":"* This is our **CogniCare application**. pu\u003cbr\u003e","lastModifiedDate":"2024-03-08"},{"lineNumber":8,"author":{"gitId":"-"},"content":" Example usages:","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"Jerome-j"},"content":" * allows counsellors to create contacts in the CogniCare application","lastModifiedDate":"2024-03-08"},{"lineNumber":10,"author":{"gitId":"Jerome-j"},"content":" * allows counsellors to track his student\u0027s mental health progress","lastModifiedDate":"2024-03-08"},{"lineNumber":11,"author":{"gitId":"Jerome-j"},"content":"* The project is an ongoing software project for a desktop application (called _CongiCare_) which is used for managing student contact details.","lastModifiedDate":"2024-03-08"},{"lineNumber":12,"author":{"gitId":"Jerome-j"},"content":" * It is **written in OOP fashion**. It provides a **reasonably well-written** code base.","lastModifiedDate":"2024-03-08"},{"lineNumber":13,"author":{"gitId":"-"},"content":" * It comes with a **reasonable level of user and developer documentation**.","lastModifiedDate":"2020-05-23"},{"lineNumber":14,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-08"},{"lineNumber":15,"author":{"gitId":"Jerome-j"},"content":"* We hope that the application will help all SoC students to achieve better mental health, and counsellors to spend more time to help students instead of wasting time on administrative work by helping them keep track of student information.","lastModifiedDate":"2024-03-08"}],"authorContributionMap":{"Jerome-j":7,"tankh99":2,"-":6}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"About Us\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"We are a team based in the [School of Computing, National University of Singapore](http://www.comp.nus.edu.sg).","lastModifiedDate":"2020-05-23"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":8,"author":{"gitId":"-"},"content":"You can reach us at the email `seer[at]comp.nus.edu.sg`","lastModifiedDate":"2020-06-17"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-06-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"## Project team","lastModifiedDate":"2020-06-07"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"Jerome-j"},"content":"### Jerome Chua","lastModifiedDate":"2024-03-01"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":14,"author":{"gitId":"Jerome-j"},"content":"\u003cimg src\u003d\"images/jerome-j.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-01"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"Jerome-j"},"content":"[[github](http://github.com/Jerome-j)] [[portfolio](team/jerome-j.md)]","lastModifiedDate":"2024-03-06"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"Jerome-j"},"content":"* Responsibilities: Integration","lastModifiedDate":"2024-03-01"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"vnnamng"},"content":"### Nguyen Xuan Nam","lastModifiedDate":"2024-03-06"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":23,"author":{"gitId":"vnnamng"},"content":"\u003cimg src\u003d\"images/vnnamng.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-06"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":25,"author":{"gitId":"vnnamng"},"content":"[[github](http://github.com/vnnamng)] [[portfolio](team/vnnamng.md)]","lastModifiedDate":"2024-03-06"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":27,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"Jerome-j"},"content":"* Responsibilities: Integration","lastModifiedDate":"2024-03-01"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"caitlyntang"},"content":"### Caitlyn Tang","lastModifiedDate":"2024-03-04"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"caitlyntang"},"content":"\u003cimg src\u003d\"images/caitlyntang.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"caitlyntang"},"content":"[[github](http://github.com/caitlyntang)]","lastModifiedDate":"2024-03-04"},{"lineNumber":35,"author":{"gitId":"caitlyntang"},"content":"[[portfolio](team/caitlyntang.md)]","lastModifiedDate":"2024-03-04"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":37,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":"* Responsibilities: Dev Ops + Threading","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":40,"author":{"gitId":"tankh99"},"content":"### Tan Khang Hou","lastModifiedDate":"2024-03-05"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"tankh99"},"content":"\u003cimg src\u003d\"images/tankh99.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"tankh99"},"content":"[[github](http://github.com/tankh99)]","lastModifiedDate":"2024-03-05"},{"lineNumber":45,"author":{"gitId":"tankh99"},"content":"[[portfolio](team/tankh99.md)]","lastModifiedDate":"2024-03-05"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"tankh99"},"content":"* Responsibilities: Code quality","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"caitlyntang":4,"Jerome-j":5,"tankh99":5,"vnnamng":3,"-":31}},{"path":"docs/DeveloperGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"Developer Guide\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":" pageNav: 3","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"caitlyntang"},"content":"# CogniCare Developer Guide","lastModifiedDate":"2024-03-07"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c!-- * Table of Contents --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003cpage-nav-print /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":14,"author":{"gitId":"-"},"content":"## **Acknowledgements**","lastModifiedDate":"2021-07-30"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":16,"author":{"gitId":"caitlyntang"},"content":"Code base adapted from [Address Book Level-3](https://github.com/nus-cs2103-AY2324S2/tp)","lastModifiedDate":"2024-03-07"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":18,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2021-07-30"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"-"},"content":"## **Setting up, getting started**","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"Refer to the guide [_Setting up and getting started_](SettingUp.md).","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"-"},"content":"## **Design**","lastModifiedDate":"2020-05-23"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":"### Architecture","lastModifiedDate":"2021-07-31"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ArchitectureDiagram.puml\" width\u003d\"280\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"-"},"content":"The ***Architecture Diagram*** given above explains the high-level design of the App.","lastModifiedDate":"2021-07-31"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"-"},"content":"Given below is a quick overview of main components and how they interact with each other.","lastModifiedDate":"2021-07-31"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":36,"author":{"gitId":"-"},"content":"**Main components of the architecture**","lastModifiedDate":"2021-07-31"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":"**`Main`** (consisting of classes [`Main`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/Main.java) and [`MainApp`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/MainApp.java)) is in charge of the app launch and shut down.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"-"},"content":"* At app launch, it initializes the other components in the correct sequence, and connects them up with each other.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"-"},"content":"* At shut down, it shuts down the other components and invokes cleanup methods where necessary.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":"The bulk of the app\u0027s work is done by the following four components:","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"-"},"content":"* [**`UI`**](#ui-component): The UI of the App.","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":"* [**`Logic`**](#logic-component): The command executor.","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":"* [**`Model`**](#model-component): Holds the data of the App in memory.","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* [**`Storage`**](#storage-component): Reads data from, and writes data to, the hard disk.","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"-"},"content":"[**`Commons`**](#common-classes) represents a collection of classes used by multiple other components.","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"-"},"content":"**How the architecture components interact with each other**","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":"The *Sequence Diagram* below shows how the components interact with each other for the scenario where the user issues the command `delete 1`.","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ArchitectureSequenceDiagram.puml\" width\u003d\"574\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":57,"author":{"gitId":"-"},"content":"Each of the four main components (also shown in the diagram above),","lastModifiedDate":"2021-07-31"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":59,"author":{"gitId":"-"},"content":"* defines its *API* in an `interface` with the same name as the Component.","lastModifiedDate":"2021-07-31"},{"lineNumber":60,"author":{"gitId":"-"},"content":"* implements its functionality using a concrete `{Component Name}Manager` class (which follows the corresponding API `interface` mentioned in the previous point.","lastModifiedDate":"2021-07-31"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":62,"author":{"gitId":"-"},"content":"For example, the `Logic` component defines its API in the `Logic.java` interface and implements its functionality using the `LogicManager.java` class which follows the `Logic` interface. Other components interact with a given component through its interface rather than the concrete class (reason: to prevent outside component\u0027s being coupled to the implementation of a component), as illustrated in the (partial) class diagram below.","lastModifiedDate":"2021-07-31"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":64,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ComponentManagers.puml\" width\u003d\"300\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":66,"author":{"gitId":"-"},"content":"The sections below give more details of each component.","lastModifiedDate":"2020-05-23"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":68,"author":{"gitId":"-"},"content":"### UI component","lastModifiedDate":"2020-05-23"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":70,"author":{"gitId":"-"},"content":"The **API** of this component is specified in [`Ui.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/Ui.java)","lastModifiedDate":"2021-07-31"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":72,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UiClassDiagram.puml\" alt\u003d\"Structure of the UI Component\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":74,"author":{"gitId":"-"},"content":"The UI consists of a `MainWindow` that is made up of parts e.g.`CommandBox`, `ResultDisplay`, `PersonListPanel`, `StatusBarFooter` etc. All these, including the `MainWindow`, inherit from the abstract `UiPart` class which captures the commonalities between classes that represent parts of the visible GUI.","lastModifiedDate":"2021-07-31"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":76,"author":{"gitId":"-"},"content":"The `UI` component uses the JavaFx UI framework. The layout of these UI parts are defined in matching `.fxml` files that are in the `src/main/resources/view` folder. For example, the layout of the [`MainWindow`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/MainWindow.java) is specified in [`MainWindow.fxml`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/resources/view/MainWindow.fxml)","lastModifiedDate":"2021-07-31"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":78,"author":{"gitId":"-"},"content":"The `UI` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":80,"author":{"gitId":"-"},"content":"* executes user commands using the `Logic` component.","lastModifiedDate":"2021-07-31"},{"lineNumber":81,"author":{"gitId":"-"},"content":"* listens for changes to `Model` data so that the UI can be updated with the modified data.","lastModifiedDate":"2021-07-31"},{"lineNumber":82,"author":{"gitId":"-"},"content":"* keeps a reference to the `Logic` component, because the `UI` relies on the `Logic` to execute commands.","lastModifiedDate":"2021-07-31"},{"lineNumber":83,"author":{"gitId":"-"},"content":"* depends on some classes in the `Model` component, as it displays `Person` object residing in the `Model`.","lastModifiedDate":"2021-07-31"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":85,"author":{"gitId":"-"},"content":"### Logic component","lastModifiedDate":"2020-05-23"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":87,"author":{"gitId":"-"},"content":"**API** : [`Logic.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/logic/Logic.java)","lastModifiedDate":"2021-07-31"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":89,"author":{"gitId":"-"},"content":"Here\u0027s a (partial) class diagram of the `Logic` component:","lastModifiedDate":"2021-07-31"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":91,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/LogicClassDiagram.puml\" width\u003d\"550\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":93,"author":{"gitId":"-"},"content":"The sequence diagram below illustrates the interactions within the `Logic` component, taking `execute(\"delete 1\")` API call as an example.","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":95,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/DeleteSequenceDiagram.puml\" alt\u003d\"Interactions Inside the Logic Component for the `delete 1` Command\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":97,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":98,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":99,"author":{"gitId":"-"},"content":"**Note:** The lifeline for `DeleteCommandParser` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline continues till the end of diagram.","lastModifiedDate":"2023-09-12"},{"lineNumber":100,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":101,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":102,"author":{"gitId":"-"},"content":"How the `Logic` component works:","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"-"},"content":"1. When `Logic` is called upon to execute a command, it is passed to an `AddressBookParser` object which in turn creates a parser that matches the command (e.g., `DeleteCommandParser`) and uses it to parse the command.","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"-"},"content":"1. This results in a `Command` object (more precisely, an object of one of its subclasses e.g., `DeleteCommand`) which is executed by the `LogicManager`.","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"-"},"content":"1. The command can communicate with the `Model` when it is executed (e.g. to delete a person).\u003cbr\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":107,"author":{"gitId":"-"},"content":" Note that although this is shown as a single step in the diagram above (for simplicity), in the code it can take several interactions (between the command object and the `Model`) to achieve.","lastModifiedDate":"2024-02-09"},{"lineNumber":108,"author":{"gitId":"-"},"content":"1. The result of the command execution is encapsulated as a `CommandResult` object which is returned back from `Logic`.","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"-"},"content":"Here are the other classes in `Logic` (omitted from the class diagram above) that are used for parsing a user command:","lastModifiedDate":"2021-07-31"},{"lineNumber":111,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":112,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ParserClasses.puml\" width\u003d\"600\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":114,"author":{"gitId":"-"},"content":"How the parsing works:","lastModifiedDate":"2021-07-31"},{"lineNumber":115,"author":{"gitId":"-"},"content":"* When called upon to parse a user command, the `AddressBookParser` class creates an `XYZCommandParser` (`XYZ` is a placeholder for the specific command name e.g., `AddCommandParser`) which uses the other classes shown above to parse the user command and create a `XYZCommand` object (e.g., `AddCommand`) which the `AddressBookParser` returns back as a `Command` object.","lastModifiedDate":"2021-07-31"},{"lineNumber":116,"author":{"gitId":"-"},"content":"* All `XYZCommandParser` classes (e.g., `AddCommandParser`, `DeleteCommandParser`, ...) inherit from the `Parser` interface so that they can be treated similarly where possible e.g, during testing.","lastModifiedDate":"2021-07-31"},{"lineNumber":117,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":118,"author":{"gitId":"-"},"content":"### Model component","lastModifiedDate":"2021-07-31"},{"lineNumber":119,"author":{"gitId":"-"},"content":"**API** : [`Model.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/model/Model.java)","lastModifiedDate":"2020-05-23"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":121,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ModelClassDiagram.puml\" width\u003d\"450\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":122,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":123,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":124,"author":{"gitId":"-"},"content":"The `Model` component,","lastModifiedDate":"2021-07-31"},{"lineNumber":125,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":126,"author":{"gitId":"-"},"content":"* stores the address book data i.e., all `Person` objects (which are contained in a `UniquePersonList` object).","lastModifiedDate":"2021-07-31"},{"lineNumber":127,"author":{"gitId":"-"},"content":"* stores the currently \u0027selected\u0027 `Person` objects (e.g., results of a search query) as a separate _filtered_ list which is exposed to outsiders as an unmodifiable `ObservableList\u003cPerson\u003e` that can be \u0027observed\u0027 e.g. the UI can be bound to this list so that the UI automatically updates when the data in the list change.","lastModifiedDate":"2021-07-31"},{"lineNumber":128,"author":{"gitId":"-"},"content":"* stores a `UserPref` object that represents the user’s preferences. This is exposed to the outside as a `ReadOnlyUserPref` objects.","lastModifiedDate":"2021-07-31"},{"lineNumber":129,"author":{"gitId":"-"},"content":"* does not depend on any of the other three components (as the `Model` represents data entities of the domain, they should make sense on their own without depending on other components)","lastModifiedDate":"2021-07-31"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":131,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":132,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":133,"author":{"gitId":"-"},"content":"**Note:** An alternative (arguably, a more OOP) model is given below. It has a `Tag` list in the `AddressBook`, which `Person` references. This allows `AddressBook` to only require one `Tag` object per unique tag, instead of each `Person` needing their own `Tag` objects.\u003cbr\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":134,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":135,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/BetterModelClassDiagram.puml\" width\u003d\"450\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":137,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":138,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":139,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":140,"author":{"gitId":"-"},"content":"### Storage component","lastModifiedDate":"2020-05-23"},{"lineNumber":141,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":142,"author":{"gitId":"-"},"content":"**API** : [`Storage.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/storage/Storage.java)","lastModifiedDate":"2020-05-23"},{"lineNumber":143,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":144,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/StorageClassDiagram.puml\" width\u003d\"550\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":145,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":146,"author":{"gitId":"-"},"content":"The `Storage` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":147,"author":{"gitId":"-"},"content":"* can save both address book data and user preference data in JSON format, and read them back into corresponding objects.","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"-"},"content":"* inherits from both `AddressBookStorage` and `UserPrefStorage`, which means it can be treated as either one (if only the functionality of only one is needed).","lastModifiedDate":"2021-07-31"},{"lineNumber":149,"author":{"gitId":"-"},"content":"* depends on some classes in the `Model` component (because the `Storage` component\u0027s job is to save/retrieve objects that belong to the `Model`)","lastModifiedDate":"2021-07-21"},{"lineNumber":150,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":151,"author":{"gitId":"-"},"content":"### Common classes","lastModifiedDate":"2020-05-23"},{"lineNumber":152,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":153,"author":{"gitId":"-"},"content":"Classes used by multiple components are in the `seedu.addressbook.commons` package.","lastModifiedDate":"2020-05-23"},{"lineNumber":154,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":155,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":156,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":157,"author":{"gitId":"-"},"content":"## **Implementation**","lastModifiedDate":"2020-05-23"},{"lineNumber":158,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":159,"author":{"gitId":"-"},"content":"This section describes some noteworthy details on how certain features are implemented.","lastModifiedDate":"2020-05-23"},{"lineNumber":160,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":161,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Undo/redo feature","lastModifiedDate":"2020-06-07"},{"lineNumber":162,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":163,"author":{"gitId":"-"},"content":"#### Proposed Implementation","lastModifiedDate":"2020-05-23"},{"lineNumber":164,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":165,"author":{"gitId":"-"},"content":"The proposed undo/redo mechanism is facilitated by `VersionedAddressBook`. It extends `AddressBook` with an undo/redo history, stored internally as an `addressBookStateList` and `currentStatePointer`. Additionally, it implements the following operations:","lastModifiedDate":"2020-05-23"},{"lineNumber":166,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":167,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#commit()` — Saves the current address book state in its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":168,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#undo()` — Restores the previous address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":169,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#redo()` — Restores a previously undone address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":170,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":171,"author":{"gitId":"-"},"content":"These operations are exposed in the `Model` interface as `Model#commitAddressBook()`, `Model#undoAddressBook()` and `Model#redoAddressBook()` respectively.","lastModifiedDate":"2020-05-23"},{"lineNumber":172,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":173,"author":{"gitId":"-"},"content":"Given below is an example usage scenario and how the undo/redo mechanism behaves at each step.","lastModifiedDate":"2020-05-23"},{"lineNumber":174,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":175,"author":{"gitId":"-"},"content":"Step 1. The user launches the application for the first time. The `VersionedAddressBook` will be initialized with the initial address book state, and the `currentStatePointer` pointing to that single address book state.","lastModifiedDate":"2020-05-23"},{"lineNumber":176,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":177,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState0.puml\" alt\u003d\"UndoRedoState0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":178,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":179,"author":{"gitId":"-"},"content":"Step 2. The user executes `delete 5` command to delete the 5th person in the address book. The `delete` command calls `Model#commitAddressBook()`, causing the modified state of the address book after the `delete 5` command executes to be saved in the `addressBookStateList`, and the `currentStatePointer` is shifted to the newly inserted address book state.","lastModifiedDate":"2020-05-23"},{"lineNumber":180,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":181,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState1.puml\" alt\u003d\"UndoRedoState1\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":182,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":183,"author":{"gitId":"-"},"content":"Step 3. The user executes `add n/David …​` to add a new person. The `add` command also calls `Model#commitAddressBook()`, causing another modified address book state to be saved into the `addressBookStateList`.","lastModifiedDate":"2020-05-23"},{"lineNumber":184,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":185,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState2.puml\" alt\u003d\"UndoRedoState2\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":186,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":187,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":188,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":189,"author":{"gitId":"-"},"content":"**Note:** If a command fails its execution, it will not call `Model#commitAddressBook()`, so the address book state will not be saved into the `addressBookStateList`.","lastModifiedDate":"2023-09-12"},{"lineNumber":190,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":191,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":192,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":193,"author":{"gitId":"-"},"content":"Step 4. The user now decides that adding the person was a mistake, and decides to undo that action by executing the `undo` command. The `undo` command will call `Model#undoAddressBook()`, which will shift the `currentStatePointer` once to the left, pointing it to the previous address book state, and restores the address book to that state.","lastModifiedDate":"2020-05-23"},{"lineNumber":194,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":195,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState3.puml\" alt\u003d\"UndoRedoState3\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":196,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":197,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":198,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":199,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":200,"author":{"gitId":"-"},"content":"**Note:** If the `currentStatePointer` is at index 0, pointing to the initial AddressBook state, then there are no previous AddressBook states to restore. The `undo` command uses `Model#canUndoAddressBook()` to check if this is the case. If so, it will return an error to the user rather","lastModifiedDate":"2023-09-12"},{"lineNumber":201,"author":{"gitId":"-"},"content":"than attempting to perform the undo.","lastModifiedDate":"2020-05-23"},{"lineNumber":202,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":203,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":204,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":205,"author":{"gitId":"-"},"content":"The following sequence diagram shows how an undo operation goes through the `Logic` component:","lastModifiedDate":"2024-02-09"},{"lineNumber":206,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":207,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoSequenceDiagram-Logic.puml\" alt\u003d\"UndoSequenceDiagram-Logic\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":208,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":209,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":210,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":211,"author":{"gitId":"-"},"content":"**Note:** The lifeline for `UndoCommand` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram.","lastModifiedDate":"2023-09-12"},{"lineNumber":212,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":213,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":214,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":215,"author":{"gitId":"-"},"content":"Similarly, how an undo operation goes through the `Model` component is shown below:","lastModifiedDate":"2024-02-09"},{"lineNumber":216,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":217,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoSequenceDiagram-Model.puml\" alt\u003d\"UndoSequenceDiagram-Model\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":218,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":219,"author":{"gitId":"-"},"content":"The `redo` command does the opposite — it calls `Model#redoAddressBook()`, which shifts the `currentStatePointer` once to the right, pointing to the previously undone state, and restores the address book to that state.","lastModifiedDate":"2020-05-23"},{"lineNumber":220,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":221,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":222,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":223,"author":{"gitId":"-"},"content":"**Note:** If the `currentStatePointer` is at index `addressBookStateList.size() - 1`, pointing to the latest address book state, then there are no undone AddressBook states to restore. The `redo` command uses `Model#canRedoAddressBook()` to check if this is the case. If so, it will return an error to the user rather than attempting to perform the redo.","lastModifiedDate":"2023-09-12"},{"lineNumber":224,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":225,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":226,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":227,"author":{"gitId":"-"},"content":"Step 5. The user then decides to execute the command `list`. Commands that do not modify the address book, such as `list`, will usually not call `Model#commitAddressBook()`, `Model#undoAddressBook()` or `Model#redoAddressBook()`. Thus, the `addressBookStateList` remains unchanged.","lastModifiedDate":"2020-05-23"},{"lineNumber":228,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":229,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState4.puml\" alt\u003d\"UndoRedoState4\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":230,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":231,"author":{"gitId":"-"},"content":"Step 6. The user executes `clear`, which calls `Model#commitAddressBook()`. Since the `currentStatePointer` is not pointing at the end of the `addressBookStateList`, all address book states after the `currentStatePointer` will be purged. Reason: It no longer makes sense to redo the `add n/David …​` command. This is the behavior that most modern desktop applications follow.","lastModifiedDate":"2020-05-23"},{"lineNumber":232,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":233,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState5.puml\" alt\u003d\"UndoRedoState5\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":234,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":235,"author":{"gitId":"-"},"content":"The following activity diagram summarizes what happens when a user executes a new command:","lastModifiedDate":"2020-05-23"},{"lineNumber":236,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":237,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/CommitActivityDiagram.puml\" width\u003d\"250\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":238,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":239,"author":{"gitId":"-"},"content":"#### Design considerations:","lastModifiedDate":"2021-07-31"},{"lineNumber":240,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":241,"author":{"gitId":"-"},"content":"**Aspect: How undo \u0026 redo executes:**","lastModifiedDate":"2021-07-31"},{"lineNumber":242,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":243,"author":{"gitId":"-"},"content":"* **Alternative 1 (current choice):** Saves the entire address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":244,"author":{"gitId":"-"},"content":" * Pros: Easy to implement.","lastModifiedDate":"2020-05-23"},{"lineNumber":245,"author":{"gitId":"-"},"content":" * Cons: May have performance issues in terms of memory usage.","lastModifiedDate":"2020-05-23"},{"lineNumber":246,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":247,"author":{"gitId":"-"},"content":"* **Alternative 2:** Individual command knows how to undo/redo by","lastModifiedDate":"2020-05-23"},{"lineNumber":248,"author":{"gitId":"-"},"content":" itself.","lastModifiedDate":"2020-05-23"},{"lineNumber":249,"author":{"gitId":"-"},"content":" * Pros: Will use less memory (e.g. for `delete`, just save the person being deleted).","lastModifiedDate":"2020-05-23"},{"lineNumber":250,"author":{"gitId":"-"},"content":" * Cons: We must ensure that the implementation of each individual command are correct.","lastModifiedDate":"2020-05-23"},{"lineNumber":251,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":252,"author":{"gitId":"-"},"content":"_{more aspects and alternatives to be added}_","lastModifiedDate":"2020-05-23"},{"lineNumber":253,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":254,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Data archiving","lastModifiedDate":"2020-05-23"},{"lineNumber":255,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":256,"author":{"gitId":"-"},"content":"_{Explain here how the data archiving feature will be implemented}_","lastModifiedDate":"2020-05-23"},{"lineNumber":257,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":258,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":259,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":260,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":261,"author":{"gitId":"-"},"content":"## **Documentation, logging, testing, configuration, dev-ops**","lastModifiedDate":"2020-06-07"},{"lineNumber":262,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":263,"author":{"gitId":"-"},"content":"* [Documentation guide](Documentation.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":264,"author":{"gitId":"-"},"content":"* [Testing guide](Testing.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":265,"author":{"gitId":"-"},"content":"* [Logging guide](Logging.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":266,"author":{"gitId":"-"},"content":"* [Configuration guide](Configuration.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":267,"author":{"gitId":"-"},"content":"* [DevOps guide](DevOps.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":268,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":269,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":270,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":271,"author":{"gitId":"-"},"content":"## **Appendix: Requirements**","lastModifiedDate":"2020-05-23"},{"lineNumber":272,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":273,"author":{"gitId":"-"},"content":"### Product scope","lastModifiedDate":"2020-05-23"},{"lineNumber":274,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":275,"author":{"gitId":"-"},"content":"**Target user profile**:","lastModifiedDate":"2020-05-23"},{"lineNumber":276,"author":{"gitId":"Jerome-j"},"content":"* Staff at SoC Center for Future Graduates (CFG)","lastModifiedDate":"2024-03-05"},{"lineNumber":277,"author":{"gitId":"Jerome-j"},"content":"* has a need to manage a significant number of contacts due to the large number of students requiring counselling services","lastModifiedDate":"2024-03-05"},{"lineNumber":278,"author":{"gitId":"-"},"content":"* prefer desktop apps over other types","lastModifiedDate":"2020-05-23"},{"lineNumber":279,"author":{"gitId":"-"},"content":"* can type fast","lastModifiedDate":"2020-05-23"},{"lineNumber":280,"author":{"gitId":"-"},"content":"* prefers typing to mouse interactions","lastModifiedDate":"2020-05-26"},{"lineNumber":281,"author":{"gitId":"-"},"content":"* is reasonably comfortable using CLI apps","lastModifiedDate":"2020-05-23"},{"lineNumber":282,"author":{"gitId":"Jerome-j"},"content":"* only a single user","lastModifiedDate":"2024-03-05"},{"lineNumber":283,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":284,"author":{"gitId":"Jerome-j"},"content":"**Value proposition**: Manage students that are being counselled by him faster than a typical mouse/GUI application.","lastModifiedDate":"2024-03-05"},{"lineNumber":285,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":286,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":287,"author":{"gitId":"-"},"content":"### User stories","lastModifiedDate":"2020-06-07"},{"lineNumber":288,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":289,"author":{"gitId":"Jerome-j"},"content":"Priorities: High (must have) - `* * * *`, Medium (nice to have) - `* * *`, Low (unlikely to have) - `* *`, Not essential (implement only if got time) - ` * `","lastModifiedDate":"2024-03-05"},{"lineNumber":290,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":291,"author":{"gitId":"-"},"content":"| Priority | As a …​ | I want to …​ | So that I can…​ |","lastModifiedDate":"2020-05-23"},{"lineNumber":292,"author":{"gitId":"vnnamng"},"content":"|-----------|------------------|-----------------------------------------------------------|------------------------------------------------------------------------------------------------------------|","lastModifiedDate":"2024-03-07"},{"lineNumber":293,"author":{"gitId":"Jerome-j"},"content":"| `* * * *` | Counsellor | create new patients | store their data for future sessions. |","lastModifiedDate":"2024-03-05"},{"lineNumber":294,"author":{"gitId":"Jerome-j"},"content":"| `* * * *` | Counsellor | view patient data | view their contact information and contact them. |","lastModifiedDate":"2024-03-05"},{"lineNumber":295,"author":{"gitId":"Jerome-j"},"content":"| `* * * *` | Counsellor | delete patient data at a given index | discharge the patient. |","lastModifiedDate":"2024-03-05"},{"lineNumber":296,"author":{"gitId":"Jerome-j"},"content":"| `* * * *` | Counsellor | search for a patient | quickly access and review patient status. |","lastModifiedDate":"2024-03-05"},{"lineNumber":297,"author":{"gitId":"Jerome-j"},"content":"| `* * * *` | Counsellor | list patient at the given index | quickly access patients that come regularly. |","lastModifiedDate":"2024-03-05"},{"lineNumber":298,"author":{"gitId":"caitlyntang"},"content":"| `* * * *` | Counsellor | schedule appointments | avoid scheduling overlapping appointments with other patients. |","lastModifiedDate":"2024-03-07"},{"lineNumber":299,"author":{"gitId":"caitlyntang"},"content":"| `* * * *` | Counsellor | delete an appointment for a specific patient | appointments can be changed in cases of cancellation. |","lastModifiedDate":"2024-03-07"},{"lineNumber":300,"author":{"gitId":"caitlyntang"},"content":"| `* * * *` | Counsellor | view one appointment for a specified patient | quickly find and review the appointment notes. |","lastModifiedDate":"2024-03-07"},{"lineNumber":301,"author":{"gitId":"tankh99"},"content":"| `* * * *` | Counsellor | view all appointments for a specified patient | quickly view all appointments related to a student without having to remember the appointment ID or dates. |","lastModifiedDate":"2024-03-07"},{"lineNumber":302,"author":{"gitId":"vnnamng"},"content":"| `* * * *` | Counsellor | view patient case logs | understand where I left off with the patient last time. |","lastModifiedDate":"2024-03-07"},{"lineNumber":303,"author":{"gitId":"vnnamng"},"content":"| `* * * *` | Counsellor | create patient logs | note down what I went through with the patient during the session. |","lastModifiedDate":"2024-03-07"},{"lineNumber":304,"author":{"gitId":"vnnamng"},"content":"| `* * * *` | Counsellor | update counselling sessions | fix mistakes for a prior counselling session. |","lastModifiedDate":"2024-03-07"},{"lineNumber":305,"author":{"gitId":"Jerome-j"},"content":"| `* * *` | Counsellor | to categorise / tag my patients | patients with more serious issues can be attended to first. |","lastModifiedDate":"2024-03-05"},{"lineNumber":306,"author":{"gitId":"caitlyntang"},"content":"| `* * * ` | Counsellor | know how many patients I am seeing in a week | better manage my own time and emotions. |","lastModifiedDate":"2024-03-07"},{"lineNumber":307,"author":{"gitId":"tankh99"},"content":"| `* * *` | Counsellor | know what mistakes I make when creating patients | easily understand how to rectify my mistakes |","lastModifiedDate":"2024-03-07"},{"lineNumber":308,"author":{"gitId":"tankh99"},"content":"| `* * *` | Counsellor | know know what mistakes I make when creating appointments | easily understand how to rectify my mistakes |","lastModifiedDate":"2024-03-07"},{"lineNumber":309,"author":{"gitId":"caitlyntang"},"content":"| `* * *` | Counsellor | be able to mark whether a patient attended a session | properly document patients’ attendance |","lastModifiedDate":"2024-03-07"},{"lineNumber":310,"author":{"gitId":"Jerome-j"},"content":"| `* * *` | New User | have a help function | so that I know how to use the application. |","lastModifiedDate":"2024-03-05"},{"lineNumber":311,"author":{"gitId":"Jerome-j"},"content":"| `* *` | Counsellor | sort patients based on their priority tag | more serious patients can be attended first. |","lastModifiedDate":"2024-03-05"},{"lineNumber":312,"author":{"gitId":"tankh99"},"content":"| `* *` | Experienced User | navigate through my history of written commands | avoid retyping a command just to make minor modifications to a previous command. |","lastModifiedDate":"2024-03-07"},{"lineNumber":313,"author":{"gitId":"tankh99"},"content":"| `*` | Experienced User | mass delete patient data | patient data is not compromised. |","lastModifiedDate":"2024-03-07"},{"lineNumber":314,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":315,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":316,"author":{"gitId":"-"},"content":"### Use cases","lastModifiedDate":"2020-06-07"},{"lineNumber":317,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":318,"author":{"gitId":"Jerome-j"},"content":"(For all use cases below, the **System** is the `CogniCare` application and the **Actor** is the `user`, unless specified otherwise)","lastModifiedDate":"2024-03-05"},{"lineNumber":319,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":320,"author":{"gitId":"Jerome-j"},"content":"**Use case: Search a student**","lastModifiedDate":"2024-03-05"},{"lineNumber":321,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":322,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2020-05-23"},{"lineNumber":323,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":324,"author":{"gitId":"Jerome-j"},"content":"1. User requests to list persons using the specified constraints","lastModifiedDate":"2024-03-05"},{"lineNumber":325,"author":{"gitId":"Jerome-j"},"content":"2. CogniCare shows a list of persons that meets the criteria","lastModifiedDate":"2024-03-05"},{"lineNumber":326,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":327,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":328,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":329,"author":{"gitId":"-"},"content":"**Extensions**","lastModifiedDate":"2020-05-23"},{"lineNumber":330,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":331,"author":{"gitId":"Jerome-j"},"content":"* 1a. The query has missing parameters","lastModifiedDate":"2024-03-05"},{"lineNumber":332,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":333,"author":{"gitId":"Jerome-j"},"content":" * 1a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-05"},{"lineNumber":334,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":335,"author":{"gitId":"Jerome-j"},"content":" * 1a2. CogniCare returns all information about a patient.","lastModifiedDate":"2024-03-05"},{"lineNumber":336,"author":{"gitId":"Jerome-j"},"content":" ","lastModifiedDate":"2024-03-05"},{"lineNumber":337,"author":{"gitId":"Jerome-j"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":338,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":339,"author":{"gitId":"-"},"content":"* 2a. The list is empty.","lastModifiedDate":"2020-05-23"},{"lineNumber":340,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":341,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":342,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":343,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":344,"author":{"gitId":"Jerome-j"},"content":"**Use case: Delete a student**","lastModifiedDate":"2024-03-05"},{"lineNumber":345,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":346,"author":{"gitId":"Jerome-j"},"content":"**MSS**","lastModifiedDate":"2024-03-05"},{"lineNumber":347,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":348,"author":{"gitId":"Jerome-j"},"content":"1. User requests to delete a patient at the given index.","lastModifiedDate":"2024-03-05"},{"lineNumber":349,"author":{"gitId":"Jerome-j"},"content":"2. CogniCare displays the patient information prior to deletion, and confirms with the user prior to deletion.","lastModifiedDate":"2024-03-05"},{"lineNumber":350,"author":{"gitId":"Jerome-j"},"content":"3. CogniCare deletes the patient.","lastModifiedDate":"2024-03-05"},{"lineNumber":351,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":352,"author":{"gitId":"Jerome-j"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":353,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":354,"author":{"gitId":"Jerome-j"},"content":"**Extensions**","lastModifiedDate":"2024-03-05"},{"lineNumber":355,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":356,"author":{"gitId":"Jerome-j"},"content":"* 1a. The query has missing parameters","lastModifiedDate":"2024-03-05"},{"lineNumber":357,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":358,"author":{"gitId":"Jerome-j"},"content":" * 1a1. CogniCare shows an error message that the index is invalid.","lastModifiedDate":"2024-03-05"},{"lineNumber":359,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":360,"author":{"gitId":"Jerome-j"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":361,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":362,"author":{"gitId":"Jerome-j"},"content":"* 2a. User does not want to delete.","lastModifiedDate":"2024-03-05"},{"lineNumber":363,"author":{"gitId":"caitlyntang"},"content":" * 2a1. CogniCare shows an error message that the user cancelled the delete operation.","lastModifiedDate":"2024-03-07"},{"lineNumber":364,"author":{"gitId":"Jerome-j"},"content":" ","lastModifiedDate":"2024-03-05"},{"lineNumber":365,"author":{"gitId":"Jerome-j"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":366,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":367,"author":{"gitId":"caitlyntang"},"content":"**Use case: Search for an appointment of a specific student**","lastModifiedDate":"2024-03-07"},{"lineNumber":368,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":369,"author":{"gitId":"caitlyntang"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":370,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":371,"author":{"gitId":"caitlyntang"},"content":"1. User searches for specific student.","lastModifiedDate":"2024-03-07"},{"lineNumber":372,"author":{"gitId":"caitlyntang"},"content":"2. CogniCare shows a list of students that meet the criteria.","lastModifiedDate":"2024-03-07"},{"lineNumber":373,"author":{"gitId":"caitlyntang"},"content":"3. User requests to list all appointments at the given the student index.","lastModifiedDate":"2024-03-07"},{"lineNumber":374,"author":{"gitId":"caitlyntang"},"content":"4. CogniCare shows a list of appointments that meet the criteria.","lastModifiedDate":"2024-03-07"},{"lineNumber":375,"author":{"gitId":"caitlyntang"},"content":"5. User requests to find an appointment at the given student and appointment.","lastModifiedDate":"2024-03-07"},{"lineNumber":376,"author":{"gitId":"caitlyntang"},"content":"6. CogniCare shows the appointment that meets the criteria.","lastModifiedDate":"2024-03-07"},{"lineNumber":377,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":378,"author":{"gitId":"caitlyntang"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":379,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":380,"author":{"gitId":"caitlyntang"},"content":"**Extensions**","lastModifiedDate":"2024-03-07"},{"lineNumber":381,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":382,"author":{"gitId":"caitlyntang"},"content":"* 1a. The query has missing parameters","lastModifiedDate":"2024-03-07"},{"lineNumber":383,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":384,"author":{"gitId":"caitlyntang"},"content":" * 1a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":385,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":386,"author":{"gitId":"caitlyntang"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":387,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":388,"author":{"gitId":"caitlyntang"},"content":"* 2a. The list of students is empty.","lastModifiedDate":"2024-03-07"},{"lineNumber":389,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":390,"author":{"gitId":"caitlyntang"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":391,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":392,"author":{"gitId":"caitlyntang"},"content":"* 3a. The query has missing parameters","lastModifiedDate":"2024-03-07"},{"lineNumber":393,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":394,"author":{"gitId":"caitlyntang"},"content":" * 3a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":395,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":396,"author":{"gitId":"caitlyntang"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":397,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":398,"author":{"gitId":"caitlyntang"},"content":"* 4a. The list of appointments is empty.","lastModifiedDate":"2024-03-07"},{"lineNumber":399,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":400,"author":{"gitId":"caitlyntang"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":401,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":402,"author":{"gitId":"caitlyntang"},"content":"* 5a. The query has missing parameters","lastModifiedDate":"2024-03-07"},{"lineNumber":403,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":404,"author":{"gitId":"caitlyntang"},"content":" * 5a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":405,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":406,"author":{"gitId":"caitlyntang"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":407,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":408,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":409,"author":{"gitId":"caitlyntang"},"content":"**Use case: Delete an appointment for a specific student**","lastModifiedDate":"2024-03-07"},{"lineNumber":410,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":411,"author":{"gitId":"caitlyntang"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":412,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":413,"author":{"gitId":"caitlyntang"},"content":"1. User requests to delete an appointment at the given student and appointment index. ","lastModifiedDate":"2024-03-07"},{"lineNumber":414,"author":{"gitId":"caitlyntang"},"content":"2. CogniCare displays the appointment information prior to deletion, and confirms with the user prior to deletion.","lastModifiedDate":"2024-03-07"},{"lineNumber":415,"author":{"gitId":"caitlyntang"},"content":"3. CogniCare deletes the appointment.","lastModifiedDate":"2024-03-07"},{"lineNumber":416,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":417,"author":{"gitId":"caitlyntang"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":418,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":419,"author":{"gitId":"caitlyntang"},"content":"**Extensions**","lastModifiedDate":"2024-03-07"},{"lineNumber":420,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":421,"author":{"gitId":"caitlyntang"},"content":"* 1a. The query has missing parameters","lastModifiedDate":"2024-03-07"},{"lineNumber":422,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":423,"author":{"gitId":"caitlyntang"},"content":" * 1a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":424,"author":{"gitId":"caitlyntang"},"content":" ","lastModifiedDate":"2024-03-07"},{"lineNumber":425,"author":{"gitId":"caitlyntang"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":426,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":427,"author":{"gitId":"caitlyntang"},"content":"* 2a. User does not want to delete.","lastModifiedDate":"2024-03-07"},{"lineNumber":428,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":429,"author":{"gitId":"caitlyntang"},"content":" * 2a1. CogniCare shows an error message that the user cancelled the delete operation.","lastModifiedDate":"2024-03-07"},{"lineNumber":430,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":431,"author":{"gitId":"caitlyntang"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":432,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":433,"author":{"gitId":"vnnamng"},"content":"**Use case: View one case log of an appointment of a specific student**","lastModifiedDate":"2024-03-07"},{"lineNumber":434,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":435,"author":{"gitId":"vnnamng"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":436,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":437,"author":{"gitId":"vnnamng"},"content":"1. User searches for specific student.","lastModifiedDate":"2024-03-07"},{"lineNumber":438,"author":{"gitId":"vnnamng"},"content":"2. CogniCare shows a list of students that meet the criteria.","lastModifiedDate":"2024-03-07"},{"lineNumber":439,"author":{"gitId":"vnnamng"},"content":"3. User requests to list all appointments at the given the student index.","lastModifiedDate":"2024-03-07"},{"lineNumber":440,"author":{"gitId":"vnnamng"},"content":"4. CogniCare shows a list of appointments that meet the criteria.","lastModifiedDate":"2024-03-07"},{"lineNumber":441,"author":{"gitId":"vnnamng"},"content":"5. User requests to find the case log of the appointment at the given student and appointment.","lastModifiedDate":"2024-03-07"},{"lineNumber":442,"author":{"gitId":"vnnamng"},"content":"6. CogniCare shows the case log that meets the criteria.","lastModifiedDate":"2024-03-07"},{"lineNumber":443,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":444,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":445,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":446,"author":{"gitId":"vnnamng"},"content":"**Extensions**","lastModifiedDate":"2024-03-07"},{"lineNumber":447,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":448,"author":{"gitId":"vnnamng"},"content":"* 1a. The query has missing parameters","lastModifiedDate":"2024-03-07"},{"lineNumber":449,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":450,"author":{"gitId":"vnnamng"},"content":" * 1a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":451,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":452,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":453,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":454,"author":{"gitId":"vnnamng"},"content":"* 2a. The list of students is empty.","lastModifiedDate":"2024-03-07"},{"lineNumber":455,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":456,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":457,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":458,"author":{"gitId":"vnnamng"},"content":"* 3a. The query has missing parameters","lastModifiedDate":"2024-03-07"},{"lineNumber":459,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":460,"author":{"gitId":"vnnamng"},"content":" * 3a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":461,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":462,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":463,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":464,"author":{"gitId":"vnnamng"},"content":"* 4a. The list of appointments is empty.","lastModifiedDate":"2024-03-07"},{"lineNumber":465,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":466,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":467,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":468,"author":{"gitId":"vnnamng"},"content":"* 5a. The query has missing/out of bound parameters","lastModifiedDate":"2024-03-07"},{"lineNumber":469,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":470,"author":{"gitId":"vnnamng"},"content":" * 5a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":471,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":472,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":473,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":474,"author":{"gitId":"vnnamng"},"content":"* 6a. There is no case log for such appointment","lastModifiedDate":"2024-03-07"},{"lineNumber":475,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":476,"author":{"gitId":"vnnamng"},"content":" * 6a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":477,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":478,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":479,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":480,"author":{"gitId":"vnnamng"},"content":"**Use case: View many case logs of a specific student**","lastModifiedDate":"2024-03-07"},{"lineNumber":481,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":482,"author":{"gitId":"vnnamng"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":483,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":484,"author":{"gitId":"vnnamng"},"content":"1. User searches for specific student.","lastModifiedDate":"2024-03-07"},{"lineNumber":485,"author":{"gitId":"vnnamng"},"content":"2. CogniCare shows a list of students that meet the criteria.","lastModifiedDate":"2024-03-07"},{"lineNumber":486,"author":{"gitId":"vnnamng"},"content":"3. User requests to see all appointments\u0027 case log at the given the student index.","lastModifiedDate":"2024-03-07"},{"lineNumber":487,"author":{"gitId":"vnnamng"},"content":"4. CogniCare shows a list of all appointments\u0027 case log that meet the criteria.","lastModifiedDate":"2024-03-07"},{"lineNumber":488,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":489,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":490,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":491,"author":{"gitId":"vnnamng"},"content":"**Extensions**","lastModifiedDate":"2024-03-07"},{"lineNumber":492,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":493,"author":{"gitId":"vnnamng"},"content":"* 1a. The query has missing parameters","lastModifiedDate":"2024-03-07"},{"lineNumber":494,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":495,"author":{"gitId":"vnnamng"},"content":" * 1a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":496,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":497,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":498,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":499,"author":{"gitId":"vnnamng"},"content":"* 2a. The list of students is empty.","lastModifiedDate":"2024-03-07"},{"lineNumber":500,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":501,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":502,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":503,"author":{"gitId":"vnnamng"},"content":"* 3a. The query has missing parameters","lastModifiedDate":"2024-03-07"},{"lineNumber":504,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":505,"author":{"gitId":"vnnamng"},"content":" * 3a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":506,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":507,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":508,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":509,"author":{"gitId":"vnnamng"},"content":"* 4a. The list of appointments is empty.","lastModifiedDate":"2024-03-07"},{"lineNumber":510,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":511,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":512,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":513,"author":{"gitId":"vnnamng"},"content":"**Use case: Edit one case log of an appointment of a specific student**","lastModifiedDate":"2024-03-07"},{"lineNumber":514,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":515,"author":{"gitId":"vnnamng"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":516,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":517,"author":{"gitId":"vnnamng"},"content":"1. User searches for specific student.","lastModifiedDate":"2024-03-07"},{"lineNumber":518,"author":{"gitId":"vnnamng"},"content":"2. CogniCare shows a list of students that meet the criteria.","lastModifiedDate":"2024-03-07"},{"lineNumber":519,"author":{"gitId":"vnnamng"},"content":"3. User requests to see all appointments\u0027 case log at the given the student index.","lastModifiedDate":"2024-03-07"},{"lineNumber":520,"author":{"gitId":"vnnamng"},"content":"4. CogniCare shows a list of all appointments\u0027 case log that meet the criteria.","lastModifiedDate":"2024-03-07"},{"lineNumber":521,"author":{"gitId":"vnnamng"},"content":"5. User requests to edit the case log of the appointment at the given student and appointment.","lastModifiedDate":"2024-03-07"},{"lineNumber":522,"author":{"gitId":"vnnamng"},"content":"6. CogniCare edits the case log for the specified appointment and student.","lastModifiedDate":"2024-03-07"},{"lineNumber":523,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":524,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":525,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":526,"author":{"gitId":"vnnamng"},"content":"**Extensions**","lastModifiedDate":"2024-03-07"},{"lineNumber":527,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":528,"author":{"gitId":"vnnamng"},"content":"* 1a. The query has missing parameters","lastModifiedDate":"2024-03-07"},{"lineNumber":529,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":530,"author":{"gitId":"vnnamng"},"content":" * 1a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":531,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":532,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":533,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":534,"author":{"gitId":"vnnamng"},"content":"* 2a. The list of students is empty.","lastModifiedDate":"2024-03-07"},{"lineNumber":535,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":536,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":537,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":538,"author":{"gitId":"vnnamng"},"content":"* 3a. The query has missing parameters","lastModifiedDate":"2024-03-07"},{"lineNumber":539,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":540,"author":{"gitId":"vnnamng"},"content":" * 3a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":541,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":542,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":543,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":544,"author":{"gitId":"vnnamng"},"content":"* 4a. The list of appointments is empty.","lastModifiedDate":"2024-03-07"},{"lineNumber":545,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":546,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":547,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":548,"author":{"gitId":"vnnamng"},"content":"* 5a. The query has missing/out of bound parameters","lastModifiedDate":"2024-03-07"},{"lineNumber":549,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":550,"author":{"gitId":"vnnamng"},"content":" * 5a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":551,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":552,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":553,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":554,"author":{"gitId":"vnnamng"},"content":"**Use case: Create one case log of a appointment of a specific student**","lastModifiedDate":"2024-03-07"},{"lineNumber":555,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":556,"author":{"gitId":"vnnamng"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":557,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":558,"author":{"gitId":"vnnamng"},"content":"1. User searches for specific student.","lastModifiedDate":"2024-03-07"},{"lineNumber":559,"author":{"gitId":"vnnamng"},"content":"2. CogniCare shows a list of students that meet the criteria.","lastModifiedDate":"2024-03-07"},{"lineNumber":560,"author":{"gitId":"vnnamng"},"content":"3. User requests to list all appointments at the given the student index.","lastModifiedDate":"2024-03-07"},{"lineNumber":561,"author":{"gitId":"vnnamng"},"content":"4. CogniCare shows a list of appointments that meet the criteria.","lastModifiedDate":"2024-03-07"},{"lineNumber":562,"author":{"gitId":"vnnamng"},"content":"5. User requests to create the case log of the appointment at the given student and appointment.","lastModifiedDate":"2024-03-07"},{"lineNumber":563,"author":{"gitId":"vnnamng"},"content":"6. CogniCare create the case log for the specified appointment and student.","lastModifiedDate":"2024-03-07"},{"lineNumber":564,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":565,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":566,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":567,"author":{"gitId":"vnnamng"},"content":"**Extensions**","lastModifiedDate":"2024-03-07"},{"lineNumber":568,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":569,"author":{"gitId":"vnnamng"},"content":"* 1a. The query has missing parameters","lastModifiedDate":"2024-03-07"},{"lineNumber":570,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":571,"author":{"gitId":"vnnamng"},"content":" * 1a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":572,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":573,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":574,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":575,"author":{"gitId":"vnnamng"},"content":"* 2a. The list of students is empty.","lastModifiedDate":"2024-03-07"},{"lineNumber":576,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":577,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":578,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":579,"author":{"gitId":"vnnamng"},"content":"* 3a. The query has missing parameters","lastModifiedDate":"2024-03-07"},{"lineNumber":580,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":581,"author":{"gitId":"vnnamng"},"content":" * 3a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":582,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":583,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":584,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":585,"author":{"gitId":"vnnamng"},"content":"* 4a. The list of appointments is empty.","lastModifiedDate":"2024-03-07"},{"lineNumber":586,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":587,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":588,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":589,"author":{"gitId":"vnnamng"},"content":"* 5a. The query has missing/out of bound parameters","lastModifiedDate":"2024-03-07"},{"lineNumber":590,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":591,"author":{"gitId":"vnnamng"},"content":" * 5a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":592,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":593,"author":{"gitId":"vnnamng"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":594,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":595,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":596,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":597,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":598,"author":{"gitId":"-"},"content":"1. Should work on any _mainstream OS_ as long as it has Java `11` or above installed.","lastModifiedDate":"2020-05-23"},{"lineNumber":599,"author":{"gitId":"-"},"content":"2. Should be able to hold up to 1000 persons without a noticeable sluggishness in performance for typical usage.","lastModifiedDate":"2020-05-23"},{"lineNumber":600,"author":{"gitId":"-"},"content":"3. A user with above average typing speed for regular English text (i.e. not code, not system admin commands) should be able to accomplish most of the tasks faster using commands than using the mouse.","lastModifiedDate":"2020-05-23"},{"lineNumber":601,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":602,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":603,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":604,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":605,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":606,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":607,"author":{"gitId":"Jerome-j"},"content":"* **Mainstream OS**: Windows, Linux, Unix, macOS","lastModifiedDate":"2024-03-05"},{"lineNumber":608,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":609,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":610,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":611,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":612,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":613,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":614,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":615,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":616,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":617,"author":{"gitId":"-"},"content":"**Note:** These instructions only provide a starting point for testers to work on;","lastModifiedDate":"2023-09-12"},{"lineNumber":618,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":619,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":620,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":621,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":622,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":623,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":624,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":625,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":626,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":627,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":628,"author":{"gitId":"-"},"content":" 1. Double-click the jar file Expected: Shows the GUI with a set of sample contacts. The window size may not be optimum.","lastModifiedDate":"2020-05-23"},{"lineNumber":629,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":630,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":631,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":632,"author":{"gitId":"-"},"content":" 1. Resize the window to an optimum size. Move the window to a different location. Close the window.","lastModifiedDate":"2020-05-23"},{"lineNumber":633,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":634,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":635,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","lastModifiedDate":"2020-05-23"},{"lineNumber":636,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":637,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":638,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":639,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":640,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":641,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":642,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":643,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":644,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":645,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":646,"author":{"gitId":"-"},"content":" Expected: First contact is deleted from the list. Details of the deleted contact shown in the status message. Timestamp in the status bar is updated.","lastModifiedDate":"2020-05-23"},{"lineNumber":647,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":648,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":649,"author":{"gitId":"-"},"content":" Expected: No person is deleted. Error details shown in the status message. Status bar remains the same.","lastModifiedDate":"2020-05-23"},{"lineNumber":650,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":651,"author":{"gitId":"-"},"content":" 1. Other incorrect delete commands to try: `delete`, `delete x`, `...` (where x is larger than the list size)\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":652,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":653,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":654,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":655,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":656,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":657,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":658,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":659,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":660,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":661,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":662,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"caitlyntang":73,"Jerome-j":47,"tankh99":5,"vnnamng":165,"-":372}},{"path":"docs/index.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"Jerome-j"},"content":"# CogniCare","lastModifiedDate":"2024-03-01"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"tankh99"},"content":"[![CI Status](https://github.com/AY2324S2-CS2103-F08-2/tp/workflows/Java%20CI/badge.svg)](https://github.com/AY2324S2-CS2103-F08-2/tp/actions)","lastModifiedDate":"2024-03-06"},{"lineNumber":9,"author":{"gitId":"tankh99"},"content":"[![codecov](https://codecov.io/gh/nus-cs2103-AY2324S2/tp/graph/badge.svg?token\u003dPBBJNYE8U5)](https://codecov.io/gh/nus-cs2103-AY2324S2/tp)","lastModifiedDate":"2024-03-05"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":11,"author":{"gitId":"-"},"content":"![Ui](images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":13,"author":{"gitId":"Jerome-j"},"content":"**CogniCare is a desktop application for managing all the students that you are currently handling.** While it has a GUI, most of the user interactions happen using a CLI (Command Line Interface).","lastModifiedDate":"2024-03-01"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":15,"author":{"gitId":"Jerome-j"},"content":"* If you are interested in using CogniCare, head over to the [_Quick Start_ section of the **User Guide**](UserGuide.html#quick-start).","lastModifiedDate":"2024-03-01"},{"lineNumber":16,"author":{"gitId":"Jerome-j"},"content":"* If you are interested about developing CogniCare, the [**Developer Guide**](DeveloperGuide.html) is a good place to start.","lastModifiedDate":"2024-03-01"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"**Acknowledgements**","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"* Libraries used: [JavaFX](https://openjfx.io/), [Jackson](https://github.com/FasterXML/jackson), [JUnit5](https://github.com/junit-team/junit5)","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"Jerome-j"},"content":"* This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-03-01"},{"lineNumber":23,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-01"}],"authorContributionMap":{"Jerome-j":6,"tankh99":2,"-":15}},{"path":"docs/team/caitlyntang.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"caitlyntang"},"content":"---","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"caitlyntang"},"content":" layout: default.md","lastModifiedDate":"2024-03-04"},{"lineNumber":3,"author":{"gitId":"caitlyntang"},"content":" title: \"Caitlyn\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-04"},{"lineNumber":4,"author":{"gitId":"caitlyntang"},"content":"---","lastModifiedDate":"2024-03-04"},{"lineNumber":5,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":6,"author":{"gitId":"caitlyntang"},"content":"### Caitlyn\u0027s Project Portfolio Page","lastModifiedDate":"2024-03-04"},{"lineNumber":7,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"caitlyntang"},"content":"AddressBook - Level 3 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.","lastModifiedDate":"2024-03-04"},{"lineNumber":9,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":10,"author":{"gitId":"caitlyntang"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-03-04"},{"lineNumber":11,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":12,"author":{"gitId":"caitlyntang"},"content":"* **New Feature**: Added the ability to undo/redo previous commands.","lastModifiedDate":"2024-03-04"},{"lineNumber":13,"author":{"gitId":"caitlyntang"},"content":" * What it does: allows the user to undo all previous commands one at a time. Preceding undo commands can be reversed by using the redo command.","lastModifiedDate":"2024-03-04"},{"lineNumber":14,"author":{"gitId":"caitlyntang"},"content":" * Justification: This feature improves the product significantly because a user can make mistakes in commands and the app should provide a convenient way to rectify them.","lastModifiedDate":"2024-03-04"},{"lineNumber":15,"author":{"gitId":"caitlyntang"},"content":" * Highlights: This enhancement affects existing commands and commands to be added in future. It required an in-depth analysis of design alternatives. The implementation too was challenging as it required changes to existing commands.","lastModifiedDate":"2024-03-04"},{"lineNumber":16,"author":{"gitId":"caitlyntang"},"content":" * Credits: *{mention here if you reused any code/ideas from elsewhere or if a third-party library is heavily used in the feature so that a reader can make a more accurate judgement of how much effort went into the feature}*","lastModifiedDate":"2024-03-04"},{"lineNumber":17,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":18,"author":{"gitId":"caitlyntang"},"content":"* **New Feature**: Added a history command that allows the user to navigate to previous commands using up/down keys.","lastModifiedDate":"2024-03-04"},{"lineNumber":19,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":20,"author":{"gitId":"caitlyntang"},"content":"* **Code contributed**: [RepoSense link]()","lastModifiedDate":"2024-03-04"},{"lineNumber":21,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":22,"author":{"gitId":"caitlyntang"},"content":"* **Project management**:","lastModifiedDate":"2024-03-04"},{"lineNumber":23,"author":{"gitId":"caitlyntang"},"content":" * Managed releases `v1.3` - `v1.5rc` (3 releases) on GitHub","lastModifiedDate":"2024-03-04"},{"lineNumber":24,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":25,"author":{"gitId":"caitlyntang"},"content":"* **Enhancements to existing features**:","lastModifiedDate":"2024-03-04"},{"lineNumber":26,"author":{"gitId":"caitlyntang"},"content":" * Updated the GUI color scheme (Pull requests [\\#33](), [\\#34]())","lastModifiedDate":"2024-03-04"},{"lineNumber":27,"author":{"gitId":"caitlyntang"},"content":" * Wrote additional tests for existing features to increase coverage from 88% to 92% (Pull requests [\\#36](), [\\#38]())","lastModifiedDate":"2024-03-04"},{"lineNumber":28,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":29,"author":{"gitId":"caitlyntang"},"content":"* **Documentation**:","lastModifiedDate":"2024-03-04"},{"lineNumber":30,"author":{"gitId":"caitlyntang"},"content":" * User Guide:","lastModifiedDate":"2024-03-04"},{"lineNumber":31,"author":{"gitId":"caitlyntang"},"content":" * Added documentation for the features `delete` and `find` [\\#72]()","lastModifiedDate":"2024-03-04"},{"lineNumber":32,"author":{"gitId":"caitlyntang"},"content":" * Did cosmetic tweaks to existing documentation of features `clear`, `exit`: [\\#74]()","lastModifiedDate":"2024-03-04"},{"lineNumber":33,"author":{"gitId":"caitlyntang"},"content":" * Developer Guide:","lastModifiedDate":"2024-03-04"},{"lineNumber":34,"author":{"gitId":"caitlyntang"},"content":" * Added implementation details of the `delete` feature.","lastModifiedDate":"2024-03-04"},{"lineNumber":35,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":36,"author":{"gitId":"caitlyntang"},"content":"* **Community**:","lastModifiedDate":"2024-03-04"},{"lineNumber":37,"author":{"gitId":"caitlyntang"},"content":" * PRs reviewed (with non-trivial review comments): [\\#12](), [\\#32](), [\\#19](), [\\#42]()","lastModifiedDate":"2024-03-04"},{"lineNumber":38,"author":{"gitId":"caitlyntang"},"content":" * Contributed to forum discussions (examples: [1](), [2](), [3](), [4]())","lastModifiedDate":"2024-03-04"},{"lineNumber":39,"author":{"gitId":"caitlyntang"},"content":" * Reported bugs and suggestions for other teams in the class (examples: [1](), [2](), [3]())","lastModifiedDate":"2024-03-04"},{"lineNumber":40,"author":{"gitId":"caitlyntang"},"content":" * Some parts of the history feature I added was adopted by several other class mates ([1](), [2]())","lastModifiedDate":"2024-03-04"},{"lineNumber":41,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":42,"author":{"gitId":"caitlyntang"},"content":"* **Tools**:","lastModifiedDate":"2024-03-04"},{"lineNumber":43,"author":{"gitId":"caitlyntang"},"content":" * Integrated a third party library (Natty) to the project ([\\#42]())","lastModifiedDate":"2024-03-04"},{"lineNumber":44,"author":{"gitId":"caitlyntang"},"content":" * Integrated a new Github plugin (CircleCI) to the team repo","lastModifiedDate":"2024-03-04"},{"lineNumber":45,"author":{"gitId":"caitlyntang"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":46,"author":{"gitId":"caitlyntang"},"content":"* _{you can add/remove categories in the list above}_","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"caitlyntang":46}},{"path":"docs/team/jerome-j.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"Jerome-j"},"content":"---","lastModifiedDate":"2024-03-01"},{"lineNumber":2,"author":{"gitId":"Jerome-j"},"content":" layout: default.md","lastModifiedDate":"2024-03-01"},{"lineNumber":3,"author":{"gitId":"Jerome-j"},"content":" title: \"Jerome-j\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-01"},{"lineNumber":4,"author":{"gitId":"Jerome-j"},"content":"---","lastModifiedDate":"2024-03-01"},{"lineNumber":5,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":6,"author":{"gitId":"Jerome-j"},"content":"### Jerome-j\u0027s Project Portfolio Page","lastModifiedDate":"2024-03-01"},{"lineNumber":7,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":8,"author":{"gitId":"Jerome-j"},"content":"AddressBook - Level 3 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.","lastModifiedDate":"2024-03-01"},{"lineNumber":9,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":10,"author":{"gitId":"Jerome-j"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-03-01"},{"lineNumber":11,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":12,"author":{"gitId":"Jerome-j"},"content":"* **New Feature**: Added the ability to undo/redo previous commands.","lastModifiedDate":"2024-03-01"},{"lineNumber":13,"author":{"gitId":"Jerome-j"},"content":" * What it does: allows the user to undo all previous commands one at a time. Preceding undo commands can be reversed by using the redo command.","lastModifiedDate":"2024-03-01"},{"lineNumber":14,"author":{"gitId":"Jerome-j"},"content":" * Justification: This feature improves the product significantly because a user can make mistakes in commands and the app should provide a convenient way to rectify them.","lastModifiedDate":"2024-03-01"},{"lineNumber":15,"author":{"gitId":"Jerome-j"},"content":" * Highlights: This enhancement affects existing commands and commands to be added in future. It required an in-depth analysis of design alternatives. The implementation too was challenging as it required changes to existing commands.","lastModifiedDate":"2024-03-01"},{"lineNumber":16,"author":{"gitId":"Jerome-j"},"content":" * Credits: *{mention here if you reused any code/ideas from elsewhere or if a third-party library is heavily used in the feature so that a reader can make a more accurate judgement of how much effort went into the feature}*","lastModifiedDate":"2024-03-01"},{"lineNumber":17,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":18,"author":{"gitId":"Jerome-j"},"content":"* **New Feature**: Added a history command that allows the user to navigate to previous commands using up/down keys.","lastModifiedDate":"2024-03-01"},{"lineNumber":19,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":20,"author":{"gitId":"Jerome-j"},"content":"* **Code contributed**: [RepoSense link]()","lastModifiedDate":"2024-03-01"},{"lineNumber":21,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":22,"author":{"gitId":"Jerome-j"},"content":"* **Project management**:","lastModifiedDate":"2024-03-01"},{"lineNumber":23,"author":{"gitId":"Jerome-j"},"content":" * Managed releases `v1.3` - `v1.5rc` (3 releases) on GitHub","lastModifiedDate":"2024-03-01"},{"lineNumber":24,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":25,"author":{"gitId":"Jerome-j"},"content":"* **Enhancements to existing features**:","lastModifiedDate":"2024-03-01"},{"lineNumber":26,"author":{"gitId":"Jerome-j"},"content":" * Updated the GUI color scheme (Pull requests [\\#33](), [\\#34]())","lastModifiedDate":"2024-03-01"},{"lineNumber":27,"author":{"gitId":"Jerome-j"},"content":" * Wrote additional tests for existing features to increase coverage from 88% to 92% (Pull requests [\\#36](), [\\#38]())","lastModifiedDate":"2024-03-01"},{"lineNumber":28,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":29,"author":{"gitId":"Jerome-j"},"content":"* **Documentation**:","lastModifiedDate":"2024-03-01"},{"lineNumber":30,"author":{"gitId":"Jerome-j"},"content":" * User Guide:","lastModifiedDate":"2024-03-01"},{"lineNumber":31,"author":{"gitId":"Jerome-j"},"content":" * Added documentation for the features `delete` and `find` [\\#72]()","lastModifiedDate":"2024-03-01"},{"lineNumber":32,"author":{"gitId":"Jerome-j"},"content":" * Did cosmetic tweaks to existing documentation of features `clear`, `exit`: [\\#74]()","lastModifiedDate":"2024-03-01"},{"lineNumber":33,"author":{"gitId":"Jerome-j"},"content":" * Developer Guide:","lastModifiedDate":"2024-03-01"},{"lineNumber":34,"author":{"gitId":"Jerome-j"},"content":" * Added implementation details of the `delete` feature.","lastModifiedDate":"2024-03-01"},{"lineNumber":35,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":36,"author":{"gitId":"Jerome-j"},"content":"* **Community**:","lastModifiedDate":"2024-03-01"},{"lineNumber":37,"author":{"gitId":"Jerome-j"},"content":" * PRs reviewed (with non-trivial review comments): [\\#12](), [\\#32](), [\\#19](), [\\#42]()","lastModifiedDate":"2024-03-01"},{"lineNumber":38,"author":{"gitId":"Jerome-j"},"content":" * Contributed to forum discussions (examples: [1](), [2](), [3](), [4]())","lastModifiedDate":"2024-03-01"},{"lineNumber":39,"author":{"gitId":"Jerome-j"},"content":" * Reported bugs and suggestions for other teams in the class (examples: [1](), [2](), [3]())","lastModifiedDate":"2024-03-01"},{"lineNumber":40,"author":{"gitId":"Jerome-j"},"content":" * Some parts of the history feature I added was adopted by several other class mates ([1](), [2]())","lastModifiedDate":"2024-03-01"},{"lineNumber":41,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":42,"author":{"gitId":"Jerome-j"},"content":"* **Tools**:","lastModifiedDate":"2024-03-01"},{"lineNumber":43,"author":{"gitId":"Jerome-j"},"content":" * Integrated a third party library (Natty) to the project ([\\#42]())","lastModifiedDate":"2024-03-01"},{"lineNumber":44,"author":{"gitId":"Jerome-j"},"content":" * Integrated a new Github plugin (CircleCI) to the team repo","lastModifiedDate":"2024-03-01"},{"lineNumber":45,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":46,"author":{"gitId":"Jerome-j"},"content":"* _{you can add/remove categories in the list above}_","lastModifiedDate":"2024-03-01"}],"authorContributionMap":{"Jerome-j":46}},{"path":"docs/team/tankh99.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"tankh99"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":2,"author":{"gitId":"tankh99"},"content":" layout: default.md","lastModifiedDate":"2024-03-05"},{"lineNumber":3,"author":{"gitId":"tankh99"},"content":" title: \"Khang Hou\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-05"},{"lineNumber":4,"author":{"gitId":"tankh99"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":5,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":6,"author":{"gitId":"tankh99"},"content":"### Khang Hou\u0027s Project Portfolio Page","lastModifiedDate":"2024-03-05"},{"lineNumber":7,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":8,"author":{"gitId":"tankh99"},"content":"AddressBook - Level 3 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.","lastModifiedDate":"2024-03-05"},{"lineNumber":9,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":10,"author":{"gitId":"tankh99"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-03-05"},{"lineNumber":11,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":12,"author":{"gitId":"tankh99"},"content":"* **New Feature**: Added the ability to undo/redo previous commands.","lastModifiedDate":"2024-03-05"},{"lineNumber":13,"author":{"gitId":"tankh99"},"content":" * What it does: allows the user to undo all previous commands one at a time. Preceding undo commands can be reversed by using the redo command.","lastModifiedDate":"2024-03-05"},{"lineNumber":14,"author":{"gitId":"tankh99"},"content":" * Justification: This feature improves the product significantly because a user can make mistakes in commands and the app should provide a convenient way to rectify them.","lastModifiedDate":"2024-03-05"},{"lineNumber":15,"author":{"gitId":"tankh99"},"content":" * Highlights: This enhancement affects existing commands and commands to be added in future. It required an in-depth analysis of design alternatives. The implementation too was challenging as it required changes to existing commands.","lastModifiedDate":"2024-03-05"},{"lineNumber":16,"author":{"gitId":"tankh99"},"content":" * Credits: *{mention here if you reused any code/ideas from elsewhere or if a third-party library is heavily used in the feature so that a reader can make a more accurate judgement of how much effort went into the feature}*","lastModifiedDate":"2024-03-05"},{"lineNumber":17,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":18,"author":{"gitId":"tankh99"},"content":"* **New Feature**: Added a history command that allows the user to navigate to previous commands using up/down keys.","lastModifiedDate":"2024-03-05"},{"lineNumber":19,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":20,"author":{"gitId":"tankh99"},"content":"* **Code contributed**: [RepoSense link]()","lastModifiedDate":"2024-03-05"},{"lineNumber":21,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":22,"author":{"gitId":"tankh99"},"content":"* **Project management**:","lastModifiedDate":"2024-03-05"},{"lineNumber":23,"author":{"gitId":"tankh99"},"content":" * Managed releases `v1.3` - `v1.5rc` (3 releases) on GitHub","lastModifiedDate":"2024-03-05"},{"lineNumber":24,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":25,"author":{"gitId":"tankh99"},"content":"* **Enhancements to existing features**:","lastModifiedDate":"2024-03-05"},{"lineNumber":26,"author":{"gitId":"tankh99"},"content":" * Updated the GUI color scheme (Pull requests [\\#33](), [\\#34]())","lastModifiedDate":"2024-03-05"},{"lineNumber":27,"author":{"gitId":"tankh99"},"content":" * Wrote additional tests for existing features to increase coverage from 88% to 92% (Pull requests [\\#36](), [\\#38]())","lastModifiedDate":"2024-03-05"},{"lineNumber":28,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":29,"author":{"gitId":"tankh99"},"content":"* **Documentation**:","lastModifiedDate":"2024-03-05"},{"lineNumber":30,"author":{"gitId":"tankh99"},"content":" * User Guide:","lastModifiedDate":"2024-03-05"},{"lineNumber":31,"author":{"gitId":"tankh99"},"content":" * Added documentation for the features `delete` and `find` [\\#72]()","lastModifiedDate":"2024-03-05"},{"lineNumber":32,"author":{"gitId":"tankh99"},"content":" * Did cosmetic tweaks to existing documentation of features `clear`, `exit`: [\\#74]()","lastModifiedDate":"2024-03-05"},{"lineNumber":33,"author":{"gitId":"tankh99"},"content":" * Developer Guide:","lastModifiedDate":"2024-03-05"},{"lineNumber":34,"author":{"gitId":"tankh99"},"content":" * Added implementation details of the `delete` feature.","lastModifiedDate":"2024-03-05"},{"lineNumber":35,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":36,"author":{"gitId":"tankh99"},"content":"* **Community**:","lastModifiedDate":"2024-03-05"},{"lineNumber":37,"author":{"gitId":"tankh99"},"content":" * PRs reviewed (with non-trivial review comments): [\\#12](), [\\#32](), [\\#19](), [\\#42]()","lastModifiedDate":"2024-03-05"},{"lineNumber":38,"author":{"gitId":"tankh99"},"content":" * Contributed to forum discussions (examples: [1](), [2](), [3](), [4]())","lastModifiedDate":"2024-03-05"},{"lineNumber":39,"author":{"gitId":"tankh99"},"content":" * Reported bugs and suggestions for other teams in the class (examples: [1](), [2](), [3]())","lastModifiedDate":"2024-03-05"},{"lineNumber":40,"author":{"gitId":"tankh99"},"content":" * Some parts of the history feature I added was adopted by several other class mates ([1](), [2]())","lastModifiedDate":"2024-03-05"},{"lineNumber":41,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":42,"author":{"gitId":"tankh99"},"content":"* **Tools**:","lastModifiedDate":"2024-03-05"},{"lineNumber":43,"author":{"gitId":"tankh99"},"content":" * Integrated a third party library (Natty) to the project ([\\#42]())","lastModifiedDate":"2024-03-05"},{"lineNumber":44,"author":{"gitId":"tankh99"},"content":" * Integrated a new Github plugin (CircleCI) to the team repo","lastModifiedDate":"2024-03-05"},{"lineNumber":45,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":46,"author":{"gitId":"tankh99"},"content":"* _{you can add/remove categories in the list above}_","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"tankh99":46}},{"path":"docs/team/vnnamng.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"vnnamng"},"content":"---","lastModifiedDate":"2024-03-06"},{"lineNumber":2,"author":{"gitId":"vnnamng"},"content":" layout: default.md","lastModifiedDate":"2024-03-06"},{"lineNumber":3,"author":{"gitId":"vnnamng"},"content":" title: \"vnnamng\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-06"},{"lineNumber":4,"author":{"gitId":"vnnamng"},"content":"---","lastModifiedDate":"2024-03-06"},{"lineNumber":5,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":6,"author":{"gitId":"vnnamng"},"content":"### vnnamng\u0027s Project Portfolio Page","lastModifiedDate":"2024-03-06"},{"lineNumber":7,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":8,"author":{"gitId":"vnnamng"},"content":"AddressBook - Level 3 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.","lastModifiedDate":"2024-03-06"},{"lineNumber":9,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":10,"author":{"gitId":"vnnamng"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-03-06"},{"lineNumber":11,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":12,"author":{"gitId":"vnnamng"},"content":"* **New Feature**: Added the ability to undo/redo previous commands.","lastModifiedDate":"2024-03-06"},{"lineNumber":13,"author":{"gitId":"vnnamng"},"content":" * What it does: allows the user to undo all previous commands one at a time. Preceding undo commands can be reversed by using the redo command.","lastModifiedDate":"2024-03-06"},{"lineNumber":14,"author":{"gitId":"vnnamng"},"content":" * Justification: This feature improves the product significantly because a user can make mistakes in commands and the app should provide a convenient way to rectify them.","lastModifiedDate":"2024-03-06"},{"lineNumber":15,"author":{"gitId":"vnnamng"},"content":" * Highlights: This enhancement affects existing commands and commands to be added in future. It required an in-depth analysis of design alternatives. The implementation too was challenging as it required changes to existing commands.","lastModifiedDate":"2024-03-06"},{"lineNumber":16,"author":{"gitId":"vnnamng"},"content":" * Credits: *{mention here if you reused any code/ideas from elsewhere or if a third-party library is heavily used in the feature so that a reader can make a more accurate judgement of how much effort went into the feature}*","lastModifiedDate":"2024-03-06"},{"lineNumber":17,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":18,"author":{"gitId":"vnnamng"},"content":"* **New Feature**: Added a history command that allows the user to navigate to previous commands using up/down keys.","lastModifiedDate":"2024-03-06"},{"lineNumber":19,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":20,"author":{"gitId":"vnnamng"},"content":"* **Code contributed**: [RepoSense link]()","lastModifiedDate":"2024-03-06"},{"lineNumber":21,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":22,"author":{"gitId":"vnnamng"},"content":"* **Project management**:","lastModifiedDate":"2024-03-06"},{"lineNumber":23,"author":{"gitId":"vnnamng"},"content":" * Managed releases `v1.3` - `v1.5rc` (3 releases) on GitHub","lastModifiedDate":"2024-03-06"},{"lineNumber":24,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":25,"author":{"gitId":"vnnamng"},"content":"* **Enhancements to existing features**:","lastModifiedDate":"2024-03-06"},{"lineNumber":26,"author":{"gitId":"vnnamng"},"content":" * Updated the GUI color scheme (Pull requests [\\#33](), [\\#34]())","lastModifiedDate":"2024-03-06"},{"lineNumber":27,"author":{"gitId":"vnnamng"},"content":" * Wrote additional tests for existing features to increase coverage from 88% to 92% (Pull requests [\\#36](), [\\#38]())","lastModifiedDate":"2024-03-06"},{"lineNumber":28,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":29,"author":{"gitId":"vnnamng"},"content":"* **Documentation**:","lastModifiedDate":"2024-03-06"},{"lineNumber":30,"author":{"gitId":"vnnamng"},"content":" * User Guide:","lastModifiedDate":"2024-03-06"},{"lineNumber":31,"author":{"gitId":"vnnamng"},"content":" * Added documentation for the features `delete` and `find` [\\#72]()","lastModifiedDate":"2024-03-06"},{"lineNumber":32,"author":{"gitId":"vnnamng"},"content":" * Did cosmetic tweaks to existing documentation of features `clear`, `exit`: [\\#74]()","lastModifiedDate":"2024-03-06"},{"lineNumber":33,"author":{"gitId":"vnnamng"},"content":" * Developer Guide:","lastModifiedDate":"2024-03-06"},{"lineNumber":34,"author":{"gitId":"vnnamng"},"content":" * Added implementation details of the `delete` feature.","lastModifiedDate":"2024-03-06"},{"lineNumber":35,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":36,"author":{"gitId":"vnnamng"},"content":"* **Community**:","lastModifiedDate":"2024-03-06"},{"lineNumber":37,"author":{"gitId":"vnnamng"},"content":" * PRs reviewed (with non-trivial review comments): [\\#12](), [\\#32](), [\\#19](), [\\#42]()","lastModifiedDate":"2024-03-06"},{"lineNumber":38,"author":{"gitId":"vnnamng"},"content":" * Contributed to forum discussions (examples: [1](), [2](), [3](), [4]())","lastModifiedDate":"2024-03-06"},{"lineNumber":39,"author":{"gitId":"vnnamng"},"content":" * Reported bugs and suggestions for other teams in the class (examples: [1](), [2](), [3]())","lastModifiedDate":"2024-03-06"},{"lineNumber":40,"author":{"gitId":"vnnamng"},"content":" * Some parts of the history feature I added was adopted by several other class mates ([1](), [2]())","lastModifiedDate":"2024-03-06"},{"lineNumber":41,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":42,"author":{"gitId":"vnnamng"},"content":"* **Tools**:","lastModifiedDate":"2024-03-06"},{"lineNumber":43,"author":{"gitId":"vnnamng"},"content":" * Integrated a third party library (Natty) to the project ([\\#42]())","lastModifiedDate":"2024-03-06"},{"lineNumber":44,"author":{"gitId":"vnnamng"},"content":" * Integrated a new Github plugin (CircleCI) to the team repo","lastModifiedDate":"2024-03-06"},{"lineNumber":45,"author":{"gitId":"vnnamng"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":46,"author":{"gitId":"vnnamng"},"content":"* _{you can add/remove categories in the list above}_","lastModifiedDate":"2024-03-06"}],"authorContributionMap":{"vnnamng":46}}] diff --git a/AY2324S2-CS2103-F08-2_tp_master/commits.json b/AY2324S2-CS2103-F08-2_tp_master/commits.json index 7e2e7065..68ab87de 100644 --- a/AY2324S2-CS2103-F08-2_tp_master/commits.json +++ b/AY2324S2-CS2103-F08-2_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"caitlyntang":[{"date":"2024-03-04","commitResults":[{"hash":"be4075943c44c456b2eb5b8879d65ba1cf2b4b7e","isMergeCommit":false,"messageTitle":"Add Caitlyn information, update AboutUs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":50,"deletions":4}}},{"hash":"6c13c7a92451cfb27c4a827c7e67ec06823baf67","isMergeCommit":true,"messageTitle":"Merge pull request #20 from caitlyntang/caitlyntang/add-caitlyntang-info","messageBody":"Add Caitlyn information","fileTypesAndContributionMap":{}}]},{"date":"2024-03-07","commitResults":[{"hash":"dfd7c5426dec301ea47097b1f25039813760e38f","isMergeCommit":false,"messageTitle":"Update developer guide for appointments","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":83,"deletions":14}}},{"hash":"55703065144bb67427244c37094041ef8d7776ed","isMergeCommit":false,"messageTitle":"Modify use case to be clearer","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":1}}},{"hash":"3e902ec232caf1c16c3e729c6a241195fa3fceee","isMergeCommit":false,"messageTitle":"Rephrase statements, reformat user story table","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":17,"deletions":17}}},{"hash":"c7abc91a2c611d5b58930fa4412a9a3320e00340","isMergeCommit":true,"messageTitle":"Merge pull request #49 from caitlyntang/caitlyntang/update-dg","messageBody":"Caitlyntang/update dg","fileTypesAndContributionMap":{}}]}],"Jerome-j":[{"date":"2024-03-01","commitResults":[{"hash":"2a69b9b4868675fdc0abb39d77a25f05f00061a2","isMergeCommit":false,"messageTitle":"Add Jerome information page","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":51,"deletions":7}}},{"hash":"3b871f00b6e913811d4bbd4447347d931a281f04","isMergeCommit":false,"messageTitle":"Add Jerome information page","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"90de2d72d756266ca6fc1b92636a3f17ccf554a4","isMergeCommit":false,"messageTitle":"Add screenshot for CogniCare index","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":4}}}]},{"date":"2024-03-02","commitResults":[{"hash":"3bc5aaf2e1d0f122060bd57d8ca0052be10dcaec","isMergeCommit":true,"messageTitle":"Merge pull request #18 from Jerome-j/add-jeromeChua-info","messageBody":"Add Jerome-j info","fileTypesAndContributionMap":{}},{"hash":"0712e6905909aede28d96dbd84ff0fd6f6636e50","isMergeCommit":true,"messageTitle":"Merge pull request #19 from Jerome-j/jerome-j/update-index","messageBody":"Add screenshot for CogniCare index","fileTypesAndContributionMap":{}}]},{"date":"2024-03-05","commitResults":[{"hash":"df2df68b93c9f6fd045812af0de91558b23f5d39","isMergeCommit":false,"messageTitle":"Update DG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":52,"deletions":25}}},{"hash":"d67ef15ad0ce42f4375210766379db1819563a82","isMergeCommit":true,"messageTitle":"Merge pull request #32 from Jerome-j/jerome-j/add-dg","messageBody":"Update DG","fileTypesAndContributionMap":{}}]},{"date":"2024-03-06","commitResults":[{"hash":"444cdc802bbc664b3b2b5d923238db10381f3a42","isMergeCommit":true,"messageTitle":"Merge pull request #36 from AY2324S2-CS2103-F08-2/fix-links","messageBody":"Fix links","fileTypesAndContributionMap":{}},{"hash":"6a9f4b2d64546687f1968d5dfdf998499e8d6408","isMergeCommit":false,"messageTitle":"Fix hyperlink","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"b82b172b047ed116af0f37916d3429933af786bb","isMergeCommit":true,"messageTitle":"Merge pull request #47 from Jerome-j/jerome-j/fix-hyperlink","messageBody":"Fix hyperlink for my own profile","fileTypesAndContributionMap":{}}]}],"tankh99":[{"date":"2024-02-26","commitResults":[{"hash":"17ef9adbf5e557a9d7dbb352f07f4a17451ab5a4","isMergeCommit":false,"messageTitle":"Update issue templates","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":16,"deletions":0}}},{"hash":"b707a6cc312ca65b255beda6807162facb9d6a4c","isMergeCommit":false,"messageTitle":"Update issue templates","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":27,"deletions":0}}},{"hash":"7e9c54af395635429755c7a55e2c95a045cea04b","isMergeCommit":true,"messageTitle":"Merge pull request #11 from AY2324S2-CS2103-F08-2/tankh99-patch-1","messageBody":"Update issue templates","fileTypesAndContributionMap":{}},{"hash":"ac9c8df224d66c77e4f0b2ac3af7036940cd293f","isMergeCommit":false,"messageTitle":"Update issue templates","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":5}}}]},{"date":"2024-03-05","commitResults":[{"hash":"6486caa3bf855ef9e65845e92bb83725c6dc618c","isMergeCommit":false,"messageTitle":"Add member info","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":51,"deletions":5}}},{"hash":"9e54d458da6e716c421bbdad00e2f29e2c981578","isMergeCommit":true,"messageTitle":"Merge pull request #22 from tankh99/tankh99/add-info","messageBody":"Add member info","fileTypesAndContributionMap":{}},{"hash":"93dfa382aba3c69b7911f1ce66cb02f8177c3c93","isMergeCommit":false,"messageTitle":"Update codecov and CI links","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}}]},{"date":"2024-03-06","commitResults":[{"hash":"95504f2b217ed0b5ba66b420e6c3cded94810f17","isMergeCommit":true,"messageTitle":"Merge pull request #31 from tankh99/update-readme-links","messageBody":"Update readme links","fileTypesAndContributionMap":{}},{"hash":"5feb770e93f2a944d2e4b2f8a6b817781d7b3891","isMergeCommit":false,"messageTitle":"Fix links","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"b0df7d5de3a9c0f6bd50e005d5dbec2551a91c5f","isMergeCommit":false,"messageTitle":"Update and rename new-feature.md to user-story.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":10,"deletions":16}}}]},{"date":"2024-03-07","commitResults":[{"hash":"b9ddd9c5af96955964db5952269e49fc5305f3e8","isMergeCommit":false,"messageTitle":"Update DG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":20,"deletions":16}}},{"hash":"e0fac666b6281b3528cd502aa5e762ca0fec4c7c","isMergeCommit":false,"messageTitle":"Reorder user stories table","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"8df0bf4acf52e077abb9cbbd496153aa6943adba","isMergeCommit":true,"messageTitle":"Merge pull request #50 from AY2324S2-CS2103-F08-2/update-dg","messageBody":"Update DG","fileTypesAndContributionMap":{}},{"hash":"4d37da1e8d15f64c044cc768f0948db2e94a1d60","isMergeCommit":false,"messageTitle":"Update linkes in README and remove placeholder text","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":21}}},{"hash":"425afb07ea5c8ab55bfbfec415f49d35df4ff7a7","isMergeCommit":true,"messageTitle":"Merge pull request #56 from AY2324S2-CS2103-F08-2/tankh99/update-website","messageBody":"Update links in README and remove placeholder text","fileTypesAndContributionMap":{}}]}],"vnnamng":[{"date":"2024-03-06","commitResults":[{"hash":"83e0e1d95eb79d712de742af0edd6769ca5814ef","isMergeCommit":false,"messageTitle":"Update vnnamng\u0027s information","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":57,"deletions":2}}},{"hash":"6e7dbf82bb5b84588f9d8d9bf39c1b14e18c0466","isMergeCommit":false,"messageTitle":"Fix hyperlink issues from prev commits","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2024-03-07","commitResults":[{"hash":"1d2619ff1c9d208617b2524477bdbba2b3df0b97","isMergeCommit":true,"messageTitle":"Merge pull request #48 from vnnamng/vnnamng/add-readme","messageBody":"Add Nguyen Xuan Nam information","fileTypesAndContributionMap":{}},{"hash":"9a7b5ce7238e2164170d50e49d7576305f625ab9","isMergeCommit":false,"messageTitle":"Add some use cases to DG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":122,"deletions":0}}},{"hash":"017295b5d78db1f240725c1bcb553c5453fe1c0e","isMergeCommit":false,"messageTitle":"Add some user stories","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":24,"deletions":21}}},{"hash":"b355c1850a6bcaedb29002468b37df8a769fffec","isMergeCommit":false,"messageTitle":"Add use case for edit a case log","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":40,"deletions":0}}},{"hash":"50a0424c240db03208b9d6e50e5c87277f9dba2b","isMergeCommit":true,"messageTitle":"Merge pull request #55 from vnnamng/vnnamng/update-dg","messageBody":"Update DG","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"caitlyntang":{"docs":123,"functional-code":0,"test-code":0},"Jerome-j":{"docs":104,"functional-code":0,"test-code":0},"tankh99":{"docs":97,"functional-code":0,"test-code":0},"vnnamng":{"docs":214,"functional-code":0,"test-code":0}},"authorContributionVariance":{"caitlyntang":1310.5305,"Jerome-j":660.5153,"tankh99":582.2296,"vnnamng":2959.9797},"authorDisplayNameMap":{"caitlyntang":"CS2103-F08-2 TANG..TLYN","Jerome-j":"CS2103-F08-2 JERO.. JIE","tankh99":"CS2103-F08-2 TAN .. HOU","vnnamng":"CS2103-F08-2 NGUY.. NAM"}} +{"authorDailyContributionsMap":{"caitlyntang":[{"date":"2024-03-04","commitResults":[{"hash":"be4075943c44c456b2eb5b8879d65ba1cf2b4b7e","isMergeCommit":false,"messageTitle":"Add Caitlyn information, update AboutUs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":50,"deletions":4}}},{"hash":"6c13c7a92451cfb27c4a827c7e67ec06823baf67","isMergeCommit":true,"messageTitle":"Merge pull request #20 from caitlyntang/caitlyntang/add-caitlyntang-info","messageBody":"Add Caitlyn information","fileTypesAndContributionMap":{}}]},{"date":"2024-03-07","commitResults":[{"hash":"dfd7c5426dec301ea47097b1f25039813760e38f","isMergeCommit":false,"messageTitle":"Update developer guide for appointments","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":83,"deletions":14}}},{"hash":"55703065144bb67427244c37094041ef8d7776ed","isMergeCommit":false,"messageTitle":"Modify use case to be clearer","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":1}}},{"hash":"3e902ec232caf1c16c3e729c6a241195fa3fceee","isMergeCommit":false,"messageTitle":"Rephrase statements, reformat user story table","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":17,"deletions":17}}},{"hash":"c7abc91a2c611d5b58930fa4412a9a3320e00340","isMergeCommit":true,"messageTitle":"Merge pull request #49 from caitlyntang/caitlyntang/update-dg","messageBody":"Caitlyntang/update dg","fileTypesAndContributionMap":{}}]}],"Jerome-j":[{"date":"2024-03-01","commitResults":[{"hash":"2a69b9b4868675fdc0abb39d77a25f05f00061a2","isMergeCommit":false,"messageTitle":"Add Jerome information page","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":51,"deletions":7}}},{"hash":"3b871f00b6e913811d4bbd4447347d931a281f04","isMergeCommit":false,"messageTitle":"Add Jerome information page","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"90de2d72d756266ca6fc1b92636a3f17ccf554a4","isMergeCommit":false,"messageTitle":"Add screenshot for CogniCare index","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":4}}}]},{"date":"2024-03-02","commitResults":[{"hash":"3bc5aaf2e1d0f122060bd57d8ca0052be10dcaec","isMergeCommit":true,"messageTitle":"Merge pull request #18 from Jerome-j/add-jeromeChua-info","messageBody":"Add Jerome-j info","fileTypesAndContributionMap":{}},{"hash":"0712e6905909aede28d96dbd84ff0fd6f6636e50","isMergeCommit":true,"messageTitle":"Merge pull request #19 from Jerome-j/jerome-j/update-index","messageBody":"Add screenshot for CogniCare index","fileTypesAndContributionMap":{}}]},{"date":"2024-03-05","commitResults":[{"hash":"df2df68b93c9f6fd045812af0de91558b23f5d39","isMergeCommit":false,"messageTitle":"Update DG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":52,"deletions":25}}},{"hash":"d67ef15ad0ce42f4375210766379db1819563a82","isMergeCommit":true,"messageTitle":"Merge pull request #32 from Jerome-j/jerome-j/add-dg","messageBody":"Update DG","fileTypesAndContributionMap":{}}]},{"date":"2024-03-06","commitResults":[{"hash":"444cdc802bbc664b3b2b5d923238db10381f3a42","isMergeCommit":true,"messageTitle":"Merge pull request #36 from AY2324S2-CS2103-F08-2/fix-links","messageBody":"Fix links","fileTypesAndContributionMap":{}},{"hash":"6a9f4b2d64546687f1968d5dfdf998499e8d6408","isMergeCommit":false,"messageTitle":"Fix hyperlink","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"b82b172b047ed116af0f37916d3429933af786bb","isMergeCommit":true,"messageTitle":"Merge pull request #47 from Jerome-j/jerome-j/fix-hyperlink","messageBody":"Fix hyperlink for my own profile","fileTypesAndContributionMap":{}}]},{"date":"2024-03-08","commitResults":[{"hash":"5d73644dd70a4ff72b5da7a28bac077c1b0f70e4","isMergeCommit":false,"messageTitle":"Customise readme page","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":8,"deletions":8}}},{"hash":"a8a797299684e2cf74f7c21e6f0fc9266e98282e","isMergeCommit":false,"messageTitle":"Add EOF","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"4c43c41bb4e5d80601786ee15dad14a096072dcf","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"Co-authored-by: tankh99 \u003c56617918+tankh99@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":2}}},{"hash":"5241f2e17c82a28b0f375936adee4142ec33f3cf","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"Co-authored-by: tankh99 \u003c56617918+tankh99@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"2c145e0fb500adb1a4f685722e1956ba0a0c0001","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"Co-authored-by: tankh99 \u003c56617918+tankh99@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"fbab31671faa963604cda747e047bae238859a86","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"Co-authored-by: tankh99 \u003c56617918+tankh99@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"98097e961c0c2c31d872cebd464b11549f53bad8","isMergeCommit":true,"messageTitle":"Merge pull request #57 from Jerome-j/jerome-j/add-readme-info","messageBody":"Customise readme page","fileTypesAndContributionMap":{}}]}],"tankh99":[{"date":"2024-02-26","commitResults":[{"hash":"17ef9adbf5e557a9d7dbb352f07f4a17451ab5a4","isMergeCommit":false,"messageTitle":"Update issue templates","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":16,"deletions":0}}},{"hash":"b707a6cc312ca65b255beda6807162facb9d6a4c","isMergeCommit":false,"messageTitle":"Update issue templates","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":27,"deletions":0}}},{"hash":"7e9c54af395635429755c7a55e2c95a045cea04b","isMergeCommit":true,"messageTitle":"Merge pull request #11 from AY2324S2-CS2103-F08-2/tankh99-patch-1","messageBody":"Update issue templates","fileTypesAndContributionMap":{}},{"hash":"ac9c8df224d66c77e4f0b2ac3af7036940cd293f","isMergeCommit":false,"messageTitle":"Update issue templates","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":5}}}]},{"date":"2024-03-05","commitResults":[{"hash":"6486caa3bf855ef9e65845e92bb83725c6dc618c","isMergeCommit":false,"messageTitle":"Add member info","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":51,"deletions":5}}},{"hash":"9e54d458da6e716c421bbdad00e2f29e2c981578","isMergeCommit":true,"messageTitle":"Merge pull request #22 from tankh99/tankh99/add-info","messageBody":"Add member info","fileTypesAndContributionMap":{}},{"hash":"93dfa382aba3c69b7911f1ce66cb02f8177c3c93","isMergeCommit":false,"messageTitle":"Update codecov and CI links","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}}]},{"date":"2024-03-06","commitResults":[{"hash":"95504f2b217ed0b5ba66b420e6c3cded94810f17","isMergeCommit":true,"messageTitle":"Merge pull request #31 from tankh99/update-readme-links","messageBody":"Update readme links","fileTypesAndContributionMap":{}},{"hash":"5feb770e93f2a944d2e4b2f8a6b817781d7b3891","isMergeCommit":false,"messageTitle":"Fix links","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"b0df7d5de3a9c0f6bd50e005d5dbec2551a91c5f","isMergeCommit":false,"messageTitle":"Update and rename new-feature.md to user-story.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":10,"deletions":16}}}]},{"date":"2024-03-07","commitResults":[{"hash":"b9ddd9c5af96955964db5952269e49fc5305f3e8","isMergeCommit":false,"messageTitle":"Update DG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":20,"deletions":16}}},{"hash":"e0fac666b6281b3528cd502aa5e762ca0fec4c7c","isMergeCommit":false,"messageTitle":"Reorder user stories table","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"8df0bf4acf52e077abb9cbbd496153aa6943adba","isMergeCommit":true,"messageTitle":"Merge pull request #50 from AY2324S2-CS2103-F08-2/update-dg","messageBody":"Update DG","fileTypesAndContributionMap":{}},{"hash":"4d37da1e8d15f64c044cc768f0948db2e94a1d60","isMergeCommit":false,"messageTitle":"Update linkes in README and remove placeholder text","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":21}}},{"hash":"425afb07ea5c8ab55bfbfec415f49d35df4ff7a7","isMergeCommit":true,"messageTitle":"Merge pull request #56 from AY2324S2-CS2103-F08-2/tankh99/update-website","messageBody":"Update links in README and remove placeholder text","fileTypesAndContributionMap":{}}]}],"vnnamng":[{"date":"2024-03-06","commitResults":[{"hash":"83e0e1d95eb79d712de742af0edd6769ca5814ef","isMergeCommit":false,"messageTitle":"Update vnnamng\u0027s information","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":57,"deletions":2}}},{"hash":"6e7dbf82bb5b84588f9d8d9bf39c1b14e18c0466","isMergeCommit":false,"messageTitle":"Fix hyperlink issues from prev commits","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2024-03-07","commitResults":[{"hash":"1d2619ff1c9d208617b2524477bdbba2b3df0b97","isMergeCommit":true,"messageTitle":"Merge pull request #48 from vnnamng/vnnamng/add-readme","messageBody":"Add Nguyen Xuan Nam information","fileTypesAndContributionMap":{}},{"hash":"9a7b5ce7238e2164170d50e49d7576305f625ab9","isMergeCommit":false,"messageTitle":"Add some use cases to DG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":122,"deletions":0}}},{"hash":"017295b5d78db1f240725c1bcb553c5453fe1c0e","isMergeCommit":false,"messageTitle":"Add some user stories","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":24,"deletions":21}}},{"hash":"b355c1850a6bcaedb29002468b37df8a769fffec","isMergeCommit":false,"messageTitle":"Add use case for edit a case log","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":40,"deletions":0}}},{"hash":"50a0424c240db03208b9d6e50e5c87277f9dba2b","isMergeCommit":true,"messageTitle":"Merge pull request #55 from vnnamng/vnnamng/update-dg","messageBody":"Update DG","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"caitlyntang":{"docs":123,"functional-code":0,"test-code":0},"Jerome-j":{"docs":111,"functional-code":0,"test-code":0},"tankh99":{"docs":97,"functional-code":0,"test-code":0},"vnnamng":{"docs":214,"functional-code":0,"test-code":0}},"authorContributionVariance":{"caitlyntang":1234.3822,"Jerome-j":633.1288,"tankh99":556.75555,"vnnamng":2785.449},"authorDisplayNameMap":{"caitlyntang":"CS2103-F08-2 TANG..TLYN","Jerome-j":"CS2103-F08-2 JERO.. JIE","tankh99":"CS2103-F08-2 TAN .. HOU","vnnamng":"CS2103-F08-2 NGUY.. NAM"}} diff --git a/AY2324S2-CS2103-F08-4_tp_master/authorship.json b/AY2324S2-CS2103-F08-4_tp_master/authorship.json index 232907e6..64ea484d 100644 --- a/AY2324S2-CS2103-F08-4_tp_master/authorship.json +++ b/AY2324S2-CS2103-F08-4_tp_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"joelgoh1"},"content":"[![CI Status](https://github.com/se-edu/addressbook-level3/workflows/Java%20CI/badge.svg)](https://github.com/AY2324S2-CS2103-F08-4/tp/actions)","lastModifiedDate":"2024-03-07"},{"lineNumber":2,"author":{"gitId":"amanzainal"},"content":"[![codecov](https://codecov.io/gh/AY2324S2-CS2103-F08-4/tp/graph/badge.svg?token\u003dMYL7SH6BMO)](https://codecov.io/gh/AY2324S2-CS2103-F08-4/tp)","lastModifiedDate":"2024-03-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"![Ui](docs/images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"joelgoh1"},"content":"# TutorTrack","lastModifiedDate":"2024-03-07"},{"lineNumber":7,"author":{"gitId":"joelgoh1"},"content":"TutorTrack provides fast access to tutors\u0027 students contact details, optimized for users who prefer a CLI-driven interface. This serves as a powerful contact management tool designed for academic and professional use by streamlining tasks and enhancing organization.","lastModifiedDate":"2024-03-07"},{"lineNumber":8,"author":{"gitId":"joelgoh1"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":9,"author":{"gitId":"joelgoh1"},"content":"## Features","lastModifiedDate":"2024-03-07"},{"lineNumber":10,"author":{"gitId":"joelgoh1"},"content":"* Tutors can add and edit their student\u0027s contact, storing important information like name, phone number, email, adress, tag and grades","lastModifiedDate":"2024-03-07"},{"lineNumber":11,"author":{"gitId":"joelgoh1"},"content":"* Tutors can search for specific students","lastModifiedDate":"2024-03-07"},{"lineNumber":12,"author":{"gitId":"joelgoh1"},"content":"* Tutors can delete old student\u0027s contacts","lastModifiedDate":"2024-03-07"},{"lineNumber":13,"author":{"gitId":"joelgoh1"},"content":"* Tutors can view all their current students","lastModifiedDate":"2024-03-07"},{"lineNumber":14,"author":{"gitId":"joelgoh1"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":15,"author":{"gitId":"joelgoh1"},"content":"## Documentation","lastModifiedDate":"2024-03-07"},{"lineNumber":16,"author":{"gitId":"joelgoh1"},"content":"For the detailed documentation of this project, see the **[TutorTrack Product Website](https://ay2324s2-cs2103-f08-4.github.io/tp/)**.","lastModifiedDate":"2024-03-07"},{"lineNumber":17,"author":{"gitId":"joelgoh1"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":18,"author":{"gitId":"joelgoh1"},"content":"## Credits","lastModifiedDate":"2024-03-07"},{"lineNumber":19,"author":{"gitId":"joelgoh1"},"content":"This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-03-07"}],"authorContributionMap":{"joelgoh1":15,"-":3,"amanzainal":1}},{"path":"docs/_markbind/layouts/default.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003chead-bottom\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003clink rel\u003d\"stylesheet\" href\u003d\"{{baseUrl}}/stylesheets/main.css\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003c/head-bottom\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cheader sticky\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cnavbar type\u003d\"dark\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"amanzainal"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"{{baseUrl}}/index.html\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003eTutorTrack\u003c/a\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/index.html\" class\u003d\"nav-link\"\u003eHome\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/UserGuide.html\" class\u003d\"nav-link\"\u003eUser Guide\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/DeveloperGuide.html\" class\u003d\"nav-link\"\u003eDeveloper Guide\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/AboutUs.html\" class\u003d\"nav-link\"\u003eAbout Us\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"https://github.com/se-edu/addressbook-level3\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003e\u003cmd\u003e:fab-github:\u003c/md\u003e\u003c/a\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003cli slot\u003d\"right\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003cform class\u003d\"navbar-form\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\" menu-align-right\u003e\u003c/searchbar\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003c/form\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003c/navbar\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"-"},"content":"\u003c/header\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"flex-body\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"site-nav\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"site-nav-top\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"fw-bold mb-2\" style\u003d\"font-size: 1.25rem;\"\u003eSite Map\u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003csite-nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"-"},"content":"* [Home]({{ baseUrl }}/index.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"-"},"content":"* [User Guide]({{ baseUrl }}/UserGuide.html) :expanded:","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * [Quick Start]({{ baseUrl }}/UserGuide.html#quick-start)","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"-"},"content":" * [Features]({{ baseUrl }}/UserGuide.html#features)","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * [FAQ]({{ baseUrl }}/UserGuide.html#faq)","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * [Command Summary]({{ baseUrl }}/UserGuide.html#faq)","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"-"},"content":"* [Developer Guide]({{ baseUrl }}/DeveloperGuide.html) :expanded:","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * [Acknowledgements]({{ baseUrl }}/DeveloperGuide.html#acknowledgements)","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * [Setting Up]({{ baseUrl }}/DeveloperGuide.html#setting-up-getting-started)","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"-"},"content":" * [Design]({{ baseUrl }}/DeveloperGuide.html#design)","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * [Implementation]({{ baseUrl }}/DeveloperGuide.html#implementation)","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"-"},"content":" * [Documentation, logging, testing, configuration, dev-ops]({{ baseUrl }}/DeveloperGuide.html#documentation-logging-testing-configuration-dev-ops)","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * [Appendix: Requirements]({{ baseUrl }}/DeveloperGuide.html#appendix-requirements)","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * [Appendix: Instructions for manual testing]({{ baseUrl }}/DeveloperGuide.html#appendix-instructions-for-manual-testing)","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"-"},"content":"* Tutorials","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * [Tracing code]({{ baseUrl }}/tutorials/TracingCode.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"-"},"content":" * [Adding a command]({{ baseUrl }}/tutorials/AddRemark.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"-"},"content":" * [Removing Fields]({{ baseUrl }}/tutorials/RemovingFields.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* [About Us]({{ baseUrl }}/AboutUs.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003c/site-nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003c/nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003cdiv id\u003d\"content-wrapper\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"-"},"content":" {{ content }}","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"page-nav\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"-"},"content":" \u003cpage-nav /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"-"},"content":" \u003c/nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"-"},"content":" \u003cscroll-top-button\u003e\u003c/scroll-top-button\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"-"},"content":"\u003cfooter\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u003c!-- Support MarkBind by including a link to us on your landing page! --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"text-center\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"-"},"content":" \u003csmall\u003e[\u003cmd\u003e**Powered by**\u003c/md\u003e \u003cimg src\u003d\"https://markbind.org/favicon.ico\" width\u003d\"30\"\u003e {{MarkBind}}, generated on {{timestamp}}]\u003c/small\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"-"},"content":"\u003c/footer\u003e","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"-":66,"amanzainal":1}}] +[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"joelgoh1"},"content":"[![CI Status](https://github.com/se-edu/addressbook-level3/workflows/Java%20CI/badge.svg)](https://github.com/AY2324S2-CS2103-F08-4/tp/actions)","lastModifiedDate":"2024-03-07"},{"lineNumber":2,"author":{"gitId":"amanzainal"},"content":"[![codecov](https://codecov.io/gh/AY2324S2-CS2103-F08-4/tp/graph/badge.svg?token\u003dMYL7SH6BMO)](https://codecov.io/gh/AY2324S2-CS2103-F08-4/tp)","lastModifiedDate":"2024-03-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"![Ui](docs/images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"joelgoh1"},"content":"# TutorTrack","lastModifiedDate":"2024-03-07"},{"lineNumber":7,"author":{"gitId":"joelgoh1"},"content":"TutorTrack provides fast access to tutors\u0027 students contact details, optimized for users who prefer a CLI-driven interface. This serves as a powerful contact management tool designed for academic and professional use by streamlining tasks and enhancing organization.","lastModifiedDate":"2024-03-07"},{"lineNumber":8,"author":{"gitId":"joelgoh1"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":9,"author":{"gitId":"joelgoh1"},"content":"## Features","lastModifiedDate":"2024-03-07"},{"lineNumber":10,"author":{"gitId":"joelgoh1"},"content":"* Tutors can add and edit their student\u0027s contact, storing important information like name, phone number, email, adress, tag and grades","lastModifiedDate":"2024-03-07"},{"lineNumber":11,"author":{"gitId":"joelgoh1"},"content":"* Tutors can search for specific students","lastModifiedDate":"2024-03-07"},{"lineNumber":12,"author":{"gitId":"joelgoh1"},"content":"* Tutors can delete old student\u0027s contacts","lastModifiedDate":"2024-03-07"},{"lineNumber":13,"author":{"gitId":"joelgoh1"},"content":"* Tutors can view all their current students","lastModifiedDate":"2024-03-07"},{"lineNumber":14,"author":{"gitId":"joelgoh1"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":15,"author":{"gitId":"joelgoh1"},"content":"## Documentation","lastModifiedDate":"2024-03-07"},{"lineNumber":16,"author":{"gitId":"joelgoh1"},"content":"For the detailed documentation of this project, see the **[TutorTrack Product Website](https://ay2324s2-cs2103-f08-4.github.io/tp/)**.","lastModifiedDate":"2024-03-07"},{"lineNumber":17,"author":{"gitId":"joelgoh1"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":18,"author":{"gitId":"joelgoh1"},"content":"## Credits","lastModifiedDate":"2024-03-07"},{"lineNumber":19,"author":{"gitId":"joelgoh1"},"content":"This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-03-07"}],"authorContributionMap":{"joelgoh1":15,"-":3,"amanzainal":1}},{"path":"docs/DeveloperGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"Developer Guide\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":" pageNav: 3","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"joelgoh1"},"content":"# TutorTrack Developer Guide","lastModifiedDate":"2024-03-07"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c!-- * Table of Contents --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003cpage-nav-print /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":14,"author":{"gitId":"-"},"content":"## **Acknowledgements**","lastModifiedDate":"2021-07-30"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":16,"author":{"gitId":"joelgoh1"},"content":"This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org)","lastModifiedDate":"2024-03-07"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":18,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2021-07-30"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"-"},"content":"## **Setting up, getting started**","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"Refer to the guide [_Setting up and getting started_](SettingUp.md).","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"-"},"content":"## **Design**","lastModifiedDate":"2020-05-23"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":"### Architecture","lastModifiedDate":"2021-07-31"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ArchitectureDiagram.puml\" width\u003d\"280\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"-"},"content":"The ***Architecture Diagram*** given above explains the high-level design of the App.","lastModifiedDate":"2021-07-31"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"-"},"content":"Given below is a quick overview of main components and how they interact with each other.","lastModifiedDate":"2021-07-31"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":36,"author":{"gitId":"-"},"content":"**Main components of the architecture**","lastModifiedDate":"2021-07-31"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":"**`Main`** (consisting of classes [`Main`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/Main.java) and [`MainApp`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/MainApp.java)) is in charge of the app launch and shut down.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"-"},"content":"* At app launch, it initializes the other components in the correct sequence, and connects them up with each other.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"-"},"content":"* At shut down, it shuts down the other components and invokes cleanup methods where necessary.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":"The bulk of the app\u0027s work is done by the following four components:","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"-"},"content":"* [**`UI`**](#ui-component): The UI of the App.","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":"* [**`Logic`**](#logic-component): The command executor.","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":"* [**`Model`**](#model-component): Holds the data of the App in memory.","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* [**`Storage`**](#storage-component): Reads data from, and writes data to, the hard disk.","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"-"},"content":"[**`Commons`**](#common-classes) represents a collection of classes used by multiple other components.","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"-"},"content":"**How the architecture components interact with each other**","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":"The *Sequence Diagram* below shows how the components interact with each other for the scenario where the user issues the command `delete 1`.","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ArchitectureSequenceDiagram.puml\" width\u003d\"574\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":57,"author":{"gitId":"-"},"content":"Each of the four main components (also shown in the diagram above),","lastModifiedDate":"2021-07-31"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":59,"author":{"gitId":"-"},"content":"* defines its *API* in an `interface` with the same name as the Component.","lastModifiedDate":"2021-07-31"},{"lineNumber":60,"author":{"gitId":"-"},"content":"* implements its functionality using a concrete `{Component Name}Manager` class (which follows the corresponding API `interface` mentioned in the previous point.","lastModifiedDate":"2021-07-31"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":62,"author":{"gitId":"-"},"content":"For example, the `Logic` component defines its API in the `Logic.java` interface and implements its functionality using the `LogicManager.java` class which follows the `Logic` interface. Other components interact with a given component through its interface rather than the concrete class (reason: to prevent outside component\u0027s being coupled to the implementation of a component), as illustrated in the (partial) class diagram below.","lastModifiedDate":"2021-07-31"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":64,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ComponentManagers.puml\" width\u003d\"300\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":66,"author":{"gitId":"-"},"content":"The sections below give more details of each component.","lastModifiedDate":"2020-05-23"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":68,"author":{"gitId":"-"},"content":"### UI component","lastModifiedDate":"2020-05-23"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":70,"author":{"gitId":"-"},"content":"The **API** of this component is specified in [`Ui.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/Ui.java)","lastModifiedDate":"2021-07-31"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":72,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UiClassDiagram.puml\" alt\u003d\"Structure of the UI Component\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":74,"author":{"gitId":"-"},"content":"The UI consists of a `MainWindow` that is made up of parts e.g.`CommandBox`, `ResultDisplay`, `PersonListPanel`, `StatusBarFooter` etc. All these, including the `MainWindow`, inherit from the abstract `UiPart` class which captures the commonalities between classes that represent parts of the visible GUI.","lastModifiedDate":"2021-07-31"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":76,"author":{"gitId":"-"},"content":"The `UI` component uses the JavaFx UI framework. The layout of these UI parts are defined in matching `.fxml` files that are in the `src/main/resources/view` folder. For example, the layout of the [`MainWindow`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/MainWindow.java) is specified in [`MainWindow.fxml`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/resources/view/MainWindow.fxml)","lastModifiedDate":"2021-07-31"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":78,"author":{"gitId":"-"},"content":"The `UI` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":80,"author":{"gitId":"-"},"content":"* executes user commands using the `Logic` component.","lastModifiedDate":"2021-07-31"},{"lineNumber":81,"author":{"gitId":"-"},"content":"* listens for changes to `Model` data so that the UI can be updated with the modified data.","lastModifiedDate":"2021-07-31"},{"lineNumber":82,"author":{"gitId":"-"},"content":"* keeps a reference to the `Logic` component, because the `UI` relies on the `Logic` to execute commands.","lastModifiedDate":"2021-07-31"},{"lineNumber":83,"author":{"gitId":"-"},"content":"* depends on some classes in the `Model` component, as it displays `Person` object residing in the `Model`.","lastModifiedDate":"2021-07-31"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":85,"author":{"gitId":"-"},"content":"### Logic component","lastModifiedDate":"2020-05-23"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":87,"author":{"gitId":"-"},"content":"**API** : [`Logic.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/logic/Logic.java)","lastModifiedDate":"2021-07-31"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":89,"author":{"gitId":"-"},"content":"Here\u0027s a (partial) class diagram of the `Logic` component:","lastModifiedDate":"2021-07-31"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":91,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/LogicClassDiagram.puml\" width\u003d\"550\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":93,"author":{"gitId":"-"},"content":"The sequence diagram below illustrates the interactions within the `Logic` component, taking `execute(\"delete 1\")` API call as an example.","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":95,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/DeleteSequenceDiagram.puml\" alt\u003d\"Interactions Inside the Logic Component for the `delete 1` Command\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":97,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":98,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":99,"author":{"gitId":"-"},"content":"**Note:** The lifeline for `DeleteCommandParser` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline continues till the end of diagram.","lastModifiedDate":"2023-09-12"},{"lineNumber":100,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":101,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":102,"author":{"gitId":"-"},"content":"How the `Logic` component works:","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"-"},"content":"1. When `Logic` is called upon to execute a command, it is passed to an `AddressBookParser` object which in turn creates a parser that matches the command (e.g., `DeleteCommandParser`) and uses it to parse the command.","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"-"},"content":"1. This results in a `Command` object (more precisely, an object of one of its subclasses e.g., `DeleteCommand`) which is executed by the `LogicManager`.","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"-"},"content":"1. The command can communicate with the `Model` when it is executed (e.g. to delete a person).\u003cbr\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":107,"author":{"gitId":"-"},"content":" Note that although this is shown as a single step in the diagram above (for simplicity), in the code it can take several interactions (between the command object and the `Model`) to achieve.","lastModifiedDate":"2024-02-09"},{"lineNumber":108,"author":{"gitId":"-"},"content":"1. The result of the command execution is encapsulated as a `CommandResult` object which is returned back from `Logic`.","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"-"},"content":"Here are the other classes in `Logic` (omitted from the class diagram above) that are used for parsing a user command:","lastModifiedDate":"2021-07-31"},{"lineNumber":111,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":112,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ParserClasses.puml\" width\u003d\"600\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":114,"author":{"gitId":"-"},"content":"How the parsing works:","lastModifiedDate":"2021-07-31"},{"lineNumber":115,"author":{"gitId":"-"},"content":"* When called upon to parse a user command, the `AddressBookParser` class creates an `XYZCommandParser` (`XYZ` is a placeholder for the specific command name e.g., `AddCommandParser`) which uses the other classes shown above to parse the user command and create a `XYZCommand` object (e.g., `AddCommand`) which the `AddressBookParser` returns back as a `Command` object.","lastModifiedDate":"2021-07-31"},{"lineNumber":116,"author":{"gitId":"-"},"content":"* All `XYZCommandParser` classes (e.g., `AddCommandParser`, `DeleteCommandParser`, ...) inherit from the `Parser` interface so that they can be treated similarly where possible e.g, during testing.","lastModifiedDate":"2021-07-31"},{"lineNumber":117,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":118,"author":{"gitId":"-"},"content":"### Model component","lastModifiedDate":"2021-07-31"},{"lineNumber":119,"author":{"gitId":"-"},"content":"**API** : [`Model.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/model/Model.java)","lastModifiedDate":"2020-05-23"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":121,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ModelClassDiagram.puml\" width\u003d\"450\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":122,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":123,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":124,"author":{"gitId":"-"},"content":"The `Model` component,","lastModifiedDate":"2021-07-31"},{"lineNumber":125,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":126,"author":{"gitId":"-"},"content":"* stores the address book data i.e., all `Person` objects (which are contained in a `UniquePersonList` object).","lastModifiedDate":"2021-07-31"},{"lineNumber":127,"author":{"gitId":"-"},"content":"* stores the currently \u0027selected\u0027 `Person` objects (e.g., results of a search query) as a separate _filtered_ list which is exposed to outsiders as an unmodifiable `ObservableList\u003cPerson\u003e` that can be \u0027observed\u0027 e.g. the UI can be bound to this list so that the UI automatically updates when the data in the list change.","lastModifiedDate":"2021-07-31"},{"lineNumber":128,"author":{"gitId":"-"},"content":"* stores a `UserPref` object that represents the user’s preferences. This is exposed to the outside as a `ReadOnlyUserPref` objects.","lastModifiedDate":"2021-07-31"},{"lineNumber":129,"author":{"gitId":"-"},"content":"* does not depend on any of the other three components (as the `Model` represents data entities of the domain, they should make sense on their own without depending on other components)","lastModifiedDate":"2021-07-31"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":131,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":132,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":133,"author":{"gitId":"-"},"content":"**Note:** An alternative (arguably, a more OOP) model is given below. It has a `Tag` list in the `AddressBook`, which `Person` references. This allows `AddressBook` to only require one `Tag` object per unique tag, instead of each `Person` needing their own `Tag` objects.\u003cbr\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":134,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":135,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/BetterModelClassDiagram.puml\" width\u003d\"450\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":137,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":138,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":139,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":140,"author":{"gitId":"-"},"content":"### Storage component","lastModifiedDate":"2020-05-23"},{"lineNumber":141,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":142,"author":{"gitId":"-"},"content":"**API** : [`Storage.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/storage/Storage.java)","lastModifiedDate":"2020-05-23"},{"lineNumber":143,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":144,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/StorageClassDiagram.puml\" width\u003d\"550\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":145,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":146,"author":{"gitId":"-"},"content":"The `Storage` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":147,"author":{"gitId":"-"},"content":"* can save both address book data and user preference data in JSON format, and read them back into corresponding objects.","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"-"},"content":"* inherits from both `AddressBookStorage` and `UserPrefStorage`, which means it can be treated as either one (if only the functionality of only one is needed).","lastModifiedDate":"2021-07-31"},{"lineNumber":149,"author":{"gitId":"-"},"content":"* depends on some classes in the `Model` component (because the `Storage` component\u0027s job is to save/retrieve objects that belong to the `Model`)","lastModifiedDate":"2021-07-21"},{"lineNumber":150,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":151,"author":{"gitId":"-"},"content":"### Common classes","lastModifiedDate":"2020-05-23"},{"lineNumber":152,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":153,"author":{"gitId":"-"},"content":"Classes used by multiple components are in the `seedu.addressbook.commons` package.","lastModifiedDate":"2020-05-23"},{"lineNumber":154,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":155,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":156,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":157,"author":{"gitId":"-"},"content":"## **Implementation**","lastModifiedDate":"2020-05-23"},{"lineNumber":158,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":159,"author":{"gitId":"-"},"content":"This section describes some noteworthy details on how certain features are implemented.","lastModifiedDate":"2020-05-23"},{"lineNumber":160,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":161,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Undo/redo feature","lastModifiedDate":"2020-06-07"},{"lineNumber":162,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":163,"author":{"gitId":"-"},"content":"#### Proposed Implementation","lastModifiedDate":"2020-05-23"},{"lineNumber":164,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":165,"author":{"gitId":"-"},"content":"The proposed undo/redo mechanism is facilitated by `VersionedAddressBook`. It extends `AddressBook` with an undo/redo history, stored internally as an `addressBookStateList` and `currentStatePointer`. Additionally, it implements the following operations:","lastModifiedDate":"2020-05-23"},{"lineNumber":166,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":167,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#commit()` — Saves the current address book state in its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":168,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#undo()` — Restores the previous address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":169,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#redo()` — Restores a previously undone address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":170,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":171,"author":{"gitId":"-"},"content":"These operations are exposed in the `Model` interface as `Model#commitAddressBook()`, `Model#undoAddressBook()` and `Model#redoAddressBook()` respectively.","lastModifiedDate":"2020-05-23"},{"lineNumber":172,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":173,"author":{"gitId":"-"},"content":"Given below is an example usage scenario and how the undo/redo mechanism behaves at each step.","lastModifiedDate":"2020-05-23"},{"lineNumber":174,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":175,"author":{"gitId":"-"},"content":"Step 1. The user launches the application for the first time. The `VersionedAddressBook` will be initialized with the initial address book state, and the `currentStatePointer` pointing to that single address book state.","lastModifiedDate":"2020-05-23"},{"lineNumber":176,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":177,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState0.puml\" alt\u003d\"UndoRedoState0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":178,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":179,"author":{"gitId":"-"},"content":"Step 2. The user executes `delete 5` command to delete the 5th person in the address book. The `delete` command calls `Model#commitAddressBook()`, causing the modified state of the address book after the `delete 5` command executes to be saved in the `addressBookStateList`, and the `currentStatePointer` is shifted to the newly inserted address book state.","lastModifiedDate":"2020-05-23"},{"lineNumber":180,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":181,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState1.puml\" alt\u003d\"UndoRedoState1\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":182,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":183,"author":{"gitId":"-"},"content":"Step 3. The user executes `add n/David …​` to add a new person. The `add` command also calls `Model#commitAddressBook()`, causing another modified address book state to be saved into the `addressBookStateList`.","lastModifiedDate":"2020-05-23"},{"lineNumber":184,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":185,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState2.puml\" alt\u003d\"UndoRedoState2\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":186,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":187,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":188,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":189,"author":{"gitId":"-"},"content":"**Note:** If a command fails its execution, it will not call `Model#commitAddressBook()`, so the address book state will not be saved into the `addressBookStateList`.","lastModifiedDate":"2023-09-12"},{"lineNumber":190,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":191,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":192,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":193,"author":{"gitId":"-"},"content":"Step 4. The user now decides that adding the person was a mistake, and decides to undo that action by executing the `undo` command. The `undo` command will call `Model#undoAddressBook()`, which will shift the `currentStatePointer` once to the left, pointing it to the previous address book state, and restores the address book to that state.","lastModifiedDate":"2020-05-23"},{"lineNumber":194,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":195,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState3.puml\" alt\u003d\"UndoRedoState3\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":196,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":197,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":198,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":199,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":200,"author":{"gitId":"-"},"content":"**Note:** If the `currentStatePointer` is at index 0, pointing to the initial AddressBook state, then there are no previous AddressBook states to restore. The `undo` command uses `Model#canUndoAddressBook()` to check if this is the case. If so, it will return an error to the user rather","lastModifiedDate":"2023-09-12"},{"lineNumber":201,"author":{"gitId":"-"},"content":"than attempting to perform the undo.","lastModifiedDate":"2020-05-23"},{"lineNumber":202,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":203,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":204,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":205,"author":{"gitId":"-"},"content":"The following sequence diagram shows how an undo operation goes through the `Logic` component:","lastModifiedDate":"2024-02-09"},{"lineNumber":206,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":207,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoSequenceDiagram-Logic.puml\" alt\u003d\"UndoSequenceDiagram-Logic\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":208,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":209,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":210,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":211,"author":{"gitId":"-"},"content":"**Note:** The lifeline for `UndoCommand` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram.","lastModifiedDate":"2023-09-12"},{"lineNumber":212,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":213,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":214,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":215,"author":{"gitId":"-"},"content":"Similarly, how an undo operation goes through the `Model` component is shown below:","lastModifiedDate":"2024-02-09"},{"lineNumber":216,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":217,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoSequenceDiagram-Model.puml\" alt\u003d\"UndoSequenceDiagram-Model\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":218,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":219,"author":{"gitId":"-"},"content":"The `redo` command does the opposite — it calls `Model#redoAddressBook()`, which shifts the `currentStatePointer` once to the right, pointing to the previously undone state, and restores the address book to that state.","lastModifiedDate":"2020-05-23"},{"lineNumber":220,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":221,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":222,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":223,"author":{"gitId":"-"},"content":"**Note:** If the `currentStatePointer` is at index `addressBookStateList.size() - 1`, pointing to the latest address book state, then there are no undone AddressBook states to restore. The `redo` command uses `Model#canRedoAddressBook()` to check if this is the case. If so, it will return an error to the user rather than attempting to perform the redo.","lastModifiedDate":"2023-09-12"},{"lineNumber":224,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":225,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":226,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":227,"author":{"gitId":"-"},"content":"Step 5. The user then decides to execute the command `list`. Commands that do not modify the address book, such as `list`, will usually not call `Model#commitAddressBook()`, `Model#undoAddressBook()` or `Model#redoAddressBook()`. Thus, the `addressBookStateList` remains unchanged.","lastModifiedDate":"2020-05-23"},{"lineNumber":228,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":229,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState4.puml\" alt\u003d\"UndoRedoState4\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":230,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":231,"author":{"gitId":"-"},"content":"Step 6. The user executes `clear`, which calls `Model#commitAddressBook()`. Since the `currentStatePointer` is not pointing at the end of the `addressBookStateList`, all address book states after the `currentStatePointer` will be purged. Reason: It no longer makes sense to redo the `add n/David …​` command. This is the behavior that most modern desktop applications follow.","lastModifiedDate":"2020-05-23"},{"lineNumber":232,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":233,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState5.puml\" alt\u003d\"UndoRedoState5\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":234,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":235,"author":{"gitId":"-"},"content":"The following activity diagram summarizes what happens when a user executes a new command:","lastModifiedDate":"2020-05-23"},{"lineNumber":236,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":237,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/CommitActivityDiagram.puml\" width\u003d\"250\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":238,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":239,"author":{"gitId":"-"},"content":"#### Design considerations:","lastModifiedDate":"2021-07-31"},{"lineNumber":240,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":241,"author":{"gitId":"-"},"content":"**Aspect: How undo \u0026 redo executes:**","lastModifiedDate":"2021-07-31"},{"lineNumber":242,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":243,"author":{"gitId":"-"},"content":"* **Alternative 1 (current choice):** Saves the entire address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":244,"author":{"gitId":"-"},"content":" * Pros: Easy to implement.","lastModifiedDate":"2020-05-23"},{"lineNumber":245,"author":{"gitId":"-"},"content":" * Cons: May have performance issues in terms of memory usage.","lastModifiedDate":"2020-05-23"},{"lineNumber":246,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":247,"author":{"gitId":"-"},"content":"* **Alternative 2:** Individual command knows how to undo/redo by","lastModifiedDate":"2020-05-23"},{"lineNumber":248,"author":{"gitId":"-"},"content":" itself.","lastModifiedDate":"2020-05-23"},{"lineNumber":249,"author":{"gitId":"-"},"content":" * Pros: Will use less memory (e.g. for `delete`, just save the person being deleted).","lastModifiedDate":"2020-05-23"},{"lineNumber":250,"author":{"gitId":"-"},"content":" * Cons: We must ensure that the implementation of each individual command are correct.","lastModifiedDate":"2020-05-23"},{"lineNumber":251,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":252,"author":{"gitId":"-"},"content":"_{more aspects and alternatives to be added}_","lastModifiedDate":"2020-05-23"},{"lineNumber":253,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":254,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Data archiving","lastModifiedDate":"2020-05-23"},{"lineNumber":255,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":256,"author":{"gitId":"-"},"content":"_{Explain here how the data archiving feature will be implemented}_","lastModifiedDate":"2020-05-23"},{"lineNumber":257,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":258,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":259,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":260,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":261,"author":{"gitId":"-"},"content":"## **Documentation, logging, testing, configuration, dev-ops**","lastModifiedDate":"2020-06-07"},{"lineNumber":262,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":263,"author":{"gitId":"-"},"content":"* [Documentation guide](Documentation.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":264,"author":{"gitId":"-"},"content":"* [Testing guide](Testing.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":265,"author":{"gitId":"-"},"content":"* [Logging guide](Logging.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":266,"author":{"gitId":"-"},"content":"* [Configuration guide](Configuration.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":267,"author":{"gitId":"-"},"content":"* [DevOps guide](DevOps.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":268,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":269,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":270,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":271,"author":{"gitId":"-"},"content":"## **Appendix: Requirements**","lastModifiedDate":"2020-05-23"},{"lineNumber":272,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":273,"author":{"gitId":"-"},"content":"### Product scope","lastModifiedDate":"2020-05-23"},{"lineNumber":274,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":275,"author":{"gitId":"-"},"content":"**Target user profile**:","lastModifiedDate":"2020-05-23"},{"lineNumber":276,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":277,"author":{"gitId":"joelgoh1"},"content":"* a tutor who has many students ","lastModifiedDate":"2024-03-07"},{"lineNumber":278,"author":{"gitId":"joelgoh1"},"content":"* currently busy studying","lastModifiedDate":"2024-03-07"},{"lineNumber":279,"author":{"gitId":"joelgoh1"},"content":"* wants a solution for smoother academic interactions with his students","lastModifiedDate":"2024-03-07"},{"lineNumber":280,"author":{"gitId":"-"},"content":"* prefer desktop apps over other types","lastModifiedDate":"2020-05-23"},{"lineNumber":281,"author":{"gitId":"-"},"content":"* can type fast","lastModifiedDate":"2020-05-23"},{"lineNumber":282,"author":{"gitId":"-"},"content":"* prefers typing to mouse interactions","lastModifiedDate":"2020-05-26"},{"lineNumber":283,"author":{"gitId":"-"},"content":"* is reasonably comfortable using CLI apps","lastModifiedDate":"2020-05-23"},{"lineNumber":284,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":285,"author":{"gitId":"joelgoh1"},"content":"**Value proposition**: manage contacts faster than a typical mouse/GUI driven app and provides tutors a ","lastModifiedDate":"2024-03-07"},{"lineNumber":286,"author":{"gitId":"joelgoh1"},"content":"streamlined approach to communicate with and track information about their students.","lastModifiedDate":"2024-03-07"},{"lineNumber":287,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":288,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":289,"author":{"gitId":"-"},"content":"### User stories","lastModifiedDate":"2020-06-07"},{"lineNumber":290,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":291,"author":{"gitId":"-"},"content":"Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unlikely to have) - `*`","lastModifiedDate":"2020-05-23"},{"lineNumber":292,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":293,"author":{"gitId":"-"},"content":"| Priority | As a …​ | I want to …​ | So that I can…​ |","lastModifiedDate":"2020-05-23"},{"lineNumber":294,"author":{"gitId":"joelgoh1"},"content":"|----------|--------------------------------------------|----------------------------------------------|--------------------------------------------------------------------|","lastModifiedDate":"2024-03-07"},{"lineNumber":295,"author":{"gitId":"joelgoh1"},"content":"| `* * *` | user | add a student\u0027s contact | |","lastModifiedDate":"2024-03-07"},{"lineNumber":296,"author":{"gitId":"joelgoh1"},"content":"| `* * *` | user | delete a student\u0027s contact | remove entries of students that I no longer need to keep track of |","lastModifiedDate":"2024-03-07"},{"lineNumber":297,"author":{"gitId":"joelgoh1"},"content":"| `* * *` | user | edit a student\u0027s contact | correct mistakes i made when adding a contact |","lastModifiedDate":"2024-03-07"},{"lineNumber":298,"author":{"gitId":"joelgoh1"},"content":"| `* * *` | user | search for a student\u0027s contact | I can find a student\u0027s contact |","lastModifiedDate":"2024-03-07"},{"lineNumber":299,"author":{"gitId":"joelgoh1"},"content":"| `* * *` | user with many persons in the address book | view all students\u0027 contact | |","lastModifiedDate":"2024-03-07"},{"lineNumber":300,"author":{"gitId":"joelgoh1"},"content":"| `* * ` | new user | see usage instructions | refer to instructions when I forget how to use the App |","lastModifiedDate":"2024-03-07"},{"lineNumber":301,"author":{"gitId":"joelgoh1"},"content":"| `* * ` | new user | try out the programme with sample data | I can explore the functionalities of the product |","lastModifiedDate":"2024-03-07"},{"lineNumber":302,"author":{"gitId":"joelgoh1"},"content":"| `* * ` | advanced user | create shortcuts for commands | I can more efficiently type commands |","lastModifiedDate":"2024-03-07"},{"lineNumber":303,"author":{"gitId":"joelgoh1"},"content":"| `* ` | administrative tutor | broadcast information to groups of students | I can quickly relay information to my tutees |","lastModifiedDate":"2024-03-07"},{"lineNumber":304,"author":{"gitId":"joelgoh1"},"content":"| `* * ` | forgetful tutor | attach tags to tutees | I can quickly access important information related to them |","lastModifiedDate":"2024-03-07"},{"lineNumber":305,"author":{"gitId":"joelgoh1"},"content":"| `* * ` | proactive tutor | get a summary of my tutees current abilities | I can better prepare for classes |","lastModifiedDate":"2024-03-07"},{"lineNumber":306,"author":{"gitId":"joelgoh1"},"content":"| `* * ` | forgetful tutor | set and get reminders on lessons | I will not miss any lessons |","lastModifiedDate":"2024-03-07"},{"lineNumber":307,"author":{"gitId":"joelgoh1"},"content":"| `* * ` | tutor | group students by tags | I can easily communicate with different teams indicated by tags |","lastModifiedDate":"2024-03-07"},{"lineNumber":308,"author":{"gitId":"joelgoh1"},"content":"| `* * ` | clumsy typer | do fuzzy search | I can quickly find the record I need even if there are some typos |","lastModifiedDate":"2024-03-07"},{"lineNumber":309,"author":{"gitId":"joelgoh1"},"content":" ","lastModifiedDate":"2024-03-07"},{"lineNumber":310,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":311,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":312,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":313,"author":{"gitId":"-"},"content":"### Use cases","lastModifiedDate":"2020-06-07"},{"lineNumber":314,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":315,"author":{"gitId":"-"},"content":"(For all use cases below, the **System** is the `AddressBook` and the **Actor** is the `user`, unless specified otherwise)","lastModifiedDate":"2020-05-23"},{"lineNumber":316,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":317,"author":{"gitId":"-"},"content":"**Use case: Delete a person**","lastModifiedDate":"2020-05-23"},{"lineNumber":318,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":319,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2020-05-23"},{"lineNumber":320,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":321,"author":{"gitId":"-"},"content":"1. User requests to list persons","lastModifiedDate":"2020-05-23"},{"lineNumber":322,"author":{"gitId":"-"},"content":"2. AddressBook shows a list of persons","lastModifiedDate":"2020-05-23"},{"lineNumber":323,"author":{"gitId":"-"},"content":"3. User requests to delete a specific person in the list","lastModifiedDate":"2020-05-23"},{"lineNumber":324,"author":{"gitId":"-"},"content":"4. AddressBook deletes the person","lastModifiedDate":"2020-05-23"},{"lineNumber":325,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":326,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":327,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":328,"author":{"gitId":"-"},"content":"**Extensions**","lastModifiedDate":"2020-05-23"},{"lineNumber":329,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":330,"author":{"gitId":"-"},"content":"* 2a. The list is empty.","lastModifiedDate":"2020-05-23"},{"lineNumber":331,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":332,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":333,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":334,"author":{"gitId":"-"},"content":"* 3a. The given index is invalid.","lastModifiedDate":"2020-05-23"},{"lineNumber":335,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":336,"author":{"gitId":"-"},"content":" * 3a1. AddressBook shows an error message.","lastModifiedDate":"2020-05-23"},{"lineNumber":337,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":338,"author":{"gitId":"-"},"content":" Use case resumes at step 2.","lastModifiedDate":"2020-05-23"},{"lineNumber":339,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":340,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":341,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":342,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":343,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":344,"author":{"gitId":"-"},"content":"1. Should work on any _mainstream OS_ as long as it has Java `11` or above installed.","lastModifiedDate":"2020-05-23"},{"lineNumber":345,"author":{"gitId":"-"},"content":"2. Should be able to hold up to 1000 persons without a noticeable sluggishness in performance for typical usage.","lastModifiedDate":"2020-05-23"},{"lineNumber":346,"author":{"gitId":"-"},"content":"3. A user with above average typing speed for regular English text (i.e. not code, not system admin commands) should be able to accomplish most of the tasks faster using commands than using the mouse.","lastModifiedDate":"2020-05-23"},{"lineNumber":347,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":348,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":349,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":350,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":351,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":352,"author":{"gitId":"-"},"content":"* **Mainstream OS**: Windows, Linux, Unix, MacOS","lastModifiedDate":"2024-02-09"},{"lineNumber":353,"author":{"gitId":"-"},"content":"* **Private contact detail**: A contact detail that is not meant to be shared with others","lastModifiedDate":"2020-05-23"},{"lineNumber":354,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":355,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":356,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":357,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":358,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":359,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":360,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":361,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":362,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":363,"author":{"gitId":"-"},"content":"**Note:** These instructions only provide a starting point for testers to work on;","lastModifiedDate":"2023-09-12"},{"lineNumber":364,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":365,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":366,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":367,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":368,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":369,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":370,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":371,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":372,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":373,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":374,"author":{"gitId":"-"},"content":" 1. Double-click the jar file Expected: Shows the GUI with a set of sample contacts. The window size may not be optimum.","lastModifiedDate":"2020-05-23"},{"lineNumber":375,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":376,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":377,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":378,"author":{"gitId":"-"},"content":" 1. Resize the window to an optimum size. Move the window to a different location. Close the window.","lastModifiedDate":"2020-05-23"},{"lineNumber":379,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":380,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":381,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","lastModifiedDate":"2020-05-23"},{"lineNumber":382,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":383,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":384,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":385,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":386,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":387,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":388,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":389,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":390,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":391,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":392,"author":{"gitId":"-"},"content":" Expected: First contact is deleted from the list. Details of the deleted contact shown in the status message. Timestamp in the status bar is updated.","lastModifiedDate":"2020-05-23"},{"lineNumber":393,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":394,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":395,"author":{"gitId":"-"},"content":" Expected: No person is deleted. Error details shown in the status message. Status bar remains the same.","lastModifiedDate":"2020-05-23"},{"lineNumber":396,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":397,"author":{"gitId":"-"},"content":" 1. Other incorrect delete commands to try: `delete`, `delete x`, `...` (where x is larger than the list size)\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":398,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":399,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":400,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":401,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":402,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":403,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":404,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":405,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":406,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":407,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":408,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"joelgoh1":23,"-":385}},{"path":"docs/_markbind/layouts/default.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003chead-bottom\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003clink rel\u003d\"stylesheet\" href\u003d\"{{baseUrl}}/stylesheets/main.css\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003c/head-bottom\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cheader sticky\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cnavbar type\u003d\"dark\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"amanzainal"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"{{baseUrl}}/index.html\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003eTutorTrack\u003c/a\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/index.html\" class\u003d\"nav-link\"\u003eHome\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/UserGuide.html\" class\u003d\"nav-link\"\u003eUser Guide\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/DeveloperGuide.html\" class\u003d\"nav-link\"\u003eDeveloper Guide\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/AboutUs.html\" class\u003d\"nav-link\"\u003eAbout Us\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"https://github.com/se-edu/addressbook-level3\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003e\u003cmd\u003e:fab-github:\u003c/md\u003e\u003c/a\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003cli slot\u003d\"right\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003cform class\u003d\"navbar-form\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\" menu-align-right\u003e\u003c/searchbar\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003c/form\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003c/navbar\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"-"},"content":"\u003c/header\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"flex-body\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"site-nav\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"site-nav-top\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"fw-bold mb-2\" style\u003d\"font-size: 1.25rem;\"\u003eSite Map\u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003csite-nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"-"},"content":"* [Home]({{ baseUrl }}/index.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"-"},"content":"* [User Guide]({{ baseUrl }}/UserGuide.html) :expanded:","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * [Quick Start]({{ baseUrl }}/UserGuide.html#quick-start)","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"-"},"content":" * [Features]({{ baseUrl }}/UserGuide.html#features)","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * [FAQ]({{ baseUrl }}/UserGuide.html#faq)","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * [Command Summary]({{ baseUrl }}/UserGuide.html#faq)","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"-"},"content":"* [Developer Guide]({{ baseUrl }}/DeveloperGuide.html) :expanded:","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * [Acknowledgements]({{ baseUrl }}/DeveloperGuide.html#acknowledgements)","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * [Setting Up]({{ baseUrl }}/DeveloperGuide.html#setting-up-getting-started)","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"-"},"content":" * [Design]({{ baseUrl }}/DeveloperGuide.html#design)","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * [Implementation]({{ baseUrl }}/DeveloperGuide.html#implementation)","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"-"},"content":" * [Documentation, logging, testing, configuration, dev-ops]({{ baseUrl }}/DeveloperGuide.html#documentation-logging-testing-configuration-dev-ops)","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * [Appendix: Requirements]({{ baseUrl }}/DeveloperGuide.html#appendix-requirements)","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * [Appendix: Instructions for manual testing]({{ baseUrl }}/DeveloperGuide.html#appendix-instructions-for-manual-testing)","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"-"},"content":"* Tutorials","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * [Tracing code]({{ baseUrl }}/tutorials/TracingCode.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"-"},"content":" * [Adding a command]({{ baseUrl }}/tutorials/AddRemark.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"-"},"content":" * [Removing Fields]({{ baseUrl }}/tutorials/RemovingFields.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* [About Us]({{ baseUrl }}/AboutUs.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003c/site-nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003c/nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003cdiv id\u003d\"content-wrapper\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"-"},"content":" {{ content }}","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"page-nav\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"-"},"content":" \u003cpage-nav /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"-"},"content":" \u003c/nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"-"},"content":" \u003cscroll-top-button\u003e\u003c/scroll-top-button\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"-"},"content":"\u003cfooter\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u003c!-- Support MarkBind by including a link to us on your landing page! --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"text-center\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"-"},"content":" \u003csmall\u003e[\u003cmd\u003e**Powered by**\u003c/md\u003e \u003cimg src\u003d\"https://markbind.org/favicon.ico\" width\u003d\"30\"\u003e {{MarkBind}}, generated on {{timestamp}}]\u003c/small\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"-"},"content":"\u003c/footer\u003e","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"-":66,"amanzainal":1}}] diff --git a/AY2324S2-CS2103-F08-4_tp_master/commits.json b/AY2324S2-CS2103-F08-4_tp_master/commits.json index 23be0b2b..8d57fd64 100644 --- a/AY2324S2-CS2103-F08-4_tp_master/commits.json +++ b/AY2324S2-CS2103-F08-4_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"joelgoh1":[{"date":"2024-03-07","commitResults":[{"hash":"9d3905f2e16870b7c7fc50b937596d2f2afe86c7","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":15,"deletions":11}}}]}],"yap-zong-xin":[],"amanzainal":[{"date":"2024-03-05","commitResults":[{"hash":"fd5d5934fb5bfa242fd47c280dce718f3fc8df53","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"Display CodeCov badge","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":0}}},{"hash":"c6bfc9feedcf85fb3adb9d8015bd0f792eda2252","isMergeCommit":true,"messageTitle":"Merge pull request #1 from amanzainal/master","messageBody":"Update README.md","fileTypesAndContributionMap":{}},{"hash":"812736e2955769c45257d2e44d0ab2de3a2e62e6","isMergeCommit":true,"messageTitle":"Merge branch \u0027switch-docs-to-markbind\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e4f6cb65456483bf09561543b1f4ea19f5b5ab30","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c3b1d254caebc297a3ab39b0bb4ac8834d6f7102","isMergeCommit":false,"messageTitle":"Update site config","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"4ea9084dcfbb6ffcda01bdcba6c5e3d9efeea282","isMergeCommit":true,"messageTitle":"Merge pull request #2 from amanzainal/master","messageBody":"Set up MarkBind","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"joelgoh1":{"docs":15,"functional-code":0,"test-code":0},"yap-zong-xin":{"docs":0,"functional-code":0,"test-code":0},"amanzainal":{"docs":2,"functional-code":0,"test-code":0}},"authorContributionVariance":{"joelgoh1":44.83673,"yap-zong-xin":0.0,"amanzainal":0.5969388},"authorDisplayNameMap":{"joelgoh1":"CS2103-F08-4 JOEL..FENG","yap-zong-xin":"CS2103-F08-4 YAP .. XIN","amanzainal":"CS2103-F08-4 AMAN..IDIN"}} +{"authorDailyContributionsMap":{"joelgoh1":[{"date":"2024-03-07","commitResults":[{"hash":"9d3905f2e16870b7c7fc50b937596d2f2afe86c7","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":15,"deletions":11}}},{"hash":"a145970c0f975007724f6ac592aa96c56f791bef","isMergeCommit":false,"messageTitle":"Update Developer Guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":24,"deletions":12}}}]},{"date":"2024-03-08","commitResults":[{"hash":"52b64c07c26b6acd8701174e835175c97752220e","isMergeCommit":true,"messageTitle":"Merge pull request #19 from joelgoh1/Developer-Guide-user-stories","messageBody":"Update Developer Guide","fileTypesAndContributionMap":{}}]}],"yap-zong-xin":[],"amanzainal":[{"date":"2024-03-05","commitResults":[{"hash":"fd5d5934fb5bfa242fd47c280dce718f3fc8df53","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"Display CodeCov badge","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":0}}},{"hash":"c6bfc9feedcf85fb3adb9d8015bd0f792eda2252","isMergeCommit":true,"messageTitle":"Merge pull request #1 from amanzainal/master","messageBody":"Update README.md","fileTypesAndContributionMap":{}},{"hash":"812736e2955769c45257d2e44d0ab2de3a2e62e6","isMergeCommit":true,"messageTitle":"Merge branch \u0027switch-docs-to-markbind\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e4f6cb65456483bf09561543b1f4ea19f5b5ab30","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c3b1d254caebc297a3ab39b0bb4ac8834d6f7102","isMergeCommit":false,"messageTitle":"Update site config","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"4ea9084dcfbb6ffcda01bdcba6c5e3d9efeea282","isMergeCommit":true,"messageTitle":"Merge pull request #2 from amanzainal/master","messageBody":"Set up MarkBind","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"joelgoh1":{"docs":38,"functional-code":0,"test-code":0},"yap-zong-xin":{"docs":0,"functional-code":0,"test-code":0},"amanzainal":{"docs":2,"functional-code":0,"test-code":0}},"authorContributionVariance":{"joelgoh1":239.18224,"yap-zong-xin":0.0,"amanzainal":0.56},"authorDisplayNameMap":{"joelgoh1":"CS2103-F08-4 JOEL..FENG","yap-zong-xin":"CS2103-F08-4 YAP .. XIN","amanzainal":"CS2103-F08-4 AMAN..IDIN"}} diff --git a/AY2324S2-CS2103-F09-2_tp_master/authorship.json b/AY2324S2-CS2103-F09-2_tp_master/authorship.json index 2114aedd..01eb01ea 100644 --- a/AY2324S2-CS2103-F09-2_tp_master/authorship.json +++ b/AY2324S2-CS2103-F09-2_tp_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"[![CI Status](https://github.com/se-edu/addressbook-level3/workflows/Java%20CI/badge.svg)](https://github.com/se-edu/addressbook-level3/actions)","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":"[![codecov](https://codecov.io/gh/AY2324S2-CS2103-F09-2/tp/graph/badge.svg?token\u003dAX3SGG0FMX)](https://codecov.io/gh/AY2324S2-CS2103-F09-2/tp) ","lastModifiedDate":"2024-02-18"},{"lineNumber":3,"author":{"gitId":"-"},"content":"![Ui](docs/images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"NeoHW"},"content":"**PatientSync is a desktop application meticulously crafted for nurses who prioritize the well-being of their patients above all else.** ","lastModifiedDate":"2024-03-06"},{"lineNumber":6,"author":{"gitId":"NeoHW"},"content":"It allows you to input intimate details about your patients, such as food preferences and family conditions. While it has a GUI, most of the user interactions happen using a CLI (Command Line Interface).","lastModifiedDate":"2024-03-06"},{"lineNumber":7,"author":{"gitId":"NeoHW"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":8,"author":{"gitId":"NeoHW"},"content":"## User Profile","lastModifiedDate":"2024-03-06"},{"lineNumber":9,"author":{"gitId":"NeoHW"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":10,"author":{"gitId":"NeoHW"},"content":"**Target Users:** Nurses in a hospital setting","lastModifiedDate":"2024-03-06"},{"lineNumber":11,"author":{"gitId":"NeoHW"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":12,"author":{"gitId":"NeoHW"},"content":"**Key Challenges:**","lastModifiedDate":"2024-03-06"},{"lineNumber":13,"author":{"gitId":"NeoHW"},"content":"- Managing diverse patient needs and preferences.","lastModifiedDate":"2024-03-06"},{"lineNumber":14,"author":{"gitId":"NeoHW"},"content":"- Providing personalized care while juggling a busy schedule.","lastModifiedDate":"2024-03-06"},{"lineNumber":15,"author":{"gitId":"NeoHW"},"content":"- Ensuring accurate and up-to-date patient information is readily accessible.","lastModifiedDate":"2024-03-06"},{"lineNumber":16,"author":{"gitId":"NeoHW"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":17,"author":{"gitId":"NeoHW"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":18,"author":{"gitId":"NeoHW"},"content":"## Value Proposition","lastModifiedDate":"2024-03-06"},{"lineNumber":19,"author":{"gitId":"NeoHW"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":20,"author":{"gitId":"NeoHW"},"content":"**PatientSync** is meticulously crafted for nurses who prioritize the well-being of their patients above all else. It allows nurses to input intimate details about their patients, such as food preferences and family conditions. This personalized approach enables nurses to deliver tailored care that meets the unique needs of each individual.","lastModifiedDate":"2024-03-06"},{"lineNumber":21,"author":{"gitId":"NeoHW"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":22,"author":{"gitId":"NeoHW"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":23,"author":{"gitId":"NeoHW"},"content":"| Project Links | Description |","lastModifiedDate":"2024-03-06"},{"lineNumber":24,"author":{"gitId":"NeoHW"},"content":"|-------------------------|------------------------------------------------------------------|","lastModifiedDate":"2024-03-06"},{"lineNumber":25,"author":{"gitId":"NeoHW"},"content":"| [Project Website](https://ay2324s2-cs2103-f09-2.github.io/tp/) | Official website for the PatientSync desktop application. |","lastModifiedDate":"2024-03-06"},{"lineNumber":26,"author":{"gitId":"NeoHW"},"content":"| [User Guide](UserGuide.html#quick-start) | Quick Start guide for users interested in using PatientSync. |","lastModifiedDate":"2024-03-06"},{"lineNumber":27,"author":{"gitId":"NeoHW"},"content":"| [Developer Guide](DeveloperGuide.html) | Comprehensive guide for developers interested in contributing to PatientSync. |","lastModifiedDate":"2024-03-06"},{"lineNumber":28,"author":{"gitId":"NeoHW"},"content":"| [About Us](AboutUs.html) | Learn more about the team behind the PatientSync project. |","lastModifiedDate":"2024-03-06"},{"lineNumber":29,"author":{"gitId":"NeoHW"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":30,"author":{"gitId":"NeoHW"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":31,"author":{"gitId":"NeoHW"},"content":"**Acknowledgements** ","lastModifiedDate":"2024-03-06"},{"lineNumber":32,"author":{"gitId":"NeoHW"},"content":"This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-03-06"},{"lineNumber":33,"author":{"gitId":"NeoHW"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":34,"author":{"gitId":"NeoHW"},"content":"* Libraries used: [JavaFX](https://openjfx.io/), [Jackson](https://github.com/FasterXML/jackson), [JUnit5](https://github.com/junit-team/junit5)","lastModifiedDate":"2024-03-06"},{"lineNumber":35,"author":{"gitId":"NeoHW"},"content":"","lastModifiedDate":"2024-03-06"}],"authorContributionMap":{"NeoHW":31,"-":4}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"About Us\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"# About Us","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"-"},"content":"We are a team based in the [School of Computing, National University of Singapore](http://www.comp.nus.edu.sg).","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":10,"author":{"gitId":"-"},"content":"You can reach us at the email `seer[at]comp.nus.edu.sg`","lastModifiedDate":"2020-06-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-06-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":"## Project team","lastModifiedDate":"2020-06-07"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":14,"author":{"gitId":"NeoHW"},"content":"### Neo Haowei","lastModifiedDate":"2024-03-04"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"NeoHW"},"content":"\u003cimg src\u003d\"images/neohw.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"NeoHW"},"content":"[[github](http://github.com/NeoHW)]","lastModifiedDate":"2024-03-04"},{"lineNumber":19,"author":{"gitId":"NeoHW"},"content":"[[portfolio](https://ay2324s2-cs2103-f09-2.github.io/tp/)]","lastModifiedDate":"2024-03-04"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"* Role: Team Lead","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"NeoHW"},"content":"* Responsibilities: Overall project coordination, code review","lastModifiedDate":"2024-03-04"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"SherisseTJW"},"content":"### Sherisse Tan Jing Wen","lastModifiedDate":"2024-03-06"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"SherisseTJW"},"content":"\u003cimg src\u003d\"images/sherissetjw.PNG\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-06"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"SherisseTJW"},"content":"[[github](http://github.com/SherisseTJW)] [[portfolio](https://ay2324s2-cs2103-f09-2.github.io/tp/)]","lastModifiedDate":"2024-03-06"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"SherisseTJW"},"content":"* Role: Integration","lastModifiedDate":"2024-03-06"},{"lineNumber":31,"author":{"gitId":"SherisseTJW"},"content":"* Responsibilities: In charge of versioning of the code, maintaining the code repository,","lastModifiedDate":"2024-03-06"},{"lineNumber":32,"author":{"gitId":"SherisseTJW"},"content":"integrating various parts of the software to create a whole.","lastModifiedDate":"2024-03-06"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"guohuang88"},"content":"### Li Guohuang","lastModifiedDate":"2024-03-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"guohuang88"},"content":"\u003cimg src\u003d\"images/guohuang88.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"guohuang88"},"content":"[[github](http://github.com/guohuang88)]","lastModifiedDate":"2024-03-05"},{"lineNumber":39,"author":{"gitId":"guohuang88"},"content":"[[portfolio](https://ay2324s2-cs2103-f09-2.github.io/tp/)]","lastModifiedDate":"2024-03-05"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":41,"author":{"gitId":"guohuang88"},"content":"* Role: Testing","lastModifiedDate":"2024-03-05"},{"lineNumber":42,"author":{"gitId":"guohuang88"},"content":"* Responsibilities: Ensure project is tested properly and on time.","lastModifiedDate":"2024-03-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"ZhiWei1010"},"content":"### Tan Zhi Wei","lastModifiedDate":"2024-03-04"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"ZhiWei1010"},"content":"\u003cimg src\u003d\"images/zhiwei1010.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"ZhiWei1010"},"content":"[[github](http://github.com/ZhiWei1010)]","lastModifiedDate":"2024-03-04"},{"lineNumber":49,"author":{"gitId":"ZhiWei1010"},"content":"[[portfolio](https://ay2324s2-cs2103-f09-2.github.io/tp/)]","lastModifiedDate":"2024-03-04"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"ZhiWei1010"},"content":"* Role: Deliverables and deadlines","lastModifiedDate":"2024-03-04"},{"lineNumber":52,"author":{"gitId":"ZhiWei1010"},"content":"* Responsibilities: Ensure project deliverables are done on time and in the right format.","lastModifiedDate":"2024-03-04"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":54,"author":{"gitId":"choowengyan"},"content":"### Choo Weng Yan","lastModifiedDate":"2024-03-07"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":56,"author":{"gitId":"choowengyan"},"content":"\u003cimg src\u003d\"images/choowengyan.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-07"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":58,"author":{"gitId":"choowengyan"},"content":"[[github](http://github.com/choowengyan)] ","lastModifiedDate":"2024-03-07"},{"lineNumber":59,"author":{"gitId":"choowengyan"},"content":"[[portfolio](https://ay2324s2-cs2103-f09-2.github.io/tp/)]","lastModifiedDate":"2024-03-07"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":61,"author":{"gitId":"choowengyan"},"content":"* Role: Scheduling and tracking","lastModifiedDate":"2024-03-07"},{"lineNumber":62,"author":{"gitId":"choowengyan"},"content":"* Responsibilities: Ensure that team\u0027s task is scheduled properly based on each iteration and milestone, ","lastModifiedDate":"2024-03-07"},{"lineNumber":63,"author":{"gitId":"choowengyan"},"content":"optimizing project timeline, updating task status and providing accurate information.","lastModifiedDate":"2024-03-07"}],"authorContributionMap":{"guohuang88":6,"SherisseTJW":6,"ZhiWei1010":6,"choowengyan":7,"NeoHW":5,"-":33}},{"path":"docs/DeveloperGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"Developer Guide\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":" pageNav: 3","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"-"},"content":"# AB-3 Developer Guide","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c!-- * Table of Contents --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003cpage-nav-print /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":14,"author":{"gitId":"-"},"content":"## **Acknowledgements**","lastModifiedDate":"2021-07-30"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":16,"author":{"gitId":"-"},"content":"_{ list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the original source as well }_","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":18,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2021-07-30"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"-"},"content":"## **Setting up, getting started**","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"Refer to the guide [_Setting up and getting started_](SettingUp.md).","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"-"},"content":"## **Design**","lastModifiedDate":"2020-05-23"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":"### Architecture","lastModifiedDate":"2021-07-31"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ArchitectureDiagram.puml\" width\u003d\"280\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"-"},"content":"The ***Architecture Diagram*** given above explains the high-level design of the App.","lastModifiedDate":"2021-07-31"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"-"},"content":"Given below is a quick overview of main components and how they interact with each other.","lastModifiedDate":"2021-07-31"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":36,"author":{"gitId":"-"},"content":"**Main components of the architecture**","lastModifiedDate":"2021-07-31"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":"**`Main`** (consisting of classes [`Main`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/Main.java) and [`MainApp`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/MainApp.java)) is in charge of the app launch and shut down.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"-"},"content":"* At app launch, it initializes the other components in the correct sequence, and connects them up with each other.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"-"},"content":"* At shut down, it shuts down the other components and invokes cleanup methods where necessary.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":"The bulk of the app\u0027s work is done by the following four components:","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"-"},"content":"* [**`UI`**](#ui-component): The UI of the App.","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":"* [**`Logic`**](#logic-component): The command executor.","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":"* [**`Model`**](#model-component): Holds the data of the App in memory.","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* [**`Storage`**](#storage-component): Reads data from, and writes data to, the hard disk.","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"-"},"content":"[**`Commons`**](#common-classes) represents a collection of classes used by multiple other components.","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"-"},"content":"**How the architecture components interact with each other**","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":"The *Sequence Diagram* below shows how the components interact with each other for the scenario where the user issues the command `delete 1`.","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ArchitectureSequenceDiagram.puml\" width\u003d\"574\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":57,"author":{"gitId":"-"},"content":"Each of the four main components (also shown in the diagram above),","lastModifiedDate":"2021-07-31"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":59,"author":{"gitId":"-"},"content":"* defines its *API* in an `interface` with the same name as the Component.","lastModifiedDate":"2021-07-31"},{"lineNumber":60,"author":{"gitId":"-"},"content":"* implements its functionality using a concrete `{Component Name}Manager` class (which follows the corresponding API `interface` mentioned in the previous point.","lastModifiedDate":"2021-07-31"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":62,"author":{"gitId":"-"},"content":"For example, the `Logic` component defines its API in the `Logic.java` interface and implements its functionality using the `LogicManager.java` class which follows the `Logic` interface. Other components interact with a given component through its interface rather than the concrete class (reason: to prevent outside component\u0027s being coupled to the implementation of a component), as illustrated in the (partial) class diagram below.","lastModifiedDate":"2021-07-31"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":64,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ComponentManagers.puml\" width\u003d\"300\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":66,"author":{"gitId":"-"},"content":"The sections below give more details of each component.","lastModifiedDate":"2020-05-23"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":68,"author":{"gitId":"-"},"content":"### UI component","lastModifiedDate":"2020-05-23"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":70,"author":{"gitId":"-"},"content":"The **API** of this component is specified in [`Ui.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/Ui.java)","lastModifiedDate":"2021-07-31"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":72,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UiClassDiagram.puml\" alt\u003d\"Structure of the UI Component\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":74,"author":{"gitId":"-"},"content":"The UI consists of a `MainWindow` that is made up of parts e.g.`CommandBox`, `ResultDisplay`, `PersonListPanel`, `StatusBarFooter` etc. All these, including the `MainWindow`, inherit from the abstract `UiPart` class which captures the commonalities between classes that represent parts of the visible GUI.","lastModifiedDate":"2021-07-31"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":76,"author":{"gitId":"-"},"content":"The `UI` component uses the JavaFx UI framework. The layout of these UI parts are defined in matching `.fxml` files that are in the `src/main/resources/view` folder. For example, the layout of the [`MainWindow`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/MainWindow.java) is specified in [`MainWindow.fxml`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/resources/view/MainWindow.fxml)","lastModifiedDate":"2021-07-31"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":78,"author":{"gitId":"-"},"content":"The `UI` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":80,"author":{"gitId":"-"},"content":"* executes user commands using the `Logic` component.","lastModifiedDate":"2021-07-31"},{"lineNumber":81,"author":{"gitId":"-"},"content":"* listens for changes to `Model` data so that the UI can be updated with the modified data.","lastModifiedDate":"2021-07-31"},{"lineNumber":82,"author":{"gitId":"-"},"content":"* keeps a reference to the `Logic` component, because the `UI` relies on the `Logic` to execute commands.","lastModifiedDate":"2021-07-31"},{"lineNumber":83,"author":{"gitId":"-"},"content":"* depends on some classes in the `Model` component, as it displays `Person` object residing in the `Model`.","lastModifiedDate":"2021-07-31"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":85,"author":{"gitId":"-"},"content":"### Logic component","lastModifiedDate":"2020-05-23"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":87,"author":{"gitId":"-"},"content":"**API** : [`Logic.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/logic/Logic.java)","lastModifiedDate":"2021-07-31"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":89,"author":{"gitId":"-"},"content":"Here\u0027s a (partial) class diagram of the `Logic` component:","lastModifiedDate":"2021-07-31"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":91,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/LogicClassDiagram.puml\" width\u003d\"550\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":93,"author":{"gitId":"-"},"content":"The sequence diagram below illustrates the interactions within the `Logic` component, taking `execute(\"delete 1\")` API call as an example.","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":95,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/DeleteSequenceDiagram.puml\" alt\u003d\"Interactions Inside the Logic Component for the `delete 1` Command\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":97,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":98,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":99,"author":{"gitId":"-"},"content":"**Note:** The lifeline for `DeleteCommandParser` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline continues till the end of diagram.","lastModifiedDate":"2023-09-12"},{"lineNumber":100,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":101,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":102,"author":{"gitId":"-"},"content":"How the `Logic` component works:","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"-"},"content":"1. When `Logic` is called upon to execute a command, it is passed to an `AddressBookParser` object which in turn creates a parser that matches the command (e.g., `DeleteCommandParser`) and uses it to parse the command.","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"-"},"content":"1. This results in a `Command` object (more precisely, an object of one of its subclasses e.g., `DeleteCommand`) which is executed by the `LogicManager`.","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"-"},"content":"1. The command can communicate with the `Model` when it is executed (e.g. to delete a person).\u003cbr\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":107,"author":{"gitId":"-"},"content":" Note that although this is shown as a single step in the diagram above (for simplicity), in the code it can take several interactions (between the command object and the `Model`) to achieve.","lastModifiedDate":"2024-02-09"},{"lineNumber":108,"author":{"gitId":"-"},"content":"1. The result of the command execution is encapsulated as a `CommandResult` object which is returned back from `Logic`.","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"-"},"content":"Here are the other classes in `Logic` (omitted from the class diagram above) that are used for parsing a user command:","lastModifiedDate":"2021-07-31"},{"lineNumber":111,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":112,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ParserClasses.puml\" width\u003d\"600\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":114,"author":{"gitId":"-"},"content":"How the parsing works:","lastModifiedDate":"2021-07-31"},{"lineNumber":115,"author":{"gitId":"-"},"content":"* When called upon to parse a user command, the `AddressBookParser` class creates an `XYZCommandParser` (`XYZ` is a placeholder for the specific command name e.g., `AddCommandParser`) which uses the other classes shown above to parse the user command and create a `XYZCommand` object (e.g., `AddCommand`) which the `AddressBookParser` returns back as a `Command` object.","lastModifiedDate":"2021-07-31"},{"lineNumber":116,"author":{"gitId":"-"},"content":"* All `XYZCommandParser` classes (e.g., `AddCommandParser`, `DeleteCommandParser`, ...) inherit from the `Parser` interface so that they can be treated similarly where possible e.g, during testing.","lastModifiedDate":"2021-07-31"},{"lineNumber":117,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":118,"author":{"gitId":"-"},"content":"### Model component","lastModifiedDate":"2021-07-31"},{"lineNumber":119,"author":{"gitId":"-"},"content":"**API** : [`Model.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/model/Model.java)","lastModifiedDate":"2020-05-23"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":121,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ModelClassDiagram.puml\" width\u003d\"450\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":122,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":123,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":124,"author":{"gitId":"-"},"content":"The `Model` component,","lastModifiedDate":"2021-07-31"},{"lineNumber":125,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":126,"author":{"gitId":"-"},"content":"* stores the address book data i.e., all `Person` objects (which are contained in a `UniquePersonList` object).","lastModifiedDate":"2021-07-31"},{"lineNumber":127,"author":{"gitId":"-"},"content":"* stores the currently \u0027selected\u0027 `Person` objects (e.g., results of a search query) as a separate _filtered_ list which is exposed to outsiders as an unmodifiable `ObservableList\u003cPerson\u003e` that can be \u0027observed\u0027 e.g. the UI can be bound to this list so that the UI automatically updates when the data in the list change.","lastModifiedDate":"2021-07-31"},{"lineNumber":128,"author":{"gitId":"-"},"content":"* stores a `UserPref` object that represents the user’s preferences. This is exposed to the outside as a `ReadOnlyUserPref` objects.","lastModifiedDate":"2021-07-31"},{"lineNumber":129,"author":{"gitId":"-"},"content":"* does not depend on any of the other three components (as the `Model` represents data entities of the domain, they should make sense on their own without depending on other components)","lastModifiedDate":"2021-07-31"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":131,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":132,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":133,"author":{"gitId":"-"},"content":"**Note:** An alternative (arguably, a more OOP) model is given below. It has a `Tag` list in the `AddressBook`, which `Person` references. This allows `AddressBook` to only require one `Tag` object per unique tag, instead of each `Person` needing their own `Tag` objects.\u003cbr\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":134,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":135,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/BetterModelClassDiagram.puml\" width\u003d\"450\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":137,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":138,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":139,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":140,"author":{"gitId":"-"},"content":"### Storage component","lastModifiedDate":"2020-05-23"},{"lineNumber":141,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":142,"author":{"gitId":"-"},"content":"**API** : [`Storage.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/storage/Storage.java)","lastModifiedDate":"2020-05-23"},{"lineNumber":143,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":144,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/StorageClassDiagram.puml\" width\u003d\"550\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":145,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":146,"author":{"gitId":"-"},"content":"The `Storage` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":147,"author":{"gitId":"-"},"content":"* can save both address book data and user preference data in JSON format, and read them back into corresponding objects.","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"-"},"content":"* inherits from both `AddressBookStorage` and `UserPrefStorage`, which means it can be treated as either one (if only the functionality of only one is needed).","lastModifiedDate":"2021-07-31"},{"lineNumber":149,"author":{"gitId":"-"},"content":"* depends on some classes in the `Model` component (because the `Storage` component\u0027s job is to save/retrieve objects that belong to the `Model`)","lastModifiedDate":"2021-07-21"},{"lineNumber":150,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":151,"author":{"gitId":"-"},"content":"### Common classes","lastModifiedDate":"2020-05-23"},{"lineNumber":152,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":153,"author":{"gitId":"-"},"content":"Classes used by multiple components are in the `seedu.addressbook.commons` package.","lastModifiedDate":"2020-05-23"},{"lineNumber":154,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":155,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":156,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":157,"author":{"gitId":"-"},"content":"## **Implementation**","lastModifiedDate":"2020-05-23"},{"lineNumber":158,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":159,"author":{"gitId":"-"},"content":"This section describes some noteworthy details on how certain features are implemented.","lastModifiedDate":"2020-05-23"},{"lineNumber":160,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":161,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Undo/redo feature","lastModifiedDate":"2020-06-07"},{"lineNumber":162,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":163,"author":{"gitId":"-"},"content":"#### Proposed Implementation","lastModifiedDate":"2020-05-23"},{"lineNumber":164,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":165,"author":{"gitId":"-"},"content":"The proposed undo/redo mechanism is facilitated by `VersionedAddressBook`. It extends `AddressBook` with an undo/redo history, stored internally as an `addressBookStateList` and `currentStatePointer`. Additionally, it implements the following operations:","lastModifiedDate":"2020-05-23"},{"lineNumber":166,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":167,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#commit()` — Saves the current address book state in its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":168,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#undo()` — Restores the previous address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":169,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#redo()` — Restores a previously undone address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":170,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":171,"author":{"gitId":"-"},"content":"These operations are exposed in the `Model` interface as `Model#commitAddressBook()`, `Model#undoAddressBook()` and `Model#redoAddressBook()` respectively.","lastModifiedDate":"2020-05-23"},{"lineNumber":172,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":173,"author":{"gitId":"-"},"content":"Given below is an example usage scenario and how the undo/redo mechanism behaves at each step.","lastModifiedDate":"2020-05-23"},{"lineNumber":174,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":175,"author":{"gitId":"-"},"content":"Step 1. The user launches the application for the first time. The `VersionedAddressBook` will be initialized with the initial address book state, and the `currentStatePointer` pointing to that single address book state.","lastModifiedDate":"2020-05-23"},{"lineNumber":176,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":177,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState0.puml\" alt\u003d\"UndoRedoState0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":178,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":179,"author":{"gitId":"-"},"content":"Step 2. The user executes `delete 5` command to delete the 5th person in the address book. The `delete` command calls `Model#commitAddressBook()`, causing the modified state of the address book after the `delete 5` command executes to be saved in the `addressBookStateList`, and the `currentStatePointer` is shifted to the newly inserted address book state.","lastModifiedDate":"2020-05-23"},{"lineNumber":180,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":181,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState1.puml\" alt\u003d\"UndoRedoState1\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":182,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":183,"author":{"gitId":"-"},"content":"Step 3. The user executes `add n/David …​` to add a new person. The `add` command also calls `Model#commitAddressBook()`, causing another modified address book state to be saved into the `addressBookStateList`.","lastModifiedDate":"2020-05-23"},{"lineNumber":184,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":185,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState2.puml\" alt\u003d\"UndoRedoState2\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":186,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":187,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":188,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":189,"author":{"gitId":"-"},"content":"**Note:** If a command fails its execution, it will not call `Model#commitAddressBook()`, so the address book state will not be saved into the `addressBookStateList`.","lastModifiedDate":"2023-09-12"},{"lineNumber":190,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":191,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":192,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":193,"author":{"gitId":"-"},"content":"Step 4. The user now decides that adding the person was a mistake, and decides to undo that action by executing the `undo` command. The `undo` command will call `Model#undoAddressBook()`, which will shift the `currentStatePointer` once to the left, pointing it to the previous address book state, and restores the address book to that state.","lastModifiedDate":"2020-05-23"},{"lineNumber":194,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":195,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState3.puml\" alt\u003d\"UndoRedoState3\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":196,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":197,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":198,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":199,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":200,"author":{"gitId":"-"},"content":"**Note:** If the `currentStatePointer` is at index 0, pointing to the initial AddressBook state, then there are no previous AddressBook states to restore. The `undo` command uses `Model#canUndoAddressBook()` to check if this is the case. If so, it will return an error to the user rather","lastModifiedDate":"2023-09-12"},{"lineNumber":201,"author":{"gitId":"-"},"content":"than attempting to perform the undo.","lastModifiedDate":"2020-05-23"},{"lineNumber":202,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":203,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":204,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":205,"author":{"gitId":"-"},"content":"The following sequence diagram shows how an undo operation goes through the `Logic` component:","lastModifiedDate":"2024-02-09"},{"lineNumber":206,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":207,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoSequenceDiagram-Logic.puml\" alt\u003d\"UndoSequenceDiagram-Logic\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":208,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":209,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":210,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":211,"author":{"gitId":"-"},"content":"**Note:** The lifeline for `UndoCommand` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram.","lastModifiedDate":"2023-09-12"},{"lineNumber":212,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":213,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":214,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":215,"author":{"gitId":"-"},"content":"Similarly, how an undo operation goes through the `Model` component is shown below:","lastModifiedDate":"2024-02-09"},{"lineNumber":216,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":217,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoSequenceDiagram-Model.puml\" alt\u003d\"UndoSequenceDiagram-Model\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":218,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":219,"author":{"gitId":"-"},"content":"The `redo` command does the opposite — it calls `Model#redoAddressBook()`, which shifts the `currentStatePointer` once to the right, pointing to the previously undone state, and restores the address book to that state.","lastModifiedDate":"2020-05-23"},{"lineNumber":220,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":221,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":222,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":223,"author":{"gitId":"-"},"content":"**Note:** If the `currentStatePointer` is at index `addressBookStateList.size() - 1`, pointing to the latest address book state, then there are no undone AddressBook states to restore. The `redo` command uses `Model#canRedoAddressBook()` to check if this is the case. If so, it will return an error to the user rather than attempting to perform the redo.","lastModifiedDate":"2023-09-12"},{"lineNumber":224,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":225,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":226,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":227,"author":{"gitId":"-"},"content":"Step 5. The user then decides to execute the command `list`. Commands that do not modify the address book, such as `list`, will usually not call `Model#commitAddressBook()`, `Model#undoAddressBook()` or `Model#redoAddressBook()`. Thus, the `addressBookStateList` remains unchanged.","lastModifiedDate":"2020-05-23"},{"lineNumber":228,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":229,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState4.puml\" alt\u003d\"UndoRedoState4\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":230,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":231,"author":{"gitId":"-"},"content":"Step 6. The user executes `clear`, which calls `Model#commitAddressBook()`. Since the `currentStatePointer` is not pointing at the end of the `addressBookStateList`, all address book states after the `currentStatePointer` will be purged. Reason: It no longer makes sense to redo the `add n/David …​` command. This is the behavior that most modern desktop applications follow.","lastModifiedDate":"2020-05-23"},{"lineNumber":232,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":233,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState5.puml\" alt\u003d\"UndoRedoState5\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":234,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":235,"author":{"gitId":"-"},"content":"The following activity diagram summarizes what happens when a user executes a new command:","lastModifiedDate":"2020-05-23"},{"lineNumber":236,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":237,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/CommitActivityDiagram.puml\" width\u003d\"250\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":238,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":239,"author":{"gitId":"-"},"content":"#### Design considerations:","lastModifiedDate":"2021-07-31"},{"lineNumber":240,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":241,"author":{"gitId":"-"},"content":"**Aspect: How undo \u0026 redo executes:**","lastModifiedDate":"2021-07-31"},{"lineNumber":242,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":243,"author":{"gitId":"-"},"content":"* **Alternative 1 (current choice):** Saves the entire address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":244,"author":{"gitId":"-"},"content":" * Pros: Easy to implement.","lastModifiedDate":"2020-05-23"},{"lineNumber":245,"author":{"gitId":"-"},"content":" * Cons: May have performance issues in terms of memory usage.","lastModifiedDate":"2020-05-23"},{"lineNumber":246,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":247,"author":{"gitId":"-"},"content":"* **Alternative 2:** Individual command knows how to undo/redo by","lastModifiedDate":"2020-05-23"},{"lineNumber":248,"author":{"gitId":"-"},"content":" itself.","lastModifiedDate":"2020-05-23"},{"lineNumber":249,"author":{"gitId":"-"},"content":" * Pros: Will use less memory (e.g. for `delete`, just save the person being deleted).","lastModifiedDate":"2020-05-23"},{"lineNumber":250,"author":{"gitId":"-"},"content":" * Cons: We must ensure that the implementation of each individual command are correct.","lastModifiedDate":"2020-05-23"},{"lineNumber":251,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":252,"author":{"gitId":"-"},"content":"_{more aspects and alternatives to be added}_","lastModifiedDate":"2020-05-23"},{"lineNumber":253,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":254,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Data archiving","lastModifiedDate":"2020-05-23"},{"lineNumber":255,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":256,"author":{"gitId":"-"},"content":"_{Explain here how the data archiving feature will be implemented}_","lastModifiedDate":"2020-05-23"},{"lineNumber":257,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":258,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":259,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":260,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":261,"author":{"gitId":"-"},"content":"## **Documentation, logging, testing, configuration, dev-ops**","lastModifiedDate":"2020-06-07"},{"lineNumber":262,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":263,"author":{"gitId":"-"},"content":"* [Documentation guide](Documentation.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":264,"author":{"gitId":"-"},"content":"* [Testing guide](Testing.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":265,"author":{"gitId":"-"},"content":"* [Logging guide](Logging.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":266,"author":{"gitId":"-"},"content":"* [Configuration guide](Configuration.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":267,"author":{"gitId":"-"},"content":"* [DevOps guide](DevOps.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":268,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":269,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":270,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":271,"author":{"gitId":"-"},"content":"## **Appendix: Requirements**","lastModifiedDate":"2020-05-23"},{"lineNumber":272,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":273,"author":{"gitId":"-"},"content":"### Product scope","lastModifiedDate":"2020-05-23"},{"lineNumber":274,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":275,"author":{"gitId":"-"},"content":"**Target user profile**:","lastModifiedDate":"2020-05-23"},{"lineNumber":276,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":277,"author":{"gitId":"NeoHW"},"content":"- has a need to manage a significant number of patients ","lastModifiedDate":"2024-03-06"},{"lineNumber":278,"author":{"gitId":"NeoHW"},"content":"- values comprehensive patient information for tailored treatment","lastModifiedDate":"2024-03-06"},{"lineNumber":279,"author":{"gitId":"NeoHW"},"content":"- prefer desktop apps over other types ","lastModifiedDate":"2024-03-06"},{"lineNumber":280,"author":{"gitId":"NeoHW"},"content":"- can type fast ","lastModifiedDate":"2024-03-06"},{"lineNumber":281,"author":{"gitId":"NeoHW"},"content":"- prefers typing to mouse interactions ","lastModifiedDate":"2024-03-06"},{"lineNumber":282,"author":{"gitId":"NeoHW"},"content":"- is reasonably comfortable using CLI apps","lastModifiedDate":"2024-03-06"},{"lineNumber":283,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":284,"author":{"gitId":"NeoHW"},"content":"**Value proposition**: ","lastModifiedDate":"2024-03-06"},{"lineNumber":285,"author":{"gitId":"NeoHW"},"content":"- manage patients\u0027 information faster than a typical mouse/GUI driven app","lastModifiedDate":"2024-03-06"},{"lineNumber":286,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":287,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":288,"author":{"gitId":"-"},"content":"### User stories","lastModifiedDate":"2020-06-07"},{"lineNumber":289,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":290,"author":{"gitId":"-"},"content":"Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unlikely to have) - `*`","lastModifiedDate":"2020-05-23"},{"lineNumber":291,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":292,"author":{"gitId":"-"},"content":"| Priority | As a …​ | I want to …​ | So that I can…​ |","lastModifiedDate":"2020-05-23"},{"lineNumber":293,"author":{"gitId":"NeoHW"},"content":"|----------|--------------------------------------------|------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------|","lastModifiedDate":"2024-03-06"},{"lineNumber":294,"author":{"gitId":"NeoHW"},"content":"| `***` | Nurse | easily view the user guide | learn more about the product and how to use whenever I need to |","lastModifiedDate":"2024-03-06"},{"lineNumber":295,"author":{"gitId":"NeoHW"},"content":"| `***` | Nurse | add patient\u0027s information | add new patients and easily remember their preferences to make a personalized connection |","lastModifiedDate":"2024-03-06"},{"lineNumber":296,"author":{"gitId":"NeoHW"},"content":"| `***` | Nurse | delete patient\u0027s information | remove patients who have been discharged |","lastModifiedDate":"2024-03-06"},{"lineNumber":297,"author":{"gitId":"NeoHW"},"content":"| `***` | Nurse | list all patient\u0027s information | easily find the details of my patients |","lastModifiedDate":"2024-03-06"},{"lineNumber":298,"author":{"gitId":"NeoHW"},"content":"| `***` | Nurse | add important dates for my patients | keep track of my patients\u0027 appointments and see my overall schedule |","lastModifiedDate":"2024-03-06"},{"lineNumber":299,"author":{"gitId":"NeoHW"},"content":"| `***` | Nurse | delete important dates for my patients | delete my patients\u0027 appointments if they are canceled |","lastModifiedDate":"2024-03-06"},{"lineNumber":300,"author":{"gitId":"NeoHW"},"content":"| `***` | Nurse | add tags to my patients | group the patients into categories |","lastModifiedDate":"2024-03-06"},{"lineNumber":301,"author":{"gitId":"NeoHW"},"content":"| `***` | Nurse | find patient with a specific tag | quickly locate individuals with similar conditions, treatments, or requirements without having to scroll through the entire patient list |","lastModifiedDate":"2024-03-06"},{"lineNumber":302,"author":{"gitId":"NeoHW"},"content":"| `***` | Nurse | save all previously added patients | ensure details of the patient would not be lost |","lastModifiedDate":"2024-03-06"},{"lineNumber":303,"author":{"gitId":"NeoHW"},"content":"| `**` | Nurse | edit patient\u0027s information | have the most updated information of my patients at all times |","lastModifiedDate":"2024-03-06"},{"lineNumber":304,"author":{"gitId":"NeoHW"},"content":"| `**` | Nurse | edit important dates for my patients | edit my patients\u0027 appointments if they are changed |","lastModifiedDate":"2024-03-06"},{"lineNumber":305,"author":{"gitId":"NeoHW"},"content":"| `**` | Nurse | edit tags from my patients | edit mistyped tags |","lastModifiedDate":"2024-03-06"},{"lineNumber":306,"author":{"gitId":"NeoHW"},"content":"| `**` | Nurse | delete tags from my patients | delete the tag if it no longer applies |","lastModifiedDate":"2024-03-06"},{"lineNumber":307,"author":{"gitId":"NeoHW"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":308,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":309,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":310,"author":{"gitId":"-"},"content":"### Use cases","lastModifiedDate":"2020-06-07"},{"lineNumber":311,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":312,"author":{"gitId":"guohuang88"},"content":"(For all use cases below, the **System** is the `PatientSync` and the **Actor** is the `nurse`, unless specified otherwise)","lastModifiedDate":"2024-03-06"},{"lineNumber":313,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":314,"author":{"gitId":"guohuang88"},"content":"**Use case: Add a patient**","lastModifiedDate":"2024-03-06"},{"lineNumber":315,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":316,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2020-05-23"},{"lineNumber":317,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":318,"author":{"gitId":"guohuang88"},"content":"1. Nurse requests to add a patient","lastModifiedDate":"2024-03-06"},{"lineNumber":319,"author":{"gitId":"guohuang88"},"content":"2. PatientSync adds the patient","lastModifiedDate":"2024-03-06"},{"lineNumber":320,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":321,"author":{"gitId":"guohuang88"},"content":" Use case ends.","lastModifiedDate":"2024-03-06"},{"lineNumber":322,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":323,"author":{"gitId":"guohuang88"},"content":"**Extensions**","lastModifiedDate":"2024-03-06"},{"lineNumber":324,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":325,"author":{"gitId":"guohuang88"},"content":"* 2a. The information key in is wrong.","lastModifiedDate":"2024-03-06"},{"lineNumber":326,"author":{"gitId":"guohuang88"},"content":" * 2a1. PatientSync shows an error message.","lastModifiedDate":"2024-03-06"},{"lineNumber":327,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":328,"author":{"gitId":"guohuang88"},"content":" Use case ends.","lastModifiedDate":"2024-03-06"},{"lineNumber":329,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":330,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":331,"author":{"gitId":"guohuang88"},"content":"**Use case: Delete a patient**","lastModifiedDate":"2024-03-06"},{"lineNumber":332,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":333,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2024-03-06"},{"lineNumber":334,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":335,"author":{"gitId":"guohuang88"},"content":"1. Nurse requests to list patients","lastModifiedDate":"2024-03-06"},{"lineNumber":336,"author":{"gitId":"guohuang88"},"content":"2. PatientSync shows a list of patients","lastModifiedDate":"2024-03-06"},{"lineNumber":337,"author":{"gitId":"guohuang88"},"content":"3. Nurse requests to delete a specific patient in the list","lastModifiedDate":"2024-03-06"},{"lineNumber":338,"author":{"gitId":"guohuang88"},"content":"4. PatientSync deletes the patient","lastModifiedDate":"2024-03-06"},{"lineNumber":339,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":340,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2024-03-06"},{"lineNumber":341,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":342,"author":{"gitId":"-"},"content":"**Extensions**","lastModifiedDate":"2024-03-06"},{"lineNumber":343,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":344,"author":{"gitId":"-"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-03-06"},{"lineNumber":345,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":346,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2024-03-06"},{"lineNumber":347,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":348,"author":{"gitId":"-"},"content":"* 3a. The given index is invalid.","lastModifiedDate":"2024-03-06"},{"lineNumber":349,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":350,"author":{"gitId":"guohuang88"},"content":" * 3a1. PatientSync shows an error message.","lastModifiedDate":"2024-03-06"},{"lineNumber":351,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":352,"author":{"gitId":"-"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-03-06"},{"lineNumber":353,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":354,"author":{"gitId":"guohuang88"},"content":"**Use case: List all patients**","lastModifiedDate":"2024-03-06"},{"lineNumber":355,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":356,"author":{"gitId":"guohuang88"},"content":"**MSS**","lastModifiedDate":"2024-03-06"},{"lineNumber":357,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":358,"author":{"gitId":"guohuang88"},"content":"1. Nurse requests to list patients","lastModifiedDate":"2024-03-06"},{"lineNumber":359,"author":{"gitId":"guohuang88"},"content":"2. PatientSync shows a list of patients","lastModifiedDate":"2024-03-06"},{"lineNumber":360,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":361,"author":{"gitId":"guohuang88"},"content":" Use case ends.","lastModifiedDate":"2024-03-06"},{"lineNumber":362,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":363,"author":{"gitId":"guohuang88"},"content":"**Extensions**","lastModifiedDate":"2024-03-06"},{"lineNumber":364,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":365,"author":{"gitId":"guohuang88"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-03-06"},{"lineNumber":366,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":367,"author":{"gitId":"guohuang88"},"content":" Use case ends.","lastModifiedDate":"2024-03-06"},{"lineNumber":368,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":369,"author":{"gitId":"guohuang88"},"content":"**Use case: Add important date for a patient**","lastModifiedDate":"2024-03-06"},{"lineNumber":370,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":371,"author":{"gitId":"guohuang88"},"content":"**MSS**","lastModifiedDate":"2024-03-06"},{"lineNumber":372,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":373,"author":{"gitId":"guohuang88"},"content":"1. Nurse requests to list patients","lastModifiedDate":"2024-03-06"},{"lineNumber":374,"author":{"gitId":"guohuang88"},"content":"2. PatientSync shows a list of patients","lastModifiedDate":"2024-03-06"},{"lineNumber":375,"author":{"gitId":"guohuang88"},"content":"3. Nurse requests to add an important date for a specific patient in the list","lastModifiedDate":"2024-03-06"},{"lineNumber":376,"author":{"gitId":"guohuang88"},"content":"4. PatientSync adds an important date for the patient","lastModifiedDate":"2024-03-06"},{"lineNumber":377,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":378,"author":{"gitId":"guohuang88"},"content":" Use case ends.","lastModifiedDate":"2024-03-06"},{"lineNumber":379,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":380,"author":{"gitId":"guohuang88"},"content":"**Extensions**","lastModifiedDate":"2024-03-06"},{"lineNumber":381,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":382,"author":{"gitId":"guohuang88"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-03-06"},{"lineNumber":383,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":384,"author":{"gitId":"guohuang88"},"content":" Use case ends.","lastModifiedDate":"2024-03-06"},{"lineNumber":385,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":386,"author":{"gitId":"guohuang88"},"content":"* 3a. The given index is invalid.","lastModifiedDate":"2024-03-06"},{"lineNumber":387,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":388,"author":{"gitId":"guohuang88"},"content":" * 3a1. PatientSync shows an error message.","lastModifiedDate":"2024-03-06"},{"lineNumber":389,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":390,"author":{"gitId":"guohuang88"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-03-06"},{"lineNumber":391,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":392,"author":{"gitId":"guohuang88"},"content":"**Use case: Delete an important date for a patient**","lastModifiedDate":"2024-03-06"},{"lineNumber":393,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":394,"author":{"gitId":"guohuang88"},"content":"**MSS**","lastModifiedDate":"2024-03-06"},{"lineNumber":395,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":396,"author":{"gitId":"guohuang88"},"content":"1. Nurse requests to list patients","lastModifiedDate":"2024-03-06"},{"lineNumber":397,"author":{"gitId":"guohuang88"},"content":"2. PatientSync shows a list of patients","lastModifiedDate":"2024-03-06"},{"lineNumber":398,"author":{"gitId":"guohuang88"},"content":"3. Nurse requests to delete an important date for a specific patient in the list","lastModifiedDate":"2024-03-06"},{"lineNumber":399,"author":{"gitId":"guohuang88"},"content":"4. PatientSync deletes an important date the patient","lastModifiedDate":"2024-03-06"},{"lineNumber":400,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":401,"author":{"gitId":"guohuang88"},"content":" Use case ends.","lastModifiedDate":"2024-03-06"},{"lineNumber":402,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":403,"author":{"gitId":"guohuang88"},"content":"**Extensions**","lastModifiedDate":"2024-03-06"},{"lineNumber":404,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":405,"author":{"gitId":"guohuang88"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-03-06"},{"lineNumber":406,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":407,"author":{"gitId":"guohuang88"},"content":" Use case ends.","lastModifiedDate":"2024-03-06"},{"lineNumber":408,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":409,"author":{"gitId":"guohuang88"},"content":"* 3a. The given index is invalid.","lastModifiedDate":"2024-03-06"},{"lineNumber":410,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":411,"author":{"gitId":"guohuang88"},"content":" * 3a1. PatientSync shows an error message.","lastModifiedDate":"2024-03-06"},{"lineNumber":412,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":413,"author":{"gitId":"guohuang88"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-03-06"},{"lineNumber":414,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":415,"author":{"gitId":"guohuang88"},"content":"**Use case: Add tag to a patient**","lastModifiedDate":"2024-03-06"},{"lineNumber":416,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":417,"author":{"gitId":"guohuang88"},"content":"**MSS**","lastModifiedDate":"2024-03-06"},{"lineNumber":418,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":419,"author":{"gitId":"guohuang88"},"content":"1. Nurse requests to list patients","lastModifiedDate":"2024-03-06"},{"lineNumber":420,"author":{"gitId":"guohuang88"},"content":"2. PatientSync shows a list of patients","lastModifiedDate":"2024-03-06"},{"lineNumber":421,"author":{"gitId":"guohuang88"},"content":"3. Nurse requests to add a tag to a specific patient in the list","lastModifiedDate":"2024-03-06"},{"lineNumber":422,"author":{"gitId":"guohuang88"},"content":"4. PatientSync add a tag to the patient","lastModifiedDate":"2024-03-06"},{"lineNumber":423,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":424,"author":{"gitId":"guohuang88"},"content":" Use case ends.","lastModifiedDate":"2024-03-06"},{"lineNumber":425,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":426,"author":{"gitId":"guohuang88"},"content":"**Extensions**","lastModifiedDate":"2024-03-06"},{"lineNumber":427,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":428,"author":{"gitId":"guohuang88"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-03-06"},{"lineNumber":429,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":430,"author":{"gitId":"guohuang88"},"content":" Use case ends.","lastModifiedDate":"2024-03-06"},{"lineNumber":431,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":432,"author":{"gitId":"guohuang88"},"content":"* 3a. The given index is invalid.","lastModifiedDate":"2024-03-06"},{"lineNumber":433,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":434,"author":{"gitId":"guohuang88"},"content":" * 3a1. PatientSync shows an error message.","lastModifiedDate":"2024-03-06"},{"lineNumber":435,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":436,"author":{"gitId":"guohuang88"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-03-06"},{"lineNumber":437,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":438,"author":{"gitId":"guohuang88"},"content":"**Use case: Delete tag from a patient**","lastModifiedDate":"2024-03-06"},{"lineNumber":439,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":440,"author":{"gitId":"guohuang88"},"content":"**MSS**","lastModifiedDate":"2024-03-06"},{"lineNumber":441,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":442,"author":{"gitId":"guohuang88"},"content":"1. Nurse requests to list patients","lastModifiedDate":"2024-03-06"},{"lineNumber":443,"author":{"gitId":"guohuang88"},"content":"2. PatientSync shows a list of patients","lastModifiedDate":"2024-03-06"},{"lineNumber":444,"author":{"gitId":"guohuang88"},"content":"3. Nurse requests to delete a tag from a specific patient in the list","lastModifiedDate":"2024-03-06"},{"lineNumber":445,"author":{"gitId":"guohuang88"},"content":"4. PatientSync deletes a tag from the patient","lastModifiedDate":"2024-03-06"},{"lineNumber":446,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":447,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":448,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":449,"author":{"gitId":"-"},"content":"**Extensions**","lastModifiedDate":"2020-05-23"},{"lineNumber":450,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":451,"author":{"gitId":"-"},"content":"* 2a. The list is empty.","lastModifiedDate":"2020-05-23"},{"lineNumber":452,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":453,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":454,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":455,"author":{"gitId":"-"},"content":"* 3a. The given index is invalid.","lastModifiedDate":"2020-05-23"},{"lineNumber":456,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":457,"author":{"gitId":"guohuang88"},"content":" * 3a1. PatientSync shows an error message.","lastModifiedDate":"2024-03-06"},{"lineNumber":458,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":459,"author":{"gitId":"-"},"content":" Use case resumes at step 2.","lastModifiedDate":"2020-05-23"},{"lineNumber":460,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":461,"author":{"gitId":"guohuang88"},"content":"**Use case: Find patients by a tag**","lastModifiedDate":"2024-03-06"},{"lineNumber":462,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":463,"author":{"gitId":"guohuang88"},"content":"**MSS**","lastModifiedDate":"2024-03-06"},{"lineNumber":464,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":465,"author":{"gitId":"guohuang88"},"content":"1. Nurse requests to list patients","lastModifiedDate":"2024-03-06"},{"lineNumber":466,"author":{"gitId":"guohuang88"},"content":"2. PatientSync shows a list of patients","lastModifiedDate":"2024-03-06"},{"lineNumber":467,"author":{"gitId":"guohuang88"},"content":"3. Nurse requests to find patients with a specific tag in the list","lastModifiedDate":"2024-03-06"},{"lineNumber":468,"author":{"gitId":"guohuang88"},"content":"4. PatientSync finds patients with the tag","lastModifiedDate":"2024-03-06"},{"lineNumber":469,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":470,"author":{"gitId":"guohuang88"},"content":" Use case ends.","lastModifiedDate":"2024-03-06"},{"lineNumber":471,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":472,"author":{"gitId":"guohuang88"},"content":"**Extensions**","lastModifiedDate":"2024-03-06"},{"lineNumber":473,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":474,"author":{"gitId":"guohuang88"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-03-06"},{"lineNumber":475,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":476,"author":{"gitId":"guohuang88"},"content":" Use case ends.","lastModifiedDate":"2024-03-06"},{"lineNumber":477,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":478,"author":{"gitId":"guohuang88"},"content":"* 3a. The given index is invalid.","lastModifiedDate":"2024-03-06"},{"lineNumber":479,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":480,"author":{"gitId":"guohuang88"},"content":" * 3a1. PatientSync shows an error message.","lastModifiedDate":"2024-03-06"},{"lineNumber":481,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":482,"author":{"gitId":"guohuang88"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-03-06"},{"lineNumber":483,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":484,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":485,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":486,"author":{"gitId":"-"},"content":"1. Should work on any _mainstream OS_ as long as it has Java `11` or above installed.","lastModifiedDate":"2020-05-23"},{"lineNumber":487,"author":{"gitId":"NeoHW"},"content":"2. Should be able to hold up to 1000 patients without a noticeable sluggishness in performance for typical usage.","lastModifiedDate":"2024-03-06"},{"lineNumber":488,"author":{"gitId":"-"},"content":"3. A user with above average typing speed for regular English text (i.e. not code, not system admin commands) should be able to accomplish most of the tasks faster using commands than using the mouse.","lastModifiedDate":"2020-05-23"},{"lineNumber":489,"author":{"gitId":"NeoHW"},"content":"4. Should operate without the need for internet access to fulfill its core purpose.","lastModifiedDate":"2024-03-06"},{"lineNumber":490,"author":{"gitId":"NeoHW"},"content":"5. Should be designed to be usable by a person new to patient management without extensive training.","lastModifiedDate":"2024-03-06"},{"lineNumber":491,"author":{"gitId":"NeoHW"},"content":"6. Should provide clear, comprehensive error messages in plain language, guiding users on how to recover from errors due to incorrect inputs. ","lastModifiedDate":"2024-03-06"},{"lineNumber":492,"author":{"gitId":"NeoHW"},"content":"7. Should offer comprehensive, well-organized user documentation that guides users on how to effectively use PatientSync.","lastModifiedDate":"2024-03-06"},{"lineNumber":493,"author":{"gitId":"NeoHW"},"content":"8. Should provide detailed developer documentation for those looking to enhance, customize, or develop extensions. ","lastModifiedDate":"2024-03-06"},{"lineNumber":494,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":495,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":496,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":497,"author":{"gitId":"-"},"content":"* **Mainstream OS**: Windows, Linux, Unix, MacOS","lastModifiedDate":"2024-02-09"},{"lineNumber":498,"author":{"gitId":"-"},"content":"* **Private contact detail**: A contact detail that is not meant to be shared with others","lastModifiedDate":"2020-05-23"},{"lineNumber":499,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":500,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":501,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":502,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":503,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":504,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":505,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":506,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":507,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":508,"author":{"gitId":"-"},"content":"**Note:** These instructions only provide a starting point for testers to work on;","lastModifiedDate":"2023-09-12"},{"lineNumber":509,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":510,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":511,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":512,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":513,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":514,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":515,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":516,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":517,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":518,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":519,"author":{"gitId":"-"},"content":" 1. Double-click the jar file Expected: Shows the GUI with a set of sample contacts. The window size may not be optimum.","lastModifiedDate":"2020-05-23"},{"lineNumber":520,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":521,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":522,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":523,"author":{"gitId":"-"},"content":" 1. Resize the window to an optimum size. Move the window to a different location. Close the window.","lastModifiedDate":"2020-05-23"},{"lineNumber":524,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":525,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":526,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","lastModifiedDate":"2020-05-23"},{"lineNumber":527,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":528,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":529,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":530,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":531,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":532,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":533,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":534,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":535,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":536,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":537,"author":{"gitId":"-"},"content":" Expected: First contact is deleted from the list. Details of the deleted contact shown in the status message. Timestamp in the status bar is updated.","lastModifiedDate":"2020-05-23"},{"lineNumber":538,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":539,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":540,"author":{"gitId":"-"},"content":" Expected: No person is deleted. Error details shown in the status message. Status bar remains the same.","lastModifiedDate":"2020-05-23"},{"lineNumber":541,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":542,"author":{"gitId":"-"},"content":" 1. Other incorrect delete commands to try: `delete`, `delete x`, `...` (where x is larger than the list size)\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":543,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":544,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":545,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":546,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":547,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":548,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":549,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":550,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":551,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":552,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":553,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"guohuang88":135,"NeoHW":29,"-":389}},{"path":"docs/_markbind/layouts/default.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003chead-bottom\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003clink rel\u003d\"stylesheet\" href\u003d\"{{baseUrl}}/stylesheets/main.css\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003c/head-bottom\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cheader sticky\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cnavbar type\u003d\"dark\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"{{baseUrl}}/index.html\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003ePatientSync\u003c/a\u003e","lastModifiedDate":"2024-02-18"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/index.html\" class\u003d\"nav-link\"\u003eHome\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/UserGuide.html\" class\u003d\"nav-link\"\u003eUser Guide\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/DeveloperGuide.html\" class\u003d\"nav-link\"\u003eDeveloper Guide\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/AboutUs.html\" class\u003d\"nav-link\"\u003eAbout Us\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"NeoHW"},"content":" \u003cli\u003e\u003ca href\u003d\"https://github.com/AY2324S2-CS2103-F09-2/tp\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003e\u003cmd\u003e:fab-github:\u003c/md\u003e\u003c/a\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003cli slot\u003d\"right\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003cform class\u003d\"navbar-form\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\" menu-align-right\u003e\u003c/searchbar\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003c/form\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003c/navbar\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"-"},"content":"\u003c/header\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"flex-body\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"site-nav\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"site-nav-top\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"fw-bold mb-2\" style\u003d\"font-size: 1.25rem;\"\u003eSite Map\u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003csite-nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"-"},"content":"* [Home]({{ baseUrl }}/index.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"-"},"content":"* [User Guide]({{ baseUrl }}/UserGuide.html) :expanded:","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * [Quick Start]({{ baseUrl }}/UserGuide.html#quick-start)","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"-"},"content":" * [Features]({{ baseUrl }}/UserGuide.html#features)","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * [FAQ]({{ baseUrl }}/UserGuide.html#faq)","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * [Command Summary]({{ baseUrl }}/UserGuide.html#faq)","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"-"},"content":"* [Developer Guide]({{ baseUrl }}/DeveloperGuide.html) :expanded:","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * [Acknowledgements]({{ baseUrl }}/DeveloperGuide.html#acknowledgements)","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * [Setting Up]({{ baseUrl }}/DeveloperGuide.html#setting-up-getting-started)","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"-"},"content":" * [Design]({{ baseUrl }}/DeveloperGuide.html#design)","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * [Implementation]({{ baseUrl }}/DeveloperGuide.html#implementation)","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"-"},"content":" * [Documentation, logging, testing, configuration, dev-ops]({{ baseUrl }}/DeveloperGuide.html#documentation-logging-testing-configuration-dev-ops)","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * [Appendix: Requirements]({{ baseUrl }}/DeveloperGuide.html#appendix-requirements)","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * [Appendix: Instructions for manual testing]({{ baseUrl }}/DeveloperGuide.html#appendix-instructions-for-manual-testing)","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"-"},"content":"* Tutorials","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * [Tracing code]({{ baseUrl }}/tutorials/TracingCode.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"-"},"content":" * [Adding a command]({{ baseUrl }}/tutorials/AddRemark.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"-"},"content":" * [Removing Fields]({{ baseUrl }}/tutorials/RemovingFields.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* [About Us]({{ baseUrl }}/AboutUs.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003c/site-nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003c/nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003cdiv id\u003d\"content-wrapper\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"-"},"content":" {{ content }}","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"page-nav\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"-"},"content":" \u003cpage-nav /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"-"},"content":" \u003c/nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"-"},"content":" \u003cscroll-top-button\u003e\u003c/scroll-top-button\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"-"},"content":"\u003cfooter\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u003c!-- Support MarkBind by including a link to us on your landing page! --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"text-center\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"-"},"content":" \u003csmall\u003e[\u003cmd\u003e**Powered by**\u003c/md\u003e \u003cimg src\u003d\"https://markbind.org/favicon.ico\" width\u003d\"30\"\u003e {{MarkBind}}, generated on {{timestamp}}]\u003c/small\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"-"},"content":"\u003c/footer\u003e","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"NeoHW":1,"-":66}},{"path":"docs/index.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"NeoHW"},"content":"# PatientSync","lastModifiedDate":"2024-03-06"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"-"},"content":"[![CI Status](https://github.com/se-edu/addressbook-level3/workflows/Java%20CI/badge.svg)](https://github.com/se-edu/addressbook-level3/actions)","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"[![codecov](https://codecov.io/gh/se-edu/addressbook-level3/branch/master/graph/badge.svg)](https://codecov.io/gh/se-edu/addressbook-level3)","lastModifiedDate":"2020-08-07"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":11,"author":{"gitId":"-"},"content":"![Ui](images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":13,"author":{"gitId":"NeoHW"},"content":"**PatientSync is a desktop application meticulously crafted for nurses who prioritize the well-being of their patients above all else.** ","lastModifiedDate":"2024-03-06"},{"lineNumber":14,"author":{"gitId":"NeoHW"},"content":"It allows you to input intimate details about your patients, such as food preferences and family conditions. While it has a GUI, most of the user interactions happen using a CLI (Command Line Interface).","lastModifiedDate":"2024-03-06"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":17,"author":{"gitId":"NeoHW"},"content":"| Project Links | Description |","lastModifiedDate":"2024-03-06"},{"lineNumber":18,"author":{"gitId":"NeoHW"},"content":"|-------------------------|------------------------------------------------------------------|","lastModifiedDate":"2024-03-06"},{"lineNumber":19,"author":{"gitId":"NeoHW"},"content":"| [Project Website](https://ay2324s2-cs2103-f09-2.github.io/tp/) | Official website for the PatientSync desktop application. |","lastModifiedDate":"2024-03-06"},{"lineNumber":20,"author":{"gitId":"NeoHW"},"content":"| [User Guide](UserGuide.html#quick-start) | Quick Start guide for users interested in using PatientSync. |","lastModifiedDate":"2024-03-06"},{"lineNumber":21,"author":{"gitId":"NeoHW"},"content":"| [Developer Guide](DeveloperGuide.html) | Comprehensive guide for developers interested in contributing to PatientSync. |","lastModifiedDate":"2024-03-06"},{"lineNumber":22,"author":{"gitId":"NeoHW"},"content":"| [About Us](AboutUs.html) | Learn more about the team behind the PatientSync project. |","lastModifiedDate":"2024-03-06"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":25,"author":{"gitId":"-"},"content":"**Acknowledgements** ","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"NeoHW"},"content":"This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-03-06"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":"* Libraries used: [JavaFX](https://openjfx.io/), [Jackson](https://github.com/FasterXML/jackson), [JUnit5](https://github.com/junit-team/junit5)","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"NeoHW":10,"-":18}}] +[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"[![CI Status](https://github.com/se-edu/addressbook-level3/workflows/Java%20CI/badge.svg)](https://github.com/se-edu/addressbook-level3/actions)","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":"[![codecov](https://codecov.io/gh/AY2324S2-CS2103-F09-2/tp/graph/badge.svg?token\u003dAX3SGG0FMX)](https://codecov.io/gh/AY2324S2-CS2103-F09-2/tp) ","lastModifiedDate":"2024-02-18"},{"lineNumber":3,"author":{"gitId":"-"},"content":"![Ui](docs/images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"NeoHW"},"content":"**PatientSync is a desktop application meticulously crafted for nurses who prioritize the well-being of their patients above all else.** ","lastModifiedDate":"2024-03-06"},{"lineNumber":6,"author":{"gitId":"NeoHW"},"content":"It allows you to input intimate details about your patients, such as food preferences and family conditions. While it has a GUI, most of the user interactions happen using a CLI (Command Line Interface).","lastModifiedDate":"2024-03-06"},{"lineNumber":7,"author":{"gitId":"NeoHW"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":8,"author":{"gitId":"NeoHW"},"content":"## User Profile","lastModifiedDate":"2024-03-06"},{"lineNumber":9,"author":{"gitId":"NeoHW"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":10,"author":{"gitId":"NeoHW"},"content":"**Target Users:** Nurses in a hospital setting","lastModifiedDate":"2024-03-06"},{"lineNumber":11,"author":{"gitId":"NeoHW"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":12,"author":{"gitId":"NeoHW"},"content":"**Key Challenges:**","lastModifiedDate":"2024-03-06"},{"lineNumber":13,"author":{"gitId":"NeoHW"},"content":"- Managing diverse patient needs and preferences.","lastModifiedDate":"2024-03-06"},{"lineNumber":14,"author":{"gitId":"NeoHW"},"content":"- Providing personalized care while juggling a busy schedule.","lastModifiedDate":"2024-03-06"},{"lineNumber":15,"author":{"gitId":"NeoHW"},"content":"- Ensuring accurate and up-to-date patient information is readily accessible.","lastModifiedDate":"2024-03-06"},{"lineNumber":16,"author":{"gitId":"NeoHW"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":17,"author":{"gitId":"NeoHW"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":18,"author":{"gitId":"NeoHW"},"content":"## Value Proposition","lastModifiedDate":"2024-03-06"},{"lineNumber":19,"author":{"gitId":"NeoHW"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":20,"author":{"gitId":"NeoHW"},"content":"**PatientSync** is meticulously crafted for nurses who prioritize the well-being of their patients above all else. It allows nurses to input intimate details about their patients, such as food preferences and family conditions. This personalized approach enables nurses to deliver tailored care that meets the unique needs of each individual.","lastModifiedDate":"2024-03-06"},{"lineNumber":21,"author":{"gitId":"NeoHW"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":22,"author":{"gitId":"NeoHW"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":23,"author":{"gitId":"NeoHW"},"content":"| Project Links | Description |","lastModifiedDate":"2024-03-06"},{"lineNumber":24,"author":{"gitId":"NeoHW"},"content":"|-------------------------|------------------------------------------------------------------|","lastModifiedDate":"2024-03-06"},{"lineNumber":25,"author":{"gitId":"NeoHW"},"content":"| [Project Website](https://ay2324s2-cs2103-f09-2.github.io/tp/) | Official website for the PatientSync desktop application. |","lastModifiedDate":"2024-03-06"},{"lineNumber":26,"author":{"gitId":"NeoHW"},"content":"| [User Guide](UserGuide.html#quick-start) | Quick Start guide for users interested in using PatientSync. |","lastModifiedDate":"2024-03-06"},{"lineNumber":27,"author":{"gitId":"NeoHW"},"content":"| [Developer Guide](DeveloperGuide.html) | Comprehensive guide for developers interested in contributing to PatientSync. |","lastModifiedDate":"2024-03-06"},{"lineNumber":28,"author":{"gitId":"NeoHW"},"content":"| [About Us](AboutUs.html) | Learn more about the team behind the PatientSync project. |","lastModifiedDate":"2024-03-06"},{"lineNumber":29,"author":{"gitId":"NeoHW"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":30,"author":{"gitId":"NeoHW"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":31,"author":{"gitId":"NeoHW"},"content":"**Acknowledgements** ","lastModifiedDate":"2024-03-06"},{"lineNumber":32,"author":{"gitId":"NeoHW"},"content":"This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-03-06"},{"lineNumber":33,"author":{"gitId":"NeoHW"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":34,"author":{"gitId":"NeoHW"},"content":"* Libraries used: [JavaFX](https://openjfx.io/), [Jackson](https://github.com/FasterXML/jackson), [JUnit5](https://github.com/junit-team/junit5)","lastModifiedDate":"2024-03-06"},{"lineNumber":35,"author":{"gitId":"NeoHW"},"content":"","lastModifiedDate":"2024-03-06"}],"authorContributionMap":{"NeoHW":31,"-":4}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"About Us\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"# About Us","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"-"},"content":"We are a team based in the [School of Computing, National University of Singapore](http://www.comp.nus.edu.sg).","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":10,"author":{"gitId":"-"},"content":"You can reach us at the email `seer[at]comp.nus.edu.sg`","lastModifiedDate":"2020-06-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-06-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":"## Project team","lastModifiedDate":"2020-06-07"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":14,"author":{"gitId":"NeoHW"},"content":"### Neo Haowei","lastModifiedDate":"2024-03-04"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"NeoHW"},"content":"\u003cimg src\u003d\"images/neohw.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"NeoHW"},"content":"[[github](http://github.com/NeoHW)]","lastModifiedDate":"2024-03-04"},{"lineNumber":19,"author":{"gitId":"NeoHW"},"content":"[[portfolio](https://ay2324s2-cs2103-f09-2.github.io/tp/)]","lastModifiedDate":"2024-03-04"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"* Role: Team Lead","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"NeoHW"},"content":"* Responsibilities: Overall project coordination, code review","lastModifiedDate":"2024-03-04"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"SherisseTJW"},"content":"### Sherisse Tan Jing Wen","lastModifiedDate":"2024-03-06"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"SherisseTJW"},"content":"\u003cimg src\u003d\"images/sherissetjw.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-08"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"SherisseTJW"},"content":"[[github](http://github.com/SherisseTJW)] [[portfolio](https://ay2324s2-cs2103-f09-2.github.io/tp/)]","lastModifiedDate":"2024-03-06"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"SherisseTJW"},"content":"* Role: Integration","lastModifiedDate":"2024-03-06"},{"lineNumber":31,"author":{"gitId":"SherisseTJW"},"content":"* Responsibilities: In charge of versioning of the code, maintaining the code repository,","lastModifiedDate":"2024-03-06"},{"lineNumber":32,"author":{"gitId":"SherisseTJW"},"content":"integrating various parts of the software to create a whole.","lastModifiedDate":"2024-03-06"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"guohuang88"},"content":"### Li Guohuang","lastModifiedDate":"2024-03-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"guohuang88"},"content":"\u003cimg src\u003d\"images/guohuang88.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"guohuang88"},"content":"[[github](http://github.com/guohuang88)]","lastModifiedDate":"2024-03-05"},{"lineNumber":39,"author":{"gitId":"guohuang88"},"content":"[[portfolio](https://ay2324s2-cs2103-f09-2.github.io/tp/)]","lastModifiedDate":"2024-03-05"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":41,"author":{"gitId":"guohuang88"},"content":"* Role: Testing","lastModifiedDate":"2024-03-05"},{"lineNumber":42,"author":{"gitId":"guohuang88"},"content":"* Responsibilities: Ensure project is tested properly and on time.","lastModifiedDate":"2024-03-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"ZhiWei1010"},"content":"### Tan Zhi Wei","lastModifiedDate":"2024-03-04"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"ZhiWei1010"},"content":"\u003cimg src\u003d\"images/zhiwei1010.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"ZhiWei1010"},"content":"[[github](http://github.com/ZhiWei1010)]","lastModifiedDate":"2024-03-04"},{"lineNumber":49,"author":{"gitId":"ZhiWei1010"},"content":"[[portfolio](https://ay2324s2-cs2103-f09-2.github.io/tp/)]","lastModifiedDate":"2024-03-04"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"ZhiWei1010"},"content":"* Role: Deliverables and deadlines","lastModifiedDate":"2024-03-04"},{"lineNumber":52,"author":{"gitId":"ZhiWei1010"},"content":"* Responsibilities: Ensure project deliverables are done on time and in the right format.","lastModifiedDate":"2024-03-04"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":54,"author":{"gitId":"choowengyan"},"content":"### Choo Weng Yan","lastModifiedDate":"2024-03-07"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":56,"author":{"gitId":"choowengyan"},"content":"\u003cimg src\u003d\"images/choowengyan.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-07"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":58,"author":{"gitId":"choowengyan"},"content":"[[github](http://github.com/choowengyan)] ","lastModifiedDate":"2024-03-07"},{"lineNumber":59,"author":{"gitId":"choowengyan"},"content":"[[portfolio](https://ay2324s2-cs2103-f09-2.github.io/tp/)]","lastModifiedDate":"2024-03-07"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":61,"author":{"gitId":"choowengyan"},"content":"* Role: Scheduling and tracking","lastModifiedDate":"2024-03-07"},{"lineNumber":62,"author":{"gitId":"choowengyan"},"content":"* Responsibilities: Ensure that team\u0027s task is scheduled properly based on each iteration and milestone, ","lastModifiedDate":"2024-03-07"},{"lineNumber":63,"author":{"gitId":"choowengyan"},"content":"optimizing project timeline, updating task status and providing accurate information.","lastModifiedDate":"2024-03-07"}],"authorContributionMap":{"guohuang88":6,"SherisseTJW":6,"ZhiWei1010":6,"choowengyan":7,"NeoHW":5,"-":33}},{"path":"docs/DeveloperGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"Developer Guide\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":" pageNav: 3","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"NeoHW"},"content":"# PatientSync Developer Guide","lastModifiedDate":"2024-03-08"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c!-- * Table of Contents --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003cpage-nav-print /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":14,"author":{"gitId":"-"},"content":"## **Acknowledgements**","lastModifiedDate":"2021-07-30"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":16,"author":{"gitId":"-"},"content":"_{ list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the original source as well }_","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":18,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2021-07-30"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"-"},"content":"## **Setting up, getting started**","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"Refer to the guide [_Setting up and getting started_](SettingUp.md).","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"-"},"content":"## **Design**","lastModifiedDate":"2020-05-23"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":"### Architecture","lastModifiedDate":"2021-07-31"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ArchitectureDiagram.puml\" width\u003d\"280\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"-"},"content":"The ***Architecture Diagram*** given above explains the high-level design of the App.","lastModifiedDate":"2021-07-31"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"-"},"content":"Given below is a quick overview of main components and how they interact with each other.","lastModifiedDate":"2021-07-31"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":36,"author":{"gitId":"-"},"content":"**Main components of the architecture**","lastModifiedDate":"2021-07-31"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":"**`Main`** (consisting of classes [`Main`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/Main.java) and [`MainApp`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/MainApp.java)) is in charge of the app launch and shut down.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"-"},"content":"* At app launch, it initializes the other components in the correct sequence, and connects them up with each other.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"-"},"content":"* At shut down, it shuts down the other components and invokes cleanup methods where necessary.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":"The bulk of the app\u0027s work is done by the following four components:","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"-"},"content":"* [**`UI`**](#ui-component): The UI of the App.","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":"* [**`Logic`**](#logic-component): The command executor.","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":"* [**`Model`**](#model-component): Holds the data of the App in memory.","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* [**`Storage`**](#storage-component): Reads data from, and writes data to, the hard disk.","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"-"},"content":"[**`Commons`**](#common-classes) represents a collection of classes used by multiple other components.","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"-"},"content":"**How the architecture components interact with each other**","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":"The *Sequence Diagram* below shows how the components interact with each other for the scenario where the user issues the command `delete 1`.","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ArchitectureSequenceDiagram.puml\" width\u003d\"574\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":57,"author":{"gitId":"-"},"content":"Each of the four main components (also shown in the diagram above),","lastModifiedDate":"2021-07-31"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":59,"author":{"gitId":"-"},"content":"* defines its *API* in an `interface` with the same name as the Component.","lastModifiedDate":"2021-07-31"},{"lineNumber":60,"author":{"gitId":"-"},"content":"* implements its functionality using a concrete `{Component Name}Manager` class (which follows the corresponding API `interface` mentioned in the previous point.","lastModifiedDate":"2021-07-31"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":62,"author":{"gitId":"-"},"content":"For example, the `Logic` component defines its API in the `Logic.java` interface and implements its functionality using the `LogicManager.java` class which follows the `Logic` interface. Other components interact with a given component through its interface rather than the concrete class (reason: to prevent outside component\u0027s being coupled to the implementation of a component), as illustrated in the (partial) class diagram below.","lastModifiedDate":"2021-07-31"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":64,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ComponentManagers.puml\" width\u003d\"300\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":66,"author":{"gitId":"-"},"content":"The sections below give more details of each component.","lastModifiedDate":"2020-05-23"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":68,"author":{"gitId":"-"},"content":"### UI component","lastModifiedDate":"2020-05-23"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":70,"author":{"gitId":"-"},"content":"The **API** of this component is specified in [`Ui.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/Ui.java)","lastModifiedDate":"2021-07-31"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":72,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UiClassDiagram.puml\" alt\u003d\"Structure of the UI Component\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":74,"author":{"gitId":"-"},"content":"The UI consists of a `MainWindow` that is made up of parts e.g.`CommandBox`, `ResultDisplay`, `PersonListPanel`, `StatusBarFooter` etc. All these, including the `MainWindow`, inherit from the abstract `UiPart` class which captures the commonalities between classes that represent parts of the visible GUI.","lastModifiedDate":"2021-07-31"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":76,"author":{"gitId":"-"},"content":"The `UI` component uses the JavaFx UI framework. The layout of these UI parts are defined in matching `.fxml` files that are in the `src/main/resources/view` folder. For example, the layout of the [`MainWindow`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/MainWindow.java) is specified in [`MainWindow.fxml`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/resources/view/MainWindow.fxml)","lastModifiedDate":"2021-07-31"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":78,"author":{"gitId":"-"},"content":"The `UI` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":80,"author":{"gitId":"-"},"content":"* executes user commands using the `Logic` component.","lastModifiedDate":"2021-07-31"},{"lineNumber":81,"author":{"gitId":"-"},"content":"* listens for changes to `Model` data so that the UI can be updated with the modified data.","lastModifiedDate":"2021-07-31"},{"lineNumber":82,"author":{"gitId":"-"},"content":"* keeps a reference to the `Logic` component, because the `UI` relies on the `Logic` to execute commands.","lastModifiedDate":"2021-07-31"},{"lineNumber":83,"author":{"gitId":"-"},"content":"* depends on some classes in the `Model` component, as it displays `Person` object residing in the `Model`.","lastModifiedDate":"2021-07-31"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":85,"author":{"gitId":"-"},"content":"### Logic component","lastModifiedDate":"2020-05-23"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":87,"author":{"gitId":"-"},"content":"**API** : [`Logic.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/logic/Logic.java)","lastModifiedDate":"2021-07-31"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":89,"author":{"gitId":"-"},"content":"Here\u0027s a (partial) class diagram of the `Logic` component:","lastModifiedDate":"2021-07-31"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":91,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/LogicClassDiagram.puml\" width\u003d\"550\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":93,"author":{"gitId":"-"},"content":"The sequence diagram below illustrates the interactions within the `Logic` component, taking `execute(\"delete 1\")` API call as an example.","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":95,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/DeleteSequenceDiagram.puml\" alt\u003d\"Interactions Inside the Logic Component for the `delete 1` Command\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":97,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":98,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":99,"author":{"gitId":"-"},"content":"**Note:** The lifeline for `DeleteCommandParser` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline continues till the end of diagram.","lastModifiedDate":"2023-09-12"},{"lineNumber":100,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":101,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":102,"author":{"gitId":"-"},"content":"How the `Logic` component works:","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"-"},"content":"1. When `Logic` is called upon to execute a command, it is passed to an `AddressBookParser` object which in turn creates a parser that matches the command (e.g., `DeleteCommandParser`) and uses it to parse the command.","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"-"},"content":"1. This results in a `Command` object (more precisely, an object of one of its subclasses e.g., `DeleteCommand`) which is executed by the `LogicManager`.","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"-"},"content":"1. The command can communicate with the `Model` when it is executed (e.g. to delete a person).\u003cbr\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":107,"author":{"gitId":"-"},"content":" Note that although this is shown as a single step in the diagram above (for simplicity), in the code it can take several interactions (between the command object and the `Model`) to achieve.","lastModifiedDate":"2024-02-09"},{"lineNumber":108,"author":{"gitId":"-"},"content":"1. The result of the command execution is encapsulated as a `CommandResult` object which is returned back from `Logic`.","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"-"},"content":"Here are the other classes in `Logic` (omitted from the class diagram above) that are used for parsing a user command:","lastModifiedDate":"2021-07-31"},{"lineNumber":111,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":112,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ParserClasses.puml\" width\u003d\"600\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":114,"author":{"gitId":"-"},"content":"How the parsing works:","lastModifiedDate":"2021-07-31"},{"lineNumber":115,"author":{"gitId":"-"},"content":"* When called upon to parse a user command, the `AddressBookParser` class creates an `XYZCommandParser` (`XYZ` is a placeholder for the specific command name e.g., `AddCommandParser`) which uses the other classes shown above to parse the user command and create a `XYZCommand` object (e.g., `AddCommand`) which the `AddressBookParser` returns back as a `Command` object.","lastModifiedDate":"2021-07-31"},{"lineNumber":116,"author":{"gitId":"-"},"content":"* All `XYZCommandParser` classes (e.g., `AddCommandParser`, `DeleteCommandParser`, ...) inherit from the `Parser` interface so that they can be treated similarly where possible e.g, during testing.","lastModifiedDate":"2021-07-31"},{"lineNumber":117,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":118,"author":{"gitId":"-"},"content":"### Model component","lastModifiedDate":"2021-07-31"},{"lineNumber":119,"author":{"gitId":"-"},"content":"**API** : [`Model.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/model/Model.java)","lastModifiedDate":"2020-05-23"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":121,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ModelClassDiagram.puml\" width\u003d\"450\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":122,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":123,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":124,"author":{"gitId":"-"},"content":"The `Model` component,","lastModifiedDate":"2021-07-31"},{"lineNumber":125,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":126,"author":{"gitId":"-"},"content":"* stores the address book data i.e., all `Person` objects (which are contained in a `UniquePersonList` object).","lastModifiedDate":"2021-07-31"},{"lineNumber":127,"author":{"gitId":"-"},"content":"* stores the currently \u0027selected\u0027 `Person` objects (e.g., results of a search query) as a separate _filtered_ list which is exposed to outsiders as an unmodifiable `ObservableList\u003cPerson\u003e` that can be \u0027observed\u0027 e.g. the UI can be bound to this list so that the UI automatically updates when the data in the list change.","lastModifiedDate":"2021-07-31"},{"lineNumber":128,"author":{"gitId":"-"},"content":"* stores a `UserPref` object that represents the user’s preferences. This is exposed to the outside as a `ReadOnlyUserPref` objects.","lastModifiedDate":"2021-07-31"},{"lineNumber":129,"author":{"gitId":"-"},"content":"* does not depend on any of the other three components (as the `Model` represents data entities of the domain, they should make sense on their own without depending on other components)","lastModifiedDate":"2021-07-31"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":131,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":132,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":133,"author":{"gitId":"-"},"content":"**Note:** An alternative (arguably, a more OOP) model is given below. It has a `Tag` list in the `AddressBook`, which `Person` references. This allows `AddressBook` to only require one `Tag` object per unique tag, instead of each `Person` needing their own `Tag` objects.\u003cbr\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":134,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":135,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/BetterModelClassDiagram.puml\" width\u003d\"450\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":137,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":138,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":139,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":140,"author":{"gitId":"-"},"content":"### Storage component","lastModifiedDate":"2020-05-23"},{"lineNumber":141,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":142,"author":{"gitId":"-"},"content":"**API** : [`Storage.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/storage/Storage.java)","lastModifiedDate":"2020-05-23"},{"lineNumber":143,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":144,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/StorageClassDiagram.puml\" width\u003d\"550\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":145,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":146,"author":{"gitId":"-"},"content":"The `Storage` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":147,"author":{"gitId":"-"},"content":"* can save both address book data and user preference data in JSON format, and read them back into corresponding objects.","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"-"},"content":"* inherits from both `AddressBookStorage` and `UserPrefStorage`, which means it can be treated as either one (if only the functionality of only one is needed).","lastModifiedDate":"2021-07-31"},{"lineNumber":149,"author":{"gitId":"-"},"content":"* depends on some classes in the `Model` component (because the `Storage` component\u0027s job is to save/retrieve objects that belong to the `Model`)","lastModifiedDate":"2021-07-21"},{"lineNumber":150,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":151,"author":{"gitId":"-"},"content":"### Common classes","lastModifiedDate":"2020-05-23"},{"lineNumber":152,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":153,"author":{"gitId":"-"},"content":"Classes used by multiple components are in the `seedu.addressbook.commons` package.","lastModifiedDate":"2020-05-23"},{"lineNumber":154,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":155,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":156,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":157,"author":{"gitId":"-"},"content":"## **Implementation**","lastModifiedDate":"2020-05-23"},{"lineNumber":158,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":159,"author":{"gitId":"-"},"content":"This section describes some noteworthy details on how certain features are implemented.","lastModifiedDate":"2020-05-23"},{"lineNumber":160,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":161,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Undo/redo feature","lastModifiedDate":"2020-06-07"},{"lineNumber":162,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":163,"author":{"gitId":"-"},"content":"#### Proposed Implementation","lastModifiedDate":"2020-05-23"},{"lineNumber":164,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":165,"author":{"gitId":"-"},"content":"The proposed undo/redo mechanism is facilitated by `VersionedAddressBook`. It extends `AddressBook` with an undo/redo history, stored internally as an `addressBookStateList` and `currentStatePointer`. Additionally, it implements the following operations:","lastModifiedDate":"2020-05-23"},{"lineNumber":166,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":167,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#commit()` — Saves the current address book state in its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":168,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#undo()` — Restores the previous address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":169,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#redo()` — Restores a previously undone address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":170,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":171,"author":{"gitId":"-"},"content":"These operations are exposed in the `Model` interface as `Model#commitAddressBook()`, `Model#undoAddressBook()` and `Model#redoAddressBook()` respectively.","lastModifiedDate":"2020-05-23"},{"lineNumber":172,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":173,"author":{"gitId":"-"},"content":"Given below is an example usage scenario and how the undo/redo mechanism behaves at each step.","lastModifiedDate":"2020-05-23"},{"lineNumber":174,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":175,"author":{"gitId":"-"},"content":"Step 1. The user launches the application for the first time. The `VersionedAddressBook` will be initialized with the initial address book state, and the `currentStatePointer` pointing to that single address book state.","lastModifiedDate":"2020-05-23"},{"lineNumber":176,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":177,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState0.puml\" alt\u003d\"UndoRedoState0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":178,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":179,"author":{"gitId":"-"},"content":"Step 2. The user executes `delete 5` command to delete the 5th person in the address book. The `delete` command calls `Model#commitAddressBook()`, causing the modified state of the address book after the `delete 5` command executes to be saved in the `addressBookStateList`, and the `currentStatePointer` is shifted to the newly inserted address book state.","lastModifiedDate":"2020-05-23"},{"lineNumber":180,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":181,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState1.puml\" alt\u003d\"UndoRedoState1\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":182,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":183,"author":{"gitId":"-"},"content":"Step 3. The user executes `add n/David …​` to add a new person. The `add` command also calls `Model#commitAddressBook()`, causing another modified address book state to be saved into the `addressBookStateList`.","lastModifiedDate":"2020-05-23"},{"lineNumber":184,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":185,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState2.puml\" alt\u003d\"UndoRedoState2\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":186,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":187,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":188,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":189,"author":{"gitId":"-"},"content":"**Note:** If a command fails its execution, it will not call `Model#commitAddressBook()`, so the address book state will not be saved into the `addressBookStateList`.","lastModifiedDate":"2023-09-12"},{"lineNumber":190,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":191,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":192,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":193,"author":{"gitId":"-"},"content":"Step 4. The user now decides that adding the person was a mistake, and decides to undo that action by executing the `undo` command. The `undo` command will call `Model#undoAddressBook()`, which will shift the `currentStatePointer` once to the left, pointing it to the previous address book state, and restores the address book to that state.","lastModifiedDate":"2020-05-23"},{"lineNumber":194,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":195,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState3.puml\" alt\u003d\"UndoRedoState3\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":196,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":197,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":198,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":199,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":200,"author":{"gitId":"-"},"content":"**Note:** If the `currentStatePointer` is at index 0, pointing to the initial AddressBook state, then there are no previous AddressBook states to restore. The `undo` command uses `Model#canUndoAddressBook()` to check if this is the case. If so, it will return an error to the user rather","lastModifiedDate":"2023-09-12"},{"lineNumber":201,"author":{"gitId":"-"},"content":"than attempting to perform the undo.","lastModifiedDate":"2020-05-23"},{"lineNumber":202,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":203,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":204,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":205,"author":{"gitId":"-"},"content":"The following sequence diagram shows how an undo operation goes through the `Logic` component:","lastModifiedDate":"2024-02-09"},{"lineNumber":206,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":207,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoSequenceDiagram-Logic.puml\" alt\u003d\"UndoSequenceDiagram-Logic\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":208,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":209,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":210,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":211,"author":{"gitId":"-"},"content":"**Note:** The lifeline for `UndoCommand` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram.","lastModifiedDate":"2023-09-12"},{"lineNumber":212,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":213,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":214,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":215,"author":{"gitId":"-"},"content":"Similarly, how an undo operation goes through the `Model` component is shown below:","lastModifiedDate":"2024-02-09"},{"lineNumber":216,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":217,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoSequenceDiagram-Model.puml\" alt\u003d\"UndoSequenceDiagram-Model\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":218,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":219,"author":{"gitId":"-"},"content":"The `redo` command does the opposite — it calls `Model#redoAddressBook()`, which shifts the `currentStatePointer` once to the right, pointing to the previously undone state, and restores the address book to that state.","lastModifiedDate":"2020-05-23"},{"lineNumber":220,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":221,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":222,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":223,"author":{"gitId":"-"},"content":"**Note:** If the `currentStatePointer` is at index `addressBookStateList.size() - 1`, pointing to the latest address book state, then there are no undone AddressBook states to restore. The `redo` command uses `Model#canRedoAddressBook()` to check if this is the case. If so, it will return an error to the user rather than attempting to perform the redo.","lastModifiedDate":"2023-09-12"},{"lineNumber":224,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":225,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":226,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":227,"author":{"gitId":"-"},"content":"Step 5. The user then decides to execute the command `list`. Commands that do not modify the address book, such as `list`, will usually not call `Model#commitAddressBook()`, `Model#undoAddressBook()` or `Model#redoAddressBook()`. Thus, the `addressBookStateList` remains unchanged.","lastModifiedDate":"2020-05-23"},{"lineNumber":228,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":229,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState4.puml\" alt\u003d\"UndoRedoState4\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":230,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":231,"author":{"gitId":"-"},"content":"Step 6. The user executes `clear`, which calls `Model#commitAddressBook()`. Since the `currentStatePointer` is not pointing at the end of the `addressBookStateList`, all address book states after the `currentStatePointer` will be purged. Reason: It no longer makes sense to redo the `add n/David …​` command. This is the behavior that most modern desktop applications follow.","lastModifiedDate":"2020-05-23"},{"lineNumber":232,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":233,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState5.puml\" alt\u003d\"UndoRedoState5\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":234,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":235,"author":{"gitId":"-"},"content":"The following activity diagram summarizes what happens when a user executes a new command:","lastModifiedDate":"2020-05-23"},{"lineNumber":236,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":237,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/CommitActivityDiagram.puml\" width\u003d\"250\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":238,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":239,"author":{"gitId":"-"},"content":"#### Design considerations:","lastModifiedDate":"2021-07-31"},{"lineNumber":240,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":241,"author":{"gitId":"-"},"content":"**Aspect: How undo \u0026 redo executes:**","lastModifiedDate":"2021-07-31"},{"lineNumber":242,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":243,"author":{"gitId":"-"},"content":"* **Alternative 1 (current choice):** Saves the entire address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":244,"author":{"gitId":"-"},"content":" * Pros: Easy to implement.","lastModifiedDate":"2020-05-23"},{"lineNumber":245,"author":{"gitId":"-"},"content":" * Cons: May have performance issues in terms of memory usage.","lastModifiedDate":"2020-05-23"},{"lineNumber":246,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":247,"author":{"gitId":"-"},"content":"* **Alternative 2:** Individual command knows how to undo/redo by","lastModifiedDate":"2020-05-23"},{"lineNumber":248,"author":{"gitId":"-"},"content":" itself.","lastModifiedDate":"2020-05-23"},{"lineNumber":249,"author":{"gitId":"-"},"content":" * Pros: Will use less memory (e.g. for `delete`, just save the person being deleted).","lastModifiedDate":"2020-05-23"},{"lineNumber":250,"author":{"gitId":"-"},"content":" * Cons: We must ensure that the implementation of each individual command are correct.","lastModifiedDate":"2020-05-23"},{"lineNumber":251,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":252,"author":{"gitId":"-"},"content":"_{more aspects and alternatives to be added}_","lastModifiedDate":"2020-05-23"},{"lineNumber":253,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":254,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Data archiving","lastModifiedDate":"2020-05-23"},{"lineNumber":255,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":256,"author":{"gitId":"-"},"content":"_{Explain here how the data archiving feature will be implemented}_","lastModifiedDate":"2020-05-23"},{"lineNumber":257,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":258,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":259,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":260,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":261,"author":{"gitId":"-"},"content":"## **Documentation, logging, testing, configuration, dev-ops**","lastModifiedDate":"2020-06-07"},{"lineNumber":262,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":263,"author":{"gitId":"-"},"content":"* [Documentation guide](Documentation.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":264,"author":{"gitId":"-"},"content":"* [Testing guide](Testing.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":265,"author":{"gitId":"-"},"content":"* [Logging guide](Logging.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":266,"author":{"gitId":"-"},"content":"* [Configuration guide](Configuration.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":267,"author":{"gitId":"-"},"content":"* [DevOps guide](DevOps.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":268,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":269,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":270,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":271,"author":{"gitId":"-"},"content":"## **Appendix: Requirements**","lastModifiedDate":"2020-05-23"},{"lineNumber":272,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":273,"author":{"gitId":"-"},"content":"### Product scope","lastModifiedDate":"2020-05-23"},{"lineNumber":274,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":275,"author":{"gitId":"-"},"content":"**Target user profile**:","lastModifiedDate":"2020-05-23"},{"lineNumber":276,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":277,"author":{"gitId":"NeoHW"},"content":"- has a need to manage a significant number of patients ","lastModifiedDate":"2024-03-06"},{"lineNumber":278,"author":{"gitId":"NeoHW"},"content":"- values comprehensive patient information for tailored treatment","lastModifiedDate":"2024-03-06"},{"lineNumber":279,"author":{"gitId":"NeoHW"},"content":"- prefer desktop apps over other types ","lastModifiedDate":"2024-03-06"},{"lineNumber":280,"author":{"gitId":"NeoHW"},"content":"- can type fast ","lastModifiedDate":"2024-03-06"},{"lineNumber":281,"author":{"gitId":"NeoHW"},"content":"- prefers typing to mouse interactions ","lastModifiedDate":"2024-03-06"},{"lineNumber":282,"author":{"gitId":"NeoHW"},"content":"- is reasonably comfortable using CLI apps","lastModifiedDate":"2024-03-06"},{"lineNumber":283,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":284,"author":{"gitId":"NeoHW"},"content":"**Value proposition**: ","lastModifiedDate":"2024-03-06"},{"lineNumber":285,"author":{"gitId":"NeoHW"},"content":"- manage patients\u0027 information faster than a typical mouse/GUI driven app","lastModifiedDate":"2024-03-06"},{"lineNumber":286,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":287,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":288,"author":{"gitId":"-"},"content":"### User stories","lastModifiedDate":"2020-06-07"},{"lineNumber":289,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":290,"author":{"gitId":"-"},"content":"Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unlikely to have) - `*`","lastModifiedDate":"2020-05-23"},{"lineNumber":291,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":292,"author":{"gitId":"-"},"content":"| Priority | As a …​ | I want to …​ | So that I can…​ |","lastModifiedDate":"2020-05-23"},{"lineNumber":293,"author":{"gitId":"NeoHW"},"content":"|----------|--------------------------------------------|------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------|","lastModifiedDate":"2024-03-06"},{"lineNumber":294,"author":{"gitId":"NeoHW"},"content":"| `***` | Nurse | easily view the user guide | learn more about the product and how to use whenever I need to |","lastModifiedDate":"2024-03-06"},{"lineNumber":295,"author":{"gitId":"NeoHW"},"content":"| `***` | Nurse | add patient\u0027s information | add new patients and easily remember their preferences to make a personalized connection |","lastModifiedDate":"2024-03-06"},{"lineNumber":296,"author":{"gitId":"NeoHW"},"content":"| `***` | Nurse | delete patient\u0027s information | remove patients who have been discharged |","lastModifiedDate":"2024-03-06"},{"lineNumber":297,"author":{"gitId":"NeoHW"},"content":"| `***` | Nurse | list all patient\u0027s information | easily find the details of my patients |","lastModifiedDate":"2024-03-06"},{"lineNumber":298,"author":{"gitId":"NeoHW"},"content":"| `***` | Nurse | add important dates for my patients | keep track of my patients\u0027 appointments and see my overall schedule |","lastModifiedDate":"2024-03-06"},{"lineNumber":299,"author":{"gitId":"NeoHW"},"content":"| `***` | Nurse | delete important dates for my patients | delete my patients\u0027 appointments if they are canceled |","lastModifiedDate":"2024-03-06"},{"lineNumber":300,"author":{"gitId":"NeoHW"},"content":"| `***` | Nurse | add tags to my patients | group the patients into categories |","lastModifiedDate":"2024-03-06"},{"lineNumber":301,"author":{"gitId":"NeoHW"},"content":"| `***` | Nurse | find patient with a specific tag | quickly locate individuals with similar conditions, treatments, or requirements without having to scroll through the entire patient list |","lastModifiedDate":"2024-03-06"},{"lineNumber":302,"author":{"gitId":"NeoHW"},"content":"| `***` | Nurse | save all previously added patients | ensure details of the patient would not be lost |","lastModifiedDate":"2024-03-06"},{"lineNumber":303,"author":{"gitId":"NeoHW"},"content":"| `**` | Nurse | edit patient\u0027s information | have the most updated information of my patients at all times |","lastModifiedDate":"2024-03-06"},{"lineNumber":304,"author":{"gitId":"NeoHW"},"content":"| `**` | Nurse | edit important dates for my patients | edit my patients\u0027 appointments if they are changed |","lastModifiedDate":"2024-03-06"},{"lineNumber":305,"author":{"gitId":"NeoHW"},"content":"| `**` | Nurse | edit tags from my patients | edit mistyped tags |","lastModifiedDate":"2024-03-06"},{"lineNumber":306,"author":{"gitId":"NeoHW"},"content":"| `**` | Nurse | delete tags from my patients | delete the tag if it no longer applies |","lastModifiedDate":"2024-03-06"},{"lineNumber":307,"author":{"gitId":"NeoHW"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":308,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":309,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":310,"author":{"gitId":"-"},"content":"### Use cases","lastModifiedDate":"2020-06-07"},{"lineNumber":311,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":312,"author":{"gitId":"guohuang88"},"content":"(For all use cases below, the **System** is the `PatientSync` and the **Actor** is the `nurse`, unless specified otherwise)","lastModifiedDate":"2024-03-06"},{"lineNumber":313,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":314,"author":{"gitId":"guohuang88"},"content":"**Use case: Add a patient**","lastModifiedDate":"2024-03-06"},{"lineNumber":315,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":316,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2020-05-23"},{"lineNumber":317,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":318,"author":{"gitId":"guohuang88"},"content":"1. Nurse requests to add a patient","lastModifiedDate":"2024-03-06"},{"lineNumber":319,"author":{"gitId":"guohuang88"},"content":"2. PatientSync adds the patient","lastModifiedDate":"2024-03-06"},{"lineNumber":320,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":321,"author":{"gitId":"guohuang88"},"content":" Use case ends.","lastModifiedDate":"2024-03-06"},{"lineNumber":322,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":323,"author":{"gitId":"guohuang88"},"content":"**Extensions**","lastModifiedDate":"2024-03-06"},{"lineNumber":324,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":325,"author":{"gitId":"guohuang88"},"content":"* 2a. The information key in is wrong.","lastModifiedDate":"2024-03-06"},{"lineNumber":326,"author":{"gitId":"guohuang88"},"content":" * 2a1. PatientSync shows an error message.","lastModifiedDate":"2024-03-06"},{"lineNumber":327,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":328,"author":{"gitId":"guohuang88"},"content":" Use case ends.","lastModifiedDate":"2024-03-06"},{"lineNumber":329,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":330,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":331,"author":{"gitId":"guohuang88"},"content":"**Use case: Delete a patient**","lastModifiedDate":"2024-03-06"},{"lineNumber":332,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":333,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2024-03-06"},{"lineNumber":334,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":335,"author":{"gitId":"guohuang88"},"content":"1. Nurse requests to list patients","lastModifiedDate":"2024-03-06"},{"lineNumber":336,"author":{"gitId":"guohuang88"},"content":"2. PatientSync shows a list of patients","lastModifiedDate":"2024-03-06"},{"lineNumber":337,"author":{"gitId":"guohuang88"},"content":"3. Nurse requests to delete a specific patient in the list","lastModifiedDate":"2024-03-06"},{"lineNumber":338,"author":{"gitId":"guohuang88"},"content":"4. PatientSync deletes the patient","lastModifiedDate":"2024-03-06"},{"lineNumber":339,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":340,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2024-03-06"},{"lineNumber":341,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":342,"author":{"gitId":"-"},"content":"**Extensions**","lastModifiedDate":"2024-03-06"},{"lineNumber":343,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":344,"author":{"gitId":"-"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-03-06"},{"lineNumber":345,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":346,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2024-03-06"},{"lineNumber":347,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":348,"author":{"gitId":"-"},"content":"* 3a. The given index is invalid.","lastModifiedDate":"2024-03-06"},{"lineNumber":349,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":350,"author":{"gitId":"guohuang88"},"content":" * 3a1. PatientSync shows an error message.","lastModifiedDate":"2024-03-06"},{"lineNumber":351,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":352,"author":{"gitId":"-"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-03-06"},{"lineNumber":353,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":354,"author":{"gitId":"guohuang88"},"content":"**Use case: List all patients**","lastModifiedDate":"2024-03-06"},{"lineNumber":355,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":356,"author":{"gitId":"guohuang88"},"content":"**MSS**","lastModifiedDate":"2024-03-06"},{"lineNumber":357,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":358,"author":{"gitId":"guohuang88"},"content":"1. Nurse requests to list patients","lastModifiedDate":"2024-03-06"},{"lineNumber":359,"author":{"gitId":"guohuang88"},"content":"2. PatientSync shows a list of patients","lastModifiedDate":"2024-03-06"},{"lineNumber":360,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":361,"author":{"gitId":"guohuang88"},"content":" Use case ends.","lastModifiedDate":"2024-03-06"},{"lineNumber":362,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":363,"author":{"gitId":"guohuang88"},"content":"**Extensions**","lastModifiedDate":"2024-03-06"},{"lineNumber":364,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":365,"author":{"gitId":"guohuang88"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-03-06"},{"lineNumber":366,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":367,"author":{"gitId":"guohuang88"},"content":" Use case ends.","lastModifiedDate":"2024-03-06"},{"lineNumber":368,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":369,"author":{"gitId":"guohuang88"},"content":"**Use case: Add important date for a patient**","lastModifiedDate":"2024-03-06"},{"lineNumber":370,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":371,"author":{"gitId":"guohuang88"},"content":"**MSS**","lastModifiedDate":"2024-03-06"},{"lineNumber":372,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":373,"author":{"gitId":"guohuang88"},"content":"1. Nurse requests to list patients","lastModifiedDate":"2024-03-06"},{"lineNumber":374,"author":{"gitId":"guohuang88"},"content":"2. PatientSync shows a list of patients","lastModifiedDate":"2024-03-06"},{"lineNumber":375,"author":{"gitId":"guohuang88"},"content":"3. Nurse requests to add an important date for a specific patient in the list","lastModifiedDate":"2024-03-06"},{"lineNumber":376,"author":{"gitId":"guohuang88"},"content":"4. PatientSync adds an important date for the patient","lastModifiedDate":"2024-03-06"},{"lineNumber":377,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":378,"author":{"gitId":"guohuang88"},"content":" Use case ends.","lastModifiedDate":"2024-03-06"},{"lineNumber":379,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":380,"author":{"gitId":"guohuang88"},"content":"**Extensions**","lastModifiedDate":"2024-03-06"},{"lineNumber":381,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":382,"author":{"gitId":"guohuang88"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-03-06"},{"lineNumber":383,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":384,"author":{"gitId":"guohuang88"},"content":" Use case ends.","lastModifiedDate":"2024-03-06"},{"lineNumber":385,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":386,"author":{"gitId":"guohuang88"},"content":"* 3a. The given index is invalid.","lastModifiedDate":"2024-03-06"},{"lineNumber":387,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":388,"author":{"gitId":"guohuang88"},"content":" * 3a1. PatientSync shows an error message.","lastModifiedDate":"2024-03-06"},{"lineNumber":389,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":390,"author":{"gitId":"guohuang88"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-03-06"},{"lineNumber":391,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":392,"author":{"gitId":"guohuang88"},"content":"**Use case: Delete an important date for a patient**","lastModifiedDate":"2024-03-06"},{"lineNumber":393,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":394,"author":{"gitId":"guohuang88"},"content":"**MSS**","lastModifiedDate":"2024-03-06"},{"lineNumber":395,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":396,"author":{"gitId":"guohuang88"},"content":"1. Nurse requests to list patients","lastModifiedDate":"2024-03-06"},{"lineNumber":397,"author":{"gitId":"guohuang88"},"content":"2. PatientSync shows a list of patients","lastModifiedDate":"2024-03-06"},{"lineNumber":398,"author":{"gitId":"guohuang88"},"content":"3. Nurse requests to delete an important date for a specific patient in the list","lastModifiedDate":"2024-03-06"},{"lineNumber":399,"author":{"gitId":"guohuang88"},"content":"4. PatientSync deletes an important date the patient","lastModifiedDate":"2024-03-06"},{"lineNumber":400,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":401,"author":{"gitId":"guohuang88"},"content":" Use case ends.","lastModifiedDate":"2024-03-06"},{"lineNumber":402,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":403,"author":{"gitId":"guohuang88"},"content":"**Extensions**","lastModifiedDate":"2024-03-06"},{"lineNumber":404,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":405,"author":{"gitId":"guohuang88"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-03-06"},{"lineNumber":406,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":407,"author":{"gitId":"guohuang88"},"content":" Use case ends.","lastModifiedDate":"2024-03-06"},{"lineNumber":408,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":409,"author":{"gitId":"guohuang88"},"content":"* 3a. The given index is invalid.","lastModifiedDate":"2024-03-06"},{"lineNumber":410,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":411,"author":{"gitId":"guohuang88"},"content":" * 3a1. PatientSync shows an error message.","lastModifiedDate":"2024-03-06"},{"lineNumber":412,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":413,"author":{"gitId":"guohuang88"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-03-06"},{"lineNumber":414,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":415,"author":{"gitId":"guohuang88"},"content":"**Use case: Add tag to a patient**","lastModifiedDate":"2024-03-06"},{"lineNumber":416,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":417,"author":{"gitId":"guohuang88"},"content":"**MSS**","lastModifiedDate":"2024-03-06"},{"lineNumber":418,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":419,"author":{"gitId":"guohuang88"},"content":"1. Nurse requests to list patients","lastModifiedDate":"2024-03-06"},{"lineNumber":420,"author":{"gitId":"guohuang88"},"content":"2. PatientSync shows a list of patients","lastModifiedDate":"2024-03-06"},{"lineNumber":421,"author":{"gitId":"guohuang88"},"content":"3. Nurse requests to add a tag to a specific patient in the list","lastModifiedDate":"2024-03-06"},{"lineNumber":422,"author":{"gitId":"guohuang88"},"content":"4. PatientSync add a tag to the patient","lastModifiedDate":"2024-03-06"},{"lineNumber":423,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":424,"author":{"gitId":"guohuang88"},"content":" Use case ends.","lastModifiedDate":"2024-03-06"},{"lineNumber":425,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":426,"author":{"gitId":"guohuang88"},"content":"**Extensions**","lastModifiedDate":"2024-03-06"},{"lineNumber":427,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":428,"author":{"gitId":"guohuang88"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-03-06"},{"lineNumber":429,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":430,"author":{"gitId":"guohuang88"},"content":" Use case ends.","lastModifiedDate":"2024-03-06"},{"lineNumber":431,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":432,"author":{"gitId":"guohuang88"},"content":"* 3a. The given index is invalid.","lastModifiedDate":"2024-03-06"},{"lineNumber":433,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":434,"author":{"gitId":"guohuang88"},"content":" * 3a1. PatientSync shows an error message.","lastModifiedDate":"2024-03-06"},{"lineNumber":435,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":436,"author":{"gitId":"guohuang88"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-03-06"},{"lineNumber":437,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":438,"author":{"gitId":"guohuang88"},"content":"**Use case: Delete tag from a patient**","lastModifiedDate":"2024-03-06"},{"lineNumber":439,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":440,"author":{"gitId":"guohuang88"},"content":"**MSS**","lastModifiedDate":"2024-03-06"},{"lineNumber":441,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":442,"author":{"gitId":"guohuang88"},"content":"1. Nurse requests to list patients","lastModifiedDate":"2024-03-06"},{"lineNumber":443,"author":{"gitId":"guohuang88"},"content":"2. PatientSync shows a list of patients","lastModifiedDate":"2024-03-06"},{"lineNumber":444,"author":{"gitId":"guohuang88"},"content":"3. Nurse requests to delete a tag from a specific patient in the list","lastModifiedDate":"2024-03-06"},{"lineNumber":445,"author":{"gitId":"guohuang88"},"content":"4. PatientSync deletes a tag from the patient","lastModifiedDate":"2024-03-06"},{"lineNumber":446,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":447,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":448,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":449,"author":{"gitId":"-"},"content":"**Extensions**","lastModifiedDate":"2020-05-23"},{"lineNumber":450,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":451,"author":{"gitId":"-"},"content":"* 2a. The list is empty.","lastModifiedDate":"2020-05-23"},{"lineNumber":452,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":453,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":454,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":455,"author":{"gitId":"-"},"content":"* 3a. The given index is invalid.","lastModifiedDate":"2020-05-23"},{"lineNumber":456,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":457,"author":{"gitId":"guohuang88"},"content":" * 3a1. PatientSync shows an error message.","lastModifiedDate":"2024-03-06"},{"lineNumber":458,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":459,"author":{"gitId":"-"},"content":" Use case resumes at step 2.","lastModifiedDate":"2020-05-23"},{"lineNumber":460,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":461,"author":{"gitId":"guohuang88"},"content":"**Use case: Find patients by a tag**","lastModifiedDate":"2024-03-06"},{"lineNumber":462,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":463,"author":{"gitId":"guohuang88"},"content":"**MSS**","lastModifiedDate":"2024-03-06"},{"lineNumber":464,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":465,"author":{"gitId":"guohuang88"},"content":"1. Nurse requests to list patients","lastModifiedDate":"2024-03-06"},{"lineNumber":466,"author":{"gitId":"guohuang88"},"content":"2. PatientSync shows a list of patients","lastModifiedDate":"2024-03-06"},{"lineNumber":467,"author":{"gitId":"guohuang88"},"content":"3. Nurse requests to find patients with a specific tag in the list","lastModifiedDate":"2024-03-06"},{"lineNumber":468,"author":{"gitId":"guohuang88"},"content":"4. PatientSync finds patients with the tag","lastModifiedDate":"2024-03-06"},{"lineNumber":469,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":470,"author":{"gitId":"guohuang88"},"content":" Use case ends.","lastModifiedDate":"2024-03-06"},{"lineNumber":471,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":472,"author":{"gitId":"guohuang88"},"content":"**Extensions**","lastModifiedDate":"2024-03-06"},{"lineNumber":473,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":474,"author":{"gitId":"guohuang88"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-03-06"},{"lineNumber":475,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":476,"author":{"gitId":"guohuang88"},"content":" Use case ends.","lastModifiedDate":"2024-03-06"},{"lineNumber":477,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":478,"author":{"gitId":"guohuang88"},"content":"* 3a. The given index is invalid.","lastModifiedDate":"2024-03-06"},{"lineNumber":479,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":480,"author":{"gitId":"guohuang88"},"content":" * 3a1. PatientSync shows an error message.","lastModifiedDate":"2024-03-06"},{"lineNumber":481,"author":{"gitId":"guohuang88"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":482,"author":{"gitId":"guohuang88"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-03-06"},{"lineNumber":483,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":484,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":485,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":486,"author":{"gitId":"-"},"content":"1. Should work on any _mainstream OS_ as long as it has Java `11` or above installed.","lastModifiedDate":"2020-05-23"},{"lineNumber":487,"author":{"gitId":"NeoHW"},"content":"2. Should be able to hold up to 1000 patients without a noticeable sluggishness in performance for typical usage.","lastModifiedDate":"2024-03-06"},{"lineNumber":488,"author":{"gitId":"-"},"content":"3. A user with above average typing speed for regular English text (i.e. not code, not system admin commands) should be able to accomplish most of the tasks faster using commands than using the mouse.","lastModifiedDate":"2020-05-23"},{"lineNumber":489,"author":{"gitId":"NeoHW"},"content":"4. Should operate without the need for internet access to fulfill its core purpose.","lastModifiedDate":"2024-03-06"},{"lineNumber":490,"author":{"gitId":"NeoHW"},"content":"5. Should be designed to be usable by a person new to patient management without extensive training.","lastModifiedDate":"2024-03-06"},{"lineNumber":491,"author":{"gitId":"NeoHW"},"content":"6. Should provide clear, comprehensive error messages in plain language, guiding users on how to recover from errors due to incorrect inputs. ","lastModifiedDate":"2024-03-06"},{"lineNumber":492,"author":{"gitId":"NeoHW"},"content":"7. Should offer comprehensive, well-organized user documentation that guides users on how to effectively use PatientSync.","lastModifiedDate":"2024-03-06"},{"lineNumber":493,"author":{"gitId":"NeoHW"},"content":"8. Should provide detailed developer documentation for those looking to enhance, customize, or develop extensions. ","lastModifiedDate":"2024-03-06"},{"lineNumber":494,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":495,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":496,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":497,"author":{"gitId":"-"},"content":"* **Mainstream OS**: Windows, Linux, Unix, MacOS","lastModifiedDate":"2024-02-09"},{"lineNumber":498,"author":{"gitId":"-"},"content":"* **Private contact detail**: A contact detail that is not meant to be shared with others","lastModifiedDate":"2020-05-23"},{"lineNumber":499,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":500,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":501,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":502,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":503,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":504,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":505,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":506,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":507,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":508,"author":{"gitId":"-"},"content":"**Note:** These instructions only provide a starting point for testers to work on;","lastModifiedDate":"2023-09-12"},{"lineNumber":509,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":510,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":511,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":512,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":513,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":514,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":515,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":516,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":517,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":518,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":519,"author":{"gitId":"-"},"content":" 1. Double-click the jar file Expected: Shows the GUI with a set of sample contacts. The window size may not be optimum.","lastModifiedDate":"2020-05-23"},{"lineNumber":520,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":521,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":522,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":523,"author":{"gitId":"-"},"content":" 1. Resize the window to an optimum size. Move the window to a different location. Close the window.","lastModifiedDate":"2020-05-23"},{"lineNumber":524,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":525,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":526,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","lastModifiedDate":"2020-05-23"},{"lineNumber":527,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":528,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":529,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":530,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":531,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":532,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":533,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":534,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":535,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":536,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":537,"author":{"gitId":"-"},"content":" Expected: First contact is deleted from the list. Details of the deleted contact shown in the status message. Timestamp in the status bar is updated.","lastModifiedDate":"2020-05-23"},{"lineNumber":538,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":539,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":540,"author":{"gitId":"-"},"content":" Expected: No person is deleted. Error details shown in the status message. Status bar remains the same.","lastModifiedDate":"2020-05-23"},{"lineNumber":541,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":542,"author":{"gitId":"-"},"content":" 1. Other incorrect delete commands to try: `delete`, `delete x`, `...` (where x is larger than the list size)\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":543,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":544,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":545,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":546,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":547,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":548,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":549,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":550,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":551,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":552,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":553,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"guohuang88":135,"NeoHW":30,"-":388}},{"path":"docs/UserGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"User Guide\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":" pageNav: 3","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":7,"author":{"gitId":"NeoHW"},"content":"# PatientSync User Guide","lastModifiedDate":"2024-03-08"},{"lineNumber":8,"author":{"gitId":"NeoHW"},"content":"","lastModifiedDate":"2024-03-08"},{"lineNumber":9,"author":{"gitId":"NeoHW"},"content":"PatientSync is a **desktop app made for nurses to manage patient, optimized for use via a Line Interface** (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast, PatientSync allows you to add and view patients intimate details tasks done faster than traditional GUI apps.","lastModifiedDate":"2024-03-08"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003c!-- * Table of Contents --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"-"},"content":"\u003cpage-nav-print /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":15,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":17,"author":{"gitId":"-"},"content":"## Quick start","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"1. Ensure you have Java `11` or above installed in your Computer.","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"1. Download the latest `addressbook.jar` from [here](https://github.com/se-edu/addressbook-level3/releases).","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"-"},"content":"1. Copy the file to the folder you want to use as the _home folder_ for your AddressBook.","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":25,"author":{"gitId":"-"},"content":"1. Open a command terminal, `cd` into the folder you put the jar file in, and use the `java -jar addressbook.jar` command to run the application.\u003cbr\u003e","lastModifiedDate":"2023-01-01"},{"lineNumber":26,"author":{"gitId":"-"},"content":" A GUI similar to the below should appear in a few seconds. Note how the app contains some sample data.\u003cbr\u003e","lastModifiedDate":"2023-01-01"},{"lineNumber":27,"author":{"gitId":"-"},"content":" ![Ui](images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":29,"author":{"gitId":"-"},"content":"1. Type the command in the command box and press Enter to execute it. e.g. typing **`help`** and pressing Enter will open the help window.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":" Some example commands you can try:","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"-"},"content":" * `list` : Lists all contacts.","lastModifiedDate":"2023-01-01"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * `add n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01` : Adds a contact named `John Doe` to the Address Book.","lastModifiedDate":"2023-01-01"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * `delete 3` : Deletes the 3rd contact shown in the current list.","lastModifiedDate":"2023-01-01"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":" * `clear` : Deletes all contacts.","lastModifiedDate":"2023-01-01"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":40,"author":{"gitId":"-"},"content":" * `exit` : Exits the app.","lastModifiedDate":"2023-01-01"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":"1. Refer to the [Features](#features) below for details of each command.","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":"## Features","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":50,"author":{"gitId":"-"},"content":"**Notes about the command format:**\u003cbr\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"-"},"content":"* Words in `UPPER_CASE` are the parameters to be supplied by the user.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":" e.g. in `add n/NAME`, `NAME` is a parameter which can be used as `add n/John Doe`.","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":"* Items in square brackets are optional.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":56,"author":{"gitId":"-"},"content":" e.g `n/NAME [t/TAG]` can be used as `n/John Doe t/friend` or as `n/John Doe`.","lastModifiedDate":"2020-05-23"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":58,"author":{"gitId":"-"},"content":"* Items with `…`​ after them can be used multiple times including zero times.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":59,"author":{"gitId":"-"},"content":" e.g. `[t/TAG]…​` can be used as ` ` (i.e. 0 times), `t/friend`, `t/friend t/family` etc.","lastModifiedDate":"2020-05-23"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":61,"author":{"gitId":"-"},"content":"* Parameters can be in any order.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":62,"author":{"gitId":"-"},"content":" e.g. if the command specifies `n/NAME p/PHONE_NUMBER`, `p/PHONE_NUMBER n/NAME` is also acceptable.","lastModifiedDate":"2020-05-23"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":64,"author":{"gitId":"-"},"content":"* Extraneous parameters for commands that do not take in parameters (such as `help`, `list`, `exit` and `clear`) will be ignored.\u003cbr\u003e","lastModifiedDate":"2021-02-03"},{"lineNumber":65,"author":{"gitId":"-"},"content":" e.g. if the command specifies `help 123`, it will be interpreted as `help`.","lastModifiedDate":"2021-02-03"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-02-03"},{"lineNumber":67,"author":{"gitId":"-"},"content":"* If you are using a PDF version of this document, be careful when copying and pasting commands that span multiple lines as space characters surrounding line-breaks may be omitted when copied over to the application.","lastModifiedDate":"2023-06-26"},{"lineNumber":68,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":70,"author":{"gitId":"-"},"content":"### Viewing help : `help`","lastModifiedDate":"2020-05-23"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":72,"author":{"gitId":"-"},"content":"Shows a message explaning how to access the help page.","lastModifiedDate":"2020-05-23"},{"lineNumber":73,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":74,"author":{"gitId":"-"},"content":"![help message](images/helpMessage.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":76,"author":{"gitId":"-"},"content":"Format: `help`","lastModifiedDate":"2020-05-23"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":78,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":79,"author":{"gitId":"-"},"content":"### Adding a person: `add`","lastModifiedDate":"2020-05-23"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":81,"author":{"gitId":"-"},"content":"Adds a person to the address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":82,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":83,"author":{"gitId":"-"},"content":"Format: `add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]…​`","lastModifiedDate":"2020-05-23"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":85,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":87,"author":{"gitId":"-"},"content":"**Tip:** A person can have any number of tags (including 0)","lastModifiedDate":"2023-09-12"},{"lineNumber":88,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":89,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":90,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":91,"author":{"gitId":"-"},"content":"* `add n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01`","lastModifiedDate":"2020-05-23"},{"lineNumber":92,"author":{"gitId":"-"},"content":"* `add n/Betsy Crowe t/friend e/betsycrowe@example.com a/Newgate Prison p/1234567 t/criminal`","lastModifiedDate":"2020-05-23"},{"lineNumber":93,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":94,"author":{"gitId":"-"},"content":"### Listing all persons : `list`","lastModifiedDate":"2020-05-23"},{"lineNumber":95,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":96,"author":{"gitId":"-"},"content":"Shows a list of all persons in the address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":97,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":98,"author":{"gitId":"-"},"content":"Format: `list`","lastModifiedDate":"2020-05-23"},{"lineNumber":99,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":100,"author":{"gitId":"-"},"content":"### Editing a person : `edit`","lastModifiedDate":"2020-05-23"},{"lineNumber":101,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":102,"author":{"gitId":"-"},"content":"Edits an existing person in the address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":104,"author":{"gitId":"-"},"content":"Format: `edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [t/TAG]…​`","lastModifiedDate":"2020-05-23"},{"lineNumber":105,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":106,"author":{"gitId":"-"},"content":"* Edits the person at the specified `INDEX`. The index refers to the index number shown in the displayed person list. The index **must be a positive integer** 1, 2, 3, …​","lastModifiedDate":"2020-05-23"},{"lineNumber":107,"author":{"gitId":"-"},"content":"* At least one of the optional fields must be provided.","lastModifiedDate":"2020-05-23"},{"lineNumber":108,"author":{"gitId":"-"},"content":"* Existing values will be updated to the input values.","lastModifiedDate":"2020-05-23"},{"lineNumber":109,"author":{"gitId":"-"},"content":"* When editing tags, the existing tags of the person will be removed i.e adding of tags is not cumulative.","lastModifiedDate":"2020-05-23"},{"lineNumber":110,"author":{"gitId":"-"},"content":"* You can remove all the person’s tags by typing `t/` without","lastModifiedDate":"2020-05-23"},{"lineNumber":111,"author":{"gitId":"-"},"content":" specifying any tags after it.","lastModifiedDate":"2020-05-23"},{"lineNumber":112,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":113,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":114,"author":{"gitId":"-"},"content":"* `edit 1 p/91234567 e/johndoe@example.com` Edits the phone number and email address of the 1st person to be `91234567` and `johndoe@example.com` respectively.","lastModifiedDate":"2020-05-23"},{"lineNumber":115,"author":{"gitId":"-"},"content":"* `edit 2 n/Betsy Crower t/` Edits the name of the 2nd person to be `Betsy Crower` and clears all existing tags.","lastModifiedDate":"2020-05-23"},{"lineNumber":116,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":117,"author":{"gitId":"-"},"content":"### Locating persons by name: `find`","lastModifiedDate":"2020-05-23"},{"lineNumber":118,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":119,"author":{"gitId":"-"},"content":"Finds persons whose names contain any of the given keywords.","lastModifiedDate":"2020-05-23"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":121,"author":{"gitId":"-"},"content":"Format: `find KEYWORD [MORE_KEYWORDS]`","lastModifiedDate":"2020-05-23"},{"lineNumber":122,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":123,"author":{"gitId":"-"},"content":"* The search is case-insensitive. e.g `hans` will match `Hans`","lastModifiedDate":"2020-05-23"},{"lineNumber":124,"author":{"gitId":"-"},"content":"* The order of the keywords does not matter. e.g. `Hans Bo` will match `Bo Hans`","lastModifiedDate":"2020-05-23"},{"lineNumber":125,"author":{"gitId":"-"},"content":"* Only the name is searched.","lastModifiedDate":"2020-05-23"},{"lineNumber":126,"author":{"gitId":"-"},"content":"* Only full words will be matched e.g. `Han` will not match `Hans`","lastModifiedDate":"2020-05-23"},{"lineNumber":127,"author":{"gitId":"-"},"content":"* Persons matching at least one keyword will be returned (i.e. `OR` search).","lastModifiedDate":"2020-05-23"},{"lineNumber":128,"author":{"gitId":"-"},"content":" e.g. `Hans Bo` will return `Hans Gruber`, `Bo Yang`","lastModifiedDate":"2020-05-23"},{"lineNumber":129,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":130,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":131,"author":{"gitId":"-"},"content":"* `find John` returns `john` and `John Doe`","lastModifiedDate":"2020-05-23"},{"lineNumber":132,"author":{"gitId":"-"},"content":"* `find alex david` returns `Alex Yeoh`, `David Li`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":133,"author":{"gitId":"-"},"content":" ![result for \u0027find alex david\u0027](images/findAlexDavidResult.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":134,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":135,"author":{"gitId":"-"},"content":"### Deleting a person : `delete`","lastModifiedDate":"2020-05-23"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":137,"author":{"gitId":"-"},"content":"Deletes the specified person from the address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":138,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":139,"author":{"gitId":"-"},"content":"Format: `delete INDEX`","lastModifiedDate":"2020-05-23"},{"lineNumber":140,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":141,"author":{"gitId":"-"},"content":"* Deletes the person at the specified `INDEX`.","lastModifiedDate":"2020-05-23"},{"lineNumber":142,"author":{"gitId":"-"},"content":"* The index refers to the index number shown in the displayed person list.","lastModifiedDate":"2020-05-23"},{"lineNumber":143,"author":{"gitId":"-"},"content":"* The index **must be a positive integer** 1, 2, 3, …​","lastModifiedDate":"2020-05-23"},{"lineNumber":144,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":145,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":146,"author":{"gitId":"-"},"content":"* `list` followed by `delete 2` deletes the 2nd person in the address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":147,"author":{"gitId":"-"},"content":"* `find Betsy` followed by `delete 1` deletes the 1st person in the results of the `find` command.","lastModifiedDate":"2020-05-23"},{"lineNumber":148,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":149,"author":{"gitId":"-"},"content":"### Clearing all entries : `clear`","lastModifiedDate":"2020-05-23"},{"lineNumber":150,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":151,"author":{"gitId":"-"},"content":"Clears all entries from the address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":152,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":153,"author":{"gitId":"-"},"content":"Format: `clear`","lastModifiedDate":"2020-05-23"},{"lineNumber":154,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":155,"author":{"gitId":"-"},"content":"### Exiting the program : `exit`","lastModifiedDate":"2020-05-23"},{"lineNumber":156,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":157,"author":{"gitId":"-"},"content":"Exits the program.","lastModifiedDate":"2020-05-23"},{"lineNumber":158,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":159,"author":{"gitId":"-"},"content":"Format: `exit`","lastModifiedDate":"2020-05-23"},{"lineNumber":160,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":161,"author":{"gitId":"-"},"content":"### Saving the data","lastModifiedDate":"2020-05-23"},{"lineNumber":162,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":163,"author":{"gitId":"-"},"content":"AddressBook data are saved in the hard disk automatically after any command that changes the data. There is no need to save manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":164,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":165,"author":{"gitId":"-"},"content":"### Editing the data file","lastModifiedDate":"2021-02-04"},{"lineNumber":166,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-02-04"},{"lineNumber":167,"author":{"gitId":"-"},"content":"AddressBook data are saved automatically as a JSON file `[JAR file location]/data/addressbook.json`. Advanced users are welcome to update data directly by editing that data file.","lastModifiedDate":"2023-09-08"},{"lineNumber":168,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-02-04"},{"lineNumber":169,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":170,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":171,"author":{"gitId":"-"},"content":"**Caution:**","lastModifiedDate":"2023-09-12"},{"lineNumber":172,"author":{"gitId":"-"},"content":"If your changes to the data file makes its format invalid, AddressBook will discard all data and start with an empty data file at the next run. Hence, it is recommended to take a backup of the file before editing it.\u003cbr\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":173,"author":{"gitId":"-"},"content":"Furthermore, certain edits can cause the AddressBook to behave in unexpected ways (e.g., if a value entered is outside the acceptable range). Therefore, edit the data file only if you are confident that you can update it correctly.","lastModifiedDate":"2023-09-12"},{"lineNumber":174,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":175,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-02-04"},{"lineNumber":176,"author":{"gitId":"-"},"content":"### Archiving data files `[coming in v2.0]`","lastModifiedDate":"2020-05-23"},{"lineNumber":177,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":178,"author":{"gitId":"-"},"content":"_Details coming soon ..._","lastModifiedDate":"2021-02-04"},{"lineNumber":179,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":180,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":181,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":182,"author":{"gitId":"-"},"content":"## FAQ","lastModifiedDate":"2020-05-23"},{"lineNumber":183,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":184,"author":{"gitId":"-"},"content":"**Q**: How do I transfer my data to another Computer?\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":185,"author":{"gitId":"-"},"content":"**A**: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous AddressBook home folder.","lastModifiedDate":"2020-05-23"},{"lineNumber":186,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":187,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":188,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":189,"author":{"gitId":"-"},"content":"## Known issues","lastModifiedDate":"2023-09-08"},{"lineNumber":190,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":191,"author":{"gitId":"-"},"content":"1. **When using multiple screens**, if you move the application to a secondary screen, and later switch to using only the primary screen, the GUI will open off-screen. The remedy is to delete the `preferences.json` file created by the application before running the application again.","lastModifiedDate":"2023-09-08"},{"lineNumber":192,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":193,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2023-09-08"},{"lineNumber":194,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":195,"author":{"gitId":"-"},"content":"## Command summary","lastModifiedDate":"2020-05-23"},{"lineNumber":196,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":197,"author":{"gitId":"-"},"content":"Action | Format, Examples","lastModifiedDate":"2020-05-23"},{"lineNumber":198,"author":{"gitId":"-"},"content":"-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2023-09-12"},{"lineNumber":199,"author":{"gitId":"-"},"content":"**Add** | `add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]…​` \u003cbr\u003e e.g., `add n/James Ho p/22224444 e/jamesho@example.com a/123, Clementi Rd, 1234665 t/friend t/colleague`","lastModifiedDate":"2020-05-23"},{"lineNumber":200,"author":{"gitId":"-"},"content":"**Clear** | `clear`","lastModifiedDate":"2020-05-23"},{"lineNumber":201,"author":{"gitId":"-"},"content":"**Delete** | `delete INDEX`\u003cbr\u003e e.g., `delete 3`","lastModifiedDate":"2020-05-23"},{"lineNumber":202,"author":{"gitId":"-"},"content":"**Edit** | `edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [t/TAG]…​`\u003cbr\u003e e.g.,`edit 2 n/James Lee e/jameslee@example.com`","lastModifiedDate":"2020-05-23"},{"lineNumber":203,"author":{"gitId":"-"},"content":"**Find** | `find KEYWORD [MORE_KEYWORDS]`\u003cbr\u003e e.g., `find James Jake`","lastModifiedDate":"2020-05-23"},{"lineNumber":204,"author":{"gitId":"-"},"content":"**List** | `list`","lastModifiedDate":"2020-05-23"},{"lineNumber":205,"author":{"gitId":"-"},"content":"**Help** | `help`","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"NeoHW":3,"-":202}},{"path":"docs/_markbind/layouts/default.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003chead-bottom\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003clink rel\u003d\"stylesheet\" href\u003d\"{{baseUrl}}/stylesheets/main.css\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003c/head-bottom\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cheader sticky\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cnavbar type\u003d\"dark\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"-"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"{{baseUrl}}/index.html\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003ePatientSync\u003c/a\u003e","lastModifiedDate":"2024-02-18"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/index.html\" class\u003d\"nav-link\"\u003eHome\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/UserGuide.html\" class\u003d\"nav-link\"\u003eUser Guide\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/DeveloperGuide.html\" class\u003d\"nav-link\"\u003eDeveloper Guide\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/AboutUs.html\" class\u003d\"nav-link\"\u003eAbout Us\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"NeoHW"},"content":" \u003cli\u003e\u003ca href\u003d\"https://github.com/AY2324S2-CS2103-F09-2/tp\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003e\u003cmd\u003e:fab-github:\u003c/md\u003e\u003c/a\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003cli slot\u003d\"right\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003cform class\u003d\"navbar-form\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\" menu-align-right\u003e\u003c/searchbar\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003c/form\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003c/navbar\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"-"},"content":"\u003c/header\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"flex-body\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"site-nav\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"site-nav-top\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"fw-bold mb-2\" style\u003d\"font-size: 1.25rem;\"\u003eSite Map\u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003csite-nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"-"},"content":"* [Home]({{ baseUrl }}/index.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"-"},"content":"* [User Guide]({{ baseUrl }}/UserGuide.html) :expanded:","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * [Quick Start]({{ baseUrl }}/UserGuide.html#quick-start)","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"-"},"content":" * [Features]({{ baseUrl }}/UserGuide.html#features)","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * [FAQ]({{ baseUrl }}/UserGuide.html#faq)","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * [Command Summary]({{ baseUrl }}/UserGuide.html#faq)","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"-"},"content":"* [Developer Guide]({{ baseUrl }}/DeveloperGuide.html) :expanded:","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * [Acknowledgements]({{ baseUrl }}/DeveloperGuide.html#acknowledgements)","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * [Setting Up]({{ baseUrl }}/DeveloperGuide.html#setting-up-getting-started)","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"-"},"content":" * [Design]({{ baseUrl }}/DeveloperGuide.html#design)","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * [Implementation]({{ baseUrl }}/DeveloperGuide.html#implementation)","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"-"},"content":" * [Documentation, logging, testing, configuration, dev-ops]({{ baseUrl }}/DeveloperGuide.html#documentation-logging-testing-configuration-dev-ops)","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * [Appendix: Requirements]({{ baseUrl }}/DeveloperGuide.html#appendix-requirements)","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * [Appendix: Instructions for manual testing]({{ baseUrl }}/DeveloperGuide.html#appendix-instructions-for-manual-testing)","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"-"},"content":"* Tutorials","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * [Tracing code]({{ baseUrl }}/tutorials/TracingCode.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"-"},"content":" * [Adding a command]({{ baseUrl }}/tutorials/AddRemark.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"-"},"content":" * [Removing Fields]({{ baseUrl }}/tutorials/RemovingFields.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* [About Us]({{ baseUrl }}/AboutUs.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003c/site-nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003c/nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003cdiv id\u003d\"content-wrapper\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"-"},"content":" {{ content }}","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"page-nav\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"-"},"content":" \u003cpage-nav /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"-"},"content":" \u003c/nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"-"},"content":" \u003cscroll-top-button\u003e\u003c/scroll-top-button\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"-"},"content":"\u003cfooter\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u003c!-- Support MarkBind by including a link to us on your landing page! --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"text-center\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"-"},"content":" \u003csmall\u003e[\u003cmd\u003e**Powered by**\u003c/md\u003e \u003cimg src\u003d\"https://markbind.org/favicon.ico\" width\u003d\"30\"\u003e {{MarkBind}}, generated on {{timestamp}}]\u003c/small\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"-"},"content":"\u003c/footer\u003e","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"NeoHW":1,"-":66}},{"path":"docs/index.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"NeoHW"},"content":"# PatientSync","lastModifiedDate":"2024-03-06"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"-"},"content":"[![CI Status](https://github.com/se-edu/addressbook-level3/workflows/Java%20CI/badge.svg)](https://github.com/se-edu/addressbook-level3/actions)","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"[![codecov](https://codecov.io/gh/se-edu/addressbook-level3/branch/master/graph/badge.svg)](https://codecov.io/gh/se-edu/addressbook-level3)","lastModifiedDate":"2020-08-07"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":11,"author":{"gitId":"-"},"content":"![Ui](images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":13,"author":{"gitId":"NeoHW"},"content":"**PatientSync is a desktop application meticulously crafted for nurses who prioritize the well-being of their patients above all else.** ","lastModifiedDate":"2024-03-06"},{"lineNumber":14,"author":{"gitId":"NeoHW"},"content":"It allows you to input intimate details about your patients, such as food preferences and family conditions. While it has a GUI, most of the user interactions happen using a CLI (Command Line Interface).","lastModifiedDate":"2024-03-06"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":17,"author":{"gitId":"NeoHW"},"content":"| Project Links | Description |","lastModifiedDate":"2024-03-06"},{"lineNumber":18,"author":{"gitId":"NeoHW"},"content":"|-------------------------|------------------------------------------------------------------|","lastModifiedDate":"2024-03-06"},{"lineNumber":19,"author":{"gitId":"NeoHW"},"content":"| [Project Website](https://ay2324s2-cs2103-f09-2.github.io/tp/) | Official website for the PatientSync desktop application. |","lastModifiedDate":"2024-03-06"},{"lineNumber":20,"author":{"gitId":"NeoHW"},"content":"| [User Guide](UserGuide.html#quick-start) | Quick Start guide for users interested in using PatientSync. |","lastModifiedDate":"2024-03-06"},{"lineNumber":21,"author":{"gitId":"NeoHW"},"content":"| [Developer Guide](DeveloperGuide.html) | Comprehensive guide for developers interested in contributing to PatientSync. |","lastModifiedDate":"2024-03-06"},{"lineNumber":22,"author":{"gitId":"NeoHW"},"content":"| [About Us](AboutUs.html) | Learn more about the team behind the PatientSync project. |","lastModifiedDate":"2024-03-06"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":25,"author":{"gitId":"-"},"content":"**Acknowledgements** ","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"NeoHW"},"content":"This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-03-06"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":"* Libraries used: [JavaFX](https://openjfx.io/), [Jackson](https://github.com/FasterXML/jackson), [JUnit5](https://github.com/junit-team/junit5)","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"NeoHW":10,"-":18}}] diff --git a/AY2324S2-CS2103-F09-2_tp_master/commits.json b/AY2324S2-CS2103-F09-2_tp_master/commits.json index 2a5ab7d4..cb01e0c4 100644 --- a/AY2324S2-CS2103-F09-2_tp_master/commits.json +++ b/AY2324S2-CS2103-F09-2_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"guohuang88":[{"date":"2024-03-05","commitResults":[{"hash":"67cb69188c5c4655d8709f6ce3bc0bc089286207","isMergeCommit":false,"messageTitle":"Update AboutUs.md to add profile picture","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":6}}}]},{"date":"2024-03-06","commitResults":[{"hash":"2210a0fd7846a8923b1777796d49469dfec2ffed","isMergeCommit":true,"messageTitle":"Merge pull request #39 from NeoHW/V1.1-ReadMe","messageBody":"Update README with project details and UI mockup","fileTypesAndContributionMap":{}},{"hash":"309a95f89f3ec28c2b56dbbd2b5c3187ff494248","isMergeCommit":true,"messageTitle":"Merge pull request #38 from NeoHW/V1.1-UserStories","messageBody":"Add Nurse user stories for PatientSync","fileTypesAndContributionMap":{}},{"hash":"3ebbae815f98eec9afbd0bf04edeb7ec9535e6f9","isMergeCommit":false,"messageTitle":"Add use cases in Developer Guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":153,"deletions":8}}}]}],"SherisseTJW":[{"date":"2024-03-04","commitResults":[{"hash":"6aaaf3fa750fe83176ac00adc3f7c0e0c15d20df","isMergeCommit":true,"messageTitle":"Merge pull request #22 from NeoHW/V1.1-AddProfilePic","messageBody":"V1.1 add profile pic","fileTypesAndContributionMap":{}},{"hash":"8f2224d5f8fdee7802fa4b96d441a0695cec983a","isMergeCommit":true,"messageTitle":"Merge pull request #23 from ZhiWei1010/v1.1-add-profile-picture","messageBody":"Update AboutUs.md for milestone v1.1","fileTypesAndContributionMap":{}}]},{"date":"2024-03-06","commitResults":[{"hash":"482117fa53f473a152cfe2ebcdef1b577b0a0592","isMergeCommit":false,"messageTitle":"doc: Update About Us","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":15,"deletions":5}}},{"hash":"2b8ae16bc2f7c127ca668df2013bf003b541b9ae","isMergeCommit":false,"messageTitle":"minor-doc-fix: Style Errors in build","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"8d97da58f2cf227f5f91b09d66652fecd148e8c5","isMergeCommit":true,"messageTitle":"Merge pull request #40 from guohuang88/branch-UseCases","messageBody":"Add use cases in Developer Guide","fileTypesAndContributionMap":{}}]}],"ZhiWei1010":[{"date":"2024-03-04","commitResults":[{"hash":"a82460a19c98af3bf8d133548113d352c4fa7484","isMergeCommit":false,"messageTitle":"Update AboutUs page","messageBody":"Add profile picture.\n\nUpdate github link to redirect to personal github page.\n\nUpdate portfolio link to redirect to team portfolio page.\n\nUpdate role and responsibility for Tan Zhi Wei .\n","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":6}}}]},{"date":"2024-03-06","commitResults":[{"hash":"6b44c9a59d9a65c8cec1f010d9a69d83e9528584","isMergeCommit":true,"messageTitle":"Merge pull request #32 from NeoHW/V1.1-DG-UserProfile-and-ValueProposition","messageBody":"Adapt target user profile and value proposition to fit PatientSync","fileTypesAndContributionMap":{}},{"hash":"95fb1f028ea0bd024712a4282e0a72561288eea7","isMergeCommit":true,"messageTitle":"Merge pull request #37 from NeoHW/V1.1-DG-NFR","messageBody":"Update non-functional requirements to match Patientsync","fileTypesAndContributionMap":{}}]}],"choowengyan":[{"date":"2024-03-07","commitResults":[{"hash":"8ef0f765ec7e08d2f6917669a386c1b87a1f5715","isMergeCommit":false,"messageTitle":"Update name, links, role and responsibilities","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":4}}},{"hash":"abd4ed57d146a0e529b4d8aa8c8821e3ef079b8e","isMergeCommit":false,"messageTitle":"Update profile picture","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]}],"NeoHW":[{"date":"2024-03-04","commitResults":[{"hash":"f5d917cdba85f6ffece8081e08c2f775decdf8e7","isMergeCommit":false,"messageTitle":"Update AboutUs.md for milestone 1.1","messageBody":"- Updated profile photo, role, and responsibilities for Neo Haowei\n\nThis commit updates the AboutUs.md page for milestone 1.1.\nNeo Haowei\u0027s profile photo, GitHub link, and portfolio link\nhave been added.\n\nFixes #16\n","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":15}}}]},{"date":"2024-03-05","commitResults":[{"hash":"a65df35e86510160985bb9c3de8dce3110b2c1fd","isMergeCommit":true,"messageTitle":"Merge pull request #24 from guohuang88/branch-AboutUs","messageBody":"Update AboutUs.md to add profile picture","fileTypesAndContributionMap":{}},{"hash":"5ddc688b9f6f5ea9a1ec4282d54c0fcae2d3cfc1","isMergeCommit":false,"messageTitle":"feat: Adapt MarkBind site for project","messageBody":"- Added GitHub Actions write permissions for repo\n- Updated site configs to match project fork:\n\t- Updated baseUrl in .github/workflows/docs.yml\n\t- Updated product name in docs/_markbind/layouts/default.md\n\t- Updated titlePrefix in docs/site.json\n","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2024-03-06","commitResults":[{"hash":"2e708a81e0b936532dc595f3dbe1aa318ab98d30","isMergeCommit":false,"messageTitle":"Update index.md for PatientSync","messageBody":"The index.md file was previously tailored for the addressbook3 project.\nThis commit updates the content to reflect new PatientSync project,\nincluding the project name, description, and relevant links.\n\nThe changes include:\n* Updating the project name to PatientSync\n* Updating the project description\n\nThis update is necessary to provide accurate and relevant information\nabout the PatientSync project on the main page of the documentation.\n","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":4}}},{"hash":"0cf51d0f1f89bddbe1499a73f833a20d467e6ddb","isMergeCommit":true,"messageTitle":"Merge pull request #27 from NeoHW/V1.1-UpdateProjectWebsite","messageBody":"V1.1 update project website","fileTypesAndContributionMap":{}},{"hash":"eda06224df402de86a3f0904da58212475e29211","isMergeCommit":false,"messageTitle":"Add acknowledgements to home readme","messageBody":"Give acknowledgements that this project is based on the\nAddressBook-Level3 project created by the SE-EDU intiative\n","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":1}}},{"hash":"d02733d664171f860738bb3e9ebc4a9736f450eb","isMergeCommit":false,"messageTitle":"Beautify and Add Descriptions for Project Links","messageBody":"Improve the presentation of project links by using a table format.\nAlso provide descriptions for each link to give users more context.\nThis enhances readability and provides users with quick insights\ninto the purpose of each link.\n\nThese changes aim to make navigating the project resources\neasier for users and developers alike.\n","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":2}}},{"hash":"984452c8305e842ee7e774fbd53b2c55ac12aba9","isMergeCommit":true,"messageTitle":"Merge pull request #29 from NeoHW/V1.1-Acknowledgement","messageBody":"V1.1 acknowledgement + Project Links table in Home Page","fileTypesAndContributionMap":{}},{"hash":"b88e1ec8fa11980ba8a00b6e93bd39807072e8fe","isMergeCommit":false,"messageTitle":"Adapt target user profile and value proposition to fit PatientSync","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":9,"deletions":7}}},{"hash":"d9db09659f2cd43dbf00a82f3006f9092bd33f25","isMergeCommit":true,"messageTitle":"Merge pull request #33 from SherisseTJW/doc/update-dev-docs","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c7d64c91a4ecdc88a78f006d93a99691fb7f46a0","isMergeCommit":false,"messageTitle":"Update non-functional requirements to match Patientsync","messageBody":"Also added new NFRs\n","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":3}}},{"hash":"e5caacd65bbbf9346c8478e994f55411842ccd46","isMergeCommit":false,"messageTitle":"Add Nurse user stories for PatientSync","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":16,"deletions":9}}},{"hash":"40d40baf6bf3012822a7c022ff455284f1d1a85a","isMergeCommit":false,"messageTitle":"Update README with project details and UI mockup","messageBody":"- Updated the README to reflect the project\u0027s target users\nand key challenges\n- Added a UI mockup image\n- Acknowledged the original source of the code\n","fileTypesAndContributionMap":{"docs":{"insertions":31,"deletions":10}}}]},{"date":"2024-03-07","commitResults":[{"hash":"751b259d39951f011b181a96bb2854ffd3f45226","isMergeCommit":true,"messageTitle":"Merge pull request #42 from choowengyan/v1.1/add-profile-pic","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"guohuang88":{"docs":141,"functional-code":0,"test-code":0},"SherisseTJW":{"docs":6,"functional-code":0,"test-code":0},"ZhiWei1010":{"docs":6,"functional-code":0,"test-code":0},"choowengyan":{"docs":7,"functional-code":0,"test-code":0},"NeoHW":{"docs":76,"functional-code":0,"test-code":0}},"authorContributionVariance":{"guohuang88":1709.0867,"SherisseTJW":38.204082,"ZhiWei1010":9.551021,"choowengyan":9.551021,"NeoHW":833.24493},"authorDisplayNameMap":{"guohuang88":"CS2103-F09-2 LI G..UANG","SherisseTJW":"CS2103-F09-2 SHER.. WEN","ZhiWei1010":"CS2103-F09-2 TAN .. WEI","choowengyan":"CS2103-F09-2 CHOO.. YAN","NeoHW":"CS2103-F09-2 NEO ..OWEI"}} +{"authorDailyContributionsMap":{"guohuang88":[{"date":"2024-03-05","commitResults":[{"hash":"67cb69188c5c4655d8709f6ce3bc0bc089286207","isMergeCommit":false,"messageTitle":"Update AboutUs.md to add profile picture","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":6}}}]},{"date":"2024-03-06","commitResults":[{"hash":"2210a0fd7846a8923b1777796d49469dfec2ffed","isMergeCommit":true,"messageTitle":"Merge pull request #39 from NeoHW/V1.1-ReadMe","messageBody":"Update README with project details and UI mockup","fileTypesAndContributionMap":{}},{"hash":"309a95f89f3ec28c2b56dbbd2b5c3187ff494248","isMergeCommit":true,"messageTitle":"Merge pull request #38 from NeoHW/V1.1-UserStories","messageBody":"Add Nurse user stories for PatientSync","fileTypesAndContributionMap":{}},{"hash":"3ebbae815f98eec9afbd0bf04edeb7ec9535e6f9","isMergeCommit":false,"messageTitle":"Add use cases in Developer Guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":153,"deletions":8}}}]},{"date":"2024-03-08","commitResults":[{"hash":"b0f8627c0a934b926ff27a8ea2903ee555685405","isMergeCommit":true,"messageTitle":"Merge pull request #51 from NeoHW/v1.1-Fix-UG","messageBody":"Fix User Guide to be in terms of PatientSync instead of AB-3","fileTypesAndContributionMap":{}}]}],"SherisseTJW":[{"date":"2024-03-04","commitResults":[{"hash":"6aaaf3fa750fe83176ac00adc3f7c0e0c15d20df","isMergeCommit":true,"messageTitle":"Merge pull request #22 from NeoHW/V1.1-AddProfilePic","messageBody":"V1.1 add profile pic","fileTypesAndContributionMap":{}},{"hash":"8f2224d5f8fdee7802fa4b96d441a0695cec983a","isMergeCommit":true,"messageTitle":"Merge pull request #23 from ZhiWei1010/v1.1-add-profile-picture","messageBody":"Update AboutUs.md for milestone v1.1","fileTypesAndContributionMap":{}}]},{"date":"2024-03-06","commitResults":[{"hash":"482117fa53f473a152cfe2ebcdef1b577b0a0592","isMergeCommit":false,"messageTitle":"doc: Update About Us","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":15,"deletions":5}}},{"hash":"2b8ae16bc2f7c127ca668df2013bf003b541b9ae","isMergeCommit":false,"messageTitle":"minor-doc-fix: Style Errors in build","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"8d97da58f2cf227f5f91b09d66652fecd148e8c5","isMergeCommit":true,"messageTitle":"Merge pull request #40 from guohuang88/branch-UseCases","messageBody":"Add use cases in Developer Guide","fileTypesAndContributionMap":{}}]},{"date":"2024-03-08","commitResults":[{"hash":"f734e81d6235797f85cb762e847fa18d5d2e0f2f","isMergeCommit":false,"messageTitle":"fix: Change extension to lower case","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]}],"ZhiWei1010":[{"date":"2024-03-04","commitResults":[{"hash":"a82460a19c98af3bf8d133548113d352c4fa7484","isMergeCommit":false,"messageTitle":"Update AboutUs page","messageBody":"Add profile picture.\n\nUpdate github link to redirect to personal github page.\n\nUpdate portfolio link to redirect to team portfolio page.\n\nUpdate role and responsibility for Tan Zhi Wei .\n","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":6}}}]},{"date":"2024-03-06","commitResults":[{"hash":"6b44c9a59d9a65c8cec1f010d9a69d83e9528584","isMergeCommit":true,"messageTitle":"Merge pull request #32 from NeoHW/V1.1-DG-UserProfile-and-ValueProposition","messageBody":"Adapt target user profile and value proposition to fit PatientSync","fileTypesAndContributionMap":{}},{"hash":"95fb1f028ea0bd024712a4282e0a72561288eea7","isMergeCommit":true,"messageTitle":"Merge pull request #37 from NeoHW/V1.1-DG-NFR","messageBody":"Update non-functional requirements to match Patientsync","fileTypesAndContributionMap":{}}]}],"choowengyan":[{"date":"2024-03-07","commitResults":[{"hash":"8ef0f765ec7e08d2f6917669a386c1b87a1f5715","isMergeCommit":false,"messageTitle":"Update name, links, role and responsibilities","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":4}}},{"hash":"abd4ed57d146a0e529b4d8aa8c8821e3ef079b8e","isMergeCommit":false,"messageTitle":"Update profile picture","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2024-03-08","commitResults":[{"hash":"a47f97a1a0c5cc451c35bdd50ac0ca9cfe425f5d","isMergeCommit":true,"messageTitle":"Merge pull request #48 from SherisseTJW/doc/fix-doc","messageBody":"fix: Change extension to lower case","fileTypesAndContributionMap":{}}]}],"NeoHW":[{"date":"2024-03-04","commitResults":[{"hash":"f5d917cdba85f6ffece8081e08c2f775decdf8e7","isMergeCommit":false,"messageTitle":"Update AboutUs.md for milestone 1.1","messageBody":"- Updated profile photo, role, and responsibilities for Neo Haowei\n\nThis commit updates the AboutUs.md page for milestone 1.1.\nNeo Haowei\u0027s profile photo, GitHub link, and portfolio link\nhave been added.\n\nFixes #16\n","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":15}}}]},{"date":"2024-03-05","commitResults":[{"hash":"a65df35e86510160985bb9c3de8dce3110b2c1fd","isMergeCommit":true,"messageTitle":"Merge pull request #24 from guohuang88/branch-AboutUs","messageBody":"Update AboutUs.md to add profile picture","fileTypesAndContributionMap":{}},{"hash":"5ddc688b9f6f5ea9a1ec4282d54c0fcae2d3cfc1","isMergeCommit":false,"messageTitle":"feat: Adapt MarkBind site for project","messageBody":"- Added GitHub Actions write permissions for repo\n- Updated site configs to match project fork:\n\t- Updated baseUrl in .github/workflows/docs.yml\n\t- Updated product name in docs/_markbind/layouts/default.md\n\t- Updated titlePrefix in docs/site.json\n","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2024-03-06","commitResults":[{"hash":"2e708a81e0b936532dc595f3dbe1aa318ab98d30","isMergeCommit":false,"messageTitle":"Update index.md for PatientSync","messageBody":"The index.md file was previously tailored for the addressbook3 project.\nThis commit updates the content to reflect new PatientSync project,\nincluding the project name, description, and relevant links.\n\nThe changes include:\n* Updating the project name to PatientSync\n* Updating the project description\n\nThis update is necessary to provide accurate and relevant information\nabout the PatientSync project on the main page of the documentation.\n","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":4}}},{"hash":"0cf51d0f1f89bddbe1499a73f833a20d467e6ddb","isMergeCommit":true,"messageTitle":"Merge pull request #27 from NeoHW/V1.1-UpdateProjectWebsite","messageBody":"V1.1 update project website","fileTypesAndContributionMap":{}},{"hash":"eda06224df402de86a3f0904da58212475e29211","isMergeCommit":false,"messageTitle":"Add acknowledgements to home readme","messageBody":"Give acknowledgements that this project is based on the\nAddressBook-Level3 project created by the SE-EDU intiative\n","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":1}}},{"hash":"d02733d664171f860738bb3e9ebc4a9736f450eb","isMergeCommit":false,"messageTitle":"Beautify and Add Descriptions for Project Links","messageBody":"Improve the presentation of project links by using a table format.\nAlso provide descriptions for each link to give users more context.\nThis enhances readability and provides users with quick insights\ninto the purpose of each link.\n\nThese changes aim to make navigating the project resources\neasier for users and developers alike.\n","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":2}}},{"hash":"984452c8305e842ee7e774fbd53b2c55ac12aba9","isMergeCommit":true,"messageTitle":"Merge pull request #29 from NeoHW/V1.1-Acknowledgement","messageBody":"V1.1 acknowledgement + Project Links table in Home Page","fileTypesAndContributionMap":{}},{"hash":"b88e1ec8fa11980ba8a00b6e93bd39807072e8fe","isMergeCommit":false,"messageTitle":"Adapt target user profile and value proposition to fit PatientSync","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":9,"deletions":7}}},{"hash":"d9db09659f2cd43dbf00a82f3006f9092bd33f25","isMergeCommit":true,"messageTitle":"Merge pull request #33 from SherisseTJW/doc/update-dev-docs","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c7d64c91a4ecdc88a78f006d93a99691fb7f46a0","isMergeCommit":false,"messageTitle":"Update non-functional requirements to match Patientsync","messageBody":"Also added new NFRs\n","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":3}}},{"hash":"e5caacd65bbbf9346c8478e994f55411842ccd46","isMergeCommit":false,"messageTitle":"Add Nurse user stories for PatientSync","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":16,"deletions":9}}},{"hash":"40d40baf6bf3012822a7c022ff455284f1d1a85a","isMergeCommit":false,"messageTitle":"Update README with project details and UI mockup","messageBody":"- Updated the README to reflect the project\u0027s target users\nand key challenges\n- Added a UI mockup image\n- Acknowledged the original source of the code\n","fileTypesAndContributionMap":{"docs":{"insertions":31,"deletions":10}}}]},{"date":"2024-03-07","commitResults":[{"hash":"751b259d39951f011b181a96bb2854ffd3f45226","isMergeCommit":true,"messageTitle":"Merge pull request #42 from choowengyan/v1.1/add-profile-pic","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2024-03-08","commitResults":[{"hash":"daf544ff5be71776e96dc9eb2ef095680a6ee5f5","isMergeCommit":false,"messageTitle":"Fix User Guide to be in terms of PatientSync instead of AB-3","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":3}}}]}]},"authorFileTypeContributionMap":{"guohuang88":{"docs":141,"functional-code":0,"test-code":0},"SherisseTJW":{"docs":6,"functional-code":0,"test-code":0},"ZhiWei1010":{"docs":6,"functional-code":0,"test-code":0},"choowengyan":{"docs":7,"functional-code":0,"test-code":0},"NeoHW":{"docs":80,"functional-code":0,"test-code":0}},"authorContributionVariance":{"guohuang88":1604.6487,"SherisseTJW":35.662224,"ZhiWei1010":8.96,"choowengyan":8.96,"NeoHW":778.1066},"authorDisplayNameMap":{"guohuang88":"CS2103-F09-2 LI G..UANG","SherisseTJW":"CS2103-F09-2 SHER.. WEN","ZhiWei1010":"CS2103-F09-2 TAN .. WEI","choowengyan":"CS2103-F09-2 CHOO.. YAN","NeoHW":"CS2103-F09-2 NEO ..OWEI"}} diff --git a/AY2324S2-CS2103-F09-4_tp_master/authorship.json b/AY2324S2-CS2103-F09-4_tp_master/authorship.json index f2262d85..5b430e34 100644 --- a/AY2324S2-CS2103-F09-4_tp_master/authorship.json +++ b/AY2324S2-CS2103-F09-4_tp_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"joenus"},"content":"[![Java CI](https://github.com/AY2324S2-CS2103-F09-4/tp/actions/workflows/gradle.yml/badge.svg)](https://github.com/AY2324S2-CS2103-F09-4/tp/actions/workflows/gradle.yml)","lastModifiedDate":"2024-02-28"},{"lineNumber":2,"author":{"gitId":"jmsandiegoo"},"content":"[![codecov](https://codecov.io/gh/AY2324S2-CS2103-F09-4/tp/graph/badge.svg?token\u003dZCUENL7XA6)](https://codecov.io/gh/AY2324S2-CS2103-F09-4/tp)","lastModifiedDate":"2024-02-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"![Ui](docs/images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"joenus"},"content":"**HealthSync** helps optimize clinical efficiency with a keyboard-driven system for doctors to manage patient records, notes, medical certificates, and medication dispensing, all in one streamlined interface, enhancing care quality and focus in a busy clinical setting. While it has a GUI, most of the user interactions happen using a CLI (Command Line Interface).","lastModifiedDate":"2024-02-28"},{"lineNumber":7,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":8,"author":{"gitId":"joenus"},"content":"* If you are interested in using HealthSync, head over to the [_Quick Start_ section of the **User Guide**](UserGuide.html#quick-start).","lastModifiedDate":"2024-02-28"},{"lineNumber":9,"author":{"gitId":"joenus"},"content":"* If you are interested about developing HealthSync, the [**Developer Guide**](DeveloperGuide.html) is a good place to start.","lastModifiedDate":"2024-02-28"},{"lineNumber":10,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":11,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":12,"author":{"gitId":"joenus"},"content":"**Acknowledgements**","lastModifiedDate":"2024-02-28"},{"lineNumber":13,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":14,"author":{"gitId":"joenus"},"content":"* Libraries used: [JavaFX](https://openjfx.io/), [Jackson](https://github.com/FasterXML/jackson), [JUnit5](https://github.com/junit-team/junit5)","lastModifiedDate":"2024-02-28"}],"authorContributionMap":{"joenus":10,"jmsandiegoo":1,"-":3}},{"path":"build.gradle","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2016-08-29"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2017-12-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2017-12-05"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2022-06-17"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2016-12-08"},{"lineNumber":6,"author":{"gitId":"-"},"content":" id \u0027jacoco\u0027","lastModifiedDate":"2020-08-07"},{"lineNumber":7,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-29"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-29"},{"lineNumber":9,"author":{"gitId":"-"},"content":"mainClassName \u003d \u0027seedu.address.Main\u0027","lastModifiedDate":"2019-02-08"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-08"},{"lineNumber":11,"author":{"gitId":"-"},"content":"sourceCompatibility \u003d JavaVersion.VERSION_11","lastModifiedDate":"2019-02-20"},{"lineNumber":12,"author":{"gitId":"-"},"content":"targetCompatibility \u003d JavaVersion.VERSION_11","lastModifiedDate":"2019-02-20"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":14,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2016-08-08"},{"lineNumber":15,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2016-08-08"},{"lineNumber":16,"author":{"gitId":"-"},"content":" maven { url \u0027https://oss.sonatype.org/content/repositories/snapshots/\u0027 }","lastModifiedDate":"2018-04-11"},{"lineNumber":17,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":19,"author":{"gitId":"-"},"content":"checkstyle {","lastModifiedDate":"2016-10-12"},{"lineNumber":20,"author":{"gitId":"-"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2022-04-29"},{"lineNumber":21,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-10-12"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-10-12"},{"lineNumber":23,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2018-03-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2018-03-23"},{"lineNumber":25,"author":{"gitId":"-"},"content":" finalizedBy jacocoTestReport","lastModifiedDate":"2020-08-07"},{"lineNumber":26,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-08-07"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-08-07"},{"lineNumber":28,"author":{"gitId":"-"},"content":"task coverage(type: JacocoReport) {","lastModifiedDate":"2020-08-07"},{"lineNumber":29,"author":{"gitId":"-"},"content":" sourceDirectories.from files(sourceSets.main.allSource.srcDirs)","lastModifiedDate":"2020-08-07"},{"lineNumber":30,"author":{"gitId":"-"},"content":" classDirectories.from files(sourceSets.main.output)","lastModifiedDate":"2020-08-07"},{"lineNumber":31,"author":{"gitId":"-"},"content":" executionData.from files(jacocoTestReport.executionData)","lastModifiedDate":"2020-08-07"},{"lineNumber":32,"author":{"gitId":"-"},"content":" afterEvaluate {","lastModifiedDate":"2020-08-07"},{"lineNumber":33,"author":{"gitId":"-"},"content":" classDirectories.from files(classDirectories.files.collect {","lastModifiedDate":"2020-08-07"},{"lineNumber":34,"author":{"gitId":"-"},"content":" fileTree(dir: it, exclude: [\u0027**/*.jar\u0027])","lastModifiedDate":"2020-08-07"},{"lineNumber":35,"author":{"gitId":"-"},"content":" })","lastModifiedDate":"2020-08-07"},{"lineNumber":36,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-08-07"},{"lineNumber":37,"author":{"gitId":"-"},"content":" reports {","lastModifiedDate":"2020-08-07"},{"lineNumber":38,"author":{"gitId":"-"},"content":" html.required \u003d true","lastModifiedDate":"2022-06-17"},{"lineNumber":39,"author":{"gitId":"-"},"content":" xml.required \u003d true","lastModifiedDate":"2022-06-17"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-08-07"},{"lineNumber":41,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2018-03-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-03-23"},{"lineNumber":43,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2016-08-08"},{"lineNumber":44,"author":{"gitId":"-"},"content":" String jUnitVersion \u003d \u00275.4.0\u0027","lastModifiedDate":"2019-02-10"},{"lineNumber":45,"author":{"gitId":"-"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-07-27"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-08"},{"lineNumber":47,"author":{"gitId":"-"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2019-02-19"},{"lineNumber":48,"author":{"gitId":"-"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2019-02-19"},{"lineNumber":49,"author":{"gitId":"-"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2019-02-19"},{"lineNumber":50,"author":{"gitId":"-"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2019-02-19"},{"lineNumber":51,"author":{"gitId":"-"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2019-02-19"},{"lineNumber":52,"author":{"gitId":"-"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2019-02-19"},{"lineNumber":53,"author":{"gitId":"-"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2019-02-19"},{"lineNumber":54,"author":{"gitId":"-"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2019-02-19"},{"lineNumber":55,"author":{"gitId":"-"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2019-02-19"},{"lineNumber":56,"author":{"gitId":"-"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2019-02-19"},{"lineNumber":57,"author":{"gitId":"-"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2019-02-19"},{"lineNumber":58,"author":{"gitId":"-"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2019-02-19"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-05"},{"lineNumber":60,"author":{"gitId":"-"},"content":" implementation group: \u0027com.fasterxml.jackson.core\u0027, name: \u0027jackson-databind\u0027, version: \u00272.7.0\u0027","lastModifiedDate":"2018-03-29"},{"lineNumber":61,"author":{"gitId":"-"},"content":" implementation group: \u0027com.fasterxml.jackson.datatype\u0027, name: \u0027jackson-datatype-jsr310\u0027, version: \u00272.7.4\u0027","lastModifiedDate":"2018-03-29"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-05"},{"lineNumber":63,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: jUnitVersion","lastModifiedDate":"2018-03-23"},{"lineNumber":64,"author":{"gitId":"joenus"},"content":" testImplementation \"org.mockito:mockito-core:3.+\"","lastModifiedDate":"2024-02-29"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-03-23"},{"lineNumber":66,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: jUnitVersion","lastModifiedDate":"2018-03-23"},{"lineNumber":67,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-29"},{"lineNumber":69,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2016-08-29"},{"lineNumber":70,"author":{"gitId":"-"},"content":" archiveFileName \u003d \u0027addressbook.jar\u0027","lastModifiedDate":"2022-06-17"},{"lineNumber":71,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-29"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":73,"author":{"gitId":"-"},"content":"defaultTasks \u0027clean\u0027, \u0027test\u0027","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"joenus":1,"-":72}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":"layout: page","lastModifiedDate":"2020-05-23"},{"lineNumber":3,"author":{"gitId":"-"},"content":"title: About Us","lastModifiedDate":"2020-05-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"We are a team based in the [School of Computing, National University of Singapore](http://www.comp.nus.edu.sg).","lastModifiedDate":"2020-05-23"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":8,"author":{"gitId":"-"},"content":"You can reach us at the email `seer[at]comp.nus.edu.sg`","lastModifiedDate":"2020-06-17"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-06-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"## Project team","lastModifiedDate":"2020-06-07"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"-"},"content":"### John Doe","lastModifiedDate":"2020-05-23"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":14,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/johndoe.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2020-06-17"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"-"},"content":"[[homepage](http://www.comp.nus.edu.sg/~damithch)]","lastModifiedDate":"2020-05-23"},{"lineNumber":17,"author":{"gitId":"-"},"content":"[[github](https://github.com/johndoe)]","lastModifiedDate":"2020-06-17"},{"lineNumber":18,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"-"},"content":"* Role: Project Advisor","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"raysonchia"},"content":"### Rayson Chia","lastModifiedDate":"2024-03-01"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"raysonchia"},"content":"\u003cimg src\u003d\"images/raysonchia.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-01"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"raysonchia"},"content":"[[github](http://github.com/raysonchia)]","lastModifiedDate":"2024-03-01"},{"lineNumber":27,"author":{"gitId":"raysonchia"},"content":"[[portfolio](team/raysonchia.md)]","lastModifiedDate":"2024-03-01"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":29,"author":{"gitId":"raysonchia"},"content":"* Role: Developer","lastModifiedDate":"2024-03-01"},{"lineNumber":30,"author":{"gitId":"raysonchia"},"content":"* Responsibilities: Developer","lastModifiedDate":"2024-03-01"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"rickkoh"},"content":"### Rick Koh","lastModifiedDate":"2024-03-01"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"rickkoh"},"content":"\u003cimg src\u003d\"images/rickkoh.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-01"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"rickkoh"},"content":"[[github](http://github.com/rickkoh)]","lastModifiedDate":"2024-03-01"},{"lineNumber":37,"author":{"gitId":"rickkoh"},"content":"[[portfolio](team/rickkoh.md)]","lastModifiedDate":"2024-03-01"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"rickkoh"},"content":"* Role: QA, Developer","lastModifiedDate":"2024-03-01"},{"lineNumber":40,"author":{"gitId":"rickkoh"},"content":"* Responsibilities: Developer","lastModifiedDate":"2024-03-01"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"sebin0817"},"content":"### Aum Sebin","lastModifiedDate":"2024-02-29"},{"lineNumber":43,"author":{"gitId":"sebin0817"},"content":"\u003cimg src\u003d\"images/sebinaum.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-29"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"sebin0817"},"content":"[[github](http://github.com/sebin0817)]","lastModifiedDate":"2024-02-29"},{"lineNumber":46,"author":{"gitId":"sebin0817"},"content":"[[portfolio](team/sebin.md)]","lastModifiedDate":"2024-02-29"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"jmsandiegoo"},"content":"### Jm San Diego ⚡️","lastModifiedDate":"2024-02-29"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":50,"author":{"gitId":"jmsandiegoo"},"content":"\u003cimg src\u003d\"images/jmsandiegoo.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-29"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"jmsandiegoo"},"content":"[[github](http://github.com/jmsandiegoo)]","lastModifiedDate":"2024-02-29"},{"lineNumber":53,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":56,"author":{"gitId":"jmsandiegoo"},"content":"* Responsibilities: Developer","lastModifiedDate":"2024-02-29"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":58,"author":{"gitId":"joenus"},"content":"### Joe Kawai","lastModifiedDate":"2024-02-28"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":60,"author":{"gitId":"joenus"},"content":"\u003cimg src\u003d\"images/joenus.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-28"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":62,"author":{"gitId":"joenus"},"content":"[[github](https://github.com/joenus)]","lastModifiedDate":"2024-02-28"},{"lineNumber":63,"author":{"gitId":"joenus"},"content":"[[portfolio](team/joe.md)]","lastModifiedDate":"2024-02-28"},{"lineNumber":64,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":65,"author":{"gitId":"jmsandiegoo"},"content":"* Role: Team Lead, Developer","lastModifiedDate":"2024-02-29"},{"lineNumber":66,"author":{"gitId":"joenus"},"content":"* Responsibilities: Developer","lastModifiedDate":"2024-02-28"}],"authorContributionMap":{"joenus":5,"jmsandiegoo":5,"raysonchia":6,"sebin0817":4,"-":40,"rickkoh":6}},{"path":"docs/DeveloperGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":"layout: page","lastModifiedDate":"2020-05-23"},{"lineNumber":3,"author":{"gitId":"-"},"content":"title: Developer Guide","lastModifiedDate":"2020-05-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"* Table of Contents","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"{:toc}","lastModifiedDate":"2020-05-23"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":8,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":10,"author":{"gitId":"-"},"content":"## **Acknowledgements**","lastModifiedDate":"2021-07-30"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":12,"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":"2021-07-30"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":14,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2021-07-30"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"-"},"content":"## **Setting up, getting started**","lastModifiedDate":"2020-05-23"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"Refer to the guide [_Setting up and getting started_](SettingUp.md).","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"## **Design**","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-primary\"\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"-"},"content":":bulb: **Tip:** The `.puml` files used to create diagrams in this document `docs/diagrams` folder. Refer to the [_PlantUML Tutorial_ at se-edu/guides](https://se-education.org/guides/tutorials/plantUml.html) to learn how to create and edit diagrams.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":29,"author":{"gitId":"-"},"content":"### Architecture","lastModifiedDate":"2021-07-31"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/ArchitectureDiagram.png\" width\u003d\"280\" /\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":33,"author":{"gitId":"-"},"content":"The ***Architecture Diagram*** given above explains the high-level design of the App.","lastModifiedDate":"2021-07-31"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":35,"author":{"gitId":"-"},"content":"Given below is a quick overview of main components and how they interact with each other.","lastModifiedDate":"2021-07-31"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":37,"author":{"gitId":"-"},"content":"**Main components of the architecture**","lastModifiedDate":"2021-07-31"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"joenus"},"content":"**`Main`** (consisting of classes [`Main`](https://github.com/se-edu/HealthSync-level3/tree/master/src/main/java/seedu/address/Main.java) and [`MainApp`](https://github.com/se-edu/HealthSync-level3/tree/master/src/main/java/seedu/address/MainApp.java)) is in charge of the app launch and shut down.","lastModifiedDate":"2024-02-28"},{"lineNumber":40,"author":{"gitId":"-"},"content":"* At app launch, it initializes the other components in the correct sequence, and connects them up with each other.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"-"},"content":"* At shut down, it shuts down the other components and invokes cleanup methods where necessary.","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"-"},"content":"The bulk of the app\u0027s work is done by the following four components:","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":"* [**`UI`**](#ui-component): The UI of the App.","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":"* [**`Logic`**](#logic-component): The command executor.","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* [**`Model`**](#model-component): Holds the data of the App in memory.","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"-"},"content":"* [**`Storage`**](#storage-component): Reads data from, and writes data to, the hard disk.","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":50,"author":{"gitId":"-"},"content":"[**`Commons`**](#common-classes) represents a collection of classes used by multiple other components.","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"-"},"content":"**How the architecture components interact with each other**","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"-"},"content":"The *Sequence Diagram* below shows how the components interact with each other for the scenario where the user issues the command `delete 1`.","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":56,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/ArchitectureSequenceDiagram.png\" width\u003d\"574\" /\u003e","lastModifiedDate":"2020-06-07"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":58,"author":{"gitId":"-"},"content":"Each of the four main components (also shown in the diagram above),","lastModifiedDate":"2021-07-31"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":60,"author":{"gitId":"-"},"content":"* defines its *API* in an `interface` with the same name as the Component.","lastModifiedDate":"2021-07-31"},{"lineNumber":61,"author":{"gitId":"-"},"content":"* implements its functionality using a concrete `{Component Name}Manager` class (which follows the corresponding API `interface` mentioned in the previous point.","lastModifiedDate":"2021-07-31"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":63,"author":{"gitId":"-"},"content":"For example, the `Logic` component defines its API in the `Logic.java` interface and implements its functionality using the `LogicManager.java` class which follows the `Logic` interface. Other components interact with a given component through its interface rather than the concrete class (reason: to prevent outside component\u0027s being coupled to the implementation of a component), as illustrated in the (partial) class diagram below.","lastModifiedDate":"2021-07-31"},{"lineNumber":64,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":65,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/ComponentManagers.png\" width\u003d\"300\" /\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":67,"author":{"gitId":"-"},"content":"The sections below give more details of each component.","lastModifiedDate":"2020-05-23"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":69,"author":{"gitId":"-"},"content":"### UI component","lastModifiedDate":"2020-05-23"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":71,"author":{"gitId":"joenus"},"content":"The **API** of this component is specified in [`Ui.java`](https://github.com/se-edu/HealthSync-level3/tree/master/src/main/java/seedu/address/ui/Ui.java)","lastModifiedDate":"2024-02-28"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":73,"author":{"gitId":"-"},"content":"![Structure of the UI Component](images/UiClassDiagram.png)","lastModifiedDate":"2021-07-31"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":75,"author":{"gitId":"-"},"content":"The UI consists of a `MainWindow` that is made up of parts e.g.`CommandBox`, `ResultDisplay`, `PersonListPanel`, `StatusBarFooter` etc. All these, including the `MainWindow`, inherit from the abstract `UiPart` class which captures the commonalities between classes that represent parts of the visible GUI.","lastModifiedDate":"2021-07-31"},{"lineNumber":76,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":77,"author":{"gitId":"joenus"},"content":"The `UI` component uses the JavaFx UI framework. The layout of these UI parts are defined in matching `.fxml` files that are in the `src/main/resources/view` folder. For example, the layout of the [`MainWindow`](https://github.com/se-edu/HealthSync-level3/tree/master/src/main/java/seedu/address/ui/MainWindow.java) is specified in [`MainWindow.fxml`](https://github.com/se-edu/HealthSync-level3/tree/master/src/main/resources/view/MainWindow.fxml)","lastModifiedDate":"2024-02-28"},{"lineNumber":78,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":79,"author":{"gitId":"-"},"content":"The `UI` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":81,"author":{"gitId":"-"},"content":"* executes user commands using the `Logic` component.","lastModifiedDate":"2021-07-31"},{"lineNumber":82,"author":{"gitId":"-"},"content":"* listens for changes to `Model` data so that the UI can be updated with the modified data.","lastModifiedDate":"2021-07-31"},{"lineNumber":83,"author":{"gitId":"-"},"content":"* keeps a reference to the `Logic` component, because the `UI` relies on the `Logic` to execute commands.","lastModifiedDate":"2021-07-31"},{"lineNumber":84,"author":{"gitId":"-"},"content":"* depends on some classes in the `Model` component, as it displays `Person` object residing in the `Model`.","lastModifiedDate":"2021-07-31"},{"lineNumber":85,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":86,"author":{"gitId":"-"},"content":"### Logic component","lastModifiedDate":"2020-05-23"},{"lineNumber":87,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":88,"author":{"gitId":"joenus"},"content":"**API** : [`Logic.java`](https://github.com/se-edu/HealthSync-level3/tree/master/src/main/java/seedu/address/logic/Logic.java)","lastModifiedDate":"2024-02-28"},{"lineNumber":89,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":90,"author":{"gitId":"-"},"content":"Here\u0027s a (partial) class diagram of the `Logic` component:","lastModifiedDate":"2021-07-31"},{"lineNumber":91,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":92,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/LogicClassDiagram.png\" width\u003d\"550\"/\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":93,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":94,"author":{"gitId":"-"},"content":"The sequence diagram below illustrates the interactions within the `Logic` component, taking `execute(\"delete 1\")` API call as an example.","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":96,"author":{"gitId":"-"},"content":"![Interactions Inside the Logic Component for the `delete 1` Command](images/DeleteSequenceDiagram.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":97,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":98,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-info\"\u003e:information_source: **Note:** The lifeline for `DeleteCommandParser` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline continues till the end of diagram.","lastModifiedDate":"2024-02-09"},{"lineNumber":99,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":100,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":101,"author":{"gitId":"-"},"content":"How the `Logic` component works:","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"joenus"},"content":"1. When `Logic` is called upon to execute a command, it is passed to an `HealthSyncParser` object which in turn creates a parser that matches the command (e.g., `DeleteCommandParser`) and uses it to parse the command.","lastModifiedDate":"2024-02-28"},{"lineNumber":104,"author":{"gitId":"-"},"content":"1. This results in a `Command` object (more precisely, an object of one of its subclasses e.g., `DeleteCommand`) which is executed by the `LogicManager`.","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"-"},"content":"1. The command can communicate with the `Model` when it is executed (e.g. to delete a person).\u003cbr\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":106,"author":{"gitId":"-"},"content":" Note that although this is shown as a single step in the diagram above (for simplicity), in the code it can take several interactions (between the command object and the `Model`) to achieve.","lastModifiedDate":"2024-02-09"},{"lineNumber":107,"author":{"gitId":"-"},"content":"1. The result of the command execution is encapsulated as a `CommandResult` object which is returned back from `Logic`.","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"-"},"content":"Here are the other classes in `Logic` (omitted from the class diagram above) that are used for parsing a user command:","lastModifiedDate":"2021-07-31"},{"lineNumber":110,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":111,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/ParserClasses.png\" width\u003d\"600\"/\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":112,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":113,"author":{"gitId":"-"},"content":"How the parsing works:","lastModifiedDate":"2021-07-31"},{"lineNumber":114,"author":{"gitId":"joenus"},"content":"* When called upon to parse a user command, the `HealthSyncParser` class creates an `XYZCommandParser` (`XYZ` is a placeholder for the specific command name e.g., `AddCommandParser`) which uses the other classes shown above to parse the user command and create a `XYZCommand` object (e.g., `AddCommand`) which the `HealthSyncParser` returns back as a `Command` object.","lastModifiedDate":"2024-02-28"},{"lineNumber":115,"author":{"gitId":"-"},"content":"* All `XYZCommandParser` classes (e.g., `AddCommandParser`, `DeleteCommandParser`, ...) inherit from the `Parser` interface so that they can be treated similarly where possible e.g, during testing.","lastModifiedDate":"2021-07-31"},{"lineNumber":116,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":117,"author":{"gitId":"-"},"content":"### Model component","lastModifiedDate":"2021-07-31"},{"lineNumber":118,"author":{"gitId":"joenus"},"content":"**API** : [`Model.java`](https://github.com/se-edu/HealthSync-level3/tree/master/src/main/java/seedu/address/model/Model.java)","lastModifiedDate":"2024-02-28"},{"lineNumber":119,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":120,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/ModelClassDiagram.png\" width\u003d\"450\" /\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":121,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":122,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":123,"author":{"gitId":"-"},"content":"The `Model` component,","lastModifiedDate":"2021-07-31"},{"lineNumber":124,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":125,"author":{"gitId":"-"},"content":"* stores the address book data i.e., all `Person` objects (which are contained in a `UniquePersonList` object).","lastModifiedDate":"2021-07-31"},{"lineNumber":126,"author":{"gitId":"-"},"content":"* stores the currently \u0027selected\u0027 `Person` objects (e.g., results of a search query) as a separate _filtered_ list which is exposed to outsiders as an unmodifiable `ObservableList\u003cPerson\u003e` that can be \u0027observed\u0027 e.g. the UI can be bound to this list so that the UI automatically updates when the data in the list change.","lastModifiedDate":"2021-07-31"},{"lineNumber":127,"author":{"gitId":"-"},"content":"* stores a `UserPref` object that represents the user’s preferences. This is exposed to the outside as a `ReadOnlyUserPref` objects.","lastModifiedDate":"2021-07-31"},{"lineNumber":128,"author":{"gitId":"-"},"content":"* does not depend on any of the other three components (as the `Model` represents data entities of the domain, they should make sense on their own without depending on other components)","lastModifiedDate":"2021-07-31"},{"lineNumber":129,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":130,"author":{"gitId":"joenus"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-info\"\u003e:information_source: **Note:** An alternative (arguably, a more OOP) model is given below. It has a `Tag` list in the `HealthSync`, which `Person` references. This allows `HealthSync` to only require one `Tag` object per unique tag, instead of each `Person` needing their own `Tag` objects.\u003cbr\u003e","lastModifiedDate":"2024-02-28"},{"lineNumber":131,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":132,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/BetterModelClassDiagram.png\" width\u003d\"450\" /\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":133,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":134,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":135,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":137,"author":{"gitId":"-"},"content":"### Storage component","lastModifiedDate":"2020-05-23"},{"lineNumber":138,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":139,"author":{"gitId":"joenus"},"content":"**API** : [`Storage.java`](https://github.com/se-edu/HealthSync-level3/tree/master/src/main/java/seedu/address/storage/Storage.java)","lastModifiedDate":"2024-02-28"},{"lineNumber":140,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":141,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/StorageClassDiagram.png\" width\u003d\"550\" /\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":142,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":143,"author":{"gitId":"-"},"content":"The `Storage` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":144,"author":{"gitId":"-"},"content":"* can save both address book data and user preference data in JSON format, and read them back into corresponding objects.","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"joenus"},"content":"* inherits from both `HealthSyncStorage` and `UserPrefStorage`, which means it can be treated as either one (if only the functionality of only one is needed).","lastModifiedDate":"2024-02-28"},{"lineNumber":146,"author":{"gitId":"-"},"content":"* depends on some classes in the `Model` component (because the `Storage` component\u0027s job is to save/retrieve objects that belong to the `Model`)","lastModifiedDate":"2021-07-21"},{"lineNumber":147,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":148,"author":{"gitId":"-"},"content":"### Common classes","lastModifiedDate":"2020-05-23"},{"lineNumber":149,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":150,"author":{"gitId":"joenus"},"content":"Classes used by multiple components are in the `seedu.HealthSync.commons` package.","lastModifiedDate":"2024-02-28"},{"lineNumber":151,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":152,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":153,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":154,"author":{"gitId":"-"},"content":"## **Implementation**","lastModifiedDate":"2020-05-23"},{"lineNumber":155,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":156,"author":{"gitId":"-"},"content":"This section describes some noteworthy details on how certain features are implemented.","lastModifiedDate":"2020-05-23"},{"lineNumber":157,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":158,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Undo/redo feature","lastModifiedDate":"2020-06-07"},{"lineNumber":159,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":160,"author":{"gitId":"-"},"content":"#### Proposed Implementation","lastModifiedDate":"2020-05-23"},{"lineNumber":161,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":162,"author":{"gitId":"joenus"},"content":"The proposed undo/redo mechanism is facilitated by `VersionedHealthSync`. It extends `HealthSync` with an undo/redo history, stored internally as an `HealthSyncStateList` and `currentStatePointer`. Additionally, it implements the following operations:","lastModifiedDate":"2024-02-28"},{"lineNumber":163,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":164,"author":{"gitId":"joenus"},"content":"* `VersionedHealthSync#commit()` — Saves the current address book state in its history.","lastModifiedDate":"2024-02-28"},{"lineNumber":165,"author":{"gitId":"joenus"},"content":"* `VersionedHealthSync#undo()` — Restores the previous address book state from its history.","lastModifiedDate":"2024-02-28"},{"lineNumber":166,"author":{"gitId":"joenus"},"content":"* `VersionedHealthSync#redo()` — Restores a previously undone address book state from its history.","lastModifiedDate":"2024-02-28"},{"lineNumber":167,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":168,"author":{"gitId":"joenus"},"content":"These operations are exposed in the `Model` interface as `Model#commitHealthSync()`, `Model#undoHealthSync()` and `Model#redoHealthSync()` respectively.","lastModifiedDate":"2024-02-28"},{"lineNumber":169,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":170,"author":{"gitId":"-"},"content":"Given below is an example usage scenario and how the undo/redo mechanism behaves at each step.","lastModifiedDate":"2020-05-23"},{"lineNumber":171,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":172,"author":{"gitId":"joenus"},"content":"Step 1. The user launches the application for the first time. The `VersionedHealthSync` will be initialized with the initial address book state, and the `currentStatePointer` pointing to that single address book state.","lastModifiedDate":"2024-02-28"},{"lineNumber":173,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":174,"author":{"gitId":"-"},"content":"![UndoRedoState0](images/UndoRedoState0.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":175,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":176,"author":{"gitId":"joenus"},"content":"Step 2. The user executes `delete 5` command to delete the 5th person in the address book. The `delete` command calls `Model#commitHealthSync()`, causing the modified state of the address book after the `delete 5` command executes to be saved in the `HealthSyncStateList`, and the `currentStatePointer` is shifted to the newly inserted address book state.","lastModifiedDate":"2024-02-28"},{"lineNumber":177,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":178,"author":{"gitId":"-"},"content":"![UndoRedoState1](images/UndoRedoState1.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":179,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":180,"author":{"gitId":"joenus"},"content":"Step 3. The user executes `add n/David …​` to add a new person. The `add` command also calls `Model#commitHealthSync()`, causing another modified address book state to be saved into the `HealthSyncStateList`.","lastModifiedDate":"2024-02-28"},{"lineNumber":181,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":182,"author":{"gitId":"-"},"content":"![UndoRedoState2](images/UndoRedoState2.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":183,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":184,"author":{"gitId":"joenus"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-info\"\u003e:information_source: **Note:** If a command fails its execution, it will not call `Model#commitHealthSync()`, so the address book state will not be saved into the `HealthSyncStateList`.","lastModifiedDate":"2024-02-28"},{"lineNumber":185,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":186,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":187,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":188,"author":{"gitId":"joenus"},"content":"Step 4. The user now decides that adding the person was a mistake, and decides to undo that action by executing the `undo` command. The `undo` command will call `Model#undoHealthSync()`, which will shift the `currentStatePointer` once to the left, pointing it to the previous address book state, and restores the address book to that state.","lastModifiedDate":"2024-02-28"},{"lineNumber":189,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":190,"author":{"gitId":"-"},"content":"![UndoRedoState3](images/UndoRedoState3.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":191,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":192,"author":{"gitId":"joenus"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-info\"\u003e:information_source: **Note:** If the `currentStatePointer` is at index 0, pointing to the initial HealthSync state, then there are no previous HealthSync states to restore. The `undo` command uses `Model#canUndoHealthSync()` to check if this is the case. If so, it will return an error to the user rather","lastModifiedDate":"2024-02-28"},{"lineNumber":193,"author":{"gitId":"-"},"content":"than attempting to perform the undo.","lastModifiedDate":"2020-05-23"},{"lineNumber":194,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":195,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":196,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":197,"author":{"gitId":"-"},"content":"The following sequence diagram shows how an undo operation goes through the `Logic` component:","lastModifiedDate":"2024-02-09"},{"lineNumber":198,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":199,"author":{"gitId":"-"},"content":"![UndoSequenceDiagram](images/UndoSequenceDiagram-Logic.png)","lastModifiedDate":"2024-02-09"},{"lineNumber":200,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":201,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-info\"\u003e:information_source: **Note:** The lifeline for `UndoCommand` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram.","lastModifiedDate":"2020-05-23"},{"lineNumber":202,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":203,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":204,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":205,"author":{"gitId":"-"},"content":"Similarly, how an undo operation goes through the `Model` component is shown below:","lastModifiedDate":"2024-02-09"},{"lineNumber":206,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":207,"author":{"gitId":"-"},"content":"![UndoSequenceDiagram](images/UndoSequenceDiagram-Model.png)","lastModifiedDate":"2024-02-09"},{"lineNumber":208,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":209,"author":{"gitId":"joenus"},"content":"The `redo` command does the opposite — it calls `Model#redoHealthSync()`, which shifts the `currentStatePointer` once to the right, pointing to the previously undone state, and restores the address book to that state.","lastModifiedDate":"2024-02-28"},{"lineNumber":210,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":211,"author":{"gitId":"joenus"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-info\"\u003e:information_source: **Note:** If the `currentStatePointer` is at index `HealthSyncStateList.size() - 1`, pointing to the latest address book state, then there are no undone HealthSync states to restore. The `redo` command uses `Model#canRedoHealthSync()` to check if this is the case. If so, it will return an error to the user rather than attempting to perform the redo.","lastModifiedDate":"2024-02-28"},{"lineNumber":212,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":213,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":214,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":215,"author":{"gitId":"joenus"},"content":"Step 5. The user then decides to execute the command `list`. Commands that do not modify the address book, such as `list`, will usually not call `Model#commitHealthSync()`, `Model#undoHealthSync()` or `Model#redoHealthSync()`. Thus, the `HealthSyncStateList` remains unchanged.","lastModifiedDate":"2024-02-28"},{"lineNumber":216,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":217,"author":{"gitId":"-"},"content":"![UndoRedoState4](images/UndoRedoState4.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":218,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":219,"author":{"gitId":"joenus"},"content":"Step 6. The user executes `clear`, which calls `Model#commitHealthSync()`. Since the `currentStatePointer` is not pointing at the end of the `HealthSyncStateList`, all address book states after the `currentStatePointer` will be purged. Reason: It no longer makes sense to redo the `add n/David …​` command. This is the behavior that most modern desktop applications follow.","lastModifiedDate":"2024-02-28"},{"lineNumber":220,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":221,"author":{"gitId":"-"},"content":"![UndoRedoState5](images/UndoRedoState5.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":222,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":223,"author":{"gitId":"-"},"content":"The following activity diagram summarizes what happens when a user executes a new command:","lastModifiedDate":"2020-05-23"},{"lineNumber":224,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":225,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/CommitActivityDiagram.png\" width\u003d\"250\" /\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":226,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":227,"author":{"gitId":"-"},"content":"#### Design considerations:","lastModifiedDate":"2021-07-31"},{"lineNumber":228,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":229,"author":{"gitId":"-"},"content":"**Aspect: How undo \u0026 redo executes:**","lastModifiedDate":"2021-07-31"},{"lineNumber":230,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":231,"author":{"gitId":"-"},"content":"* **Alternative 1 (current choice):** Saves the entire address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":232,"author":{"gitId":"-"},"content":" * Pros: Easy to implement.","lastModifiedDate":"2020-05-23"},{"lineNumber":233,"author":{"gitId":"-"},"content":" * Cons: May have performance issues in terms of memory usage.","lastModifiedDate":"2020-05-23"},{"lineNumber":234,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":235,"author":{"gitId":"-"},"content":"* **Alternative 2:** Individual command knows how to undo/redo by","lastModifiedDate":"2020-05-23"},{"lineNumber":236,"author":{"gitId":"-"},"content":" itself.","lastModifiedDate":"2020-05-23"},{"lineNumber":237,"author":{"gitId":"-"},"content":" * Pros: Will use less memory (e.g. for `delete`, just save the person being deleted).","lastModifiedDate":"2020-05-23"},{"lineNumber":238,"author":{"gitId":"-"},"content":" * Cons: We must ensure that the implementation of each individual command are correct.","lastModifiedDate":"2020-05-23"},{"lineNumber":239,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":240,"author":{"gitId":"-"},"content":"_{more aspects and alternatives to be added}_","lastModifiedDate":"2020-05-23"},{"lineNumber":241,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":242,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Data archiving","lastModifiedDate":"2020-05-23"},{"lineNumber":243,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":244,"author":{"gitId":"-"},"content":"_{Explain here how the data archiving feature will be implemented}_","lastModifiedDate":"2020-05-23"},{"lineNumber":245,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":246,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":247,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":248,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":249,"author":{"gitId":"-"},"content":"## **Documentation, logging, testing, configuration, dev-ops**","lastModifiedDate":"2020-06-07"},{"lineNumber":250,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":251,"author":{"gitId":"-"},"content":"* [Documentation guide](Documentation.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":252,"author":{"gitId":"-"},"content":"* [Testing guide](Testing.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":253,"author":{"gitId":"-"},"content":"* [Logging guide](Logging.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":254,"author":{"gitId":"-"},"content":"* [Configuration guide](Configuration.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":255,"author":{"gitId":"-"},"content":"* [DevOps guide](DevOps.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":256,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":257,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":258,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":259,"author":{"gitId":"-"},"content":"## **Appendix: Requirements**","lastModifiedDate":"2020-05-23"},{"lineNumber":260,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":261,"author":{"gitId":"-"},"content":"### Product scope","lastModifiedDate":"2020-05-23"},{"lineNumber":262,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":263,"author":{"gitId":"-"},"content":"**Target user profile**:","lastModifiedDate":"2020-05-23"},{"lineNumber":264,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":265,"author":{"gitId":"jmsandiegoo"},"content":"* Dr. Emily Chen is a General Practitioner","lastModifiedDate":"2024-03-01"},{"lineNumber":266,"author":{"gitId":"jmsandiegoo"},"content":"* She aims to enhance clinical efficiency and maintain high-quality care","lastModifiedDate":"2024-03-01"},{"lineNumber":267,"author":{"gitId":"jmsandiegoo"},"content":"* Challenges include time constraints and documentation overload","lastModifiedDate":"2024-03-01"},{"lineNumber":268,"author":{"gitId":"jmsandiegoo"},"content":"* She needs seamless workflow management and a keyboard-driven system","lastModifiedDate":"2024-03-01"},{"lineNumber":269,"author":{"gitId":"jmsandiegoo"},"content":"* Her personality is dedicated and empathetic, with a focus on patient care","lastModifiedDate":"2024-03-01"},{"lineNumber":270,"author":{"gitId":"jmsandiegoo"},"content":"* Can type fast hence loves to play type racer during her free time","lastModifiedDate":"2024-03-01"},{"lineNumber":271,"author":{"gitId":"jmsandiegoo"},"content":"* Prefers to type over mouse interactions","lastModifiedDate":"2024-03-01"},{"lineNumber":272,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":273,"author":{"gitId":"jmsandiegoo"},"content":"**Value proposition**: manage patient medical records faster than a typical mouse/GUI driven app","lastModifiedDate":"2024-03-01"},{"lineNumber":274,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":275,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":276,"author":{"gitId":"-"},"content":"### User stories","lastModifiedDate":"2020-06-07"},{"lineNumber":277,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":278,"author":{"gitId":"-"},"content":"Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unlikely to have) - `*`","lastModifiedDate":"2020-05-23"},{"lineNumber":279,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":280,"author":{"gitId":"-"},"content":"| Priority | As a …​ | I want to …​ | So that I can…​ |","lastModifiedDate":"2020-05-23"},{"lineNumber":281,"author":{"gitId":"jmsandiegoo"},"content":"| -------- | ------------------------------------------ |---------------------------------------|----------------------------------------------------------|","lastModifiedDate":"2024-03-01"},{"lineNumber":282,"author":{"gitId":"jmsandiegoo"},"content":"| `* * *` | user | view all my patient\u0027s medical records | have a clear overview of all my records |","lastModifiedDate":"2024-03-01"},{"lineNumber":283,"author":{"gitId":"jmsandiegoo"},"content":"| `* * *` | user | add a patient\u0027s medical record | record new patients I work with |","lastModifiedDate":"2024-03-01"},{"lineNumber":284,"author":{"gitId":"raysonchia"},"content":"| `* * *` | user | edit a patient\u0027s medical record | amend necessary details of a medical record when needed |","lastModifiedDate":"2024-03-01"},{"lineNumber":285,"author":{"gitId":"raysonchia"},"content":"| `* * *` | user | delete a patient\u0027s medical record | remove patient\u0027s medical record that I no longer need |","lastModifiedDate":"2024-03-01"},{"lineNumber":286,"author":{"gitId":"sebin0817"},"content":"| `* * *` | user | list all patients\u0027 appointment notes | view all existing appointment notes |","lastModifiedDate":"2024-03-01"},{"lineNumber":287,"author":{"gitId":"joenus"},"content":"| `* * *` | user | add a patient\u0027s appointment note | record keep the details of each appointment |","lastModifiedDate":"2024-02-28"},{"lineNumber":288,"author":{"gitId":"sebin0817"},"content":"| `* * *` | user | edit a patient\u0027s appointment note | update the details of an appointment |","lastModifiedDate":"2024-03-01"},{"lineNumber":289,"author":{"gitId":"joenus"},"content":"| `* * *` | user | delete a patient\u0027s appointment note | remove entries that I no longer need |","lastModifiedDate":"2024-02-28"},{"lineNumber":290,"author":{"gitId":"rickkoh"},"content":"| `* * *` | user | access a help page for quick reference | have a better idea where to get started |","lastModifiedDate":"2024-03-02"},{"lineNumber":291,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":292,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":293,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":294,"author":{"gitId":"-"},"content":"### Use cases","lastModifiedDate":"2020-06-07"},{"lineNumber":295,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":296,"author":{"gitId":"joenus"},"content":"(For all use cases below, the **System** is the `HealthSync` and the **Actor** is the `user`, unless specified otherwise)","lastModifiedDate":"2024-02-28"},{"lineNumber":297,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":298,"author":{"gitId":"sebin0817"},"content":"#### Use case: List all patients\u0027 appointment notes","lastModifiedDate":"2024-03-01"},{"lineNumber":299,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":300,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2024-03-01"},{"lineNumber":301,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":302,"author":{"gitId":"sebin0817"},"content":"1. User requests to list patients","lastModifiedDate":"2024-03-01"},{"lineNumber":303,"author":{"gitId":"sebin0817"},"content":"2. HealthSync shows a list of patients","lastModifiedDate":"2024-03-01"},{"lineNumber":304,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":305,"author":{"gitId":"sebin0817"},"content":" Use case ends.","lastModifiedDate":"2024-03-01"},{"lineNumber":306,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":307,"author":{"gitId":"sebin0817"},"content":"**Extensions**","lastModifiedDate":"2024-03-01"},{"lineNumber":308,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":309,"author":{"gitId":"sebin0817"},"content":"* 2a. The list of patients is empty.","lastModifiedDate":"2024-03-01"},{"lineNumber":310,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":311,"author":{"gitId":"sebin0817"},"content":" Use case ends.","lastModifiedDate":"2024-03-01"},{"lineNumber":312,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":313,"author":{"gitId":"joenus"},"content":"#### Use case: Add a patient\u0027s appointment note","lastModifiedDate":"2024-02-28"},{"lineNumber":314,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":315,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2020-05-23"},{"lineNumber":316,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":317,"author":{"gitId":"joenus"},"content":"1. User requests to list patients","lastModifiedDate":"2024-02-28"},{"lineNumber":318,"author":{"gitId":"joenus"},"content":"2. HealthSync shows a list of patients","lastModifiedDate":"2024-02-28"},{"lineNumber":319,"author":{"gitId":"joenus"},"content":"3. User requests to add an appointment note for a given patient","lastModifiedDate":"2024-02-28"},{"lineNumber":320,"author":{"gitId":"joenus"},"content":"4. HealthSync adds the appointment note","lastModifiedDate":"2024-02-28"},{"lineNumber":321,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":322,"author":{"gitId":"joenus"},"content":" Use case ends.","lastModifiedDate":"2024-02-28"},{"lineNumber":323,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":324,"author":{"gitId":"joenus"},"content":"**Extensions**","lastModifiedDate":"2024-02-28"},{"lineNumber":325,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":326,"author":{"gitId":"joenus"},"content":"* 2a. The list of patients is empty.","lastModifiedDate":"2024-02-28"},{"lineNumber":327,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":328,"author":{"gitId":"joenus"},"content":" Use case ends.","lastModifiedDate":"2024-02-28"},{"lineNumber":329,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":330,"author":{"gitId":"joenus"},"content":"* 3a. The given patient index is invalid.","lastModifiedDate":"2024-02-28"},{"lineNumber":331,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":332,"author":{"gitId":"joenus"},"content":" * 3a1. HealthSync shows an error message.","lastModifiedDate":"2024-02-28"},{"lineNumber":333,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":334,"author":{"gitId":"joenus"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-02-28"},{"lineNumber":335,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":336,"author":{"gitId":"sebin0817"},"content":"#### Use case: Edit a patient\u0027s appointment note","lastModifiedDate":"2024-03-01"},{"lineNumber":337,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":338,"author":{"gitId":"sebin0817"},"content":"**MSS**","lastModifiedDate":"2024-03-01"},{"lineNumber":339,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":340,"author":{"gitId":"sebin0817"},"content":"1. User requests to list patients","lastModifiedDate":"2024-03-01"},{"lineNumber":341,"author":{"gitId":"sebin0817"},"content":"2. HealthSync shows a list of patients","lastModifiedDate":"2024-03-01"},{"lineNumber":342,"author":{"gitId":"sebin0817"},"content":"3. User requests to edit an appointment note for a given patient","lastModifiedDate":"2024-03-01"},{"lineNumber":343,"author":{"gitId":"sebin0817"},"content":"4. HealthSync edits the appointment note","lastModifiedDate":"2024-03-01"},{"lineNumber":344,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":345,"author":{"gitId":"sebin0817"},"content":" Use case ends.","lastModifiedDate":"2024-03-01"},{"lineNumber":346,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":347,"author":{"gitId":"sebin0817"},"content":"**Extensions**","lastModifiedDate":"2024-03-01"},{"lineNumber":348,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":349,"author":{"gitId":"sebin0817"},"content":"* 2a. The list of patients is empty.","lastModifiedDate":"2024-03-01"},{"lineNumber":350,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":351,"author":{"gitId":"sebin0817"},"content":" Use case ends.","lastModifiedDate":"2024-03-01"},{"lineNumber":352,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":353,"author":{"gitId":"sebin0817"},"content":"* 3a. The given patient index is invalid.","lastModifiedDate":"2024-03-01"},{"lineNumber":354,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":355,"author":{"gitId":"sebin0817"},"content":" * 3a1. HealthSync shows an error message.","lastModifiedDate":"2024-03-01"},{"lineNumber":356,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":357,"author":{"gitId":"sebin0817"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-03-01"},{"lineNumber":358,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":359,"author":{"gitId":"sebin0817"},"content":"* 3b. The given appointment note index is invalid.","lastModifiedDate":"2024-03-01"},{"lineNumber":360,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":361,"author":{"gitId":"sebin0817"},"content":" * 3b1. HealthSync shows an error message.","lastModifiedDate":"2024-03-01"},{"lineNumber":362,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":363,"author":{"gitId":"sebin0817"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-03-01"},{"lineNumber":364,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":365,"author":{"gitId":"joenus"},"content":"#### Use case: Delete a patient\u0027s appointment note","lastModifiedDate":"2024-02-28"},{"lineNumber":366,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":367,"author":{"gitId":"joenus"},"content":"**MSS**","lastModifiedDate":"2024-02-28"},{"lineNumber":368,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":369,"author":{"gitId":"joenus"},"content":"1. User requests to list patients","lastModifiedDate":"2024-02-28"},{"lineNumber":370,"author":{"gitId":"joenus"},"content":"2. HealthSync shows a list of patients","lastModifiedDate":"2024-02-28"},{"lineNumber":371,"author":{"gitId":"-"},"content":"3. User requests to delete a specific person in the list","lastModifiedDate":"2020-05-23"},{"lineNumber":372,"author":{"gitId":"joenus"},"content":"4. HealthSync deletes the person","lastModifiedDate":"2024-02-28"},{"lineNumber":373,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":374,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":375,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":376,"author":{"gitId":"-"},"content":"**Extensions**","lastModifiedDate":"2020-05-23"},{"lineNumber":377,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":378,"author":{"gitId":"-"},"content":"* 2a. The list is empty.","lastModifiedDate":"2020-05-23"},{"lineNumber":379,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":380,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":381,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":382,"author":{"gitId":"joenus"},"content":"* 3a. The given patient index is invalid.","lastModifiedDate":"2024-02-28"},{"lineNumber":383,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":384,"author":{"gitId":"joenus"},"content":" * 3a1. HealthSync shows an error message.","lastModifiedDate":"2024-02-28"},{"lineNumber":385,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":386,"author":{"gitId":"-"},"content":" Use case resumes at step 2.","lastModifiedDate":"2020-05-23"},{"lineNumber":387,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":388,"author":{"gitId":"joenus"},"content":"* 3b. The given appointment note index is invalid.","lastModifiedDate":"2024-02-28"},{"lineNumber":389,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":390,"author":{"gitId":"joenus"},"content":" * 3b1. HealthSync shows an error message.","lastModifiedDate":"2024-02-28"},{"lineNumber":391,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":392,"author":{"gitId":"joenus"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-02-28"},{"lineNumber":393,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":394,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":395,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":396,"author":{"gitId":"-"},"content":"1. Should work on any _mainstream OS_ as long as it has Java `11` or above installed.","lastModifiedDate":"2020-05-23"},{"lineNumber":397,"author":{"gitId":"joenus"},"content":"2. Should be able to hold up to 1000 patients without a noticeable sluggishness in performance for typical usage.","lastModifiedDate":"2024-02-28"},{"lineNumber":398,"author":{"gitId":"joenus"},"content":"3. Should be able to hold up to 200 appointment note per patient without a noticeable sluggishness in performance for typical usage.","lastModifiedDate":"2024-02-28"},{"lineNumber":399,"author":{"gitId":"joenus"},"content":"4. A user with above average typing speed for regular English text (i.e. not code, not system admin commands) should be able to accomplish most of the tasks faster using commands than using the mouse.","lastModifiedDate":"2024-02-28"},{"lineNumber":400,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":401,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":402,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":403,"author":{"gitId":"-"},"content":"* **Mainstream OS**: Windows, Linux, Unix, MacOS","lastModifiedDate":"2024-02-09"},{"lineNumber":404,"author":{"gitId":"raysonchia"},"content":"* **Patient\u0027s medical record**: Essential information about a patient, including name, NRIC, phone number and other relevant details","lastModifiedDate":"2024-03-01"},{"lineNumber":405,"author":{"gitId":"raysonchia"},"content":"* **Patient\u0027s appointment note**: Information on a scheduled patient appointment, including date, time and assessment","lastModifiedDate":"2024-03-01"},{"lineNumber":406,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":407,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":408,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":409,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":410,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":411,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":412,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":413,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":414,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-info\"\u003e:information_source: **Note:** These instructions only provide a starting point for testers to work on;","lastModifiedDate":"2020-05-23"},{"lineNumber":415,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":416,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":417,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":418,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":419,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":420,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":421,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":422,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":423,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":424,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":425,"author":{"gitId":"-"},"content":" 1. Double-click the jar file Expected: Shows the GUI with a set of sample contacts. The window size may not be optimum.","lastModifiedDate":"2020-05-23"},{"lineNumber":426,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":427,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":428,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":429,"author":{"gitId":"-"},"content":" 1. Resize the window to an optimum size. Move the window to a different location. Close the window.","lastModifiedDate":"2020-05-23"},{"lineNumber":430,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":431,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":432,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","lastModifiedDate":"2020-05-23"},{"lineNumber":433,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":434,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":435,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":436,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":437,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":438,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":439,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":440,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":441,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":442,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":443,"author":{"gitId":"-"},"content":" Expected: First contact is deleted from the list. Details of the deleted contact shown in the status message. Timestamp in the status bar is updated.","lastModifiedDate":"2020-05-23"},{"lineNumber":444,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":445,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":446,"author":{"gitId":"-"},"content":" Expected: No person is deleted. Error details shown in the status message. Status bar remains the same.","lastModifiedDate":"2020-05-23"},{"lineNumber":447,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":448,"author":{"gitId":"-"},"content":" 1. Other incorrect delete commands to try: `delete`, `delete x`, `...` (where x is larger than the list size)\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":449,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":450,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":451,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":452,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":453,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":454,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":455,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":456,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":457,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":458,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":459,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"joenus":66,"jmsandiegoo":11,"raysonchia":4,"sebin0817":42,"-":335,"rickkoh":1}},{"path":"docs/UserGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":"layout: page","lastModifiedDate":"2020-05-23"},{"lineNumber":3,"author":{"gitId":"-"},"content":"title: User Guide","lastModifiedDate":"2020-05-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"joenus"},"content":"**HealthSync** helps optimize clinical efficiency with a keyboard-driven system for doctors to manage patient records, notes, medical certificates, and medication dispensing, all in one streamlined interface, enhancing care quality and focus in a busy clinical setting. While it has a GUI, most of the user interactions happen using a CLI (Command Line Interface).","lastModifiedDate":"2024-02-28"},{"lineNumber":7,"author":{"gitId":"raysonchia"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":8,"author":{"gitId":"raysonchia"},"content":"# Table of Contents","lastModifiedDate":"2024-03-01"},{"lineNumber":9,"author":{"gitId":"raysonchia"},"content":"- [Quick Start](#quick-start)","lastModifiedDate":"2024-03-01"},{"lineNumber":10,"author":{"gitId":"raysonchia"},"content":"- [Features](#features)","lastModifiedDate":"2024-03-01"},{"lineNumber":11,"author":{"gitId":"raysonchia"},"content":" - [Help](#viewing-help--help)","lastModifiedDate":"2024-03-01"},{"lineNumber":12,"author":{"gitId":"raysonchia"},"content":" - [Add patient medical record](#adding-a-patient-medical-record-add)","lastModifiedDate":"2024-03-01"},{"lineNumber":13,"author":{"gitId":"raysonchia"},"content":" - [Listing all patient medical records](#listing-all-patient-medical-records--list)","lastModifiedDate":"2024-03-01"},{"lineNumber":14,"author":{"gitId":"raysonchia"},"content":" - [Editing a patient medical record](#editing-a-patient-medical-record--edit)","lastModifiedDate":"2024-03-01"},{"lineNumber":15,"author":{"gitId":"raysonchia"},"content":" - [Deleting a patient medical record](#deleting-a-patient-medical-record--delete)","lastModifiedDate":"2024-03-01"},{"lineNumber":16,"author":{"gitId":"raysonchia"},"content":" - [Adding an appointment note](#adding-an-appointment-note-add-an)","lastModifiedDate":"2024-03-01"},{"lineNumber":17,"author":{"gitId":"raysonchia"},"content":" - [Deleting an appointment note](#deleting-an-appointment-note--delete-an)","lastModifiedDate":"2024-03-01"},{"lineNumber":18,"author":{"gitId":"raysonchia"},"content":" - [Clearing all entries](#clearing-all-entries--clear)","lastModifiedDate":"2024-03-01"},{"lineNumber":19,"author":{"gitId":"raysonchia"},"content":" - [Exiting the program](#exiting-the-program--exit)","lastModifiedDate":"2024-03-01"},{"lineNumber":20,"author":{"gitId":"raysonchia"},"content":" - [Saving the data](#saving-the-data)","lastModifiedDate":"2024-03-01"},{"lineNumber":21,"author":{"gitId":"raysonchia"},"content":" - [Editing the data file](#editing-the-data-file)","lastModifiedDate":"2024-03-01"},{"lineNumber":22,"author":{"gitId":"raysonchia"},"content":"- [FAQ](#faq)","lastModifiedDate":"2024-03-01"},{"lineNumber":23,"author":{"gitId":"raysonchia"},"content":"- [Known issues](#known-issues)","lastModifiedDate":"2024-03-01"},{"lineNumber":24,"author":{"gitId":"raysonchia"},"content":"- [Command summary](#command-summary)","lastModifiedDate":"2024-03-01"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":"## Quick start","lastModifiedDate":"2020-05-23"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":"1. Ensure you have Java `11` or above installed in your Computer.","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"joenus"},"content":"1. Download the latest `healthsync.jar` from [here](https://github.com/AY2324S2-CS2103-F09-4/tp/releases).","lastModifiedDate":"2024-02-28"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"joenus"},"content":"1. Copy the file to the folder you want to use as the _home folder_ for your HealthSync.","lastModifiedDate":"2024-02-28"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"joenus"},"content":"1. Open a command terminal, `cd` into the folder you put the jar file in, and use the `java -jar healthsync.jar` command to run the application.\u003cbr\u003e","lastModifiedDate":"2024-02-28"},{"lineNumber":37,"author":{"gitId":"-"},"content":" A GUI similar to the below should appear in a few seconds. Note how the app contains some sample data.\u003cbr\u003e","lastModifiedDate":"2023-01-01"},{"lineNumber":38,"author":{"gitId":"-"},"content":" ![Ui](images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":40,"author":{"gitId":"-"},"content":"1. Type the command in the command box and press Enter to execute it. e.g. typing **`help`** and pressing Enter will open the help window.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":41,"author":{"gitId":"-"},"content":" Some example commands you can try:","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"-"},"content":" * `list` : Lists all contacts.","lastModifiedDate":"2023-01-01"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":" * `add n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01` : Adds a contact named `John Doe` to the Address Book.","lastModifiedDate":"2023-01-01"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":" * `delete 3` : Deletes the 3rd contact shown in the current list.","lastModifiedDate":"2023-01-01"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"-"},"content":" * `clear` : Deletes all contacts.","lastModifiedDate":"2023-01-01"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"-"},"content":" * `exit` : Exits the app.","lastModifiedDate":"2023-01-01"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":"1. Refer to the [Features](#features) below for details of each command.","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":57,"author":{"gitId":"-"},"content":"## Features","lastModifiedDate":"2020-05-23"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":59,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"block\" class\u003d\"alert alert-info\"\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":61,"author":{"gitId":"-"},"content":"**:information_source: Notes about the command format:**\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":63,"author":{"gitId":"-"},"content":"* Words in `UPPER_CASE` are the parameters to be supplied by the user.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":64,"author":{"gitId":"-"},"content":" e.g. in `add n/NAME`, `NAME` is a parameter which can be used as `add n/John Doe`.","lastModifiedDate":"2020-05-23"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":66,"author":{"gitId":"-"},"content":"* Items in square brackets are optional.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":67,"author":{"gitId":"-"},"content":" e.g `n/NAME [t/TAG]` can be used as `n/John Doe t/friend` or as `n/John Doe`.","lastModifiedDate":"2020-05-23"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":69,"author":{"gitId":"-"},"content":"* Items with `…`​ after them can be used multiple times including zero times.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":70,"author":{"gitId":"-"},"content":" e.g. `[t/TAG]…​` can be used as ` ` (i.e. 0 times), `t/friend`, `t/friend t/family` etc.","lastModifiedDate":"2020-05-23"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":72,"author":{"gitId":"-"},"content":"* Parameters can be in any order.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":73,"author":{"gitId":"-"},"content":" e.g. if the command specifies `n/NAME p/PHONE_NUMBER`, `p/PHONE_NUMBER n/NAME` is also acceptable.","lastModifiedDate":"2020-05-23"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":75,"author":{"gitId":"-"},"content":"* Extraneous parameters for commands that do not take in parameters (such as `help`, `list`, `exit` and `clear`) will be ignored.\u003cbr\u003e","lastModifiedDate":"2021-02-03"},{"lineNumber":76,"author":{"gitId":"-"},"content":" e.g. if the command specifies `help 123`, it will be interpreted as `help`.","lastModifiedDate":"2021-02-03"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-02-03"},{"lineNumber":78,"author":{"gitId":"-"},"content":"* If you are using a PDF version of this document, be careful when copying and pasting commands that span multiple lines as space characters surrounding line-breaks may be omitted when copied over to the application.","lastModifiedDate":"2023-06-26"},{"lineNumber":79,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":81,"author":{"gitId":"-"},"content":"### Viewing help : `help`","lastModifiedDate":"2020-05-23"},{"lineNumber":82,"author":{"gitId":"rickkoh"},"content":"Displays a comprehensive list of available commands within the application, assisting users in navigating and utilizing Healthsync effectively for managing patient medical and appointment records.","lastModifiedDate":"2024-03-01"},{"lineNumber":83,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":84,"author":{"gitId":"rickkoh"},"content":"Format: `help`","lastModifiedDate":"2024-03-01"},{"lineNumber":85,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":86,"author":{"gitId":"rickkoh"},"content":"- This command does not require any parameters.","lastModifiedDate":"2024-03-01"},{"lineNumber":87,"author":{"gitId":"rickkoh"},"content":"- Upon execution, it presents a list of commands along with their formats, example usages, and descriptions.","lastModifiedDate":"2024-03-01"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":89,"author":{"gitId":"rickkoh"},"content":"Example:","lastModifiedDate":"2024-03-01"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":91,"author":{"gitId":"rickkoh"},"content":"- Entering `help` in Healthsync will produce a list of commands as shown above, guiding users through the process of managing patient records and appointments within the system.","lastModifiedDate":"2024-03-01"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":93,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":94,"author":{"gitId":"jmsandiegoo"},"content":"### Adding a patient medical record: `add`","lastModifiedDate":"2024-03-01"},{"lineNumber":95,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":96,"author":{"gitId":"jmsandiegoo"},"content":"Adds a patient medical record to the system.","lastModifiedDate":"2024-03-01"},{"lineNumber":97,"author":{"gitId":"jmsandiegoo"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":98,"author":{"gitId":"jmsandiegoo"},"content":"Format: `add ic/NRIC n/NAME p/PHONE_NUMBER [g/GENDER] b/BIRTHDATE i/ILLNESS_CATEGORY [d/DRUG_ALLERGIES]`","lastModifiedDate":"2024-03-01"},{"lineNumber":99,"author":{"gitId":"jmsandiegoo"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":100,"author":{"gitId":"jmsandiegoo"},"content":"* `NRIC` must be an alphanumeric and it must follow Singapore\u0027s NRIC format","lastModifiedDate":"2024-03-01"},{"lineNumber":101,"author":{"gitId":"jmsandiegoo"},"content":"* `NAME` can contain an alphanumeric, spaces, special characters.","lastModifiedDate":"2024-03-01"},{"lineNumber":102,"author":{"gitId":"jmsandiegoo"},"content":"* `PHONE_NUMBER` numeric characters and must follow the format \"+65 XXXXXXXX\".","lastModifiedDate":"2024-03-01"},{"lineNumber":103,"author":{"gitId":"jmsandiegoo"},"content":"* `GENDER` Male or M, Female F or exclude from the command for Prefer not to say option.","lastModifiedDate":"2024-03-01"},{"lineNumber":104,"author":{"gitId":"jmsandiegoo"},"content":"* `BIRTHDATE` must be in the form of DD-MM-YYYY and must not be in the future.","lastModifiedDate":"2024-03-01"},{"lineNumber":105,"author":{"gitId":"jmsandiegoo"},"content":"* `ILLNESS` one of the following options - Infectious Disease, Chronic Conditions, Autoimmune Disorders, ","lastModifiedDate":"2024-03-01"},{"lineNumber":106,"author":{"gitId":"jmsandiegoo"},"content":"Genetic Disorders, Mental Health Disorders, Neurological Disorders, Metabolic Disorder, Nutritional Deficiencies, ","lastModifiedDate":"2024-03-01"},{"lineNumber":107,"author":{"gitId":"jmsandiegoo"},"content":"Environmental Illnesses, Degenerative Diseases or Others.","lastModifiedDate":"2024-03-01"},{"lineNumber":108,"author":{"gitId":"jmsandiegoo"},"content":"* `DRUG_ALLERGIES` can contain an alphanumeric, spaces, special characters.","lastModifiedDate":"2024-03-01"},{"lineNumber":109,"author":{"gitId":"jmsandiegoo"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":110,"author":{"gitId":"jmsandiegoo"},"content":"Examples:","lastModifiedDate":"2024-03-01"},{"lineNumber":111,"author":{"gitId":"jmsandiegoo"},"content":"* `add ic/S9974944F n/John Doe p/91234567 g/Male b/11-11-1990 i/Infectious Disease d/Paracetamol Allergy` Adds a new ","lastModifiedDate":"2024-03-01"},{"lineNumber":112,"author":{"gitId":"jmsandiegoo"},"content":"patient record with nric of `S9974944F` name of `John Doe`, phone no. of `+65 91234567`, gender of `Male`, ","lastModifiedDate":"2024-03-01"},{"lineNumber":113,"author":{"gitId":"jmsandiegoo"},"content":"birthdate of `11-11-1990`, llness of `Infectious Disease` and allergy of `Paracetamol Allergy`.","lastModifiedDate":"2024-03-01"},{"lineNumber":114,"author":{"gitId":"jmsandiegoo"},"content":"### Listing all patient medical records : `list`","lastModifiedDate":"2024-03-01"},{"lineNumber":115,"author":{"gitId":"jmsandiegoo"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":116,"author":{"gitId":"jmsandiegoo"},"content":"Displays the list of patients in the application. Each row of patients displays a basic details of the patients ","lastModifiedDate":"2024-03-01"},{"lineNumber":117,"author":{"gitId":"jmsandiegoo"},"content":"(e.g. name, gender, age, illness, phone number)","lastModifiedDate":"2024-03-01"},{"lineNumber":118,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":119,"author":{"gitId":"jmsandiegoo"},"content":"Format: `list`","lastModifiedDate":"2024-03-01"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":121,"author":{"gitId":"jmsandiegoo"},"content":"### Editing a patient medical record : `edit`","lastModifiedDate":"2024-03-01"},{"lineNumber":122,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":123,"author":{"gitId":"jmsandiegoo"},"content":"Edits a particular patient medical record. Users can select which particular detail to be updated.","lastModifiedDate":"2024-03-01"},{"lineNumber":124,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":125,"author":{"gitId":"jmsandiegoo"},"content":"Format: `edit PATIENT_","lastModifiedDate":"2024-03-01"},{"lineNumber":126,"author":{"gitId":"jmsandiegoo"},"content":"INDEX [ic/NRIC] [n/NAME] [p/PHONE_NUMBER] [g/GENDER] [b/BIRTHDATE] [i/ILLNESS_CATEGORY] ","lastModifiedDate":"2024-03-01"},{"lineNumber":127,"author":{"gitId":"jmsandiegoo"},"content":"[d/DRUG_ALLERGIES]`","lastModifiedDate":"2024-03-01"},{"lineNumber":128,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":129,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-primary\"\u003e:bulb: **Tip:**","lastModifiedDate":"2020-05-23"},{"lineNumber":130,"author":{"gitId":"jmsandiegoo"},"content":"Edit should have atleast one parameter / detail to update.","lastModifiedDate":"2024-03-01"},{"lineNumber":131,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":132,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":133,"author":{"gitId":"jmsandiegoo"},"content":"* Edits the medical record at the specified `PATIENT_INDEX`. The index refers to the index number shown in the ","lastModifiedDate":"2024-03-01"},{"lineNumber":134,"author":{"gitId":"jmsandiegoo"},"content":"displayed patient medical record list. The index **must be a positive integer** 1, 2, 3, …​","lastModifiedDate":"2024-03-01"},{"lineNumber":135,"author":{"gitId":"jmsandiegoo"},"content":"* `NRIC` must be an alphanumeric and it must follow Singapore\u0027s NRIC format","lastModifiedDate":"2024-03-01"},{"lineNumber":136,"author":{"gitId":"jmsandiegoo"},"content":"* `NAME` can contain an alphanumeric, spaces, special characters.","lastModifiedDate":"2024-03-01"},{"lineNumber":137,"author":{"gitId":"jmsandiegoo"},"content":"* `PHONE_NUMBER` numeric characters and must follow the format \"+65 XXXXXXXX\".","lastModifiedDate":"2024-03-01"},{"lineNumber":138,"author":{"gitId":"jmsandiegoo"},"content":"* `GENDER` Male or M, Female F or exclude from the command for Prefer not to say option.","lastModifiedDate":"2024-03-01"},{"lineNumber":139,"author":{"gitId":"jmsandiegoo"},"content":"* `BIRTHDATE` must be in the form of DD-MM-YYYY and must not be in the future.","lastModifiedDate":"2024-03-01"},{"lineNumber":140,"author":{"gitId":"jmsandiegoo"},"content":"* `ILLNESS` one of the following options - Infectious Disease, Chronic Conditions, Autoimmune Disorders,","lastModifiedDate":"2024-03-01"},{"lineNumber":141,"author":{"gitId":"jmsandiegoo"},"content":" Genetic Disorders, Mental Health Disorders, Neurological Disorders, Metabolic Disorder, Nutritional Deficiencies,","lastModifiedDate":"2024-03-01"},{"lineNumber":142,"author":{"gitId":"jmsandiegoo"},"content":" Environmental Illnesses, Degenerative Diseases or Others.","lastModifiedDate":"2024-03-01"},{"lineNumber":143,"author":{"gitId":"jmsandiegoo"},"content":"* `DRUG_ALLERGIES` can contain an alphanumeric, spaces, special characters.","lastModifiedDate":"2024-03-01"},{"lineNumber":144,"author":{"gitId":"jmsandiegoo"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":145,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":146,"author":{"gitId":"jmsandiegoo"},"content":"* `edit 1 n/Mark Tan p/94505333 g/Female b/11-11-1991 i/Genetic Disorders d/Antibiotic Allergy` Edit the whole patient ","lastModifiedDate":"2024-03-01"},{"lineNumber":147,"author":{"gitId":"jmsandiegoo"},"content":"medical record that has the `PATIENT_INDEX` of 1.","lastModifiedDate":"2024-03-01"},{"lineNumber":148,"author":{"gitId":"jmsandiegoo"},"content":"* `edit 1 g/Male b/11-07-1999` Edits patient medical record that has the `PATIENT_INDEX` of 1 to have a gender of ","lastModifiedDate":"2024-03-01"},{"lineNumber":149,"author":{"gitId":"jmsandiegoo"},"content":"`Male` and birthdate of `11-07-1999`.","lastModifiedDate":"2024-03-01"},{"lineNumber":150,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":151,"author":{"gitId":"jmsandiegoo"},"content":"[//]: # (### Locating persons by name: `find`)","lastModifiedDate":"2024-03-01"},{"lineNumber":152,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":153,"author":{"gitId":"jmsandiegoo"},"content":"[//]: # ()","lastModifiedDate":"2024-03-01"},{"lineNumber":154,"author":{"gitId":"jmsandiegoo"},"content":"[//]: # (Finds persons whose names contain any of the given keywords.)","lastModifiedDate":"2024-03-01"},{"lineNumber":155,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":156,"author":{"gitId":"jmsandiegoo"},"content":"[//]: # (Format: `find KEYWORD [MORE_KEYWORDS]`)","lastModifiedDate":"2024-03-01"},{"lineNumber":157,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":158,"author":{"gitId":"jmsandiegoo"},"content":"[//]: # ()","lastModifiedDate":"2024-03-01"},{"lineNumber":159,"author":{"gitId":"jmsandiegoo"},"content":"[//]: # (* The search is case-insensitive. e.g `hans` will match `Hans`)","lastModifiedDate":"2024-03-01"},{"lineNumber":160,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":161,"author":{"gitId":"jmsandiegoo"},"content":"[//]: # (* The order of the keywords does not matter. e.g. `Hans Bo` will match `Bo Hans`)","lastModifiedDate":"2024-03-01"},{"lineNumber":162,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":163,"author":{"gitId":"jmsandiegoo"},"content":"[//]: # (* Only the name is searched.)","lastModifiedDate":"2024-03-01"},{"lineNumber":164,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":165,"author":{"gitId":"jmsandiegoo"},"content":"[//]: # (* Only full words will be matched e.g. `Han` will not match `Hans`)","lastModifiedDate":"2024-03-01"},{"lineNumber":166,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":167,"author":{"gitId":"jmsandiegoo"},"content":"[//]: # (* Persons matching at least one keyword will be returned \u0026#40;i.e. `OR` search\u0026#41;.)","lastModifiedDate":"2024-03-01"},{"lineNumber":168,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":169,"author":{"gitId":"jmsandiegoo"},"content":"[//]: # ( e.g. `Hans Bo` will return `Hans Gruber`, `Bo Yang`)","lastModifiedDate":"2024-03-01"},{"lineNumber":170,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":171,"author":{"gitId":"jmsandiegoo"},"content":"[//]: # ()","lastModifiedDate":"2024-03-01"},{"lineNumber":172,"author":{"gitId":"jmsandiegoo"},"content":"[//]: # (Examples:)","lastModifiedDate":"2024-03-01"},{"lineNumber":173,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":174,"author":{"gitId":"jmsandiegoo"},"content":"[//]: # (* `find John` returns `john` and `John Doe`)","lastModifiedDate":"2024-03-01"},{"lineNumber":175,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":176,"author":{"gitId":"jmsandiegoo"},"content":"[//]: # (* `find alex david` returns `Alex Yeoh`, `David Li`\u003cbr\u003e)","lastModifiedDate":"2024-03-01"},{"lineNumber":177,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":178,"author":{"gitId":"jmsandiegoo"},"content":"[//]: # ( ![result for \u0027find alex david\u0027]\u0026#40;images/findAlexDavidResult.png\u0026#41;)","lastModifiedDate":"2024-03-01"},{"lineNumber":179,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":180,"author":{"gitId":"raysonchia"},"content":"### Deleting a patient medical record : `delete`","lastModifiedDate":"2024-03-01"},{"lineNumber":181,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":182,"author":{"gitId":"raysonchia"},"content":"Deletes a particular patient\u0027s medical records.","lastModifiedDate":"2024-03-01"},{"lineNumber":183,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":184,"author":{"gitId":"raysonchia"},"content":"Format: `delete PATIENT_INDEX`","lastModifiedDate":"2024-03-01"},{"lineNumber":185,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":186,"author":{"gitId":"raysonchia"},"content":"* Deletes the patient medical record at the specified `INDEX`.","lastModifiedDate":"2024-03-01"},{"lineNumber":187,"author":{"gitId":"raysonchia"},"content":"* The index refers to the index number shown in the displayed patient list.","lastModifiedDate":"2024-03-01"},{"lineNumber":188,"author":{"gitId":"-"},"content":"* The index **must be a positive integer** 1, 2, 3, …​","lastModifiedDate":"2020-05-23"},{"lineNumber":189,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":190,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":191,"author":{"gitId":"raysonchia"},"content":"* `list` followed by `delete 2` deletes the 2nd patient medical record in the patient list.","lastModifiedDate":"2024-03-01"},{"lineNumber":192,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":193,"author":{"gitId":"sebin0817"},"content":"### Listing all appointment notes: `list-an`","lastModifiedDate":"2024-02-29"},{"lineNumber":194,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":195,"author":{"gitId":"sebin0817"},"content":"Shows a list of all appointment notes.","lastModifiedDate":"2024-02-29"},{"lineNumber":196,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":197,"author":{"gitId":"sebin0817"},"content":"Format: `list-an`","lastModifiedDate":"2024-02-29"},{"lineNumber":198,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":199,"author":{"gitId":"joenus"},"content":"### Adding an appointment note: `add-an`","lastModifiedDate":"2024-02-28"},{"lineNumber":200,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":201,"author":{"gitId":"joenus"},"content":"Adds an appointment note to a patient. Please note that the time parameter is in 24-hour format.","lastModifiedDate":"2024-02-28"},{"lineNumber":202,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":203,"author":{"gitId":"joenus"},"content":"Format: `add-an PATIENT_INDEX d/DD-MM-YYYY t/HHMM n/NOTE`","lastModifiedDate":"2024-02-28"},{"lineNumber":204,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":205,"author":{"gitId":"joenus"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-primary\"\u003e:bulb: **Tip:**","lastModifiedDate":"2024-02-28"},{"lineNumber":206,"author":{"gitId":"joenus"},"content":"A person can have any number of appointment record (including 0)","lastModifiedDate":"2024-02-28"},{"lineNumber":207,"author":{"gitId":"sebin0817"},"content":"\u003c/div\u003e``","lastModifiedDate":"2024-02-29"},{"lineNumber":208,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":209,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2024-02-29"},{"lineNumber":210,"author":{"gitId":"sebin0817"},"content":"* `add-an 1 d/19-02-2024 t/1130 n/General Flu`","lastModifiedDate":"2024-02-29"},{"lineNumber":211,"author":{"gitId":"sebin0817"},"content":"* `add-an 1 d/30-12-2023 t/2100 n/Headache`","lastModifiedDate":"2024-02-29"},{"lineNumber":212,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":213,"author":{"gitId":"sebin0817"},"content":"### Editing an appointment note: `edit-an`","lastModifiedDate":"2024-02-29"},{"lineNumber":214,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":215,"author":{"gitId":"sebin0817"},"content":"Edits an appointment note to a patient. Please note that the time parameter is in 24-hour format.","lastModifiedDate":"2024-02-29"},{"lineNumber":216,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":217,"author":{"gitId":"sebin0817"},"content":"Format: `edit-an PATIENT_INDEX INDEX d/DD-MM-YYYY t/HHMM n/NOTE`","lastModifiedDate":"2024-02-29"},{"lineNumber":218,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":219,"author":{"gitId":"sebin0817"},"content":"* Edits the appointment record at the specified `INDEX` for given patient from `PATIENT_INDEX`.","lastModifiedDate":"2024-02-29"},{"lineNumber":220,"author":{"gitId":"sebin0817"},"content":"* The index refers to the index number shown in the displayed patient list.","lastModifiedDate":"2024-02-29"},{"lineNumber":221,"author":{"gitId":"sebin0817"},"content":"* The patient index refers to the index number shown in the displayed patient list.","lastModifiedDate":"2024-02-29"},{"lineNumber":222,"author":{"gitId":"sebin0817"},"content":"* The index **must be a positive integer** 1, 2, 3, …","lastModifiedDate":"2024-02-29"},{"lineNumber":223,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":224,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2024-02-28"},{"lineNumber":225,"author":{"gitId":"sebin0817"},"content":"* `edit-an 1 1 d/19-02-2024 t/1230 n/General Flu`","lastModifiedDate":"2024-02-29"},{"lineNumber":226,"author":{"gitId":"sebin0817"},"content":"* `edit-an 1 2 d/30-12-2023 t/2100 n/Stomach Virus`","lastModifiedDate":"2024-02-29"},{"lineNumber":227,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":228,"author":{"gitId":"joenus"},"content":"### Deleting an appointment note : `delete-an`","lastModifiedDate":"2024-02-28"},{"lineNumber":229,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":230,"author":{"gitId":"joenus"},"content":"Deletes the specified appointment note from a patient.","lastModifiedDate":"2024-02-28"},{"lineNumber":231,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":232,"author":{"gitId":"joenus"},"content":"Format: `delete-an PATIENT_INDEX INDEX`","lastModifiedDate":"2024-02-28"},{"lineNumber":233,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":234,"author":{"gitId":"joenus"},"content":"* Deletes the appointment record at the specified `INDEX` for given patient from `PATIENT_INDEX`.","lastModifiedDate":"2024-02-28"},{"lineNumber":235,"author":{"gitId":"joenus"},"content":"* The index refers to the index number shown in the displayed patient list.","lastModifiedDate":"2024-02-28"},{"lineNumber":236,"author":{"gitId":"joenus"},"content":"* The patient index refers to the index number shown in the displayed patient list.","lastModifiedDate":"2024-02-28"},{"lineNumber":237,"author":{"gitId":"joenus"},"content":"* The index **must be a positive integer** 1, 2, 3, …","lastModifiedDate":"2024-02-28"},{"lineNumber":238,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":239,"author":{"gitId":"joenus"},"content":"Examples:","lastModifiedDate":"2024-02-28"},{"lineNumber":240,"author":{"gitId":"sebin0817"},"content":"* `list-an` followed by `delete-an 1 2` deletes the 2nd appointment note from the 1st patient.","lastModifiedDate":"2024-02-29"},{"lineNumber":241,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":242,"author":{"gitId":"sebin0817"},"content":"``","lastModifiedDate":"2024-02-29"},{"lineNumber":243,"author":{"gitId":"-"},"content":"### Clearing all entries : `clear`","lastModifiedDate":"2020-05-23"},{"lineNumber":244,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":245,"author":{"gitId":"-"},"content":"Clears all entries from the address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":246,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":247,"author":{"gitId":"-"},"content":"Format: `clear`","lastModifiedDate":"2020-05-23"},{"lineNumber":248,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":249,"author":{"gitId":"-"},"content":"### Exiting the program : `exit`","lastModifiedDate":"2020-05-23"},{"lineNumber":250,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":251,"author":{"gitId":"-"},"content":"Exits the program.","lastModifiedDate":"2020-05-23"},{"lineNumber":252,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":253,"author":{"gitId":"-"},"content":"Format: `exit`","lastModifiedDate":"2020-05-23"},{"lineNumber":254,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":255,"author":{"gitId":"-"},"content":"### Saving the data","lastModifiedDate":"2020-05-23"},{"lineNumber":256,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":257,"author":{"gitId":"joenus"},"content":"HealthSync data are saved in the hard disk automatically after any command that changes the data. There is no need to save manually.","lastModifiedDate":"2024-02-28"},{"lineNumber":258,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":259,"author":{"gitId":"-"},"content":"### Editing the data file","lastModifiedDate":"2021-02-04"},{"lineNumber":260,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-02-04"},{"lineNumber":261,"author":{"gitId":"joenus"},"content":"HealthSync data are saved automatically as a JSON file `[JAR file location]/data/HealthSync.json`. Advanced users are welcome to update data directly by editing that data file.","lastModifiedDate":"2024-02-28"},{"lineNumber":262,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-02-04"},{"lineNumber":263,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-warning\"\u003e:exclamation: **Caution:**","lastModifiedDate":"2021-02-04"},{"lineNumber":264,"author":{"gitId":"joenus"},"content":"If your changes to the data file makes its format invalid, HealthSync will discard all data and start with an empty data file at the next run. Hence, it is recommended to take a backup of the file before editing it.\u003cbr\u003e","lastModifiedDate":"2024-02-28"},{"lineNumber":265,"author":{"gitId":"joenus"},"content":"Furthermore, certain edits can cause the HealthSync to behave in unexpected ways (e.g., if a value entered is outside of the acceptable range). Therefore, edit the data file only if you are confident that you can update it correctly.","lastModifiedDate":"2024-02-28"},{"lineNumber":266,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2021-02-04"},{"lineNumber":267,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-02-04"},{"lineNumber":268,"author":{"gitId":"-"},"content":"### Archiving data files `[coming in v2.0]`","lastModifiedDate":"2020-05-23"},{"lineNumber":269,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":270,"author":{"gitId":"-"},"content":"_Details coming soon ..._","lastModifiedDate":"2021-02-04"},{"lineNumber":271,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":272,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":273,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":274,"author":{"gitId":"-"},"content":"## FAQ","lastModifiedDate":"2020-05-23"},{"lineNumber":275,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":276,"author":{"gitId":"-"},"content":"**Q**: How do I transfer my data to another Computer?\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":277,"author":{"gitId":"joenus"},"content":"**A**: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous HealthSync home folder.","lastModifiedDate":"2024-02-28"},{"lineNumber":278,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":279,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":280,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":281,"author":{"gitId":"-"},"content":"## Known issues","lastModifiedDate":"2023-09-08"},{"lineNumber":282,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":283,"author":{"gitId":"-"},"content":"1. **When using multiple screens**, if you move the application to a secondary screen, and later switch to using only the primary screen, the GUI will open off-screen. The remedy is to delete the `preferences.json` file created by the application before running the application again.","lastModifiedDate":"2023-09-08"},{"lineNumber":284,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":285,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2023-09-08"},{"lineNumber":286,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":287,"author":{"gitId":"-"},"content":"## Command summary","lastModifiedDate":"2020-05-23"},{"lineNumber":288,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":289,"author":{"gitId":"-"},"content":"Action | Format, Examples","lastModifiedDate":"2020-05-23"},{"lineNumber":290,"author":{"gitId":"-"},"content":"--------|------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":291,"author":{"gitId":"jmsandiegoo"},"content":"**Add Patient Medical Record** | `add ic/NRIC n/NAME p/PHONE_NUMBER [g/GENDER] b/BIRTHDATE i/ILLNESS_CATEGORY [d/DRUG_ALLERGIES]` \u003cbr\u003e e.g. `add ic/S9974944F n/John Doe p/91234567 g/Male b/11-11-1990 i/Infectious Disease d/Paracetamol Allergy`","lastModifiedDate":"2024-03-01"},{"lineNumber":292,"author":{"gitId":"jmsandiegoo"},"content":"**List All Patient Medical Records** | `list`","lastModifiedDate":"2024-03-01"},{"lineNumber":293,"author":{"gitId":"jmsandiegoo"},"content":"**Edit Patient Medical Record** | `edit PATIENT_INDEX [ic/NRIC] [n/NAME] [p/PHONE_NUMBER] [g/GENDER] [b/BIRTHDATE] [i/ILLNESS_CATEGORY] [d/DRUG_ALLERGIES]` \u003cbr\u003e e.g. `edit 1 g/Male b/11-07-1999`","lastModifiedDate":"2024-03-01"},{"lineNumber":294,"author":{"gitId":"-"},"content":"**Delete** | `delete INDEX`\u003cbr\u003e e.g., `delete 3`","lastModifiedDate":"2020-05-23"},{"lineNumber":295,"author":{"gitId":"-"},"content":"**Edit** | `edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [t/TAG]…​`\u003cbr\u003e e.g.,`edit 2 n/James Lee e/jameslee@example.com`","lastModifiedDate":"2020-05-23"},{"lineNumber":296,"author":{"gitId":"-"},"content":"**Find** | `find KEYWORD [MORE_KEYWORDS]`\u003cbr\u003e e.g., `find James Jake`","lastModifiedDate":"2020-05-23"},{"lineNumber":297,"author":{"gitId":"sebin0817"},"content":"**List Appointment Note** | `list-an`","lastModifiedDate":"2024-02-29"},{"lineNumber":298,"author":{"gitId":"sebin0817"},"content":"**Add Appointment Note** | `add-an PATIENT_INDEX d/DD-MM-YYYY t/HHMM n/NOTE`\u003cbr\u003e e.g., `add-an 1 d/30-12-2023 t/2100 n/Headache`","lastModifiedDate":"2024-02-29"},{"lineNumber":299,"author":{"gitId":"sebin0817"},"content":"**Edit Appointment Note** | `edit-an PATIENT_INDEX INDEX d/DD-MM-YYYY t/HHMM n/NOTE`\u003cbr\u003e e.g., `edit-an 1 1 d/19-02-2024 t/1230 n/General Flu`","lastModifiedDate":"2024-02-29"},{"lineNumber":300,"author":{"gitId":"sebin0817"},"content":"**Delete Appointment Note** | `delete-an PATIENT_INDEX INDEX`\u003cbr\u003e e.g., `delete-an 1 2`","lastModifiedDate":"2024-02-29"},{"lineNumber":301,"author":{"gitId":"-"},"content":"**List** | `list`","lastModifiedDate":"2020-05-23"},{"lineNumber":302,"author":{"gitId":"-"},"content":"**Help** | `help`","lastModifiedDate":"2020-05-23"},{"lineNumber":303,"author":{"gitId":"jmsandiegoo"},"content":"**Clear** | `clear`","lastModifiedDate":"2024-03-01"}],"authorContributionMap":{"joenus":28,"jmsandiegoo":66,"raysonchia":24,"sebin0817":22,"-":157,"rickkoh":6}},{"path":"docs/index.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":"layout: page","lastModifiedDate":"2020-05-23"},{"lineNumber":3,"author":{"gitId":"joenus"},"content":"title: 💊 HealthSync","lastModifiedDate":"2024-02-28"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"joenus"},"content":"[![Java CI](https://github.com/AY2324S2-CS2103-F09-4/tp/actions/workflows/gradle.yml/badge.svg)](https://github.com/AY2324S2-CS2103-F09-4/tp/actions/workflows/gradle.yml)","lastModifiedDate":"2024-02-28"},{"lineNumber":7,"author":{"gitId":"joenus"},"content":"[![codecov](https://codecov.io/gh/AY2324S2-CS2103-F09-4/tp/graph/badge.svg?token\u003dZCUENL7XA6)](https://codecov.io/gh/AY2324S2-CS2103-F09-4/tp)","lastModifiedDate":"2024-02-28"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"![Ui](images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":11,"author":{"gitId":"joenus"},"content":"**HealthSync** helps optimize clinical efficiency with a keyboard-driven system for doctors to manage patient records, notes, medical certificates, and medication dispensing, all in one streamlined interface, enhancing care quality and focus in a busy clinical setting. While it has a GUI, most of the user interactions happen using a CLI (Command Line Interface).","lastModifiedDate":"2024-02-28"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":13,"author":{"gitId":"joenus"},"content":"* If you are interested in using HealthSync, head over to the [_Quick Start_ section of the **User Guide**](UserGuide.html#quick-start).","lastModifiedDate":"2024-02-28"},{"lineNumber":14,"author":{"gitId":"joenus"},"content":"* If you are interested about developing HealthSync, the [**Developer Guide**](DeveloperGuide.html) is a good place to start.","lastModifiedDate":"2024-02-28"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":17,"author":{"gitId":"-"},"content":"**Acknowledgements**","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"* Libraries used: [JavaFX](https://openjfx.io/), [Jackson](https://github.com/FasterXML/jackson), [JUnit5](https://github.com/junit-team/junit5)","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"joenus":6,"-":13}},{"path":"src/main/java/seedu/address/logic/Messages.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic;","lastModifiedDate":"2023-07-13"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2023-07-14"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-07-14"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.stream.Stream;","lastModifiedDate":"2023-07-14"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.Prefix;","lastModifiedDate":"2023-07-14"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2019-02-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":10,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":" * Container for user visible messages.","lastModifiedDate":"2016-08-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class Messages {","lastModifiedDate":"2016-08-24"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":" public static final String MESSAGE_UNKNOWN_COMMAND \u003d \"Unknown command\";","lastModifiedDate":"2016-09-21"},{"lineNumber":16,"author":{"gitId":"-"},"content":" public static final String MESSAGE_INVALID_COMMAND_FORMAT \u003d \"Invalid command format! \\n%1$s\";","lastModifiedDate":"2016-08-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":" public static final String MESSAGE_INVALID_PERSON_DISPLAYED_INDEX \u003d \"The person index provided is invalid\";","lastModifiedDate":"2016-08-24"},{"lineNumber":18,"author":{"gitId":"-"},"content":" public static final String MESSAGE_PERSONS_LISTED_OVERVIEW \u003d \"%1$d persons listed!\";","lastModifiedDate":"2016-08-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":" public static final String MESSAGE_DUPLICATE_FIELDS \u003d","lastModifiedDate":"2023-07-14"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \"Multiple values specified for the following single-valued field(s): \";","lastModifiedDate":"2023-07-14"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":22,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-07-14"},{"lineNumber":23,"author":{"gitId":"-"},"content":" * Returns an error message indicating the duplicate prefixes.","lastModifiedDate":"2023-07-14"},{"lineNumber":24,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-07-14"},{"lineNumber":25,"author":{"gitId":"-"},"content":" public static String getErrorMessageForDuplicatePrefixes(Prefix... duplicatePrefixes) {","lastModifiedDate":"2023-07-14"},{"lineNumber":26,"author":{"gitId":"-"},"content":" assert duplicatePrefixes.length \u003e 0;","lastModifiedDate":"2023-07-14"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":28,"author":{"gitId":"-"},"content":" Set\u003cString\u003e duplicateFields \u003d","lastModifiedDate":"2023-07-14"},{"lineNumber":29,"author":{"gitId":"-"},"content":" Stream.of(duplicatePrefixes).map(Prefix::toString).collect(Collectors.toSet());","lastModifiedDate":"2023-07-14"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":31,"author":{"gitId":"-"},"content":" return MESSAGE_DUPLICATE_FIELDS + String.join(\" \", duplicateFields);","lastModifiedDate":"2023-07-14"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-14"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-28"},{"lineNumber":34,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2019-02-23"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * Formats the {@code person} for display to the user.","lastModifiedDate":"2019-02-23"},{"lineNumber":36,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2019-02-23"},{"lineNumber":37,"author":{"gitId":"-"},"content":" public static String format(Person person) {","lastModifiedDate":"2019-02-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":" final StringBuilder builder \u003d new StringBuilder();","lastModifiedDate":"2019-02-23"},{"lineNumber":39,"author":{"gitId":"-"},"content":" builder.append(person.getName())","lastModifiedDate":"2019-02-23"},{"lineNumber":40,"author":{"gitId":"-"},"content":" .append(\"; Phone: \")","lastModifiedDate":"2019-02-23"},{"lineNumber":41,"author":{"gitId":"-"},"content":" .append(person.getPhone())","lastModifiedDate":"2019-02-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":" .append(\"; Email: \")","lastModifiedDate":"2019-02-23"},{"lineNumber":43,"author":{"gitId":"-"},"content":" .append(person.getEmail())","lastModifiedDate":"2019-02-23"},{"lineNumber":44,"author":{"gitId":"-"},"content":" .append(\"; Address: \")","lastModifiedDate":"2019-02-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":" .append(person.getAddress())","lastModifiedDate":"2019-02-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":" .append(\"; Tags: \");","lastModifiedDate":"2019-02-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":" person.getTags().forEach(builder::append);","lastModifiedDate":"2019-02-23"},{"lineNumber":48,"author":{"gitId":"joenus"},"content":" builder.append(\"; Notes: \");","lastModifiedDate":"2024-03-01"},{"lineNumber":49,"author":{"gitId":"joenus"},"content":" person.getNotes().forEach(builder::append);","lastModifiedDate":"2024-03-01"},{"lineNumber":50,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":51,"author":{"gitId":"-"},"content":" return builder.toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-24"}],"authorContributionMap":{"joenus":3,"-":51}},{"path":"src/main/java/seedu/address/logic/commands/EditCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.commands;","lastModifiedDate":"2016-12-26"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2017-05-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2017-05-09"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2017-05-09"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2017-06-06"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2017-05-09"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2017-05-09"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.model.Model.PREDICATE_SHOW_ALL_PERSONS;","lastModifiedDate":"2017-08-05"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-09"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import java.util.Collections;","lastModifiedDate":"2018-01-11"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import java.util.HashSet;","lastModifiedDate":"2018-01-11"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2016-12-26"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import java.util.Objects;","lastModifiedDate":"2023-07-13"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import java.util.Optional;","lastModifiedDate":"2016-12-26"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-03-07"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2017-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.CollectionUtil;","lastModifiedDate":"2016-12-26"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.ToStringBuilder;","lastModifiedDate":"2019-02-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import seedu.address.logic.Messages;","lastModifiedDate":"2023-07-13"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.exceptions.CommandException;","lastModifiedDate":"2017-02-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import seedu.address.model.Model;","lastModifiedDate":"2018-08-08"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2016-12-26"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2016-12-26"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2016-12-26"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2016-12-26"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2016-12-26"},{"lineNumber":29,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.tag.Tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":31,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-12-26"},{"lineNumber":32,"author":{"gitId":"-"},"content":" * Edits the details of an existing person in the address book.","lastModifiedDate":"2016-12-26"},{"lineNumber":33,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-26"},{"lineNumber":34,"author":{"gitId":"-"},"content":"public class EditCommand extends Command {","lastModifiedDate":"2018-04-19"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":36,"author":{"gitId":"-"},"content":" public static final String COMMAND_WORD \u003d \"edit\";","lastModifiedDate":"2016-12-26"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":38,"author":{"gitId":"-"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Edits the details of the person identified \"","lastModifiedDate":"2016-12-26"},{"lineNumber":39,"author":{"gitId":"-"},"content":" + \"by the index number used in the displayed person list. \"","lastModifiedDate":"2018-04-01"},{"lineNumber":40,"author":{"gitId":"-"},"content":" + \"Existing values will be overwritten by the input values.\\n\"","lastModifiedDate":"2016-12-26"},{"lineNumber":41,"author":{"gitId":"-"},"content":" + \"Parameters: INDEX (must be a positive integer) \"","lastModifiedDate":"2017-06-06"},{"lineNumber":42,"author":{"gitId":"-"},"content":" + \"[\" + PREFIX_NAME + \"NAME] \"","lastModifiedDate":"2017-06-06"},{"lineNumber":43,"author":{"gitId":"-"},"content":" + \"[\" + PREFIX_PHONE + \"PHONE] \"","lastModifiedDate":"2017-05-09"},{"lineNumber":44,"author":{"gitId":"-"},"content":" + \"[\" + PREFIX_EMAIL + \"EMAIL] \"","lastModifiedDate":"2017-05-09"},{"lineNumber":45,"author":{"gitId":"-"},"content":" + \"[\" + PREFIX_ADDRESS + \"ADDRESS] \"","lastModifiedDate":"2017-05-09"},{"lineNumber":46,"author":{"gitId":"-"},"content":" + \"[\" + PREFIX_TAG + \"TAG]...\\n\"","lastModifiedDate":"2017-05-09"},{"lineNumber":47,"author":{"gitId":"-"},"content":" + \"Example: \" + COMMAND_WORD + \" 1 \"","lastModifiedDate":"2017-05-09"},{"lineNumber":48,"author":{"gitId":"-"},"content":" + PREFIX_PHONE + \"91234567 \"","lastModifiedDate":"2017-05-09"},{"lineNumber":49,"author":{"gitId":"-"},"content":" + PREFIX_EMAIL + \"johndoe@example.com\";","lastModifiedDate":"2017-05-09"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":51,"author":{"gitId":"-"},"content":" public static final String MESSAGE_EDIT_PERSON_SUCCESS \u003d \"Edited Person: %1$s\";","lastModifiedDate":"2016-12-26"},{"lineNumber":52,"author":{"gitId":"-"},"content":" public static final String MESSAGE_NOT_EDITED \u003d \"At least one field to edit must be provided.\";","lastModifiedDate":"2016-12-26"},{"lineNumber":53,"author":{"gitId":"-"},"content":" public static final String MESSAGE_DUPLICATE_PERSON \u003d \"This person already exists in the address book.\";","lastModifiedDate":"2016-12-26"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":55,"author":{"gitId":"-"},"content":" private final Index index;","lastModifiedDate":"2017-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" private final EditPersonDescriptor editPersonDescriptor;","lastModifiedDate":"2016-12-26"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":58,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-12-26"},{"lineNumber":59,"author":{"gitId":"-"},"content":" * @param index of the person in the filtered person list to edit","lastModifiedDate":"2017-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":" * @param editPersonDescriptor details to edit the person with","lastModifiedDate":"2016-12-26"},{"lineNumber":61,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-26"},{"lineNumber":62,"author":{"gitId":"-"},"content":" public EditCommand(Index index, EditPersonDescriptor editPersonDescriptor) {","lastModifiedDate":"2017-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":" requireNonNull(index);","lastModifiedDate":"2017-05-25"},{"lineNumber":64,"author":{"gitId":"-"},"content":" requireNonNull(editPersonDescriptor);","lastModifiedDate":"2017-05-15"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":66,"author":{"gitId":"-"},"content":" this.index \u003d index;","lastModifiedDate":"2017-05-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":" this.editPersonDescriptor \u003d new EditPersonDescriptor(editPersonDescriptor);","lastModifiedDate":"2016-12-26"},{"lineNumber":68,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":70,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-12-26"},{"lineNumber":71,"author":{"gitId":"-"},"content":" public CommandResult execute(Model model) throws CommandException {","lastModifiedDate":"2019-01-25"},{"lineNumber":72,"author":{"gitId":"-"},"content":" requireNonNull(model);","lastModifiedDate":"2018-08-08"},{"lineNumber":73,"author":{"gitId":"-"},"content":" List\u003cPerson\u003e lastShownList \u003d model.getFilteredPersonList();","lastModifiedDate":"2018-04-19"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":75,"author":{"gitId":"-"},"content":" if (index.getZeroBased() \u003e\u003d lastShownList.size()) {","lastModifiedDate":"2018-04-19"},{"lineNumber":76,"author":{"gitId":"-"},"content":" throw new CommandException(Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX);","lastModifiedDate":"2018-04-19"},{"lineNumber":77,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-04-19"},{"lineNumber":78,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":79,"author":{"gitId":"-"},"content":" Person personToEdit \u003d lastShownList.get(index.getZeroBased());","lastModifiedDate":"2018-04-19"},{"lineNumber":80,"author":{"gitId":"-"},"content":" Person editedPerson \u003d createEditedPerson(personToEdit, editPersonDescriptor);","lastModifiedDate":"2018-04-19"},{"lineNumber":81,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":82,"author":{"gitId":"-"},"content":" if (!personToEdit.isSamePerson(editedPerson) \u0026\u0026 model.hasPerson(editedPerson)) {","lastModifiedDate":"2018-08-07"},{"lineNumber":83,"author":{"gitId":"-"},"content":" throw new CommandException(MESSAGE_DUPLICATE_PERSON);","lastModifiedDate":"2018-08-07"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-07"},{"lineNumber":85,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-07"},{"lineNumber":86,"author":{"gitId":"-"},"content":" model.setPerson(personToEdit, editedPerson);","lastModifiedDate":"2018-08-17"},{"lineNumber":87,"author":{"gitId":"-"},"content":" model.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS);","lastModifiedDate":"2017-08-05"},{"lineNumber":88,"author":{"gitId":"-"},"content":" return new CommandResult(String.format(MESSAGE_EDIT_PERSON_SUCCESS, Messages.format(editedPerson)));","lastModifiedDate":"2019-02-23"},{"lineNumber":89,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":91,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-12-26"},{"lineNumber":92,"author":{"gitId":"-"},"content":" * Creates and returns a {@code Person} with the details of {@code personToEdit}","lastModifiedDate":"2016-12-26"},{"lineNumber":93,"author":{"gitId":"-"},"content":" * edited with {@code editPersonDescriptor}.","lastModifiedDate":"2016-12-26"},{"lineNumber":94,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-26"},{"lineNumber":95,"author":{"gitId":"-"},"content":" private static Person createEditedPerson(Person personToEdit, EditPersonDescriptor editPersonDescriptor) {","lastModifiedDate":"2018-01-10"},{"lineNumber":96,"author":{"gitId":"-"},"content":" assert personToEdit !\u003d null;","lastModifiedDate":"2016-12-26"},{"lineNumber":97,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":98,"author":{"gitId":"-"},"content":" Name updatedName \u003d editPersonDescriptor.getName().orElse(personToEdit.getName());","lastModifiedDate":"2017-06-21"},{"lineNumber":99,"author":{"gitId":"-"},"content":" Phone updatedPhone \u003d editPersonDescriptor.getPhone().orElse(personToEdit.getPhone());","lastModifiedDate":"2017-06-21"},{"lineNumber":100,"author":{"gitId":"-"},"content":" Email updatedEmail \u003d editPersonDescriptor.getEmail().orElse(personToEdit.getEmail());","lastModifiedDate":"2017-06-21"},{"lineNumber":101,"author":{"gitId":"-"},"content":" Address updatedAddress \u003d editPersonDescriptor.getAddress().orElse(personToEdit.getAddress());","lastModifiedDate":"2017-06-21"},{"lineNumber":102,"author":{"gitId":"-"},"content":" Set\u003cTag\u003e updatedTags \u003d editPersonDescriptor.getTags().orElse(personToEdit.getTags());","lastModifiedDate":"2017-06-21"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":104,"author":{"gitId":"joenus"},"content":" return new Person(updatedName, updatedPhone, updatedEmail, updatedAddress, updatedTags,","lastModifiedDate":"2024-02-29"},{"lineNumber":105,"author":{"gitId":"joenus"},"content":" personToEdit.getNotes());","lastModifiedDate":"2024-02-29"},{"lineNumber":106,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":107,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":108,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-05-08"},{"lineNumber":109,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2017-05-08"},{"lineNumber":110,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2017-05-08"},{"lineNumber":111,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2017-05-08"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-08"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":114,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2017-05-08"},{"lineNumber":115,"author":{"gitId":"-"},"content":" if (!(other instanceof EditCommand)) {","lastModifiedDate":"2017-05-08"},{"lineNumber":116,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2017-05-08"},{"lineNumber":117,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-08"},{"lineNumber":118,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":119,"author":{"gitId":"-"},"content":" EditCommand otherEditCommand \u003d (EditCommand) other;","lastModifiedDate":"2023-07-13"},{"lineNumber":120,"author":{"gitId":"-"},"content":" return index.equals(otherEditCommand.index)","lastModifiedDate":"2023-07-13"},{"lineNumber":121,"author":{"gitId":"-"},"content":" \u0026\u0026 editPersonDescriptor.equals(otherEditCommand.editPersonDescriptor);","lastModifiedDate":"2023-07-13"},{"lineNumber":122,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-08"},{"lineNumber":123,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":124,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2019-02-23"},{"lineNumber":125,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2019-02-23"},{"lineNumber":126,"author":{"gitId":"-"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2019-02-23"},{"lineNumber":127,"author":{"gitId":"-"},"content":" .add(\"index\", index)","lastModifiedDate":"2019-02-23"},{"lineNumber":128,"author":{"gitId":"-"},"content":" .add(\"editPersonDescriptor\", editPersonDescriptor)","lastModifiedDate":"2019-02-23"},{"lineNumber":129,"author":{"gitId":"-"},"content":" .toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":131,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":132,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-12-26"},{"lineNumber":133,"author":{"gitId":"-"},"content":" * Stores the details to edit the person with. Each non-empty field value will replace the","lastModifiedDate":"2016-12-26"},{"lineNumber":134,"author":{"gitId":"-"},"content":" * corresponding field value of the person.","lastModifiedDate":"2016-12-26"},{"lineNumber":135,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-26"},{"lineNumber":136,"author":{"gitId":"-"},"content":" public static class EditPersonDescriptor {","lastModifiedDate":"2016-12-26"},{"lineNumber":137,"author":{"gitId":"-"},"content":" private Name name;","lastModifiedDate":"2017-06-21"},{"lineNumber":138,"author":{"gitId":"-"},"content":" private Phone phone;","lastModifiedDate":"2017-06-21"},{"lineNumber":139,"author":{"gitId":"-"},"content":" private Email email;","lastModifiedDate":"2017-06-21"},{"lineNumber":140,"author":{"gitId":"-"},"content":" private Address address;","lastModifiedDate":"2017-06-21"},{"lineNumber":141,"author":{"gitId":"-"},"content":" private Set\u003cTag\u003e tags;","lastModifiedDate":"2017-06-21"},{"lineNumber":142,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":143,"author":{"gitId":"joenus"},"content":" public EditPersonDescriptor() {","lastModifiedDate":"2024-02-29"},{"lineNumber":144,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":145,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":146,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-01-11"},{"lineNumber":147,"author":{"gitId":"-"},"content":" * Copy constructor.","lastModifiedDate":"2018-01-11"},{"lineNumber":148,"author":{"gitId":"-"},"content":" * A defensive copy of {@code tags} is used internally.","lastModifiedDate":"2018-01-11"},{"lineNumber":149,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-01-11"},{"lineNumber":150,"author":{"gitId":"-"},"content":" public EditPersonDescriptor(EditPersonDescriptor toCopy) {","lastModifiedDate":"2016-12-26"},{"lineNumber":151,"author":{"gitId":"-"},"content":" setName(toCopy.name);","lastModifiedDate":"2018-01-15"},{"lineNumber":152,"author":{"gitId":"-"},"content":" setPhone(toCopy.phone);","lastModifiedDate":"2018-01-15"},{"lineNumber":153,"author":{"gitId":"-"},"content":" setEmail(toCopy.email);","lastModifiedDate":"2018-01-15"},{"lineNumber":154,"author":{"gitId":"-"},"content":" setAddress(toCopy.address);","lastModifiedDate":"2018-01-15"},{"lineNumber":155,"author":{"gitId":"-"},"content":" setTags(toCopy.tags);","lastModifiedDate":"2018-01-11"},{"lineNumber":156,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":157,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":158,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-12-26"},{"lineNumber":159,"author":{"gitId":"-"},"content":" * Returns true if at least one field is edited.","lastModifiedDate":"2016-12-26"},{"lineNumber":160,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-26"},{"lineNumber":161,"author":{"gitId":"-"},"content":" public boolean isAnyFieldEdited() {","lastModifiedDate":"2016-12-26"},{"lineNumber":162,"author":{"gitId":"-"},"content":" return CollectionUtil.isAnyNonNull(name, phone, email, address, tags);","lastModifiedDate":"2018-08-14"},{"lineNumber":163,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":164,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":165,"author":{"gitId":"-"},"content":" public void setName(Name name) {","lastModifiedDate":"2017-06-21"},{"lineNumber":166,"author":{"gitId":"-"},"content":" this.name \u003d name;","lastModifiedDate":"2017-06-21"},{"lineNumber":167,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":168,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":169,"author":{"gitId":"-"},"content":" public Optional\u003cName\u003e getName() {","lastModifiedDate":"2016-12-26"},{"lineNumber":170,"author":{"gitId":"-"},"content":" return Optional.ofNullable(name);","lastModifiedDate":"2017-06-21"},{"lineNumber":171,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":172,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":173,"author":{"gitId":"-"},"content":" public void setPhone(Phone phone) {","lastModifiedDate":"2017-06-21"},{"lineNumber":174,"author":{"gitId":"-"},"content":" this.phone \u003d phone;","lastModifiedDate":"2017-06-21"},{"lineNumber":175,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":176,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":177,"author":{"gitId":"-"},"content":" public Optional\u003cPhone\u003e getPhone() {","lastModifiedDate":"2016-12-26"},{"lineNumber":178,"author":{"gitId":"-"},"content":" return Optional.ofNullable(phone);","lastModifiedDate":"2017-06-21"},{"lineNumber":179,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":180,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":181,"author":{"gitId":"-"},"content":" public void setEmail(Email email) {","lastModifiedDate":"2017-06-21"},{"lineNumber":182,"author":{"gitId":"-"},"content":" this.email \u003d email;","lastModifiedDate":"2017-06-21"},{"lineNumber":183,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":184,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":185,"author":{"gitId":"-"},"content":" public Optional\u003cEmail\u003e getEmail() {","lastModifiedDate":"2016-12-26"},{"lineNumber":186,"author":{"gitId":"-"},"content":" return Optional.ofNullable(email);","lastModifiedDate":"2017-06-21"},{"lineNumber":187,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":188,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":189,"author":{"gitId":"-"},"content":" public void setAddress(Address address) {","lastModifiedDate":"2017-06-21"},{"lineNumber":190,"author":{"gitId":"-"},"content":" this.address \u003d address;","lastModifiedDate":"2017-06-21"},{"lineNumber":191,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":192,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":193,"author":{"gitId":"-"},"content":" public Optional\u003cAddress\u003e getAddress() {","lastModifiedDate":"2016-12-26"},{"lineNumber":194,"author":{"gitId":"-"},"content":" return Optional.ofNullable(address);","lastModifiedDate":"2017-06-21"},{"lineNumber":195,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":196,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":197,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-01-11"},{"lineNumber":198,"author":{"gitId":"-"},"content":" * Sets {@code tags} to this object\u0027s {@code tags}.","lastModifiedDate":"2018-01-11"},{"lineNumber":199,"author":{"gitId":"-"},"content":" * A defensive copy of {@code tags} is used internally.","lastModifiedDate":"2018-01-11"},{"lineNumber":200,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-01-11"},{"lineNumber":201,"author":{"gitId":"-"},"content":" public void setTags(Set\u003cTag\u003e tags) {","lastModifiedDate":"2017-06-21"},{"lineNumber":202,"author":{"gitId":"-"},"content":" this.tags \u003d (tags !\u003d null) ? new HashSet\u003c\u003e(tags) : null;","lastModifiedDate":"2018-01-11"},{"lineNumber":203,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":204,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":205,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-01-11"},{"lineNumber":206,"author":{"gitId":"-"},"content":" * Returns an unmodifiable tag set, which throws {@code UnsupportedOperationException}","lastModifiedDate":"2018-01-11"},{"lineNumber":207,"author":{"gitId":"-"},"content":" * if modification is attempted.","lastModifiedDate":"2018-01-11"},{"lineNumber":208,"author":{"gitId":"-"},"content":" * Returns {@code Optional#empty()} if {@code tags} is null.","lastModifiedDate":"2018-01-11"},{"lineNumber":209,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-01-11"},{"lineNumber":210,"author":{"gitId":"-"},"content":" public Optional\u003cSet\u003cTag\u003e\u003e getTags() {","lastModifiedDate":"2017-03-07"},{"lineNumber":211,"author":{"gitId":"-"},"content":" return (tags !\u003d null) ? Optional.of(Collections.unmodifiableSet(tags)) : Optional.empty();","lastModifiedDate":"2018-01-11"},{"lineNumber":212,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":213,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":214,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-05-05"},{"lineNumber":215,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2017-05-05"},{"lineNumber":216,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2017-05-05"},{"lineNumber":217,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2017-05-05"},{"lineNumber":218,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":219,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":220,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2017-05-05"},{"lineNumber":221,"author":{"gitId":"-"},"content":" if (!(other instanceof EditPersonDescriptor)) {","lastModifiedDate":"2017-05-05"},{"lineNumber":222,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2017-05-05"},{"lineNumber":223,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":224,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":225,"author":{"gitId":"-"},"content":" EditPersonDescriptor otherEditPersonDescriptor \u003d (EditPersonDescriptor) other;","lastModifiedDate":"2023-07-13"},{"lineNumber":226,"author":{"gitId":"-"},"content":" return Objects.equals(name, otherEditPersonDescriptor.name)","lastModifiedDate":"2023-07-13"},{"lineNumber":227,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(phone, otherEditPersonDescriptor.phone)","lastModifiedDate":"2023-07-13"},{"lineNumber":228,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(email, otherEditPersonDescriptor.email)","lastModifiedDate":"2023-07-13"},{"lineNumber":229,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(address, otherEditPersonDescriptor.address)","lastModifiedDate":"2023-07-13"},{"lineNumber":230,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(tags, otherEditPersonDescriptor.tags);","lastModifiedDate":"2023-07-13"},{"lineNumber":231,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":232,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":233,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2019-02-23"},{"lineNumber":234,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2019-02-23"},{"lineNumber":235,"author":{"gitId":"-"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2019-02-23"},{"lineNumber":236,"author":{"gitId":"-"},"content":" .add(\"name\", name)","lastModifiedDate":"2019-02-23"},{"lineNumber":237,"author":{"gitId":"-"},"content":" .add(\"phone\", phone)","lastModifiedDate":"2019-02-23"},{"lineNumber":238,"author":{"gitId":"-"},"content":" .add(\"email\", email)","lastModifiedDate":"2019-02-23"},{"lineNumber":239,"author":{"gitId":"-"},"content":" .add(\"address\", address)","lastModifiedDate":"2019-02-23"},{"lineNumber":240,"author":{"gitId":"-"},"content":" .add(\"tags\", tags)","lastModifiedDate":"2019-02-23"},{"lineNumber":241,"author":{"gitId":"-"},"content":" .toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":242,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":243,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":244,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-12-26"}],"authorContributionMap":{"joenus":5,"-":239}},{"path":"src/main/java/seedu/address/logic/parser/AddCommandParser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-02-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-07-13"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2017-02-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2017-02-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2017-06-06"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2017-02-05"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2017-02-05"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-03-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import java.util.stream.Stream;","lastModifiedDate":"2017-03-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":13,"author":{"gitId":"joenus"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2024-02-29"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.AddCommand;","lastModifiedDate":"2017-02-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2017-03-11"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2017-03-17"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2017-03-17"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2017-03-17"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2017-03-17"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2017-03-17"},{"lineNumber":21,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.tag.Tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-02-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * Parses input arguments and creates a new AddCommand object","lastModifiedDate":"2017-02-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":"public class AddCommandParser implements Parser\u003cAddCommand\u003e {","lastModifiedDate":"2017-07-06"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":28,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-02-05"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * Parses the given {@code String} of arguments in the context of the AddCommand","lastModifiedDate":"2017-02-05"},{"lineNumber":30,"author":{"gitId":"-"},"content":" * and returns an AddCommand object for execution.","lastModifiedDate":"2017-02-05"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * @throws ParseException if the user input does not conform the expected format","lastModifiedDate":"2017-03-11"},{"lineNumber":32,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":" public AddCommand parse(String args) throws ParseException {","lastModifiedDate":"2017-03-11"},{"lineNumber":34,"author":{"gitId":"-"},"content":" ArgumentMultimap argMultimap \u003d","lastModifiedDate":"2017-03-20"},{"lineNumber":35,"author":{"gitId":"-"},"content":" ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS, PREFIX_TAG);","lastModifiedDate":"2017-06-06"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-17"},{"lineNumber":37,"author":{"gitId":"-"},"content":" if (!arePrefixesPresent(argMultimap, PREFIX_NAME, PREFIX_ADDRESS, PREFIX_PHONE, PREFIX_EMAIL)","lastModifiedDate":"2017-12-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":" || !argMultimap.getPreamble().isEmpty()) {","lastModifiedDate":"2017-12-23"},{"lineNumber":39,"author":{"gitId":"-"},"content":" throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddCommand.MESSAGE_USAGE));","lastModifiedDate":"2017-03-11"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-03-17"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-17"},{"lineNumber":42,"author":{"gitId":"-"},"content":" argMultimap.verifyNoDuplicatePrefixesFor(PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS);","lastModifiedDate":"2023-07-14"},{"lineNumber":43,"author":{"gitId":"-"},"content":" Name name \u003d ParserUtil.parseName(argMultimap.getValue(PREFIX_NAME).get());","lastModifiedDate":"2018-07-10"},{"lineNumber":44,"author":{"gitId":"-"},"content":" Phone phone \u003d ParserUtil.parsePhone(argMultimap.getValue(PREFIX_PHONE).get());","lastModifiedDate":"2018-07-10"},{"lineNumber":45,"author":{"gitId":"-"},"content":" Email email \u003d ParserUtil.parseEmail(argMultimap.getValue(PREFIX_EMAIL).get());","lastModifiedDate":"2018-07-10"},{"lineNumber":46,"author":{"gitId":"-"},"content":" Address address \u003d ParserUtil.parseAddress(argMultimap.getValue(PREFIX_ADDRESS).get());","lastModifiedDate":"2018-07-10"},{"lineNumber":47,"author":{"gitId":"-"},"content":" Set\u003cTag\u003e tagList \u003d ParserUtil.parseTags(argMultimap.getAllValues(PREFIX_TAG));","lastModifiedDate":"2017-03-17"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-17"},{"lineNumber":49,"author":{"gitId":"joenus"},"content":" Person person \u003d new Person(name, phone, email, address, tagList, FXCollections.observableArrayList());","lastModifiedDate":"2024-02-29"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-17"},{"lineNumber":51,"author":{"gitId":"-"},"content":" return new AddCommand(person);","lastModifiedDate":"2017-03-17"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-05"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-03-17"},{"lineNumber":55,"author":{"gitId":"-"},"content":" * Returns true if none of the prefixes contains empty {@code Optional} values in the given","lastModifiedDate":"2017-03-17"},{"lineNumber":56,"author":{"gitId":"-"},"content":" * {@code ArgumentMultimap}.","lastModifiedDate":"2017-03-17"},{"lineNumber":57,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-03-17"},{"lineNumber":58,"author":{"gitId":"-"},"content":" private static boolean arePrefixesPresent(ArgumentMultimap argumentMultimap, Prefix... prefixes) {","lastModifiedDate":"2017-03-17"},{"lineNumber":59,"author":{"gitId":"-"},"content":" return Stream.of(prefixes).allMatch(prefix -\u003e argumentMultimap.getValue(prefix).isPresent());","lastModifiedDate":"2017-03-17"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-03-17"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-17"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-02-05"}],"authorContributionMap":{"joenus":3,"-":59}},{"path":"src/main/java/seedu/address/logic/parser/EditCommandParser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-01-26"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2017-05-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-07-13"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2017-01-26"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2017-01-26"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2017-06-06"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2017-01-26"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2017-01-26"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import java.util.Collection;","lastModifiedDate":"2017-01-26"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import java.util.Collections;","lastModifiedDate":"2017-01-26"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import java.util.Optional;","lastModifiedDate":"2017-01-26"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-03-07"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2017-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand;","lastModifiedDate":"2017-01-26"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand.EditPersonDescriptor;","lastModifiedDate":"2017-01-26"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2017-03-11"},{"lineNumber":20,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.tag.Tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":22,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-01-26"},{"lineNumber":23,"author":{"gitId":"-"},"content":" * Parses input arguments and creates a new EditCommand object","lastModifiedDate":"2017-01-26"},{"lineNumber":24,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-01-26"},{"lineNumber":25,"author":{"gitId":"-"},"content":"public class EditCommandParser implements Parser\u003cEditCommand\u003e {","lastModifiedDate":"2017-07-06"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":27,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-01-26"},{"lineNumber":28,"author":{"gitId":"-"},"content":" * Parses the given {@code String} of arguments in the context of the EditCommand","lastModifiedDate":"2017-01-26"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * and returns an EditCommand object for execution.","lastModifiedDate":"2017-01-26"},{"lineNumber":30,"author":{"gitId":"-"},"content":" * @throws ParseException if the user input does not conform the expected format","lastModifiedDate":"2017-03-11"},{"lineNumber":31,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-01-26"},{"lineNumber":32,"author":{"gitId":"-"},"content":" public EditCommand parse(String args) throws ParseException {","lastModifiedDate":"2017-03-11"},{"lineNumber":33,"author":{"gitId":"-"},"content":" requireNonNull(args);","lastModifiedDate":"2017-05-15"},{"lineNumber":34,"author":{"gitId":"-"},"content":" ArgumentMultimap argMultimap \u003d","lastModifiedDate":"2017-03-20"},{"lineNumber":35,"author":{"gitId":"-"},"content":" ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS, PREFIX_TAG);","lastModifiedDate":"2017-06-06"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-15"},{"lineNumber":37,"author":{"gitId":"-"},"content":" Index index;","lastModifiedDate":"2017-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-15"},{"lineNumber":39,"author":{"gitId":"-"},"content":" try {","lastModifiedDate":"2017-05-15"},{"lineNumber":40,"author":{"gitId":"-"},"content":" index \u003d ParserUtil.parseIndex(argMultimap.getPreamble());","lastModifiedDate":"2017-06-06"},{"lineNumber":41,"author":{"gitId":"-"},"content":" } catch (ParseException pe) {","lastModifiedDate":"2018-07-10"},{"lineNumber":42,"author":{"gitId":"-"},"content":" throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, EditCommand.MESSAGE_USAGE), pe);","lastModifiedDate":"2018-08-06"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-01-26"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":45,"author":{"gitId":"-"},"content":" argMultimap.verifyNoDuplicatePrefixesFor(PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS);","lastModifiedDate":"2023-07-14"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":47,"author":{"gitId":"-"},"content":" EditPersonDescriptor editPersonDescriptor \u003d new EditPersonDescriptor();","lastModifiedDate":"2017-01-26"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":49,"author":{"gitId":"-"},"content":" if (argMultimap.getValue(PREFIX_NAME).isPresent()) {","lastModifiedDate":"2018-07-10"},{"lineNumber":50,"author":{"gitId":"-"},"content":" editPersonDescriptor.setName(ParserUtil.parseName(argMultimap.getValue(PREFIX_NAME).get()));","lastModifiedDate":"2018-07-10"},{"lineNumber":51,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-07-10"},{"lineNumber":52,"author":{"gitId":"-"},"content":" if (argMultimap.getValue(PREFIX_PHONE).isPresent()) {","lastModifiedDate":"2018-07-10"},{"lineNumber":53,"author":{"gitId":"-"},"content":" editPersonDescriptor.setPhone(ParserUtil.parsePhone(argMultimap.getValue(PREFIX_PHONE).get()));","lastModifiedDate":"2018-07-10"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-07-10"},{"lineNumber":55,"author":{"gitId":"-"},"content":" if (argMultimap.getValue(PREFIX_EMAIL).isPresent()) {","lastModifiedDate":"2018-07-10"},{"lineNumber":56,"author":{"gitId":"-"},"content":" editPersonDescriptor.setEmail(ParserUtil.parseEmail(argMultimap.getValue(PREFIX_EMAIL).get()));","lastModifiedDate":"2018-07-10"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-07-10"},{"lineNumber":58,"author":{"gitId":"-"},"content":" if (argMultimap.getValue(PREFIX_ADDRESS).isPresent()) {","lastModifiedDate":"2018-07-10"},{"lineNumber":59,"author":{"gitId":"-"},"content":" editPersonDescriptor.setAddress(ParserUtil.parseAddress(argMultimap.getValue(PREFIX_ADDRESS).get()));","lastModifiedDate":"2018-07-10"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-07-10"},{"lineNumber":61,"author":{"gitId":"-"},"content":" parseTagsForEdit(argMultimap.getAllValues(PREFIX_TAG)).ifPresent(editPersonDescriptor::setTags);","lastModifiedDate":"2017-06-21"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":63,"author":{"gitId":"-"},"content":" if (!editPersonDescriptor.isAnyFieldEdited()) {","lastModifiedDate":"2017-01-26"},{"lineNumber":64,"author":{"gitId":"-"},"content":" throw new ParseException(EditCommand.MESSAGE_NOT_EDITED);","lastModifiedDate":"2017-03-11"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-01-26"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":67,"author":{"gitId":"-"},"content":" return new EditCommand(index, editPersonDescriptor);","lastModifiedDate":"2017-05-15"},{"lineNumber":68,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-01-26"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":70,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-01-26"},{"lineNumber":71,"author":{"gitId":"-"},"content":" * Parses {@code Collection\u003cString\u003e tags} into a {@code Set\u003cTag\u003e} if {@code tags} is non-empty.","lastModifiedDate":"2017-03-07"},{"lineNumber":72,"author":{"gitId":"-"},"content":" * If {@code tags} contain only one element which is an empty string, it will be parsed into a","lastModifiedDate":"2017-01-26"},{"lineNumber":73,"author":{"gitId":"-"},"content":" * {@code Set\u003cTag\u003e} containing zero tags.","lastModifiedDate":"2017-03-07"},{"lineNumber":74,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-01-26"},{"lineNumber":75,"author":{"gitId":"-"},"content":" private Optional\u003cSet\u003cTag\u003e\u003e parseTagsForEdit(Collection\u003cString\u003e tags) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":76,"author":{"gitId":"-"},"content":" assert tags !\u003d null;","lastModifiedDate":"2017-01-26"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":78,"author":{"gitId":"-"},"content":" if (tags.isEmpty()) {","lastModifiedDate":"2017-01-26"},{"lineNumber":79,"author":{"gitId":"-"},"content":" return Optional.empty();","lastModifiedDate":"2017-01-26"},{"lineNumber":80,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-01-26"},{"lineNumber":81,"author":{"gitId":"-"},"content":" Collection\u003cString\u003e tagSet \u003d tags.size() \u003d\u003d 1 \u0026\u0026 tags.contains(\"\") ? Collections.emptySet() : tags;","lastModifiedDate":"2017-01-26"},{"lineNumber":82,"author":{"gitId":"-"},"content":" return Optional.of(ParserUtil.parseTags(tagSet));","lastModifiedDate":"2017-01-26"},{"lineNumber":83,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-01-26"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":85,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-01-26"}],"authorContributionMap":{"joenus":1,"-":84}},{"path":"src/main/java/seedu/address/logic/parser/ParserUtil.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-02-11"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2017-05-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.Collection;","lastModifiedDate":"2017-02-11"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.HashSet;","lastModifiedDate":"2017-02-11"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-02-11"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2017-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.StringUtil;","lastModifiedDate":"2017-02-11"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2018-07-10"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2017-02-11"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2017-02-11"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2017-02-11"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2017-02-11"},{"lineNumber":16,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.tag.Tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":18,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-02-11"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * Contains utility methods used for parsing strings in the various *Parser classes.","lastModifiedDate":"2017-07-18"},{"lineNumber":20,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-11"},{"lineNumber":21,"author":{"gitId":"-"},"content":"public class ParserUtil {","lastModifiedDate":"2017-02-11"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":23,"author":{"gitId":"-"},"content":" public static final String MESSAGE_INVALID_INDEX \u003d \"Index is not a non-zero unsigned integer.\";","lastModifiedDate":"2017-06-02"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-02"},{"lineNumber":25,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-02-11"},{"lineNumber":26,"author":{"gitId":"-"},"content":" * Parses {@code oneBasedIndex} into an {@code Index} and returns it. Leading and trailing whitespaces will be","lastModifiedDate":"2017-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" * trimmed.","lastModifiedDate":"2017-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" * @throws ParseException if the specified index is invalid (not non-zero unsigned integer).","lastModifiedDate":"2018-07-10"},{"lineNumber":29,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-11"},{"lineNumber":30,"author":{"gitId":"-"},"content":" public static Index parseIndex(String oneBasedIndex) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":31,"author":{"gitId":"-"},"content":" String trimmedIndex \u003d oneBasedIndex.trim();","lastModifiedDate":"2017-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" if (!StringUtil.isNonZeroUnsignedInteger(trimmedIndex)) {","lastModifiedDate":"2017-06-02"},{"lineNumber":33,"author":{"gitId":"-"},"content":" throw new ParseException(MESSAGE_INVALID_INDEX);","lastModifiedDate":"2018-07-10"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-11"},{"lineNumber":35,"author":{"gitId":"-"},"content":" return Index.fromOneBased(Integer.parseInt(trimmedIndex));","lastModifiedDate":"2017-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-11"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":38,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-29"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * Parses a {@code String name} into a {@code Name}.","lastModifiedDate":"2017-05-29"},{"lineNumber":40,"author":{"gitId":"-"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2017-05-29"},{"lineNumber":41,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2017-05-29"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * @throws ParseException if the given {@code name} is invalid.","lastModifiedDate":"2018-07-10"},{"lineNumber":43,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-29"},{"lineNumber":44,"author":{"gitId":"-"},"content":" public static Name parseName(String name) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":45,"author":{"gitId":"-"},"content":" requireNonNull(name);","lastModifiedDate":"2017-05-29"},{"lineNumber":46,"author":{"gitId":"-"},"content":" String trimmedName \u003d name.trim();","lastModifiedDate":"2017-05-29"},{"lineNumber":47,"author":{"gitId":"-"},"content":" if (!Name.isValidName(trimmedName)) {","lastModifiedDate":"2017-05-30"},{"lineNumber":48,"author":{"gitId":"-"},"content":" throw new ParseException(Name.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":50,"author":{"gitId":"-"},"content":" return new Name(trimmedName);","lastModifiedDate":"2017-05-29"},{"lineNumber":51,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-29"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-29"},{"lineNumber":53,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-30"},{"lineNumber":54,"author":{"gitId":"-"},"content":" * Parses a {@code String phone} into a {@code Phone}.","lastModifiedDate":"2017-05-30"},{"lineNumber":55,"author":{"gitId":"-"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2017-05-30"},{"lineNumber":56,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2017-05-30"},{"lineNumber":57,"author":{"gitId":"-"},"content":" * @throws ParseException if the given {@code phone} is invalid.","lastModifiedDate":"2018-07-10"},{"lineNumber":58,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-30"},{"lineNumber":59,"author":{"gitId":"-"},"content":" public static Phone parsePhone(String phone) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":60,"author":{"gitId":"-"},"content":" requireNonNull(phone);","lastModifiedDate":"2017-05-30"},{"lineNumber":61,"author":{"gitId":"-"},"content":" String trimmedPhone \u003d phone.trim();","lastModifiedDate":"2017-05-30"},{"lineNumber":62,"author":{"gitId":"-"},"content":" if (!Phone.isValidPhone(trimmedPhone)) {","lastModifiedDate":"2017-05-30"},{"lineNumber":63,"author":{"gitId":"-"},"content":" throw new ParseException(Phone.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":64,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":65,"author":{"gitId":"-"},"content":" return new Phone(trimmedPhone);","lastModifiedDate":"2017-05-30"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":68,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-30"},{"lineNumber":69,"author":{"gitId":"-"},"content":" * Parses a {@code String address} into an {@code Address}.","lastModifiedDate":"2017-05-30"},{"lineNumber":70,"author":{"gitId":"-"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2017-05-30"},{"lineNumber":71,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2017-05-30"},{"lineNumber":72,"author":{"gitId":"-"},"content":" * @throws ParseException if the given {@code address} is invalid.","lastModifiedDate":"2018-07-10"},{"lineNumber":73,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-30"},{"lineNumber":74,"author":{"gitId":"-"},"content":" public static Address parseAddress(String address) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":75,"author":{"gitId":"-"},"content":" requireNonNull(address);","lastModifiedDate":"2017-05-30"},{"lineNumber":76,"author":{"gitId":"-"},"content":" String trimmedAddress \u003d address.trim();","lastModifiedDate":"2017-05-30"},{"lineNumber":77,"author":{"gitId":"-"},"content":" if (!Address.isValidAddress(trimmedAddress)) {","lastModifiedDate":"2017-05-30"},{"lineNumber":78,"author":{"gitId":"-"},"content":" throw new ParseException(Address.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":79,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":80,"author":{"gitId":"-"},"content":" return new Address(trimmedAddress);","lastModifiedDate":"2017-05-30"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":82,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":83,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-30"},{"lineNumber":84,"author":{"gitId":"-"},"content":" * Parses a {@code String email} into an {@code Email}.","lastModifiedDate":"2017-05-30"},{"lineNumber":85,"author":{"gitId":"-"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2017-05-30"},{"lineNumber":86,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2017-05-30"},{"lineNumber":87,"author":{"gitId":"-"},"content":" * @throws ParseException if the given {@code email} is invalid.","lastModifiedDate":"2018-07-10"},{"lineNumber":88,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-30"},{"lineNumber":89,"author":{"gitId":"-"},"content":" public static Email parseEmail(String email) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":90,"author":{"gitId":"-"},"content":" requireNonNull(email);","lastModifiedDate":"2017-05-30"},{"lineNumber":91,"author":{"gitId":"-"},"content":" String trimmedEmail \u003d email.trim();","lastModifiedDate":"2017-05-30"},{"lineNumber":92,"author":{"gitId":"-"},"content":" if (!Email.isValidEmail(trimmedEmail)) {","lastModifiedDate":"2017-05-30"},{"lineNumber":93,"author":{"gitId":"-"},"content":" throw new ParseException(Email.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":94,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":95,"author":{"gitId":"-"},"content":" return new Email(trimmedEmail);","lastModifiedDate":"2017-05-30"},{"lineNumber":96,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":97,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":98,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-30"},{"lineNumber":99,"author":{"gitId":"-"},"content":" * Parses a {@code String tag} into a {@code Tag}.","lastModifiedDate":"2017-05-30"},{"lineNumber":100,"author":{"gitId":"-"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2017-05-30"},{"lineNumber":101,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2017-05-30"},{"lineNumber":102,"author":{"gitId":"-"},"content":" * @throws ParseException if the given {@code tag} is invalid.","lastModifiedDate":"2018-07-10"},{"lineNumber":103,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-30"},{"lineNumber":104,"author":{"gitId":"-"},"content":" public static Tag parseTag(String tag) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":105,"author":{"gitId":"-"},"content":" requireNonNull(tag);","lastModifiedDate":"2017-05-30"},{"lineNumber":106,"author":{"gitId":"-"},"content":" String trimmedTag \u003d tag.trim();","lastModifiedDate":"2017-05-30"},{"lineNumber":107,"author":{"gitId":"-"},"content":" if (!Tag.isValidTagName(trimmedTag)) {","lastModifiedDate":"2017-05-30"},{"lineNumber":108,"author":{"gitId":"-"},"content":" throw new ParseException(Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":109,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":110,"author":{"gitId":"-"},"content":" return new Tag(trimmedTag);","lastModifiedDate":"2017-05-30"},{"lineNumber":111,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":112,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":113,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-02-11"},{"lineNumber":114,"author":{"gitId":"-"},"content":" * Parses {@code Collection\u003cString\u003e tags} into a {@code Set\u003cTag\u003e}.","lastModifiedDate":"2017-03-07"},{"lineNumber":115,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-11"},{"lineNumber":116,"author":{"gitId":"-"},"content":" public static Set\u003cTag\u003e parseTags(Collection\u003cString\u003e tags) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":117,"author":{"gitId":"-"},"content":" requireNonNull(tags);","lastModifiedDate":"2017-05-15"},{"lineNumber":118,"author":{"gitId":"-"},"content":" final Set\u003cTag\u003e tagSet \u003d new HashSet\u003c\u003e();","lastModifiedDate":"2017-02-11"},{"lineNumber":119,"author":{"gitId":"-"},"content":" for (String tagName : tags) {","lastModifiedDate":"2017-02-11"},{"lineNumber":120,"author":{"gitId":"-"},"content":" tagSet.add(parseTag(tagName));","lastModifiedDate":"2017-05-30"},{"lineNumber":121,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-11"},{"lineNumber":122,"author":{"gitId":"-"},"content":" return tagSet;","lastModifiedDate":"2017-03-07"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-11"},{"lineNumber":124,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-02-11"}],"authorContributionMap":{"joenus":1,"-":123}},{"path":"src/main/java/seedu/address/model/ModelManager.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model;","lastModifiedDate":"2016-08-08"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2017-08-05"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.commons.util.CollectionUtil.requireAllNonNull;","lastModifiedDate":"2017-05-19"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-15"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.nio.file.Path;","lastModifiedDate":"2018-11-27"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.function.Predicate;","lastModifiedDate":"2017-06-12"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2017-01-19"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-19"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2017-09-01"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import javafx.collections.transformation.FilteredList;","lastModifiedDate":"2016-08-26"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.GuiSettings;","lastModifiedDate":"2018-11-27"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.LogsCenter;","lastModifiedDate":"2016-09-23"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-01-10"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":16,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-08"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * Represents the in-memory model of the address book data.","lastModifiedDate":"2016-08-08"},{"lineNumber":18,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-08"},{"lineNumber":19,"author":{"gitId":"-"},"content":"public class ModelManager implements Model {","lastModifiedDate":"2018-12-09"},{"lineNumber":20,"author":{"gitId":"-"},"content":" private static final Logger logger \u003d LogsCenter.getLogger(ModelManager.class);","lastModifiedDate":"2016-09-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":22,"author":{"gitId":"-"},"content":" private final AddressBook addressBook;","lastModifiedDate":"2019-01-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" private final UserPrefs userPrefs;","lastModifiedDate":"2018-12-06"},{"lineNumber":24,"author":{"gitId":"-"},"content":" private final FilteredList\u003cPerson\u003e filteredPersons;","lastModifiedDate":"2018-01-10"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":26,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-08-08"},{"lineNumber":27,"author":{"gitId":"-"},"content":" * Initializes a ModelManager with the given addressBook and userPrefs.","lastModifiedDate":"2016-12-24"},{"lineNumber":28,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-08"},{"lineNumber":29,"author":{"gitId":"-"},"content":" public ModelManager(ReadOnlyAddressBook addressBook, ReadOnlyUserPrefs userPrefs) {","lastModifiedDate":"2018-12-06"},{"lineNumber":30,"author":{"gitId":"-"},"content":" requireAllNonNull(addressBook, userPrefs);","lastModifiedDate":"2017-05-19"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" logger.fine(\"Initializing with address book: \" + addressBook + \" and user prefs \" + userPrefs);","lastModifiedDate":"2016-12-24"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":34,"author":{"gitId":"-"},"content":" this.addressBook \u003d new AddressBook(addressBook);","lastModifiedDate":"2019-01-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" this.userPrefs \u003d new UserPrefs(userPrefs);","lastModifiedDate":"2018-12-06"},{"lineNumber":36,"author":{"gitId":"-"},"content":" filteredPersons \u003d new FilteredList\u003c\u003e(this.addressBook.getPersonList());","lastModifiedDate":"2019-01-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-08"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":39,"author":{"gitId":"-"},"content":" public ModelManager() {","lastModifiedDate":"2016-09-22"},{"lineNumber":40,"author":{"gitId":"-"},"content":" this(new AddressBook(), new UserPrefs());","lastModifiedDate":"2016-09-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-08"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":43,"author":{"gitId":"joenus"},"content":" // UserPrefs","lastModifiedDate":"2024-02-29"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":45,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":46,"author":{"gitId":"-"},"content":" public void setUserPrefs(ReadOnlyUserPrefs userPrefs) {","lastModifiedDate":"2018-12-06"},{"lineNumber":47,"author":{"gitId":"-"},"content":" requireNonNull(userPrefs);","lastModifiedDate":"2018-11-27"},{"lineNumber":48,"author":{"gitId":"-"},"content":" this.userPrefs.resetData(userPrefs);","lastModifiedDate":"2018-12-06"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":51,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":52,"author":{"gitId":"-"},"content":" public ReadOnlyUserPrefs getUserPrefs() {","lastModifiedDate":"2018-11-27"},{"lineNumber":53,"author":{"gitId":"-"},"content":" return userPrefs;","lastModifiedDate":"2018-11-27"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":56,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":57,"author":{"gitId":"-"},"content":" public GuiSettings getGuiSettings() {","lastModifiedDate":"2018-11-27"},{"lineNumber":58,"author":{"gitId":"-"},"content":" return userPrefs.getGuiSettings();","lastModifiedDate":"2018-11-27"},{"lineNumber":59,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":61,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":62,"author":{"gitId":"-"},"content":" public void setGuiSettings(GuiSettings guiSettings) {","lastModifiedDate":"2018-11-27"},{"lineNumber":63,"author":{"gitId":"-"},"content":" requireNonNull(guiSettings);","lastModifiedDate":"2018-11-27"},{"lineNumber":64,"author":{"gitId":"-"},"content":" userPrefs.setGuiSettings(guiSettings);","lastModifiedDate":"2018-11-27"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":67,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":68,"author":{"gitId":"-"},"content":" public Path getAddressBookFilePath() {","lastModifiedDate":"2018-11-27"},{"lineNumber":69,"author":{"gitId":"-"},"content":" return userPrefs.getAddressBookFilePath();","lastModifiedDate":"2018-11-27"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":72,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":73,"author":{"gitId":"-"},"content":" public void setAddressBookFilePath(Path addressBookFilePath) {","lastModifiedDate":"2018-11-27"},{"lineNumber":74,"author":{"gitId":"-"},"content":" requireNonNull(addressBookFilePath);","lastModifiedDate":"2018-11-27"},{"lineNumber":75,"author":{"gitId":"-"},"content":" userPrefs.setAddressBookFilePath(addressBookFilePath);","lastModifiedDate":"2018-11-27"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":78,"author":{"gitId":"joenus"},"content":" // AddressBook","lastModifiedDate":"2024-02-29"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":80,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-09-25"},{"lineNumber":81,"author":{"gitId":"-"},"content":" public void setAddressBook(ReadOnlyAddressBook addressBook) {","lastModifiedDate":"2018-11-27"},{"lineNumber":82,"author":{"gitId":"-"},"content":" this.addressBook.resetData(addressBook);","lastModifiedDate":"2019-01-25"},{"lineNumber":83,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-08"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":85,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-09-25"},{"lineNumber":86,"author":{"gitId":"-"},"content":" public ReadOnlyAddressBook getAddressBook() {","lastModifiedDate":"2016-09-21"},{"lineNumber":87,"author":{"gitId":"-"},"content":" return addressBook;","lastModifiedDate":"2019-01-25"},{"lineNumber":88,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-21"},{"lineNumber":89,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":90,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-08-06"},{"lineNumber":91,"author":{"gitId":"-"},"content":" public boolean hasPerson(Person person) {","lastModifiedDate":"2018-08-15"},{"lineNumber":92,"author":{"gitId":"-"},"content":" requireNonNull(person);","lastModifiedDate":"2018-08-06"},{"lineNumber":93,"author":{"gitId":"-"},"content":" return addressBook.hasPerson(person);","lastModifiedDate":"2019-01-25"},{"lineNumber":94,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-06"},{"lineNumber":95,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-06"},{"lineNumber":96,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-09-25"},{"lineNumber":97,"author":{"gitId":"-"},"content":" public void deletePerson(Person target) {","lastModifiedDate":"2018-08-15"},{"lineNumber":98,"author":{"gitId":"-"},"content":" addressBook.removePerson(target);","lastModifiedDate":"2019-01-25"},{"lineNumber":99,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-08"},{"lineNumber":100,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":101,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-09-25"},{"lineNumber":102,"author":{"gitId":"-"},"content":" public void addPerson(Person person) {","lastModifiedDate":"2018-08-15"},{"lineNumber":103,"author":{"gitId":"-"},"content":" addressBook.addPerson(person);","lastModifiedDate":"2019-01-25"},{"lineNumber":104,"author":{"gitId":"-"},"content":" updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS);","lastModifiedDate":"2017-08-05"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-26"},{"lineNumber":106,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-26"},{"lineNumber":107,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-12-13"},{"lineNumber":108,"author":{"gitId":"-"},"content":" public void setPerson(Person target, Person editedPerson) {","lastModifiedDate":"2018-08-17"},{"lineNumber":109,"author":{"gitId":"-"},"content":" requireAllNonNull(target, editedPerson);","lastModifiedDate":"2017-06-07"},{"lineNumber":110,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-13"},{"lineNumber":111,"author":{"gitId":"-"},"content":" addressBook.setPerson(target, editedPerson);","lastModifiedDate":"2019-01-25"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-13"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-13"},{"lineNumber":114,"author":{"gitId":"joenus"},"content":" // Filtered Person List Accessors","lastModifiedDate":"2024-02-29"},{"lineNumber":115,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":116,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-19"},{"lineNumber":117,"author":{"gitId":"-"},"content":" * Returns an unmodifiable view of the list of {@code Person} backed by the internal list of","lastModifiedDate":"2018-01-10"},{"lineNumber":118,"author":{"gitId":"-"},"content":" * {@code versionedAddressBook}","lastModifiedDate":"2018-06-11"},{"lineNumber":119,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-19"},{"lineNumber":120,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-09-25"},{"lineNumber":121,"author":{"gitId":"-"},"content":" public ObservableList\u003cPerson\u003e getFilteredPersonList() {","lastModifiedDate":"2018-01-10"},{"lineNumber":122,"author":{"gitId":"-"},"content":" return filteredPersons;","lastModifiedDate":"2018-12-09"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-22"},{"lineNumber":124,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-22"},{"lineNumber":125,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-09-25"},{"lineNumber":126,"author":{"gitId":"-"},"content":" public void updateFilteredPersonList(Predicate\u003cPerson\u003e predicate) {","lastModifiedDate":"2018-01-10"},{"lineNumber":127,"author":{"gitId":"-"},"content":" requireNonNull(predicate);","lastModifiedDate":"2017-08-05"},{"lineNumber":128,"author":{"gitId":"-"},"content":" filteredPersons.setPredicate(predicate);","lastModifiedDate":"2017-06-12"},{"lineNumber":129,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-22"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-22"},{"lineNumber":131,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-05-31"},{"lineNumber":132,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-07-13"},{"lineNumber":133,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2023-07-13"},{"lineNumber":134,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2017-05-31"},{"lineNumber":135,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-31"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":137,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2017-05-31"},{"lineNumber":138,"author":{"gitId":"-"},"content":" if (!(other instanceof ModelManager)) {","lastModifiedDate":"2023-07-13"},{"lineNumber":139,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2017-05-31"},{"lineNumber":140,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-31"},{"lineNumber":141,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":142,"author":{"gitId":"-"},"content":" ModelManager otherModelManager \u003d (ModelManager) other;","lastModifiedDate":"2023-07-13"},{"lineNumber":143,"author":{"gitId":"-"},"content":" return addressBook.equals(otherModelManager.addressBook)","lastModifiedDate":"2023-07-13"},{"lineNumber":144,"author":{"gitId":"-"},"content":" \u0026\u0026 userPrefs.equals(otherModelManager.userPrefs)","lastModifiedDate":"2023-07-13"},{"lineNumber":145,"author":{"gitId":"-"},"content":" \u0026\u0026 filteredPersons.equals(otherModelManager.filteredPersons);","lastModifiedDate":"2023-07-13"},{"lineNumber":146,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-31"},{"lineNumber":147,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":148,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"}],"authorContributionMap":{"joenus":3,"-":145}},{"path":"src/main/java/seedu/address/model/person/Person.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model.person;","lastModifiedDate":"2016-08-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":3,"author":{"gitId":"joenus"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2024-02-29"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.commons.util.CollectionUtil.requireAllNonNull;","lastModifiedDate":"2017-05-19"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-15"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.Collections;","lastModifiedDate":"2017-03-07"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.HashSet;","lastModifiedDate":"2018-03-26"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.Objects;","lastModifiedDate":"2017-01-19"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-03-07"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-19"},{"lineNumber":11,"author":{"gitId":"joenus"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2024-02-29"},{"lineNumber":12,"author":{"gitId":"joenus"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2024-02-29"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.ToStringBuilder;","lastModifiedDate":"2019-02-23"},{"lineNumber":14,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Note;","lastModifiedDate":"2024-02-29"},{"lineNumber":15,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.tag.Tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-24"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * Represents a Person in the address book.","lastModifiedDate":"2016-08-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * Guarantees: details are present and not null, field values are validated, immutable.","lastModifiedDate":"2017-12-20"},{"lineNumber":20,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":21,"author":{"gitId":"-"},"content":"public class Person {","lastModifiedDate":"2018-01-10"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":23,"author":{"gitId":"-"},"content":" // Identity fields","lastModifiedDate":"2018-04-19"},{"lineNumber":24,"author":{"gitId":"-"},"content":" private final Name name;","lastModifiedDate":"2017-12-20"},{"lineNumber":25,"author":{"gitId":"-"},"content":" private final Phone phone;","lastModifiedDate":"2017-12-20"},{"lineNumber":26,"author":{"gitId":"-"},"content":" private final Email email;","lastModifiedDate":"2017-12-20"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":28,"author":{"gitId":"-"},"content":" // Data fields","lastModifiedDate":"2018-04-19"},{"lineNumber":29,"author":{"gitId":"-"},"content":" private final Address address;","lastModifiedDate":"2018-04-19"},{"lineNumber":30,"author":{"gitId":"-"},"content":" private final Set\u003cTag\u003e tags \u003d new HashSet\u003c\u003e();","lastModifiedDate":"2018-03-26"},{"lineNumber":31,"author":{"gitId":"joenus"},"content":" private final ObservableList\u003cNote\u003e notes \u003d FXCollections.observableArrayList();","lastModifiedDate":"2024-02-29"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":33,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-08-24"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * Every field must be present and not null.","lastModifiedDate":"2016-08-24"},{"lineNumber":35,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":36,"author":{"gitId":"joenus"},"content":" public Person(Name name, Phone phone, Email email, Address address, Set\u003cTag\u003e tags, ObservableList\u003cNote\u003e notes) {","lastModifiedDate":"2024-02-29"},{"lineNumber":37,"author":{"gitId":"joenus"},"content":" requireAllNonNull(name, phone, email, address, tags, notes);","lastModifiedDate":"2024-02-29"},{"lineNumber":38,"author":{"gitId":"-"},"content":" this.name \u003d name;","lastModifiedDate":"2017-12-20"},{"lineNumber":39,"author":{"gitId":"-"},"content":" this.phone \u003d phone;","lastModifiedDate":"2017-12-20"},{"lineNumber":40,"author":{"gitId":"-"},"content":" this.email \u003d email;","lastModifiedDate":"2017-12-20"},{"lineNumber":41,"author":{"gitId":"-"},"content":" this.address \u003d address;","lastModifiedDate":"2017-12-20"},{"lineNumber":42,"author":{"gitId":"-"},"content":" this.tags.addAll(tags);","lastModifiedDate":"2018-03-26"},{"lineNumber":43,"author":{"gitId":"joenus"},"content":" this.notes.addAll(notes);","lastModifiedDate":"2024-02-29"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":46,"author":{"gitId":"-"},"content":" public Name getName() {","lastModifiedDate":"2017-07-12"},{"lineNumber":47,"author":{"gitId":"-"},"content":" return name;","lastModifiedDate":"2017-12-20"},{"lineNumber":48,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":50,"author":{"gitId":"-"},"content":" public Phone getPhone() {","lastModifiedDate":"2017-07-12"},{"lineNumber":51,"author":{"gitId":"-"},"content":" return phone;","lastModifiedDate":"2017-12-20"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":54,"author":{"gitId":"-"},"content":" public Email getEmail() {","lastModifiedDate":"2017-07-12"},{"lineNumber":55,"author":{"gitId":"-"},"content":" return email;","lastModifiedDate":"2017-12-20"},{"lineNumber":56,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":58,"author":{"gitId":"-"},"content":" public Address getAddress() {","lastModifiedDate":"2017-07-12"},{"lineNumber":59,"author":{"gitId":"-"},"content":" return address;","lastModifiedDate":"2017-12-20"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-07-12"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-12"},{"lineNumber":62,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-03-07"},{"lineNumber":63,"author":{"gitId":"-"},"content":" * Returns an immutable tag set, which throws {@code UnsupportedOperationException}","lastModifiedDate":"2017-03-07"},{"lineNumber":64,"author":{"gitId":"-"},"content":" * if modification is attempted.","lastModifiedDate":"2017-03-07"},{"lineNumber":65,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-03-07"},{"lineNumber":66,"author":{"gitId":"-"},"content":" public Set\u003cTag\u003e getTags() {","lastModifiedDate":"2017-03-07"},{"lineNumber":67,"author":{"gitId":"-"},"content":" return Collections.unmodifiableSet(tags);","lastModifiedDate":"2018-03-26"},{"lineNumber":68,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-21"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":70,"author":{"gitId":"joenus"},"content":" /**","lastModifiedDate":"2024-02-29"},{"lineNumber":71,"author":{"gitId":"joenus"},"content":" * Returns an immutable notes list, which throws {@code UnsupportedOperationException}","lastModifiedDate":"2024-02-29"},{"lineNumber":72,"author":{"gitId":"joenus"},"content":" * if modification is attempted.","lastModifiedDate":"2024-02-29"},{"lineNumber":73,"author":{"gitId":"joenus"},"content":" */","lastModifiedDate":"2024-02-29"},{"lineNumber":74,"author":{"gitId":"joenus"},"content":" public ObservableList\u003cNote\u003e getNotes() {","lastModifiedDate":"2024-02-29"},{"lineNumber":75,"author":{"gitId":"joenus"},"content":" return FXCollections.unmodifiableObservableList(notes);","lastModifiedDate":"2024-02-29"},{"lineNumber":76,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":77,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":78,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-04-19"},{"lineNumber":79,"author":{"gitId":"-"},"content":" * Returns true if both persons have the same name.","lastModifiedDate":"2020-12-18"},{"lineNumber":80,"author":{"gitId":"-"},"content":" * This defines a weaker notion of equality between two persons.","lastModifiedDate":"2018-04-19"},{"lineNumber":81,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-04-19"},{"lineNumber":82,"author":{"gitId":"-"},"content":" public boolean isSamePerson(Person otherPerson) {","lastModifiedDate":"2018-04-19"},{"lineNumber":83,"author":{"gitId":"-"},"content":" if (otherPerson \u003d\u003d this) {","lastModifiedDate":"2018-04-19"},{"lineNumber":84,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2018-04-19"},{"lineNumber":85,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-04-19"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":87,"author":{"gitId":"-"},"content":" return otherPerson !\u003d null","lastModifiedDate":"2018-04-19"},{"lineNumber":88,"author":{"gitId":"-"},"content":" \u0026\u0026 otherPerson.getName().equals(getName());","lastModifiedDate":"2020-12-18"},{"lineNumber":89,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-04-19"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":91,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-04-19"},{"lineNumber":92,"author":{"gitId":"-"},"content":" * Returns true if both persons have the same identity and data fields.","lastModifiedDate":"2018-04-19"},{"lineNumber":93,"author":{"gitId":"-"},"content":" * This defines a stronger notion of equality between two persons.","lastModifiedDate":"2018-04-19"},{"lineNumber":94,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-04-19"},{"lineNumber":95,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":96,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2016-08-24"},{"lineNumber":97,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2018-01-10"},{"lineNumber":98,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2018-01-10"},{"lineNumber":99,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-01-10"},{"lineNumber":100,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-01-10"},{"lineNumber":101,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2023-07-13"},{"lineNumber":102,"author":{"gitId":"-"},"content":" if (!(other instanceof Person)) {","lastModifiedDate":"2018-01-10"},{"lineNumber":103,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2018-01-10"},{"lineNumber":104,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-01-10"},{"lineNumber":105,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-01-10"},{"lineNumber":106,"author":{"gitId":"-"},"content":" Person otherPerson \u003d (Person) other;","lastModifiedDate":"2018-01-10"},{"lineNumber":107,"author":{"gitId":"-"},"content":" return name.equals(otherPerson.name)","lastModifiedDate":"2023-07-13"},{"lineNumber":108,"author":{"gitId":"-"},"content":" \u0026\u0026 phone.equals(otherPerson.phone)","lastModifiedDate":"2023-07-13"},{"lineNumber":109,"author":{"gitId":"-"},"content":" \u0026\u0026 email.equals(otherPerson.email)","lastModifiedDate":"2023-07-13"},{"lineNumber":110,"author":{"gitId":"-"},"content":" \u0026\u0026 address.equals(otherPerson.address)","lastModifiedDate":"2023-07-13"},{"lineNumber":111,"author":{"gitId":"joenus"},"content":" \u0026\u0026 tags.equals(otherPerson.tags)","lastModifiedDate":"2024-02-29"},{"lineNumber":112,"author":{"gitId":"joenus"},"content":" \u0026\u0026 notes.equals(otherPerson.notes);","lastModifiedDate":"2024-02-29"},{"lineNumber":113,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":114,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":115,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":116,"author":{"gitId":"-"},"content":" public int hashCode() {","lastModifiedDate":"2016-08-24"},{"lineNumber":117,"author":{"gitId":"joenus"},"content":" return Objects.hash(name, phone, email, address, tags, notes);","lastModifiedDate":"2024-02-29"},{"lineNumber":118,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":119,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":120,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":121,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2016-08-24"},{"lineNumber":122,"author":{"gitId":"-"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2019-02-23"},{"lineNumber":123,"author":{"gitId":"-"},"content":" .add(\"name\", name)","lastModifiedDate":"2019-02-23"},{"lineNumber":124,"author":{"gitId":"-"},"content":" .add(\"phone\", phone)","lastModifiedDate":"2019-02-23"},{"lineNumber":125,"author":{"gitId":"-"},"content":" .add(\"email\", email)","lastModifiedDate":"2019-02-23"},{"lineNumber":126,"author":{"gitId":"-"},"content":" .add(\"address\", address)","lastModifiedDate":"2019-02-23"},{"lineNumber":127,"author":{"gitId":"-"},"content":" .add(\"tags\", tags)","lastModifiedDate":"2019-02-23"},{"lineNumber":128,"author":{"gitId":"joenus"},"content":" .add(\"notes\", notes)","lastModifiedDate":"2024-02-29"},{"lineNumber":129,"author":{"gitId":"-"},"content":" .toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":131,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":132,"author":{"gitId":"joenus"},"content":" /**","lastModifiedDate":"2024-02-29"},{"lineNumber":133,"author":{"gitId":"joenus"},"content":" * Represents a builder for a {@link Person}.","lastModifiedDate":"2024-02-29"},{"lineNumber":134,"author":{"gitId":"joenus"},"content":" */","lastModifiedDate":"2024-02-29"},{"lineNumber":135,"author":{"gitId":"joenus"},"content":" public static class Builder {","lastModifiedDate":"2024-02-29"},{"lineNumber":136,"author":{"gitId":"joenus"},"content":" private Name name;","lastModifiedDate":"2024-02-29"},{"lineNumber":137,"author":{"gitId":"joenus"},"content":" private Phone phone;","lastModifiedDate":"2024-02-29"},{"lineNumber":138,"author":{"gitId":"joenus"},"content":" private Email email;","lastModifiedDate":"2024-02-29"},{"lineNumber":139,"author":{"gitId":"joenus"},"content":" private Address address;","lastModifiedDate":"2024-02-29"},{"lineNumber":140,"author":{"gitId":"joenus"},"content":" private Set\u003cTag\u003e tags \u003d new HashSet\u003c\u003e();","lastModifiedDate":"2024-02-29"},{"lineNumber":141,"author":{"gitId":"joenus"},"content":" private ObservableList\u003cNote\u003e notes \u003d FXCollections.observableArrayList();","lastModifiedDate":"2024-02-29"},{"lineNumber":142,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":143,"author":{"gitId":"joenus"},"content":" /**","lastModifiedDate":"2024-02-29"},{"lineNumber":144,"author":{"gitId":"joenus"},"content":" * Creates a {@code Builder} with the given parameters.","lastModifiedDate":"2024-02-29"},{"lineNumber":145,"author":{"gitId":"joenus"},"content":" */","lastModifiedDate":"2024-02-29"},{"lineNumber":146,"author":{"gitId":"joenus"},"content":" public Builder(Name name, Phone phone, Email email, Address address, Set\u003cTag\u003e tags,","lastModifiedDate":"2024-02-29"},{"lineNumber":147,"author":{"gitId":"joenus"},"content":" ObservableList\u003cNote\u003e notes) {","lastModifiedDate":"2024-02-29"},{"lineNumber":148,"author":{"gitId":"joenus"},"content":" this.name \u003d name;","lastModifiedDate":"2024-02-29"},{"lineNumber":149,"author":{"gitId":"joenus"},"content":" this.phone \u003d phone;","lastModifiedDate":"2024-02-29"},{"lineNumber":150,"author":{"gitId":"joenus"},"content":" this.email \u003d email;","lastModifiedDate":"2024-02-29"},{"lineNumber":151,"author":{"gitId":"joenus"},"content":" this.address \u003d address;","lastModifiedDate":"2024-02-29"},{"lineNumber":152,"author":{"gitId":"joenus"},"content":" this.tags.addAll(tags);","lastModifiedDate":"2024-02-29"},{"lineNumber":153,"author":{"gitId":"joenus"},"content":" this.notes.addAll(notes);","lastModifiedDate":"2024-02-29"},{"lineNumber":154,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":155,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":156,"author":{"gitId":"joenus"},"content":" /**","lastModifiedDate":"2024-02-29"},{"lineNumber":157,"author":{"gitId":"joenus"},"content":" * Initializes the {@code Builder} with the data of {@code person}.","lastModifiedDate":"2024-02-29"},{"lineNumber":158,"author":{"gitId":"joenus"},"content":" */","lastModifiedDate":"2024-02-29"},{"lineNumber":159,"author":{"gitId":"joenus"},"content":" public Builder(Person person) {","lastModifiedDate":"2024-02-29"},{"lineNumber":160,"author":{"gitId":"joenus"},"content":" this(person.getName(), person.getPhone(), person.getEmail(), person.getAddress(), person.getTags(),","lastModifiedDate":"2024-02-29"},{"lineNumber":161,"author":{"gitId":"joenus"},"content":" person.getNotes());","lastModifiedDate":"2024-02-29"},{"lineNumber":162,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":163,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":164,"author":{"gitId":"joenus"},"content":" public Name getName() {","lastModifiedDate":"2024-02-29"},{"lineNumber":165,"author":{"gitId":"joenus"},"content":" return name;","lastModifiedDate":"2024-02-29"},{"lineNumber":166,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":167,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":168,"author":{"gitId":"joenus"},"content":" public Phone getPhone() {","lastModifiedDate":"2024-02-29"},{"lineNumber":169,"author":{"gitId":"joenus"},"content":" return phone;","lastModifiedDate":"2024-02-29"},{"lineNumber":170,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":171,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":172,"author":{"gitId":"joenus"},"content":" public Email getEmail() {","lastModifiedDate":"2024-02-29"},{"lineNumber":173,"author":{"gitId":"joenus"},"content":" return email;","lastModifiedDate":"2024-02-29"},{"lineNumber":174,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":175,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":176,"author":{"gitId":"joenus"},"content":" public Address getAddress() {","lastModifiedDate":"2024-02-29"},{"lineNumber":177,"author":{"gitId":"joenus"},"content":" return address;","lastModifiedDate":"2024-02-29"},{"lineNumber":178,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":179,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":180,"author":{"gitId":"joenus"},"content":" public Set\u003cTag\u003e getTags() {","lastModifiedDate":"2024-02-29"},{"lineNumber":181,"author":{"gitId":"joenus"},"content":" return tags;","lastModifiedDate":"2024-02-29"},{"lineNumber":182,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":183,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":184,"author":{"gitId":"joenus"},"content":" public ObservableList\u003cNote\u003e getNotes() {","lastModifiedDate":"2024-02-29"},{"lineNumber":185,"author":{"gitId":"joenus"},"content":" return notes;","lastModifiedDate":"2024-02-29"},{"lineNumber":186,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":187,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":188,"author":{"gitId":"joenus"},"content":" public Builder setName(Name name) {","lastModifiedDate":"2024-02-29"},{"lineNumber":189,"author":{"gitId":"joenus"},"content":" requireNonNull(name);","lastModifiedDate":"2024-02-29"},{"lineNumber":190,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":191,"author":{"gitId":"joenus"},"content":" this.name \u003d name;","lastModifiedDate":"2024-02-29"},{"lineNumber":192,"author":{"gitId":"joenus"},"content":" return this;","lastModifiedDate":"2024-02-29"},{"lineNumber":193,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":194,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":195,"author":{"gitId":"joenus"},"content":" public Builder setPhone(Phone phone) {","lastModifiedDate":"2024-02-29"},{"lineNumber":196,"author":{"gitId":"joenus"},"content":" requireNonNull(phone);","lastModifiedDate":"2024-02-29"},{"lineNumber":197,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":198,"author":{"gitId":"joenus"},"content":" this.phone \u003d phone;","lastModifiedDate":"2024-02-29"},{"lineNumber":199,"author":{"gitId":"joenus"},"content":" return this;","lastModifiedDate":"2024-02-29"},{"lineNumber":200,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":201,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":202,"author":{"gitId":"joenus"},"content":" public Builder setEmail(Email email) {","lastModifiedDate":"2024-02-29"},{"lineNumber":203,"author":{"gitId":"joenus"},"content":" requireNonNull(email);","lastModifiedDate":"2024-02-29"},{"lineNumber":204,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":205,"author":{"gitId":"joenus"},"content":" this.email \u003d email;","lastModifiedDate":"2024-02-29"},{"lineNumber":206,"author":{"gitId":"joenus"},"content":" return this;","lastModifiedDate":"2024-02-29"},{"lineNumber":207,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":208,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":209,"author":{"gitId":"joenus"},"content":" public Builder setAddress(Address address) {","lastModifiedDate":"2024-02-29"},{"lineNumber":210,"author":{"gitId":"joenus"},"content":" requireNonNull(address);","lastModifiedDate":"2024-02-29"},{"lineNumber":211,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":212,"author":{"gitId":"joenus"},"content":" this.address \u003d address;","lastModifiedDate":"2024-02-29"},{"lineNumber":213,"author":{"gitId":"joenus"},"content":" return this;","lastModifiedDate":"2024-02-29"},{"lineNumber":214,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":215,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":216,"author":{"gitId":"joenus"},"content":" public Builder setTags(Set\u003cTag\u003e tags) {","lastModifiedDate":"2024-02-29"},{"lineNumber":217,"author":{"gitId":"joenus"},"content":" requireNonNull(tags);","lastModifiedDate":"2024-02-29"},{"lineNumber":218,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":219,"author":{"gitId":"joenus"},"content":" this.tags.clear();","lastModifiedDate":"2024-03-01"},{"lineNumber":220,"author":{"gitId":"joenus"},"content":" this.tags.addAll(tags);","lastModifiedDate":"2024-02-29"},{"lineNumber":221,"author":{"gitId":"joenus"},"content":" return this;","lastModifiedDate":"2024-02-29"},{"lineNumber":222,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":223,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":224,"author":{"gitId":"joenus"},"content":" public Builder setNotes(ObservableList\u003cNote\u003e notes) {","lastModifiedDate":"2024-02-29"},{"lineNumber":225,"author":{"gitId":"joenus"},"content":" requireNonNull(notes);","lastModifiedDate":"2024-02-29"},{"lineNumber":226,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":227,"author":{"gitId":"joenus"},"content":" this.notes.clear();","lastModifiedDate":"2024-03-01"},{"lineNumber":228,"author":{"gitId":"joenus"},"content":" this.notes.addAll(notes);","lastModifiedDate":"2024-02-29"},{"lineNumber":229,"author":{"gitId":"joenus"},"content":" return this;","lastModifiedDate":"2024-02-29"},{"lineNumber":230,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":231,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":232,"author":{"gitId":"joenus"},"content":" /**","lastModifiedDate":"2024-02-29"},{"lineNumber":233,"author":{"gitId":"joenus"},"content":" * Builds a {@link Person} with the latest values.","lastModifiedDate":"2024-02-29"},{"lineNumber":234,"author":{"gitId":"joenus"},"content":" */","lastModifiedDate":"2024-02-29"},{"lineNumber":235,"author":{"gitId":"joenus"},"content":" public Person build() {","lastModifiedDate":"2024-02-29"},{"lineNumber":236,"author":{"gitId":"joenus"},"content":" return new Person(name, phone, email, address, tags, notes);","lastModifiedDate":"2024-02-29"},{"lineNumber":237,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":238,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":239,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-24"}],"authorContributionMap":{"joenus":128,"-":111}},{"path":"src/main/java/seedu/address/model/person/note/Description.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"joenus"},"content":"package seedu.address.model.person.note;","lastModifiedDate":"2024-02-29"},{"lineNumber":2,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":3,"author":{"gitId":"joenus"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2024-02-29"},{"lineNumber":4,"author":{"gitId":"joenus"},"content":"import static seedu.address.commons.util.AppUtil.checkArgument;","lastModifiedDate":"2024-02-29"},{"lineNumber":5,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":6,"author":{"gitId":"joenus"},"content":"import java.util.Objects;","lastModifiedDate":"2024-02-29"},{"lineNumber":7,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":8,"author":{"gitId":"joenus"},"content":"/**","lastModifiedDate":"2024-02-29"},{"lineNumber":9,"author":{"gitId":"joenus"},"content":" * Represents a Note\u0027s description.","lastModifiedDate":"2024-02-29"},{"lineNumber":10,"author":{"gitId":"joenus"},"content":" */","lastModifiedDate":"2024-02-29"},{"lineNumber":11,"author":{"gitId":"joenus"},"content":"public class Description {","lastModifiedDate":"2024-02-29"},{"lineNumber":12,"author":{"gitId":"joenus"},"content":" public static final String MESSAGE_CONSTRAINTS \u003d \"Note should not be blank\";","lastModifiedDate":"2024-02-29"},{"lineNumber":13,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":14,"author":{"gitId":"joenus"},"content":" public final String description;","lastModifiedDate":"2024-02-29"},{"lineNumber":15,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":16,"author":{"gitId":"joenus"},"content":" /**","lastModifiedDate":"2024-02-29"},{"lineNumber":17,"author":{"gitId":"joenus"},"content":" * Constructs a {@code Description}.","lastModifiedDate":"2024-02-29"},{"lineNumber":18,"author":{"gitId":"joenus"},"content":" *","lastModifiedDate":"2024-02-29"},{"lineNumber":19,"author":{"gitId":"joenus"},"content":" * @param description A valid description.","lastModifiedDate":"2024-02-29"},{"lineNumber":20,"author":{"gitId":"joenus"},"content":" */","lastModifiedDate":"2024-02-29"},{"lineNumber":21,"author":{"gitId":"joenus"},"content":" public Description(String description) {","lastModifiedDate":"2024-02-29"},{"lineNumber":22,"author":{"gitId":"joenus"},"content":" requireNonNull(description);","lastModifiedDate":"2024-02-29"},{"lineNumber":23,"author":{"gitId":"joenus"},"content":" checkArgument(isValid(description), MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-29"},{"lineNumber":24,"author":{"gitId":"joenus"},"content":" this.description \u003d description;","lastModifiedDate":"2024-02-29"},{"lineNumber":25,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":26,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":27,"author":{"gitId":"joenus"},"content":" public static boolean isValid(String test) {","lastModifiedDate":"2024-02-29"},{"lineNumber":28,"author":{"gitId":"joenus"},"content":" return !test.isEmpty();","lastModifiedDate":"2024-02-29"},{"lineNumber":29,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":30,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":31,"author":{"gitId":"joenus"},"content":" @Override","lastModifiedDate":"2024-02-29"},{"lineNumber":32,"author":{"gitId":"joenus"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2024-02-29"},{"lineNumber":33,"author":{"gitId":"joenus"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2024-02-29"},{"lineNumber":34,"author":{"gitId":"joenus"},"content":" return true;","lastModifiedDate":"2024-02-29"},{"lineNumber":35,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":36,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":37,"author":{"gitId":"joenus"},"content":" if (o \u003d\u003d null || getClass() !\u003d o.getClass()) {","lastModifiedDate":"2024-02-29"},{"lineNumber":38,"author":{"gitId":"joenus"},"content":" return false;","lastModifiedDate":"2024-02-29"},{"lineNumber":39,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":40,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":41,"author":{"gitId":"joenus"},"content":" Description that \u003d (Description) o;","lastModifiedDate":"2024-02-29"},{"lineNumber":42,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":43,"author":{"gitId":"joenus"},"content":" return Objects.equals(description, that.description);","lastModifiedDate":"2024-02-29"},{"lineNumber":44,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":45,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":46,"author":{"gitId":"joenus"},"content":" @Override","lastModifiedDate":"2024-02-29"},{"lineNumber":47,"author":{"gitId":"joenus"},"content":" public int hashCode() {","lastModifiedDate":"2024-02-29"},{"lineNumber":48,"author":{"gitId":"joenus"},"content":" return Objects.hash(description);","lastModifiedDate":"2024-03-01"},{"lineNumber":49,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":50,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":51,"author":{"gitId":"joenus"},"content":" @Override","lastModifiedDate":"2024-02-29"},{"lineNumber":52,"author":{"gitId":"joenus"},"content":" public String toString() {","lastModifiedDate":"2024-02-29"},{"lineNumber":53,"author":{"gitId":"joenus"},"content":" return description;","lastModifiedDate":"2024-02-29"},{"lineNumber":54,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":55,"author":{"gitId":"joenus"},"content":"}","lastModifiedDate":"2024-02-29"}],"authorContributionMap":{"joenus":55}},{"path":"src/main/java/seedu/address/model/person/note/Note.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"joenus"},"content":"package seedu.address.model.person.note;","lastModifiedDate":"2024-02-29"},{"lineNumber":2,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":3,"author":{"gitId":"joenus"},"content":"import static seedu.address.commons.util.CollectionUtil.requireAllNonNull;","lastModifiedDate":"2024-02-29"},{"lineNumber":4,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":5,"author":{"gitId":"joenus"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-02-29"},{"lineNumber":6,"author":{"gitId":"joenus"},"content":"import java.util.Objects;","lastModifiedDate":"2024-02-29"},{"lineNumber":7,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":8,"author":{"gitId":"joenus"},"content":"import seedu.address.commons.util.ToStringBuilder;","lastModifiedDate":"2024-02-29"},{"lineNumber":9,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":10,"author":{"gitId":"joenus"},"content":"/**","lastModifiedDate":"2024-02-29"},{"lineNumber":11,"author":{"gitId":"joenus"},"content":" * Represents an Appointment Note.","lastModifiedDate":"2024-02-29"},{"lineNumber":12,"author":{"gitId":"joenus"},"content":" */","lastModifiedDate":"2024-02-29"},{"lineNumber":13,"author":{"gitId":"joenus"},"content":"public class Note {","lastModifiedDate":"2024-02-29"},{"lineNumber":14,"author":{"gitId":"joenus"},"content":" private final LocalDateTime dateTime;","lastModifiedDate":"2024-02-29"},{"lineNumber":15,"author":{"gitId":"joenus"},"content":" private final Description description;","lastModifiedDate":"2024-02-29"},{"lineNumber":16,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":17,"author":{"gitId":"joenus"},"content":" /**","lastModifiedDate":"2024-02-29"},{"lineNumber":18,"author":{"gitId":"joenus"},"content":" * Constructs a {@code Note}.","lastModifiedDate":"2024-02-29"},{"lineNumber":19,"author":{"gitId":"joenus"},"content":" *","lastModifiedDate":"2024-02-29"},{"lineNumber":20,"author":{"gitId":"joenus"},"content":" * @param dateTime A date and time.","lastModifiedDate":"2024-02-29"},{"lineNumber":21,"author":{"gitId":"joenus"},"content":" * @param description A valid description.","lastModifiedDate":"2024-02-29"},{"lineNumber":22,"author":{"gitId":"joenus"},"content":" */","lastModifiedDate":"2024-02-29"},{"lineNumber":23,"author":{"gitId":"joenus"},"content":" public Note(LocalDateTime dateTime, Description description) {","lastModifiedDate":"2024-02-29"},{"lineNumber":24,"author":{"gitId":"joenus"},"content":" requireAllNonNull(dateTime, description);","lastModifiedDate":"2024-02-29"},{"lineNumber":25,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":26,"author":{"gitId":"joenus"},"content":" this.dateTime \u003d dateTime;","lastModifiedDate":"2024-02-29"},{"lineNumber":27,"author":{"gitId":"joenus"},"content":" this.description \u003d description;","lastModifiedDate":"2024-02-29"},{"lineNumber":28,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":29,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":30,"author":{"gitId":"joenus"},"content":" public LocalDateTime getDateTime() {","lastModifiedDate":"2024-02-29"},{"lineNumber":31,"author":{"gitId":"joenus"},"content":" return dateTime;","lastModifiedDate":"2024-02-29"},{"lineNumber":32,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":33,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":34,"author":{"gitId":"joenus"},"content":" public Description getDescription() {","lastModifiedDate":"2024-02-29"},{"lineNumber":35,"author":{"gitId":"joenus"},"content":" return description;","lastModifiedDate":"2024-02-29"},{"lineNumber":36,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":37,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":38,"author":{"gitId":"joenus"},"content":" @Override","lastModifiedDate":"2024-02-29"},{"lineNumber":39,"author":{"gitId":"joenus"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2024-02-29"},{"lineNumber":40,"author":{"gitId":"joenus"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2024-02-29"},{"lineNumber":41,"author":{"gitId":"joenus"},"content":" return true;","lastModifiedDate":"2024-02-29"},{"lineNumber":42,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":43,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":44,"author":{"gitId":"joenus"},"content":" if (o \u003d\u003d null || getClass() !\u003d o.getClass()) {","lastModifiedDate":"2024-02-29"},{"lineNumber":45,"author":{"gitId":"joenus"},"content":" return false;","lastModifiedDate":"2024-02-29"},{"lineNumber":46,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":47,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":48,"author":{"gitId":"joenus"},"content":" Note note \u003d (Note) o;","lastModifiedDate":"2024-02-29"},{"lineNumber":49,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":50,"author":{"gitId":"joenus"},"content":" if (!Objects.equals(dateTime, note.dateTime)) {","lastModifiedDate":"2024-02-29"},{"lineNumber":51,"author":{"gitId":"joenus"},"content":" return false;","lastModifiedDate":"2024-02-29"},{"lineNumber":52,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":53,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":54,"author":{"gitId":"joenus"},"content":" return Objects.equals(description, note.description);","lastModifiedDate":"2024-02-29"},{"lineNumber":55,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":56,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":57,"author":{"gitId":"joenus"},"content":" @Override","lastModifiedDate":"2024-02-29"},{"lineNumber":58,"author":{"gitId":"joenus"},"content":" public int hashCode() {","lastModifiedDate":"2024-02-29"},{"lineNumber":59,"author":{"gitId":"joenus"},"content":" return Objects.hash(dateTime, description);","lastModifiedDate":"2024-03-01"},{"lineNumber":60,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":61,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":62,"author":{"gitId":"joenus"},"content":" @Override","lastModifiedDate":"2024-02-29"},{"lineNumber":63,"author":{"gitId":"joenus"},"content":" public String toString() {","lastModifiedDate":"2024-02-29"},{"lineNumber":64,"author":{"gitId":"joenus"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2024-02-29"},{"lineNumber":65,"author":{"gitId":"joenus"},"content":" .add(\"dateTime\", dateTime)","lastModifiedDate":"2024-02-29"},{"lineNumber":66,"author":{"gitId":"joenus"},"content":" .add(\"description\", description)","lastModifiedDate":"2024-02-29"},{"lineNumber":67,"author":{"gitId":"joenus"},"content":" .toString();","lastModifiedDate":"2024-02-29"},{"lineNumber":68,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":69,"author":{"gitId":"joenus"},"content":"}","lastModifiedDate":"2024-02-29"}],"authorContributionMap":{"joenus":69}},{"path":"src/main/java/seedu/address/model/person/note/exceptions/NoteNotFoundException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"joenus"},"content":"package seedu.address.model.person.note.exceptions;","lastModifiedDate":"2024-02-29"},{"lineNumber":2,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":3,"author":{"gitId":"joenus"},"content":"/**","lastModifiedDate":"2024-02-29"},{"lineNumber":4,"author":{"gitId":"joenus"},"content":" * Signals that the operation is unable to find the specified note.","lastModifiedDate":"2024-02-29"},{"lineNumber":5,"author":{"gitId":"joenus"},"content":" */","lastModifiedDate":"2024-02-29"},{"lineNumber":6,"author":{"gitId":"joenus"},"content":"public class NoteNotFoundException extends RuntimeException { }","lastModifiedDate":"2024-02-29"}],"authorContributionMap":{"joenus":6}},{"path":"src/main/java/seedu/address/model/person/tag/Tag.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"joenus"},"content":"package seedu.address.model.person.tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2017-05-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.commons.util.AppUtil.checkArgument;","lastModifiedDate":"2017-05-30"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-24"},{"lineNumber":7,"author":{"gitId":"-"},"content":" * Represents a Tag in the address book.","lastModifiedDate":"2016-08-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":" * Guarantees: immutable; name is valid as declared in {@link #isValidTagName(String)}","lastModifiedDate":"2016-08-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":"public class Tag {","lastModifiedDate":"2016-08-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":" public static final String MESSAGE_CONSTRAINTS \u003d \"Tags names should be alphanumeric\";","lastModifiedDate":"2018-09-22"},{"lineNumber":13,"author":{"gitId":"-"},"content":" public static final String VALIDATION_REGEX \u003d \"\\\\p{Alnum}+\";","lastModifiedDate":"2018-09-22"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":" public final String tagName;","lastModifiedDate":"2016-10-19"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-08-24"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * Constructs a {@code Tag}.","lastModifiedDate":"2017-05-30"},{"lineNumber":19,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2016-08-24"},{"lineNumber":20,"author":{"gitId":"-"},"content":" * @param tagName A valid tag name.","lastModifiedDate":"2017-05-30"},{"lineNumber":21,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":22,"author":{"gitId":"-"},"content":" public Tag(String tagName) {","lastModifiedDate":"2017-05-30"},{"lineNumber":23,"author":{"gitId":"-"},"content":" requireNonNull(tagName);","lastModifiedDate":"2017-05-30"},{"lineNumber":24,"author":{"gitId":"-"},"content":" checkArgument(isValidTagName(tagName), MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":25,"author":{"gitId":"-"},"content":" this.tagName \u003d tagName;","lastModifiedDate":"2017-05-30"},{"lineNumber":26,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":28,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-08-24"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * Returns true if a given string is a valid tag name.","lastModifiedDate":"2016-09-22"},{"lineNumber":30,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":31,"author":{"gitId":"-"},"content":" public static boolean isValidTagName(String test) {","lastModifiedDate":"2016-08-24"},{"lineNumber":32,"author":{"gitId":"-"},"content":" return test.matches(VALIDATION_REGEX);","lastModifiedDate":"2018-09-22"},{"lineNumber":33,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":35,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":36,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2016-08-24"},{"lineNumber":37,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2023-07-13"},{"lineNumber":38,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2023-07-13"},{"lineNumber":39,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-13"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-13"},{"lineNumber":41,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2023-07-13"},{"lineNumber":42,"author":{"gitId":"-"},"content":" if (!(other instanceof Tag)) {","lastModifiedDate":"2023-07-13"},{"lineNumber":43,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2023-07-13"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-13"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-13"},{"lineNumber":46,"author":{"gitId":"-"},"content":" Tag otherTag \u003d (Tag) other;","lastModifiedDate":"2023-07-13"},{"lineNumber":47,"author":{"gitId":"-"},"content":" return tagName.equals(otherTag.tagName);","lastModifiedDate":"2023-07-13"},{"lineNumber":48,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":50,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":51,"author":{"gitId":"-"},"content":" public int hashCode() {","lastModifiedDate":"2016-08-24"},{"lineNumber":52,"author":{"gitId":"-"},"content":" return tagName.hashCode();","lastModifiedDate":"2016-08-24"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":55,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-08-24"},{"lineNumber":56,"author":{"gitId":"-"},"content":" * Format state as text for viewing.","lastModifiedDate":"2016-08-24"},{"lineNumber":57,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":58,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2016-08-24"},{"lineNumber":59,"author":{"gitId":"-"},"content":" return \u0027[\u0027 + tagName + \u0027]\u0027;","lastModifiedDate":"2016-08-24"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-24"}],"authorContributionMap":{"joenus":1,"-":61}},{"path":"src/main/java/seedu/address/model/util/SampleDataUtil.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model.util;","lastModifiedDate":"2016-12-20"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-20"},{"lineNumber":3,"author":{"gitId":"joenus"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-02-29"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.Arrays;","lastModifiedDate":"2018-01-21"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-03-14"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2018-01-21"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-14"},{"lineNumber":8,"author":{"gitId":"joenus"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2024-02-29"},{"lineNumber":9,"author":{"gitId":"joenus"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2024-02-29"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import seedu.address.model.AddressBook;","lastModifiedDate":"2016-12-20"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.model.ReadOnlyAddressBook;","lastModifiedDate":"2016-12-20"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2016-12-20"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2016-12-20"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2016-12-20"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2016-12-20"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2016-12-20"},{"lineNumber":17,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Description;","lastModifiedDate":"2024-02-29"},{"lineNumber":18,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Note;","lastModifiedDate":"2024-02-29"},{"lineNumber":19,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.tag.Tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-20"},{"lineNumber":21,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-08-16"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * Contains utility methods for populating {@code AddressBook} with sample data.","lastModifiedDate":"2017-08-16"},{"lineNumber":23,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-08-16"},{"lineNumber":24,"author":{"gitId":"-"},"content":"public class SampleDataUtil {","lastModifiedDate":"2016-12-20"},{"lineNumber":25,"author":{"gitId":"-"},"content":" public static Person[] getSamplePersons() {","lastModifiedDate":"2016-12-20"},{"lineNumber":26,"author":{"gitId":"-"},"content":" return new Person[]{","lastModifiedDate":"2016-12-20"},{"lineNumber":27,"author":{"gitId":"-"},"content":" new Person(new Name(\"Alex Yeoh\"), new Phone(\"87438807\"), new Email(\"alexyeoh@example.com\"),","lastModifiedDate":"2017-04-05"},{"lineNumber":28,"author":{"gitId":"-"},"content":" new Address(\"Blk 30 Geylang Street 29, #06-40\"),","lastModifiedDate":"2016-12-20"},{"lineNumber":29,"author":{"gitId":"joenus"},"content":" getTags(\"friends\"), getNotes(","lastModifiedDate":"2024-02-29"},{"lineNumber":30,"author":{"gitId":"joenus"},"content":" new Note[]{","lastModifiedDate":"2024-02-29"},{"lineNumber":31,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 2, 19, 21, 30), new Description(\"General Flu\")),","lastModifiedDate":"2024-02-29"},{"lineNumber":32,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 2, 28, 8, 30), new Description(\"Headache\")),","lastModifiedDate":"2024-02-29"},{"lineNumber":33,"author":{"gitId":"joenus"},"content":" })),","lastModifiedDate":"2024-02-29"},{"lineNumber":34,"author":{"gitId":"-"},"content":" new Person(new Name(\"Bernice Yu\"), new Phone(\"99272758\"), new Email(\"berniceyu@example.com\"),","lastModifiedDate":"2017-04-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":" new Address(\"Blk 30 Lorong 3 Serangoon Gardens, #07-18\"),","lastModifiedDate":"2016-12-20"},{"lineNumber":36,"author":{"gitId":"joenus"},"content":" getTags(\"colleagues\", \"friends\"), getNotes(","lastModifiedDate":"2024-02-29"},{"lineNumber":37,"author":{"gitId":"joenus"},"content":" new Note[]{","lastModifiedDate":"2024-02-29"},{"lineNumber":38,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 1, 2, 10, 0), new Description(\"Annual physical exam\")),","lastModifiedDate":"2024-02-29"},{"lineNumber":39,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 3, 15, 9, 15), new Description(\"Follow-up for blood pressure\")),","lastModifiedDate":"2024-02-29"},{"lineNumber":40,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 6, 7, 15, 0), new Description(\"Dermatology consultation\"))","lastModifiedDate":"2024-02-29"},{"lineNumber":41,"author":{"gitId":"joenus"},"content":" })),","lastModifiedDate":"2024-02-29"},{"lineNumber":42,"author":{"gitId":"-"},"content":" new Person(new Name(\"Charlotte Oliveiro\"), new Phone(\"93210283\"), new Email(\"charlotte@example.com\"),","lastModifiedDate":"2017-04-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":" new Address(\"Blk 11 Ang Mo Kio Street 74, #11-04\"),","lastModifiedDate":"2016-12-20"},{"lineNumber":44,"author":{"gitId":"joenus"},"content":" getTags(\"neighbours\"), getNotes(","lastModifiedDate":"2024-02-29"},{"lineNumber":45,"author":{"gitId":"joenus"},"content":" new Note[]{","lastModifiedDate":"2024-02-29"},{"lineNumber":46,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2023, 2, 10, 14, 0), new Description(\"Vision checkup\")),","lastModifiedDate":"2024-02-29"},{"lineNumber":47,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2023, 5, 23, 9, 0), new Description(\"Stomach pain evaluation\")),","lastModifiedDate":"2024-02-29"},{"lineNumber":48,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 6, 6, 11, 15), new Description(\"Prenatal checkup\")),","lastModifiedDate":"2024-02-29"},{"lineNumber":49,"author":{"gitId":"joenus"},"content":" })),","lastModifiedDate":"2024-02-29"},{"lineNumber":50,"author":{"gitId":"-"},"content":" new Person(new Name(\"David Li\"), new Phone(\"91031282\"), new Email(\"lidavid@example.com\"),","lastModifiedDate":"2017-04-05"},{"lineNumber":51,"author":{"gitId":"-"},"content":" new Address(\"Blk 436 Serangoon Gardens Street 26, #16-43\"),","lastModifiedDate":"2016-12-20"},{"lineNumber":52,"author":{"gitId":"joenus"},"content":" getTags(\"family\"), getNotes(","lastModifiedDate":"2024-02-29"},{"lineNumber":53,"author":{"gitId":"joenus"},"content":" new Note[]{","lastModifiedDate":"2024-02-29"},{"lineNumber":54,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 2, 20, 15, 30), new Description(\"Joint pain assessment\")),","lastModifiedDate":"2024-02-29"},{"lineNumber":55,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 4, 4, 10, 30), new Description(\"Post-surgery checkup\")),","lastModifiedDate":"2024-02-29"},{"lineNumber":56,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 5, 19, 17, 0), new Description(\"Sports injury follow-up\")),","lastModifiedDate":"2024-02-29"},{"lineNumber":57,"author":{"gitId":"joenus"},"content":" })),","lastModifiedDate":"2024-02-29"},{"lineNumber":58,"author":{"gitId":"-"},"content":" new Person(new Name(\"Irfan Ibrahim\"), new Phone(\"92492021\"), new Email(\"irfan@example.com\"),","lastModifiedDate":"2017-04-05"},{"lineNumber":59,"author":{"gitId":"-"},"content":" new Address(\"Blk 47 Tampines Street 20, #17-35\"),","lastModifiedDate":"2016-12-20"},{"lineNumber":60,"author":{"gitId":"joenus"},"content":" getTags(\"classmates\"), getNotes(new Note[]{})),","lastModifiedDate":"2024-02-29"},{"lineNumber":61,"author":{"gitId":"-"},"content":" new Person(new Name(\"Roy Balakrishnan\"), new Phone(\"92624417\"), new Email(\"royb@example.com\"),","lastModifiedDate":"2017-04-05"},{"lineNumber":62,"author":{"gitId":"-"},"content":" new Address(\"Blk 45 Aljunied Street 85, #11-31\"),","lastModifiedDate":"2016-12-20"},{"lineNumber":63,"author":{"gitId":"joenus"},"content":" getTags(\"colleagues\"), getNotes(","lastModifiedDate":"2024-02-29"},{"lineNumber":64,"author":{"gitId":"joenus"},"content":" new Note[]{","lastModifiedDate":"2024-02-29"},{"lineNumber":65,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2023, 8, 16, 14, 45), new Description(\"Mental health consultation\")),","lastModifiedDate":"2024-02-29"},{"lineNumber":66,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 1, 28, 10, 15), new Description(\"Blood sugar review\")),","lastModifiedDate":"2024-02-29"},{"lineNumber":67,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 4, 5, 16, 0), new Description(\"Sore throat and fever\")),","lastModifiedDate":"2024-02-29"},{"lineNumber":68,"author":{"gitId":"joenus"},"content":" }))","lastModifiedDate":"2024-02-29"},{"lineNumber":69,"author":{"gitId":"-"},"content":" };","lastModifiedDate":"2016-12-20"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-20"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-20"},{"lineNumber":72,"author":{"gitId":"-"},"content":" public static ReadOnlyAddressBook getSampleAddressBook() {","lastModifiedDate":"2016-12-20"},{"lineNumber":73,"author":{"gitId":"-"},"content":" AddressBook sampleAb \u003d new AddressBook();","lastModifiedDate":"2017-04-07"},{"lineNumber":74,"author":{"gitId":"-"},"content":" for (Person samplePerson : getSamplePersons()) {","lastModifiedDate":"2016-12-20"},{"lineNumber":75,"author":{"gitId":"-"},"content":" sampleAb.addPerson(samplePerson);","lastModifiedDate":"2017-04-07"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-20"},{"lineNumber":77,"author":{"gitId":"-"},"content":" return sampleAb;","lastModifiedDate":"2017-04-07"},{"lineNumber":78,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-20"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-14"},{"lineNumber":80,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-03-14"},{"lineNumber":81,"author":{"gitId":"-"},"content":" * Returns a tag set containing the list of strings given.","lastModifiedDate":"2017-03-14"},{"lineNumber":82,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-03-14"},{"lineNumber":83,"author":{"gitId":"joenus"},"content":" public static Set\u003cTag\u003e getTags(String... strings) {","lastModifiedDate":"2024-02-29"},{"lineNumber":84,"author":{"gitId":"-"},"content":" return Arrays.stream(strings)","lastModifiedDate":"2018-01-21"},{"lineNumber":85,"author":{"gitId":"-"},"content":" .map(Tag::new)","lastModifiedDate":"2018-01-21"},{"lineNumber":86,"author":{"gitId":"-"},"content":" .collect(Collectors.toSet());","lastModifiedDate":"2018-01-21"},{"lineNumber":87,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-03-14"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-14"},{"lineNumber":89,"author":{"gitId":"joenus"},"content":" /**","lastModifiedDate":"2024-02-29"},{"lineNumber":90,"author":{"gitId":"joenus"},"content":" * Returns a note list containing the list of notes given.","lastModifiedDate":"2024-02-29"},{"lineNumber":91,"author":{"gitId":"joenus"},"content":" */","lastModifiedDate":"2024-02-29"},{"lineNumber":92,"author":{"gitId":"joenus"},"content":" public static ObservableList\u003cNote\u003e getNotes(Note[] notes) {","lastModifiedDate":"2024-02-29"},{"lineNumber":93,"author":{"gitId":"joenus"},"content":" return Arrays.stream(notes)","lastModifiedDate":"2024-02-29"},{"lineNumber":94,"author":{"gitId":"joenus"},"content":" .collect(Collectors.toCollection(FXCollections::observableArrayList));","lastModifiedDate":"2024-02-29"},{"lineNumber":95,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":97,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-12-20"}],"authorContributionMap":{"joenus":43,"-":54}},{"path":"src/main/java/seedu/address/storage/JsonAdapatedNote.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"joenus"},"content":"package seedu.address.storage;","lastModifiedDate":"2024-02-29"},{"lineNumber":2,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":3,"author":{"gitId":"joenus"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-02-29"},{"lineNumber":4,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":5,"author":{"gitId":"joenus"},"content":"import com.fasterxml.jackson.annotation.JsonCreator;","lastModifiedDate":"2024-02-29"},{"lineNumber":6,"author":{"gitId":"joenus"},"content":"import com.fasterxml.jackson.annotation.JsonProperty;","lastModifiedDate":"2024-02-29"},{"lineNumber":7,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":8,"author":{"gitId":"joenus"},"content":"import seedu.address.commons.exceptions.IllegalValueException;","lastModifiedDate":"2024-02-29"},{"lineNumber":9,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2024-02-29"},{"lineNumber":10,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Description;","lastModifiedDate":"2024-02-29"},{"lineNumber":11,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Note;","lastModifiedDate":"2024-02-29"},{"lineNumber":12,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":13,"author":{"gitId":"joenus"},"content":"/**","lastModifiedDate":"2024-02-29"},{"lineNumber":14,"author":{"gitId":"joenus"},"content":" * Jackson-friendly version of {@link Note}.","lastModifiedDate":"2024-02-29"},{"lineNumber":15,"author":{"gitId":"joenus"},"content":" */","lastModifiedDate":"2024-02-29"},{"lineNumber":16,"author":{"gitId":"joenus"},"content":"public class JsonAdapatedNote {","lastModifiedDate":"2024-02-29"},{"lineNumber":17,"author":{"gitId":"joenus"},"content":" public static final String MISSING_FIELD_MESSAGE_FORMAT \u003d \"Note\u0027s %s field is missing!\";","lastModifiedDate":"2024-02-29"},{"lineNumber":18,"author":{"gitId":"joenus"},"content":" private final LocalDateTime dateTime;","lastModifiedDate":"2024-02-29"},{"lineNumber":19,"author":{"gitId":"joenus"},"content":" private final String description;","lastModifiedDate":"2024-02-29"},{"lineNumber":20,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":21,"author":{"gitId":"joenus"},"content":" /**","lastModifiedDate":"2024-02-29"},{"lineNumber":22,"author":{"gitId":"joenus"},"content":" * Constructs a {@code JsonAdapatedNote} with the given parameters.","lastModifiedDate":"2024-02-29"},{"lineNumber":23,"author":{"gitId":"joenus"},"content":" */","lastModifiedDate":"2024-02-29"},{"lineNumber":24,"author":{"gitId":"joenus"},"content":" @JsonCreator","lastModifiedDate":"2024-02-29"},{"lineNumber":25,"author":{"gitId":"joenus"},"content":" public JsonAdapatedNote(@JsonProperty(\"dateTime\") LocalDateTime dateTime,","lastModifiedDate":"2024-02-29"},{"lineNumber":26,"author":{"gitId":"joenus"},"content":" @JsonProperty(\"description\") String description) {","lastModifiedDate":"2024-02-29"},{"lineNumber":27,"author":{"gitId":"joenus"},"content":" this.dateTime \u003d dateTime;","lastModifiedDate":"2024-02-29"},{"lineNumber":28,"author":{"gitId":"joenus"},"content":" this.description \u003d description;","lastModifiedDate":"2024-02-29"},{"lineNumber":29,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":30,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":31,"author":{"gitId":"joenus"},"content":" /**","lastModifiedDate":"2024-02-29"},{"lineNumber":32,"author":{"gitId":"joenus"},"content":" * Converts a given {@code Note} into this class for Jackson use.","lastModifiedDate":"2024-02-29"},{"lineNumber":33,"author":{"gitId":"joenus"},"content":" */","lastModifiedDate":"2024-02-29"},{"lineNumber":34,"author":{"gitId":"joenus"},"content":" public JsonAdapatedNote(Note source) {","lastModifiedDate":"2024-02-29"},{"lineNumber":35,"author":{"gitId":"joenus"},"content":" this.dateTime \u003d source.getDateTime();","lastModifiedDate":"2024-02-29"},{"lineNumber":36,"author":{"gitId":"joenus"},"content":" this.description \u003d source.getDescription().toString();","lastModifiedDate":"2024-02-29"},{"lineNumber":37,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":38,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":39,"author":{"gitId":"joenus"},"content":" /**","lastModifiedDate":"2024-02-29"},{"lineNumber":40,"author":{"gitId":"joenus"},"content":" * Converts this Jackson-friendly adapted tag object into the model\u0027s {@code Note} object.","lastModifiedDate":"2024-02-29"},{"lineNumber":41,"author":{"gitId":"joenus"},"content":" *","lastModifiedDate":"2024-02-29"},{"lineNumber":42,"author":{"gitId":"joenus"},"content":" * @throws IllegalValueException if there were any data constraints violated in the adapted tag.","lastModifiedDate":"2024-02-29"},{"lineNumber":43,"author":{"gitId":"joenus"},"content":" */","lastModifiedDate":"2024-02-29"},{"lineNumber":44,"author":{"gitId":"joenus"},"content":" public Note toModelType() throws IllegalValueException {","lastModifiedDate":"2024-02-29"},{"lineNumber":45,"author":{"gitId":"joenus"},"content":" if (this.description \u003d\u003d null) {","lastModifiedDate":"2024-02-29"},{"lineNumber":46,"author":{"gitId":"joenus"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Name.class.getSimpleName()));","lastModifiedDate":"2024-02-29"},{"lineNumber":47,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":48,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":49,"author":{"gitId":"joenus"},"content":" if (!Description.isValid(this.description)) {","lastModifiedDate":"2024-02-29"},{"lineNumber":50,"author":{"gitId":"joenus"},"content":" throw new IllegalValueException(Description.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-29"},{"lineNumber":51,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":52,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":53,"author":{"gitId":"joenus"},"content":" final Description description \u003d new Description(this.description);","lastModifiedDate":"2024-02-29"},{"lineNumber":54,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":55,"author":{"gitId":"joenus"},"content":" return new Note(dateTime, description);","lastModifiedDate":"2024-02-29"},{"lineNumber":56,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":57,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":58,"author":{"gitId":"joenus"},"content":"}","lastModifiedDate":"2024-02-29"}],"authorContributionMap":{"joenus":58}},{"path":"src/main/java/seedu/address/storage/JsonAdaptedPerson.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.storage;","lastModifiedDate":"2018-08-13"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.ArrayList;","lastModifiedDate":"2018-08-13"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.HashSet;","lastModifiedDate":"2018-08-13"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2018-08-13"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2018-08-13"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2018-08-13"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import com.fasterxml.jackson.annotation.JsonCreator;","lastModifiedDate":"2018-08-13"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import com.fasterxml.jackson.annotation.JsonProperty;","lastModifiedDate":"2018-08-13"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":12,"author":{"gitId":"joenus"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2024-02-29"},{"lineNumber":13,"author":{"gitId":"joenus"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2024-02-29"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.commons.exceptions.IllegalValueException;","lastModifiedDate":"2018-08-13"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2018-08-13"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2018-08-13"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2018-08-13"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-08-13"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2018-08-13"},{"lineNumber":20,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Note;","lastModifiedDate":"2024-02-29"},{"lineNumber":21,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.tag.Tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":23,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2018-08-13"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * Jackson-friendly version of {@link Person}.","lastModifiedDate":"2018-08-13"},{"lineNumber":25,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-13"},{"lineNumber":26,"author":{"gitId":"-"},"content":"class JsonAdaptedPerson {","lastModifiedDate":"2018-12-03"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":28,"author":{"gitId":"-"},"content":" public static final String MISSING_FIELD_MESSAGE_FORMAT \u003d \"Person\u0027s %s field is missing!\";","lastModifiedDate":"2018-08-13"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":30,"author":{"gitId":"-"},"content":" private final String name;","lastModifiedDate":"2018-08-13"},{"lineNumber":31,"author":{"gitId":"-"},"content":" private final String phone;","lastModifiedDate":"2018-08-13"},{"lineNumber":32,"author":{"gitId":"-"},"content":" private final String email;","lastModifiedDate":"2018-08-13"},{"lineNumber":33,"author":{"gitId":"-"},"content":" private final String address;","lastModifiedDate":"2018-08-13"},{"lineNumber":34,"author":{"gitId":"-"},"content":" private final List\u003cJsonAdaptedTag\u003e tags \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-01-09"},{"lineNumber":35,"author":{"gitId":"joenus"},"content":" private final List\u003cJsonAdapatedNote\u003e notes \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-02-29"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":37,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-13"},{"lineNumber":38,"author":{"gitId":"-"},"content":" * Constructs a {@code JsonAdaptedPerson} with the given person details.","lastModifiedDate":"2018-08-13"},{"lineNumber":39,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-13"},{"lineNumber":40,"author":{"gitId":"-"},"content":" @JsonCreator","lastModifiedDate":"2018-08-13"},{"lineNumber":41,"author":{"gitId":"-"},"content":" public JsonAdaptedPerson(@JsonProperty(\"name\") String name, @JsonProperty(\"phone\") String phone,","lastModifiedDate":"2018-08-13"},{"lineNumber":42,"author":{"gitId":"-"},"content":" @JsonProperty(\"email\") String email, @JsonProperty(\"address\") String address,","lastModifiedDate":"2018-08-13"},{"lineNumber":43,"author":{"gitId":"joenus"},"content":" @JsonProperty(\"tags\") List\u003cJsonAdaptedTag\u003e tags,","lastModifiedDate":"2024-02-29"},{"lineNumber":44,"author":{"gitId":"joenus"},"content":" @JsonProperty(\"notes\") List\u003cJsonAdapatedNote\u003e notes) {","lastModifiedDate":"2024-02-29"},{"lineNumber":45,"author":{"gitId":"-"},"content":" this.name \u003d name;","lastModifiedDate":"2018-08-13"},{"lineNumber":46,"author":{"gitId":"-"},"content":" this.phone \u003d phone;","lastModifiedDate":"2018-08-13"},{"lineNumber":47,"author":{"gitId":"-"},"content":" this.email \u003d email;","lastModifiedDate":"2018-08-13"},{"lineNumber":48,"author":{"gitId":"-"},"content":" this.address \u003d address;","lastModifiedDate":"2018-08-13"},{"lineNumber":49,"author":{"gitId":"-"},"content":" if (tags !\u003d null) {","lastModifiedDate":"2023-01-09"},{"lineNumber":50,"author":{"gitId":"-"},"content":" this.tags.addAll(tags);","lastModifiedDate":"2023-01-09"},{"lineNumber":51,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":52,"author":{"gitId":"joenus"},"content":" if (notes !\u003d null) {","lastModifiedDate":"2024-02-29"},{"lineNumber":53,"author":{"gitId":"joenus"},"content":" this.notes.addAll(notes);","lastModifiedDate":"2024-02-29"},{"lineNumber":54,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":57,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-13"},{"lineNumber":58,"author":{"gitId":"-"},"content":" * Converts a given {@code Person} into this class for Jackson use.","lastModifiedDate":"2018-08-13"},{"lineNumber":59,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-13"},{"lineNumber":60,"author":{"gitId":"-"},"content":" public JsonAdaptedPerson(Person source) {","lastModifiedDate":"2018-08-13"},{"lineNumber":61,"author":{"gitId":"-"},"content":" name \u003d source.getName().fullName;","lastModifiedDate":"2018-08-13"},{"lineNumber":62,"author":{"gitId":"-"},"content":" phone \u003d source.getPhone().value;","lastModifiedDate":"2018-08-13"},{"lineNumber":63,"author":{"gitId":"-"},"content":" email \u003d source.getEmail().value;","lastModifiedDate":"2018-08-13"},{"lineNumber":64,"author":{"gitId":"-"},"content":" address \u003d source.getAddress().value;","lastModifiedDate":"2018-08-13"},{"lineNumber":65,"author":{"gitId":"-"},"content":" tags.addAll(source.getTags().stream()","lastModifiedDate":"2023-01-09"},{"lineNumber":66,"author":{"gitId":"-"},"content":" .map(JsonAdaptedTag::new)","lastModifiedDate":"2018-08-13"},{"lineNumber":67,"author":{"gitId":"-"},"content":" .collect(Collectors.toList()));","lastModifiedDate":"2018-08-13"},{"lineNumber":68,"author":{"gitId":"joenus"},"content":" notes.addAll(source.getNotes().stream()","lastModifiedDate":"2024-02-29"},{"lineNumber":69,"author":{"gitId":"joenus"},"content":" .map(JsonAdapatedNote::new)","lastModifiedDate":"2024-02-29"},{"lineNumber":70,"author":{"gitId":"joenus"},"content":" .collect(Collectors.toList()));","lastModifiedDate":"2024-02-29"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":73,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-13"},{"lineNumber":74,"author":{"gitId":"-"},"content":" * Converts this Jackson-friendly adapted person object into the model\u0027s {@code Person} object.","lastModifiedDate":"2018-08-13"},{"lineNumber":75,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2018-08-13"},{"lineNumber":76,"author":{"gitId":"-"},"content":" * @throws IllegalValueException if there were any data constraints violated in the adapted person.","lastModifiedDate":"2018-08-13"},{"lineNumber":77,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-13"},{"lineNumber":78,"author":{"gitId":"-"},"content":" public Person toModelType() throws IllegalValueException {","lastModifiedDate":"2018-08-13"},{"lineNumber":79,"author":{"gitId":"joenus"},"content":" final List\u003cTag\u003e tags \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-02-29"},{"lineNumber":80,"author":{"gitId":"joenus"},"content":" for (JsonAdaptedTag tag : this.tags) {","lastModifiedDate":"2024-02-29"},{"lineNumber":81,"author":{"gitId":"joenus"},"content":" tags.add(tag.toModelType());","lastModifiedDate":"2024-02-29"},{"lineNumber":82,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":83,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":84,"author":{"gitId":"joenus"},"content":" final ObservableList\u003cNote\u003e notes \u003d FXCollections.observableArrayList();","lastModifiedDate":"2024-02-29"},{"lineNumber":85,"author":{"gitId":"joenus"},"content":" for (JsonAdapatedNote note : this.notes) {","lastModifiedDate":"2024-02-29"},{"lineNumber":86,"author":{"gitId":"joenus"},"content":" notes.add(note.toModelType());","lastModifiedDate":"2024-02-29"},{"lineNumber":87,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":89,"author":{"gitId":"-"},"content":" if (name \u003d\u003d null) {","lastModifiedDate":"2018-08-13"},{"lineNumber":90,"author":{"gitId":"-"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Name.class.getSimpleName()));","lastModifiedDate":"2018-08-13"},{"lineNumber":91,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":92,"author":{"gitId":"-"},"content":" if (!Name.isValidName(name)) {","lastModifiedDate":"2018-08-13"},{"lineNumber":93,"author":{"gitId":"-"},"content":" throw new IllegalValueException(Name.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-08-13"},{"lineNumber":94,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":95,"author":{"gitId":"-"},"content":" final Name modelName \u003d new Name(name);","lastModifiedDate":"2018-08-13"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":97,"author":{"gitId":"-"},"content":" if (phone \u003d\u003d null) {","lastModifiedDate":"2018-08-13"},{"lineNumber":98,"author":{"gitId":"-"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Phone.class.getSimpleName()));","lastModifiedDate":"2018-08-13"},{"lineNumber":99,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":100,"author":{"gitId":"-"},"content":" if (!Phone.isValidPhone(phone)) {","lastModifiedDate":"2018-08-13"},{"lineNumber":101,"author":{"gitId":"-"},"content":" throw new IllegalValueException(Phone.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-08-13"},{"lineNumber":102,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":103,"author":{"gitId":"-"},"content":" final Phone modelPhone \u003d new Phone(phone);","lastModifiedDate":"2018-08-13"},{"lineNumber":104,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":105,"author":{"gitId":"-"},"content":" if (email \u003d\u003d null) {","lastModifiedDate":"2018-08-13"},{"lineNumber":106,"author":{"gitId":"-"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Email.class.getSimpleName()));","lastModifiedDate":"2018-08-13"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":108,"author":{"gitId":"-"},"content":" if (!Email.isValidEmail(email)) {","lastModifiedDate":"2018-08-13"},{"lineNumber":109,"author":{"gitId":"-"},"content":" throw new IllegalValueException(Email.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-08-13"},{"lineNumber":110,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":111,"author":{"gitId":"-"},"content":" final Email modelEmail \u003d new Email(email);","lastModifiedDate":"2018-08-13"},{"lineNumber":112,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":113,"author":{"gitId":"-"},"content":" if (address \u003d\u003d null) {","lastModifiedDate":"2018-08-13"},{"lineNumber":114,"author":{"gitId":"-"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Address.class.getSimpleName()));","lastModifiedDate":"2018-08-13"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":116,"author":{"gitId":"-"},"content":" if (!Address.isValidAddress(address)) {","lastModifiedDate":"2018-08-13"},{"lineNumber":117,"author":{"gitId":"-"},"content":" throw new IllegalValueException(Address.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-08-13"},{"lineNumber":118,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":119,"author":{"gitId":"-"},"content":" final Address modelAddress \u003d new Address(address);","lastModifiedDate":"2018-08-13"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":121,"author":{"gitId":"joenus"},"content":" final Set\u003cTag\u003e modelTags \u003d new HashSet\u003c\u003e(tags);","lastModifiedDate":"2024-02-29"},{"lineNumber":122,"author":{"gitId":"joenus"},"content":" return new Person(modelName, modelPhone, modelEmail, modelAddress, modelTags, notes);","lastModifiedDate":"2024-02-29"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":124,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":125,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2018-08-13"}],"authorContributionMap":{"joenus":23,"-":102}},{"path":"src/main/java/seedu/address/storage/JsonAdaptedTag.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.storage;","lastModifiedDate":"2018-08-13"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import com.fasterxml.jackson.annotation.JsonCreator;","lastModifiedDate":"2018-08-13"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import com.fasterxml.jackson.annotation.JsonValue;","lastModifiedDate":"2018-08-13"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import seedu.address.commons.exceptions.IllegalValueException;","lastModifiedDate":"2018-08-13"},{"lineNumber":7,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.tag.Tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":9,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2018-08-13"},{"lineNumber":10,"author":{"gitId":"-"},"content":" * Jackson-friendly version of {@link Tag}.","lastModifiedDate":"2018-08-13"},{"lineNumber":11,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-13"},{"lineNumber":12,"author":{"gitId":"-"},"content":"class JsonAdaptedTag {","lastModifiedDate":"2018-12-03"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":14,"author":{"gitId":"-"},"content":" private final String tagName;","lastModifiedDate":"2018-08-13"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":16,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-13"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * Constructs a {@code JsonAdaptedTag} with the given {@code tagName}.","lastModifiedDate":"2018-08-13"},{"lineNumber":18,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-13"},{"lineNumber":19,"author":{"gitId":"-"},"content":" @JsonCreator","lastModifiedDate":"2018-08-13"},{"lineNumber":20,"author":{"gitId":"-"},"content":" public JsonAdaptedTag(String tagName) {","lastModifiedDate":"2018-08-13"},{"lineNumber":21,"author":{"gitId":"-"},"content":" this.tagName \u003d tagName;","lastModifiedDate":"2018-08-13"},{"lineNumber":22,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":24,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-13"},{"lineNumber":25,"author":{"gitId":"-"},"content":" * Converts a given {@code Tag} into this class for Jackson use.","lastModifiedDate":"2018-08-13"},{"lineNumber":26,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-13"},{"lineNumber":27,"author":{"gitId":"-"},"content":" public JsonAdaptedTag(Tag source) {","lastModifiedDate":"2018-08-13"},{"lineNumber":28,"author":{"gitId":"-"},"content":" tagName \u003d source.tagName;","lastModifiedDate":"2018-08-13"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":31,"author":{"gitId":"-"},"content":" @JsonValue","lastModifiedDate":"2018-08-13"},{"lineNumber":32,"author":{"gitId":"-"},"content":" public String getTagName() {","lastModifiedDate":"2018-08-13"},{"lineNumber":33,"author":{"gitId":"-"},"content":" return tagName;","lastModifiedDate":"2018-08-13"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":36,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-13"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * Converts this Jackson-friendly adapted tag object into the model\u0027s {@code Tag} object.","lastModifiedDate":"2018-08-13"},{"lineNumber":38,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2018-08-13"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * @throws IllegalValueException if there were any data constraints violated in the adapted tag.","lastModifiedDate":"2018-08-13"},{"lineNumber":40,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-13"},{"lineNumber":41,"author":{"gitId":"-"},"content":" public Tag toModelType() throws IllegalValueException {","lastModifiedDate":"2018-08-13"},{"lineNumber":42,"author":{"gitId":"-"},"content":" if (!Tag.isValidTagName(tagName)) {","lastModifiedDate":"2018-08-13"},{"lineNumber":43,"author":{"gitId":"-"},"content":" throw new IllegalValueException(Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-08-13"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":45,"author":{"gitId":"-"},"content":" return new Tag(tagName);","lastModifiedDate":"2018-08-13"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2018-08-13"}],"authorContributionMap":{"joenus":1,"-":47}},{"path":"src/test/java/seedu/address/logic/commands/CommandTestUtil.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.commands;","lastModifiedDate":"2017-06-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-03-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2019-03-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2017-07-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2017-07-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2017-07-05"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2017-07-05"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2017-07-05"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-23"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":12,"author":{"gitId":"joenus"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-02-29"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import java.util.ArrayList;","lastModifiedDate":"2017-06-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import java.util.Arrays;","lastModifiedDate":"2017-07-20"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2017-06-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2018-01-31"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.exceptions.CommandException;","lastModifiedDate":"2017-06-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.model.AddressBook;","lastModifiedDate":"2017-06-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.model.Model;","lastModifiedDate":"2017-06-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import seedu.address.model.person.NameContainsKeywordsPredicate;","lastModifiedDate":"2017-07-20"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-01-10"},{"lineNumber":23,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Description;","lastModifiedDate":"2024-02-29"},{"lineNumber":24,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Note;","lastModifiedDate":"2024-02-29"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import seedu.address.testutil.EditPersonDescriptorBuilder;","lastModifiedDate":"2017-07-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":27,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-06-05"},{"lineNumber":28,"author":{"gitId":"-"},"content":" * Contains helper methods for testing commands.","lastModifiedDate":"2017-06-05"},{"lineNumber":29,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-06-05"},{"lineNumber":30,"author":{"gitId":"-"},"content":"public class CommandTestUtil {","lastModifiedDate":"2017-06-05"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":" public static final String VALID_NAME_AMY \u003d \"Amy Bee\";","lastModifiedDate":"2017-07-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":" public static final String VALID_NAME_BOB \u003d \"Bob Choo\";","lastModifiedDate":"2017-07-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":" public static final String VALID_PHONE_AMY \u003d \"11111111\";","lastModifiedDate":"2017-07-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":" public static final String VALID_PHONE_BOB \u003d \"22222222\";","lastModifiedDate":"2017-07-05"},{"lineNumber":36,"author":{"gitId":"-"},"content":" public static final String VALID_EMAIL_AMY \u003d \"amy@example.com\";","lastModifiedDate":"2017-07-05"},{"lineNumber":37,"author":{"gitId":"-"},"content":" public static final String VALID_EMAIL_BOB \u003d \"bob@example.com\";","lastModifiedDate":"2017-07-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":" public static final String VALID_ADDRESS_AMY \u003d \"Block 312, Amy Street 1\";","lastModifiedDate":"2017-07-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":" public static final String VALID_ADDRESS_BOB \u003d \"Block 123, Bobby Street 3\";","lastModifiedDate":"2017-07-05"},{"lineNumber":40,"author":{"gitId":"-"},"content":" public static final String VALID_TAG_HUSBAND \u003d \"husband\";","lastModifiedDate":"2017-07-05"},{"lineNumber":41,"author":{"gitId":"-"},"content":" public static final String VALID_TAG_FRIEND \u003d \"friend\";","lastModifiedDate":"2017-07-05"},{"lineNumber":42,"author":{"gitId":"joenus"},"content":" public static final Note VALID_NOTE_FLU \u003d","lastModifiedDate":"2024-02-29"},{"lineNumber":43,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 2, 19, 21, 30), new Description(\"General Flu\"));","lastModifiedDate":"2024-02-29"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-05"},{"lineNumber":45,"author":{"gitId":"-"},"content":" public static final String NAME_DESC_AMY \u003d \" \" + PREFIX_NAME + VALID_NAME_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":46,"author":{"gitId":"-"},"content":" public static final String NAME_DESC_BOB \u003d \" \" + PREFIX_NAME + VALID_NAME_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":47,"author":{"gitId":"-"},"content":" public static final String PHONE_DESC_AMY \u003d \" \" + PREFIX_PHONE + VALID_PHONE_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":48,"author":{"gitId":"-"},"content":" public static final String PHONE_DESC_BOB \u003d \" \" + PREFIX_PHONE + VALID_PHONE_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":49,"author":{"gitId":"-"},"content":" public static final String EMAIL_DESC_AMY \u003d \" \" + PREFIX_EMAIL + VALID_EMAIL_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":50,"author":{"gitId":"-"},"content":" public static final String EMAIL_DESC_BOB \u003d \" \" + PREFIX_EMAIL + VALID_EMAIL_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":51,"author":{"gitId":"-"},"content":" public static final String ADDRESS_DESC_AMY \u003d \" \" + PREFIX_ADDRESS + VALID_ADDRESS_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":52,"author":{"gitId":"-"},"content":" public static final String ADDRESS_DESC_BOB \u003d \" \" + PREFIX_ADDRESS + VALID_ADDRESS_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":53,"author":{"gitId":"-"},"content":" public static final String TAG_DESC_FRIEND \u003d \" \" + PREFIX_TAG + VALID_TAG_FRIEND;","lastModifiedDate":"2017-07-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":" public static final String TAG_DESC_HUSBAND \u003d \" \" + PREFIX_TAG + VALID_TAG_HUSBAND;","lastModifiedDate":"2017-07-05"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-05"},{"lineNumber":56,"author":{"gitId":"-"},"content":" public static final String INVALID_NAME_DESC \u003d \" \" + PREFIX_NAME + \"James\u0026\"; // \u0027\u0026\u0027 not allowed in names","lastModifiedDate":"2017-07-05"},{"lineNumber":57,"author":{"gitId":"-"},"content":" public static final String INVALID_PHONE_DESC \u003d \" \" + PREFIX_PHONE + \"911a\"; // \u0027a\u0027 not allowed in phones","lastModifiedDate":"2017-07-05"},{"lineNumber":58,"author":{"gitId":"-"},"content":" public static final String INVALID_EMAIL_DESC \u003d \" \" + PREFIX_EMAIL + \"bob!yahoo\"; // missing \u0027@\u0027 symbol","lastModifiedDate":"2017-07-05"},{"lineNumber":59,"author":{"gitId":"-"},"content":" public static final String INVALID_ADDRESS_DESC \u003d \" \" + PREFIX_ADDRESS; // empty string not allowed for addresses","lastModifiedDate":"2017-07-05"},{"lineNumber":60,"author":{"gitId":"-"},"content":" public static final String INVALID_TAG_DESC \u003d \" \" + PREFIX_TAG + \"hubby*\"; // \u0027*\u0027 not allowed in tags","lastModifiedDate":"2017-07-05"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-05"},{"lineNumber":62,"author":{"gitId":"-"},"content":" public static final String PREAMBLE_WHITESPACE \u003d \"\\t \\r \\n\";","lastModifiedDate":"2017-12-23"},{"lineNumber":63,"author":{"gitId":"-"},"content":" public static final String PREAMBLE_NON_EMPTY \u003d \"NonEmptyPreamble\";","lastModifiedDate":"2017-12-23"},{"lineNumber":64,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-23"},{"lineNumber":65,"author":{"gitId":"-"},"content":" public static final EditCommand.EditPersonDescriptor DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":66,"author":{"gitId":"-"},"content":" public static final EditCommand.EditPersonDescriptor DESC_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-05"},{"lineNumber":68,"author":{"gitId":"-"},"content":" static {","lastModifiedDate":"2017-07-05"},{"lineNumber":69,"author":{"gitId":"-"},"content":" DESC_AMY \u003d new EditPersonDescriptorBuilder().withName(VALID_NAME_AMY)","lastModifiedDate":"2017-07-05"},{"lineNumber":70,"author":{"gitId":"-"},"content":" .withPhone(VALID_PHONE_AMY).withEmail(VALID_EMAIL_AMY).withAddress(VALID_ADDRESS_AMY)","lastModifiedDate":"2017-07-05"},{"lineNumber":71,"author":{"gitId":"-"},"content":" .withTags(VALID_TAG_FRIEND).build();","lastModifiedDate":"2017-07-05"},{"lineNumber":72,"author":{"gitId":"-"},"content":" DESC_BOB \u003d new EditPersonDescriptorBuilder().withName(VALID_NAME_BOB)","lastModifiedDate":"2017-07-05"},{"lineNumber":73,"author":{"gitId":"-"},"content":" .withPhone(VALID_PHONE_BOB).withEmail(VALID_EMAIL_BOB).withAddress(VALID_ADDRESS_BOB)","lastModifiedDate":"2017-07-05"},{"lineNumber":74,"author":{"gitId":"-"},"content":" .withTags(VALID_TAG_HUSBAND, VALID_TAG_FRIEND).build();","lastModifiedDate":"2017-07-05"},{"lineNumber":75,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-07-05"},{"lineNumber":76,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-05"},{"lineNumber":77,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-06-05"},{"lineNumber":78,"author":{"gitId":"-"},"content":" * Executes the given {@code command}, confirms that \u003cbr\u003e","lastModifiedDate":"2017-06-05"},{"lineNumber":79,"author":{"gitId":"-"},"content":" * - the returned {@link CommandResult} matches {@code expectedCommandResult} \u003cbr\u003e","lastModifiedDate":"2018-12-09"},{"lineNumber":80,"author":{"gitId":"-"},"content":" * - the {@code actualModel} matches {@code expectedModel}","lastModifiedDate":"2019-01-25"},{"lineNumber":81,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-06-05"},{"lineNumber":82,"author":{"gitId":"-"},"content":" public static void assertCommandSuccess(Command command, Model actualModel, CommandResult expectedCommandResult,","lastModifiedDate":"2019-01-25"},{"lineNumber":83,"author":{"gitId":"-"},"content":" Model expectedModel) {","lastModifiedDate":"2019-01-25"},{"lineNumber":84,"author":{"gitId":"-"},"content":" try {","lastModifiedDate":"2017-08-15"},{"lineNumber":85,"author":{"gitId":"-"},"content":" CommandResult result \u003d command.execute(actualModel);","lastModifiedDate":"2019-01-25"},{"lineNumber":86,"author":{"gitId":"-"},"content":" assertEquals(expectedCommandResult, result);","lastModifiedDate":"2018-12-09"},{"lineNumber":87,"author":{"gitId":"-"},"content":" assertEquals(expectedModel, actualModel);","lastModifiedDate":"2017-06-05"},{"lineNumber":88,"author":{"gitId":"-"},"content":" } catch (CommandException ce) {","lastModifiedDate":"2017-08-15"},{"lineNumber":89,"author":{"gitId":"-"},"content":" throw new AssertionError(\"Execution of command should not fail.\", ce);","lastModifiedDate":"2017-08-15"},{"lineNumber":90,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-08-15"},{"lineNumber":91,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-05"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":93,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-12-09"},{"lineNumber":94,"author":{"gitId":"-"},"content":" * Convenience wrapper to {@link #assertCommandSuccess(Command, Model, CommandResult, Model)}","lastModifiedDate":"2019-01-25"},{"lineNumber":95,"author":{"gitId":"-"},"content":" * that takes a string {@code expectedMessage}.","lastModifiedDate":"2018-12-09"},{"lineNumber":96,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-12-09"},{"lineNumber":97,"author":{"gitId":"-"},"content":" public static void assertCommandSuccess(Command command, Model actualModel, String expectedMessage,","lastModifiedDate":"2019-01-25"},{"lineNumber":98,"author":{"gitId":"-"},"content":" Model expectedModel) {","lastModifiedDate":"2019-01-25"},{"lineNumber":99,"author":{"gitId":"-"},"content":" CommandResult expectedCommandResult \u003d new CommandResult(expectedMessage);","lastModifiedDate":"2018-12-09"},{"lineNumber":100,"author":{"gitId":"-"},"content":" assertCommandSuccess(command, actualModel, expectedCommandResult, expectedModel);","lastModifiedDate":"2019-01-25"},{"lineNumber":101,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":102,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":103,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-06-05"},{"lineNumber":104,"author":{"gitId":"-"},"content":" * Executes the given {@code command}, confirms that \u003cbr\u003e","lastModifiedDate":"2017-06-05"},{"lineNumber":105,"author":{"gitId":"-"},"content":" * - a {@code CommandException} is thrown \u003cbr\u003e","lastModifiedDate":"2017-06-05"},{"lineNumber":106,"author":{"gitId":"-"},"content":" * - the CommandException message matches {@code expectedMessage} \u003cbr\u003e","lastModifiedDate":"2017-06-05"},{"lineNumber":107,"author":{"gitId":"-"},"content":" * - the address book, filtered person list and selected person in {@code actualModel} remain unchanged","lastModifiedDate":"2019-01-25"},{"lineNumber":108,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-06-05"},{"lineNumber":109,"author":{"gitId":"-"},"content":" public static void assertCommandFailure(Command command, Model actualModel, String expectedMessage) {","lastModifiedDate":"2019-01-25"},{"lineNumber":110,"author":{"gitId":"-"},"content":" // we are unable to defensively copy the model for comparison later, so we can","lastModifiedDate":"2017-06-05"},{"lineNumber":111,"author":{"gitId":"-"},"content":" // only do so by copying its components.","lastModifiedDate":"2017-06-05"},{"lineNumber":112,"author":{"gitId":"-"},"content":" AddressBook expectedAddressBook \u003d new AddressBook(actualModel.getAddressBook());","lastModifiedDate":"2017-06-05"},{"lineNumber":113,"author":{"gitId":"-"},"content":" List\u003cPerson\u003e expectedFilteredList \u003d new ArrayList\u003c\u003e(actualModel.getFilteredPersonList());","lastModifiedDate":"2018-01-10"},{"lineNumber":114,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":115,"author":{"gitId":"-"},"content":" assertThrows(CommandException.class, expectedMessage, () -\u003e command.execute(actualModel));","lastModifiedDate":"2019-05-03"},{"lineNumber":116,"author":{"gitId":"-"},"content":" assertEquals(expectedAddressBook, actualModel.getAddressBook());","lastModifiedDate":"2017-06-05"},{"lineNumber":117,"author":{"gitId":"-"},"content":" assertEquals(expectedFilteredList, actualModel.getFilteredPersonList());","lastModifiedDate":"2017-06-05"},{"lineNumber":118,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-05"},{"lineNumber":119,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":120,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-20"},{"lineNumber":121,"author":{"gitId":"-"},"content":" * Updates {@code model}\u0027s filtered list to show only the person at the given {@code targetIndex} in the","lastModifiedDate":"2018-01-31"},{"lineNumber":122,"author":{"gitId":"-"},"content":" * {@code model}\u0027s address book.","lastModifiedDate":"2018-01-31"},{"lineNumber":123,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-20"},{"lineNumber":124,"author":{"gitId":"-"},"content":" public static void showPersonAtIndex(Model model, Index targetIndex) {","lastModifiedDate":"2018-01-31"},{"lineNumber":125,"author":{"gitId":"-"},"content":" assertTrue(targetIndex.getZeroBased() \u003c model.getFilteredPersonList().size());","lastModifiedDate":"2018-01-31"},{"lineNumber":126,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-01-31"},{"lineNumber":127,"author":{"gitId":"-"},"content":" Person person \u003d model.getFilteredPersonList().get(targetIndex.getZeroBased());","lastModifiedDate":"2018-01-31"},{"lineNumber":128,"author":{"gitId":"-"},"content":" final String[] splitName \u003d person.getName().fullName.split(\"\\\\s+\");","lastModifiedDate":"2017-07-20"},{"lineNumber":129,"author":{"gitId":"-"},"content":" model.updateFilteredPersonList(new NameContainsKeywordsPredicate(Arrays.asList(splitName[0])));","lastModifiedDate":"2017-07-20"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-20"},{"lineNumber":131,"author":{"gitId":"-"},"content":" assertEquals(1, model.getFilteredPersonList().size());","lastModifiedDate":"2018-02-08"},{"lineNumber":132,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-07-20"},{"lineNumber":133,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":134,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-06-05"}],"authorContributionMap":{"joenus":6,"-":128}},{"path":"src/test/java/seedu/address/logic/commands/EditCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.commands;","lastModifiedDate":"2017-05-08"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-02-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2019-03-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2019-03-15"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.DESC_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND;","lastModifiedDate":"2017-07-05"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.assertCommandFailure;","lastModifiedDate":"2017-07-05"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.assertCommandSuccess;","lastModifiedDate":"2017-07-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.showPersonAtIndex;","lastModifiedDate":"2018-01-31"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON;","lastModifiedDate":"2017-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalIndexes.INDEX_SECOND_PERSON;","lastModifiedDate":"2017-08-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook;","lastModifiedDate":"2017-07-19"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2017-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import seedu.address.logic.Messages;","lastModifiedDate":"2023-07-13"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand.EditPersonDescriptor;","lastModifiedDate":"2017-05-08"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import seedu.address.model.AddressBook;","lastModifiedDate":"2017-05-04"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import seedu.address.model.Model;","lastModifiedDate":"2017-05-04"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import seedu.address.model.ModelManager;","lastModifiedDate":"2017-05-04"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import seedu.address.model.UserPrefs;","lastModifiedDate":"2017-05-04"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2017-05-04"},{"lineNumber":28,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Note;","lastModifiedDate":"2024-03-01"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import seedu.address.testutil.EditPersonDescriptorBuilder;","lastModifiedDate":"2017-05-22"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import seedu.address.testutil.PersonBuilder;","lastModifiedDate":"2017-05-04"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":32,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-05-04"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * Contains integration tests (interaction with the Model) and unit tests for EditCommand.","lastModifiedDate":"2020-12-16"},{"lineNumber":34,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-04"},{"lineNumber":35,"author":{"gitId":"-"},"content":"public class EditCommandTest {","lastModifiedDate":"2017-05-08"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":37,"author":{"gitId":"-"},"content":" private Model model \u003d new ModelManager(getTypicalAddressBook(), new UserPrefs());","lastModifiedDate":"2017-07-19"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":39,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":40,"author":{"gitId":"-"},"content":" public void execute_allFieldsSpecifiedUnfilteredList_success() {","lastModifiedDate":"2018-08-07"},{"lineNumber":41,"author":{"gitId":"joenus"},"content":" PersonBuilder builder \u003d new PersonBuilder();","lastModifiedDate":"2024-03-01"},{"lineNumber":42,"author":{"gitId":"joenus"},"content":" // We must include notes, as notes can\u0027t be modified by the edit command.","lastModifiedDate":"2024-03-01"},{"lineNumber":43,"author":{"gitId":"joenus"},"content":" builder.withNotes(model.getFilteredPersonList().get(0).getNotes().toArray(new Note[0]));","lastModifiedDate":"2024-03-01"},{"lineNumber":44,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":45,"author":{"gitId":"joenus"},"content":" Person editedPerson \u003d builder.build();","lastModifiedDate":"2024-03-01"},{"lineNumber":46,"author":{"gitId":"-"},"content":" EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder(editedPerson).build();","lastModifiedDate":"2017-06-05"},{"lineNumber":47,"author":{"gitId":"-"},"content":" EditCommand editCommand \u003d new EditCommand(INDEX_FIRST_PERSON, descriptor);","lastModifiedDate":"2018-08-08"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":49,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(EditCommand.MESSAGE_EDIT_PERSON_SUCCESS, Messages.format(editedPerson));","lastModifiedDate":"2019-02-23"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":51,"author":{"gitId":"-"},"content":" Model expectedModel \u003d new ModelManager(new AddressBook(model.getAddressBook()), new UserPrefs());","lastModifiedDate":"2017-06-05"},{"lineNumber":52,"author":{"gitId":"-"},"content":" expectedModel.setPerson(model.getFilteredPersonList().get(0), editedPerson);","lastModifiedDate":"2018-08-17"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":54,"author":{"gitId":"-"},"content":" assertCommandSuccess(editCommand, model, expectedMessage, expectedModel);","lastModifiedDate":"2019-01-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":57,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":58,"author":{"gitId":"-"},"content":" public void execute_someFieldsSpecifiedUnfilteredList_success() {","lastModifiedDate":"2018-08-07"},{"lineNumber":59,"author":{"gitId":"-"},"content":" Index indexLastPerson \u003d Index.fromOneBased(model.getFilteredPersonList().size());","lastModifiedDate":"2017-05-18"},{"lineNumber":60,"author":{"gitId":"-"},"content":" Person lastPerson \u003d model.getFilteredPersonList().get(indexLastPerson.getZeroBased());","lastModifiedDate":"2018-01-10"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":62,"author":{"gitId":"-"},"content":" PersonBuilder personInList \u003d new PersonBuilder(lastPerson);","lastModifiedDate":"2017-05-18"},{"lineNumber":63,"author":{"gitId":"-"},"content":" Person editedPerson \u003d personInList.withName(VALID_NAME_BOB).withPhone(VALID_PHONE_BOB)","lastModifiedDate":"2017-05-18"},{"lineNumber":64,"author":{"gitId":"-"},"content":" .withTags(VALID_TAG_HUSBAND).build();","lastModifiedDate":"2017-05-18"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":66,"author":{"gitId":"-"},"content":" EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder().withName(VALID_NAME_BOB)","lastModifiedDate":"2017-05-18"},{"lineNumber":67,"author":{"gitId":"-"},"content":" .withPhone(VALID_PHONE_BOB).withTags(VALID_TAG_HUSBAND).build();","lastModifiedDate":"2017-05-18"},{"lineNumber":68,"author":{"gitId":"-"},"content":" EditCommand editCommand \u003d new EditCommand(indexLastPerson, descriptor);","lastModifiedDate":"2018-08-08"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":70,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(EditCommand.MESSAGE_EDIT_PERSON_SUCCESS, Messages.format(editedPerson));","lastModifiedDate":"2019-02-23"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":72,"author":{"gitId":"-"},"content":" Model expectedModel \u003d new ModelManager(new AddressBook(model.getAddressBook()), new UserPrefs());","lastModifiedDate":"2017-05-18"},{"lineNumber":73,"author":{"gitId":"-"},"content":" expectedModel.setPerson(lastPerson, editedPerson);","lastModifiedDate":"2018-08-17"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":75,"author":{"gitId":"-"},"content":" assertCommandSuccess(editCommand, model, expectedMessage, expectedModel);","lastModifiedDate":"2019-01-25"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-18"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":78,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-18"},{"lineNumber":79,"author":{"gitId":"-"},"content":" public void execute_noFieldSpecifiedUnfilteredList_success() {","lastModifiedDate":"2017-08-15"},{"lineNumber":80,"author":{"gitId":"-"},"content":" EditCommand editCommand \u003d new EditCommand(INDEX_FIRST_PERSON, new EditPersonDescriptor());","lastModifiedDate":"2018-08-08"},{"lineNumber":81,"author":{"gitId":"-"},"content":" Person editedPerson \u003d model.getFilteredPersonList().get(INDEX_FIRST_PERSON.getZeroBased());","lastModifiedDate":"2018-01-10"},{"lineNumber":82,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":83,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(EditCommand.MESSAGE_EDIT_PERSON_SUCCESS, Messages.format(editedPerson));","lastModifiedDate":"2019-02-23"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":85,"author":{"gitId":"-"},"content":" Model expectedModel \u003d new ModelManager(new AddressBook(model.getAddressBook()), new UserPrefs());","lastModifiedDate":"2017-05-18"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":87,"author":{"gitId":"-"},"content":" assertCommandSuccess(editCommand, model, expectedMessage, expectedModel);","lastModifiedDate":"2019-01-25"},{"lineNumber":88,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-18"},{"lineNumber":89,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":90,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-18"},{"lineNumber":91,"author":{"gitId":"-"},"content":" public void execute_filteredList_success() {","lastModifiedDate":"2018-08-07"},{"lineNumber":92,"author":{"gitId":"-"},"content":" showPersonAtIndex(model, INDEX_FIRST_PERSON);","lastModifiedDate":"2018-01-31"},{"lineNumber":93,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":94,"author":{"gitId":"-"},"content":" Person personInFilteredList \u003d model.getFilteredPersonList().get(INDEX_FIRST_PERSON.getZeroBased());","lastModifiedDate":"2018-01-10"},{"lineNumber":95,"author":{"gitId":"-"},"content":" Person editedPerson \u003d new PersonBuilder(personInFilteredList).withName(VALID_NAME_BOB).build();","lastModifiedDate":"2017-05-18"},{"lineNumber":96,"author":{"gitId":"-"},"content":" EditCommand editCommand \u003d new EditCommand(INDEX_FIRST_PERSON,","lastModifiedDate":"2018-08-08"},{"lineNumber":97,"author":{"gitId":"-"},"content":" new EditPersonDescriptorBuilder().withName(VALID_NAME_BOB).build());","lastModifiedDate":"2017-05-18"},{"lineNumber":98,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":99,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(EditCommand.MESSAGE_EDIT_PERSON_SUCCESS, Messages.format(editedPerson));","lastModifiedDate":"2019-02-23"},{"lineNumber":100,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":101,"author":{"gitId":"-"},"content":" Model expectedModel \u003d new ModelManager(new AddressBook(model.getAddressBook()), new UserPrefs());","lastModifiedDate":"2017-05-18"},{"lineNumber":102,"author":{"gitId":"-"},"content":" expectedModel.setPerson(model.getFilteredPersonList().get(0), editedPerson);","lastModifiedDate":"2018-08-17"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":104,"author":{"gitId":"-"},"content":" assertCommandSuccess(editCommand, model, expectedMessage, expectedModel);","lastModifiedDate":"2019-01-25"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-18"},{"lineNumber":106,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":107,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-18"},{"lineNumber":108,"author":{"gitId":"-"},"content":" public void execute_duplicatePersonUnfilteredList_failure() {","lastModifiedDate":"2017-08-15"},{"lineNumber":109,"author":{"gitId":"-"},"content":" Person firstPerson \u003d model.getFilteredPersonList().get(INDEX_FIRST_PERSON.getZeroBased());","lastModifiedDate":"2018-01-10"},{"lineNumber":110,"author":{"gitId":"-"},"content":" EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder(firstPerson).build();","lastModifiedDate":"2017-06-05"},{"lineNumber":111,"author":{"gitId":"-"},"content":" EditCommand editCommand \u003d new EditCommand(INDEX_SECOND_PERSON, descriptor);","lastModifiedDate":"2018-08-08"},{"lineNumber":112,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":113,"author":{"gitId":"-"},"content":" assertCommandFailure(editCommand, model, EditCommand.MESSAGE_DUPLICATE_PERSON);","lastModifiedDate":"2019-01-25"},{"lineNumber":114,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":115,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":116,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":117,"author":{"gitId":"-"},"content":" public void execute_duplicatePersonFilteredList_failure() {","lastModifiedDate":"2017-08-15"},{"lineNumber":118,"author":{"gitId":"-"},"content":" showPersonAtIndex(model, INDEX_FIRST_PERSON);","lastModifiedDate":"2018-01-31"},{"lineNumber":119,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":120,"author":{"gitId":"-"},"content":" // edit person in filtered list into a duplicate in address book","lastModifiedDate":"2017-05-18"},{"lineNumber":121,"author":{"gitId":"-"},"content":" Person personInList \u003d model.getAddressBook().getPersonList().get(INDEX_SECOND_PERSON.getZeroBased());","lastModifiedDate":"2018-01-10"},{"lineNumber":122,"author":{"gitId":"-"},"content":" EditCommand editCommand \u003d new EditCommand(INDEX_FIRST_PERSON,","lastModifiedDate":"2018-08-08"},{"lineNumber":123,"author":{"gitId":"-"},"content":" new EditPersonDescriptorBuilder(personInList).build());","lastModifiedDate":"2017-05-18"},{"lineNumber":124,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":125,"author":{"gitId":"-"},"content":" assertCommandFailure(editCommand, model, EditCommand.MESSAGE_DUPLICATE_PERSON);","lastModifiedDate":"2019-01-25"},{"lineNumber":126,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-18"},{"lineNumber":127,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":128,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-18"},{"lineNumber":129,"author":{"gitId":"-"},"content":" public void execute_invalidPersonIndexUnfilteredList_failure() {","lastModifiedDate":"2017-08-15"},{"lineNumber":130,"author":{"gitId":"-"},"content":" Index outOfBoundIndex \u003d Index.fromOneBased(model.getFilteredPersonList().size() + 1);","lastModifiedDate":"2017-05-18"},{"lineNumber":131,"author":{"gitId":"-"},"content":" EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder().withName(VALID_NAME_BOB).build();","lastModifiedDate":"2017-05-22"},{"lineNumber":132,"author":{"gitId":"-"},"content":" EditCommand editCommand \u003d new EditCommand(outOfBoundIndex, descriptor);","lastModifiedDate":"2018-08-08"},{"lineNumber":133,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":134,"author":{"gitId":"-"},"content":" assertCommandFailure(editCommand, model, Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX);","lastModifiedDate":"2019-01-25"},{"lineNumber":135,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":137,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-18"},{"lineNumber":138,"author":{"gitId":"-"},"content":" * Edit filtered list where index is larger than size of filtered list,","lastModifiedDate":"2017-05-18"},{"lineNumber":139,"author":{"gitId":"-"},"content":" * but smaller than size of address book","lastModifiedDate":"2017-05-18"},{"lineNumber":140,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-18"},{"lineNumber":141,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-18"},{"lineNumber":142,"author":{"gitId":"-"},"content":" public void execute_invalidPersonIndexFilteredList_failure() {","lastModifiedDate":"2017-08-15"},{"lineNumber":143,"author":{"gitId":"-"},"content":" showPersonAtIndex(model, INDEX_FIRST_PERSON);","lastModifiedDate":"2018-01-31"},{"lineNumber":144,"author":{"gitId":"-"},"content":" Index outOfBoundIndex \u003d INDEX_SECOND_PERSON;","lastModifiedDate":"2017-05-18"},{"lineNumber":145,"author":{"gitId":"-"},"content":" // ensures that outOfBoundIndex is still in bounds of address book list","lastModifiedDate":"2017-05-18"},{"lineNumber":146,"author":{"gitId":"-"},"content":" assertTrue(outOfBoundIndex.getZeroBased() \u003c model.getAddressBook().getPersonList().size());","lastModifiedDate":"2017-05-18"},{"lineNumber":147,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":148,"author":{"gitId":"-"},"content":" EditCommand editCommand \u003d new EditCommand(outOfBoundIndex,","lastModifiedDate":"2018-08-08"},{"lineNumber":149,"author":{"gitId":"-"},"content":" new EditPersonDescriptorBuilder().withName(VALID_NAME_BOB).build());","lastModifiedDate":"2017-05-18"},{"lineNumber":150,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":151,"author":{"gitId":"-"},"content":" assertCommandFailure(editCommand, model, Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX);","lastModifiedDate":"2019-01-25"},{"lineNumber":152,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-18"},{"lineNumber":153,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":154,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-01-23"},{"lineNumber":155,"author":{"gitId":"-"},"content":" public void equals() {","lastModifiedDate":"2018-08-08"},{"lineNumber":156,"author":{"gitId":"-"},"content":" final EditCommand standardCommand \u003d new EditCommand(INDEX_FIRST_PERSON, DESC_AMY);","lastModifiedDate":"2018-08-08"},{"lineNumber":157,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":158,"author":{"gitId":"-"},"content":" // same values -\u003e returns true","lastModifiedDate":"2017-05-08"},{"lineNumber":159,"author":{"gitId":"-"},"content":" EditPersonDescriptor copyDescriptor \u003d new EditPersonDescriptor(DESC_AMY);","lastModifiedDate":"2017-05-08"},{"lineNumber":160,"author":{"gitId":"-"},"content":" EditCommand commandWithSameValues \u003d new EditCommand(INDEX_FIRST_PERSON, copyDescriptor);","lastModifiedDate":"2018-08-08"},{"lineNumber":161,"author":{"gitId":"-"},"content":" assertTrue(standardCommand.equals(commandWithSameValues));","lastModifiedDate":"2017-05-08"},{"lineNumber":162,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":163,"author":{"gitId":"-"},"content":" // same object -\u003e returns true","lastModifiedDate":"2017-05-08"},{"lineNumber":164,"author":{"gitId":"-"},"content":" assertTrue(standardCommand.equals(standardCommand));","lastModifiedDate":"2017-05-08"},{"lineNumber":165,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":166,"author":{"gitId":"-"},"content":" // null -\u003e returns false","lastModifiedDate":"2017-05-08"},{"lineNumber":167,"author":{"gitId":"-"},"content":" assertFalse(standardCommand.equals(null));","lastModifiedDate":"2017-05-08"},{"lineNumber":168,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":169,"author":{"gitId":"-"},"content":" // different types -\u003e returns false","lastModifiedDate":"2017-05-08"},{"lineNumber":170,"author":{"gitId":"-"},"content":" assertFalse(standardCommand.equals(new ClearCommand()));","lastModifiedDate":"2017-05-08"},{"lineNumber":171,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":172,"author":{"gitId":"-"},"content":" // different index -\u003e returns false","lastModifiedDate":"2017-05-08"},{"lineNumber":173,"author":{"gitId":"-"},"content":" assertFalse(standardCommand.equals(new EditCommand(INDEX_SECOND_PERSON, DESC_AMY)));","lastModifiedDate":"2017-05-25"},{"lineNumber":174,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":175,"author":{"gitId":"-"},"content":" // different descriptor -\u003e returns false","lastModifiedDate":"2017-05-08"},{"lineNumber":176,"author":{"gitId":"-"},"content":" assertFalse(standardCommand.equals(new EditCommand(INDEX_FIRST_PERSON, DESC_BOB)));","lastModifiedDate":"2017-05-25"},{"lineNumber":177,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-08"},{"lineNumber":178,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":179,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2019-02-23"},{"lineNumber":180,"author":{"gitId":"-"},"content":" public void toStringMethod() {","lastModifiedDate":"2019-02-23"},{"lineNumber":181,"author":{"gitId":"-"},"content":" Index index \u003d Index.fromOneBased(1);","lastModifiedDate":"2019-02-23"},{"lineNumber":182,"author":{"gitId":"-"},"content":" EditPersonDescriptor editPersonDescriptor \u003d new EditPersonDescriptor();","lastModifiedDate":"2019-02-23"},{"lineNumber":183,"author":{"gitId":"-"},"content":" EditCommand editCommand \u003d new EditCommand(index, editPersonDescriptor);","lastModifiedDate":"2019-02-23"},{"lineNumber":184,"author":{"gitId":"-"},"content":" String expected \u003d EditCommand.class.getCanonicalName() + \"{index\u003d\" + index + \", editPersonDescriptor\u003d\"","lastModifiedDate":"2019-02-23"},{"lineNumber":185,"author":{"gitId":"-"},"content":" + editPersonDescriptor + \"}\";","lastModifiedDate":"2019-02-23"},{"lineNumber":186,"author":{"gitId":"-"},"content":" assertEquals(expected, editCommand.toString());","lastModifiedDate":"2019-02-23"},{"lineNumber":187,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":188,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":189,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-05-08"}],"authorContributionMap":{"joenus":6,"-":183}},{"path":"src/test/java/seedu/address/logic/commands/EditPersonDescriptorTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.commands;","lastModifiedDate":"2017-05-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-02-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2019-03-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2019-03-15"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.DESC_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND;","lastModifiedDate":"2017-07-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand.EditPersonDescriptor;","lastModifiedDate":"2017-05-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.testutil.EditPersonDescriptorBuilder;","lastModifiedDate":"2017-05-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"public class EditPersonDescriptorTest {","lastModifiedDate":"2017-05-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":" public void equals() {","lastModifiedDate":"2017-08-15"},{"lineNumber":23,"author":{"gitId":"-"},"content":" // same values -\u003e returns true","lastModifiedDate":"2017-05-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":" EditPersonDescriptor descriptorWithSameValues \u003d new EditPersonDescriptor(DESC_AMY);","lastModifiedDate":"2017-05-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":" assertTrue(DESC_AMY.equals(descriptorWithSameValues));","lastModifiedDate":"2017-05-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":27,"author":{"gitId":"-"},"content":" // same object -\u003e returns true","lastModifiedDate":"2017-05-05"},{"lineNumber":28,"author":{"gitId":"-"},"content":" assertTrue(DESC_AMY.equals(DESC_AMY));","lastModifiedDate":"2017-05-05"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":30,"author":{"gitId":"-"},"content":" // null -\u003e returns false","lastModifiedDate":"2017-05-05"},{"lineNumber":31,"author":{"gitId":"-"},"content":" assertFalse(DESC_AMY.equals(null));","lastModifiedDate":"2017-05-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":" // different types -\u003e returns false","lastModifiedDate":"2017-05-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":" assertFalse(DESC_AMY.equals(5));","lastModifiedDate":"2017-05-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":36,"author":{"gitId":"-"},"content":" // different values -\u003e returns false","lastModifiedDate":"2017-05-05"},{"lineNumber":37,"author":{"gitId":"-"},"content":" assertFalse(DESC_AMY.equals(DESC_BOB));","lastModifiedDate":"2017-05-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":" // different name -\u003e returns false","lastModifiedDate":"2017-05-05"},{"lineNumber":40,"author":{"gitId":"-"},"content":" EditPersonDescriptor editedAmy \u003d new EditPersonDescriptorBuilder(DESC_AMY).withName(VALID_NAME_BOB).build();","lastModifiedDate":"2017-05-05"},{"lineNumber":41,"author":{"gitId":"-"},"content":" assertFalse(DESC_AMY.equals(editedAmy));","lastModifiedDate":"2017-05-05"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":" // different phone -\u003e returns false","lastModifiedDate":"2017-05-05"},{"lineNumber":44,"author":{"gitId":"-"},"content":" editedAmy \u003d new EditPersonDescriptorBuilder(DESC_AMY).withPhone(VALID_PHONE_BOB).build();","lastModifiedDate":"2017-05-05"},{"lineNumber":45,"author":{"gitId":"-"},"content":" assertFalse(DESC_AMY.equals(editedAmy));","lastModifiedDate":"2017-05-05"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":47,"author":{"gitId":"-"},"content":" // different email -\u003e returns false","lastModifiedDate":"2017-05-05"},{"lineNumber":48,"author":{"gitId":"-"},"content":" editedAmy \u003d new EditPersonDescriptorBuilder(DESC_AMY).withEmail(VALID_EMAIL_BOB).build();","lastModifiedDate":"2017-05-05"},{"lineNumber":49,"author":{"gitId":"-"},"content":" assertFalse(DESC_AMY.equals(editedAmy));","lastModifiedDate":"2017-05-05"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":51,"author":{"gitId":"-"},"content":" // different address -\u003e returns false","lastModifiedDate":"2017-05-05"},{"lineNumber":52,"author":{"gitId":"-"},"content":" editedAmy \u003d new EditPersonDescriptorBuilder(DESC_AMY).withAddress(VALID_ADDRESS_BOB).build();","lastModifiedDate":"2017-05-05"},{"lineNumber":53,"author":{"gitId":"-"},"content":" assertFalse(DESC_AMY.equals(editedAmy));","lastModifiedDate":"2017-05-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":55,"author":{"gitId":"-"},"content":" // different tags -\u003e returns false","lastModifiedDate":"2017-05-05"},{"lineNumber":56,"author":{"gitId":"-"},"content":" editedAmy \u003d new EditPersonDescriptorBuilder(DESC_AMY).withTags(VALID_TAG_HUSBAND).build();","lastModifiedDate":"2017-05-05"},{"lineNumber":57,"author":{"gitId":"-"},"content":" assertFalse(DESC_AMY.equals(editedAmy));","lastModifiedDate":"2017-05-05"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":60,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2019-02-23"},{"lineNumber":61,"author":{"gitId":"-"},"content":" public void toStringMethod() {","lastModifiedDate":"2019-02-23"},{"lineNumber":62,"author":{"gitId":"-"},"content":" EditPersonDescriptor editPersonDescriptor \u003d new EditPersonDescriptor();","lastModifiedDate":"2019-02-23"},{"lineNumber":63,"author":{"gitId":"-"},"content":" String expected \u003d EditPersonDescriptor.class.getCanonicalName() + \"{name\u003d\"","lastModifiedDate":"2019-02-23"},{"lineNumber":64,"author":{"gitId":"-"},"content":" + editPersonDescriptor.getName().orElse(null) + \", phone\u003d\"","lastModifiedDate":"2019-02-23"},{"lineNumber":65,"author":{"gitId":"-"},"content":" + editPersonDescriptor.getPhone().orElse(null) + \", email\u003d\"","lastModifiedDate":"2019-02-23"},{"lineNumber":66,"author":{"gitId":"-"},"content":" + editPersonDescriptor.getEmail().orElse(null) + \", address\u003d\"","lastModifiedDate":"2019-02-23"},{"lineNumber":67,"author":{"gitId":"-"},"content":" + editPersonDescriptor.getAddress().orElse(null) + \", tags\u003d\"","lastModifiedDate":"2019-02-23"},{"lineNumber":68,"author":{"gitId":"-"},"content":" + editPersonDescriptor.getTags().orElse(null) + \"}\";","lastModifiedDate":"2019-02-23"},{"lineNumber":69,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":70,"author":{"gitId":"-"},"content":" assertEquals(expected, editPersonDescriptor.toString());","lastModifiedDate":"2019-02-23"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":72,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-05-05"}],"authorContributionMap":{"joenus":1,"-":71}},{"path":"src/test/java/seedu/address/logic/parser/AddCommandParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-06-15"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-07-13"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.ADDRESS_DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.ADDRESS_DESC_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.EMAIL_DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.EMAIL_DESC_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_ADDRESS_DESC;","lastModifiedDate":"2017-07-05"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_EMAIL_DESC;","lastModifiedDate":"2017-07-05"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_NAME_DESC;","lastModifiedDate":"2017-07-05"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_PHONE_DESC;","lastModifiedDate":"2017-07-05"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_TAG_DESC;","lastModifiedDate":"2017-07-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.NAME_DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.NAME_DESC_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.PHONE_DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.PHONE_DESC_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.PREAMBLE_NON_EMPTY;","lastModifiedDate":"2017-12-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.PREAMBLE_WHITESPACE;","lastModifiedDate":"2017-12-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.TAG_DESC_FRIEND;","lastModifiedDate":"2017-07-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.TAG_DESC_HUSBAND;","lastModifiedDate":"2017-07-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_FRIEND;","lastModifiedDate":"2017-07-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND;","lastModifiedDate":"2017-07-05"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2023-07-14"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2023-07-14"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2023-07-14"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2023-07-14"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CommandParserTestUtil.assertParseFailure;","lastModifiedDate":"2017-07-06"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CommandParserTestUtil.assertParseSuccess;","lastModifiedDate":"2017-07-06"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.AMY;","lastModifiedDate":"2018-07-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.BOB;","lastModifiedDate":"2018-07-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":36,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":38,"author":{"gitId":"-"},"content":"import seedu.address.logic.Messages;","lastModifiedDate":"2023-07-14"},{"lineNumber":39,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.AddCommand;","lastModifiedDate":"2017-06-15"},{"lineNumber":40,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2017-06-15"},{"lineNumber":41,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2017-06-15"},{"lineNumber":42,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2017-06-15"},{"lineNumber":43,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2017-06-15"},{"lineNumber":44,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2017-06-15"},{"lineNumber":45,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.tag.Tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":46,"author":{"gitId":"-"},"content":"import seedu.address.testutil.PersonBuilder;","lastModifiedDate":"2017-06-15"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":48,"author":{"gitId":"-"},"content":"public class AddCommandParserTest {","lastModifiedDate":"2017-06-15"},{"lineNumber":49,"author":{"gitId":"-"},"content":" private AddCommandParser parser \u003d new AddCommandParser();","lastModifiedDate":"2017-06-15"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":51,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-15"},{"lineNumber":52,"author":{"gitId":"-"},"content":" public void parse_allFieldsPresent_success() {","lastModifiedDate":"2017-08-15"},{"lineNumber":53,"author":{"gitId":"-"},"content":" Person expectedPerson \u003d new PersonBuilder(BOB).withTags(VALID_TAG_FRIEND).build();","lastModifiedDate":"2018-07-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":55,"author":{"gitId":"-"},"content":" // whitespace only preamble","lastModifiedDate":"2017-12-23"},{"lineNumber":56,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, PREAMBLE_WHITESPACE + NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB","lastModifiedDate":"2017-12-23"},{"lineNumber":57,"author":{"gitId":"-"},"content":" + ADDRESS_DESC_BOB + TAG_DESC_FRIEND, new AddCommand(expectedPerson));","lastModifiedDate":"2017-12-23"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-23"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":60,"author":{"gitId":"-"},"content":" // multiple tags - all accepted","lastModifiedDate":"2017-06-15"},{"lineNumber":61,"author":{"gitId":"-"},"content":" Person expectedPersonMultipleTags \u003d new PersonBuilder(BOB).withTags(VALID_TAG_FRIEND, VALID_TAG_HUSBAND)","lastModifiedDate":"2018-07-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" .build();","lastModifiedDate":"2018-07-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":" assertParseSuccess(parser,","lastModifiedDate":"2023-07-14"},{"lineNumber":64,"author":{"gitId":"-"},"content":" NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + ADDRESS_DESC_BOB + TAG_DESC_HUSBAND + TAG_DESC_FRIEND,","lastModifiedDate":"2023-07-14"},{"lineNumber":65,"author":{"gitId":"-"},"content":" new AddCommand(expectedPersonMultipleTags));","lastModifiedDate":"2023-07-14"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-14"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":68,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-07-14"},{"lineNumber":69,"author":{"gitId":"-"},"content":" public void parse_repeatedNonTagValue_failure() {","lastModifiedDate":"2023-07-14"},{"lineNumber":70,"author":{"gitId":"-"},"content":" String validExpectedPersonString \u003d NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB","lastModifiedDate":"2023-07-14"},{"lineNumber":71,"author":{"gitId":"-"},"content":" + ADDRESS_DESC_BOB + TAG_DESC_FRIEND;","lastModifiedDate":"2023-07-14"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":73,"author":{"gitId":"-"},"content":" // multiple names","lastModifiedDate":"2023-07-14"},{"lineNumber":74,"author":{"gitId":"-"},"content":" assertParseFailure(parser, NAME_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":75,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_NAME));","lastModifiedDate":"2023-07-14"},{"lineNumber":76,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":77,"author":{"gitId":"-"},"content":" // multiple phones","lastModifiedDate":"2023-07-14"},{"lineNumber":78,"author":{"gitId":"-"},"content":" assertParseFailure(parser, PHONE_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":79,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE));","lastModifiedDate":"2023-07-14"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":81,"author":{"gitId":"-"},"content":" // multiple emails","lastModifiedDate":"2023-07-14"},{"lineNumber":82,"author":{"gitId":"-"},"content":" assertParseFailure(parser, EMAIL_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":83,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_EMAIL));","lastModifiedDate":"2023-07-14"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":85,"author":{"gitId":"-"},"content":" // multiple addresses","lastModifiedDate":"2023-07-14"},{"lineNumber":86,"author":{"gitId":"-"},"content":" assertParseFailure(parser, ADDRESS_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":87,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_ADDRESS));","lastModifiedDate":"2023-07-14"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":89,"author":{"gitId":"-"},"content":" // multiple fields repeated","lastModifiedDate":"2023-07-14"},{"lineNumber":90,"author":{"gitId":"-"},"content":" assertParseFailure(parser,","lastModifiedDate":"2023-07-14"},{"lineNumber":91,"author":{"gitId":"-"},"content":" validExpectedPersonString + PHONE_DESC_AMY + EMAIL_DESC_AMY + NAME_DESC_AMY + ADDRESS_DESC_AMY","lastModifiedDate":"2023-07-14"},{"lineNumber":92,"author":{"gitId":"-"},"content":" + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":93,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_NAME, PREFIX_ADDRESS, PREFIX_EMAIL, PREFIX_PHONE));","lastModifiedDate":"2023-07-14"},{"lineNumber":94,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":95,"author":{"gitId":"-"},"content":" // invalid value followed by valid value","lastModifiedDate":"2023-07-14"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":97,"author":{"gitId":"-"},"content":" // invalid name","lastModifiedDate":"2023-07-14"},{"lineNumber":98,"author":{"gitId":"-"},"content":" assertParseFailure(parser, INVALID_NAME_DESC + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":99,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_NAME));","lastModifiedDate":"2023-07-14"},{"lineNumber":100,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":101,"author":{"gitId":"-"},"content":" // invalid email","lastModifiedDate":"2023-07-14"},{"lineNumber":102,"author":{"gitId":"-"},"content":" assertParseFailure(parser, INVALID_EMAIL_DESC + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":103,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_EMAIL));","lastModifiedDate":"2023-07-14"},{"lineNumber":104,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":105,"author":{"gitId":"-"},"content":" // invalid phone","lastModifiedDate":"2023-07-14"},{"lineNumber":106,"author":{"gitId":"-"},"content":" assertParseFailure(parser, INVALID_PHONE_DESC + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":107,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE));","lastModifiedDate":"2023-07-14"},{"lineNumber":108,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":109,"author":{"gitId":"-"},"content":" // invalid address","lastModifiedDate":"2023-07-14"},{"lineNumber":110,"author":{"gitId":"-"},"content":" assertParseFailure(parser, INVALID_ADDRESS_DESC + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":111,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_ADDRESS));","lastModifiedDate":"2023-07-14"},{"lineNumber":112,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":113,"author":{"gitId":"-"},"content":" // valid value followed by invalid value","lastModifiedDate":"2023-07-14"},{"lineNumber":114,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":115,"author":{"gitId":"-"},"content":" // invalid name","lastModifiedDate":"2023-07-14"},{"lineNumber":116,"author":{"gitId":"-"},"content":" assertParseFailure(parser, validExpectedPersonString + INVALID_NAME_DESC,","lastModifiedDate":"2023-07-14"},{"lineNumber":117,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_NAME));","lastModifiedDate":"2023-07-14"},{"lineNumber":118,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":119,"author":{"gitId":"-"},"content":" // invalid email","lastModifiedDate":"2023-07-14"},{"lineNumber":120,"author":{"gitId":"-"},"content":" assertParseFailure(parser, validExpectedPersonString + INVALID_EMAIL_DESC,","lastModifiedDate":"2023-07-14"},{"lineNumber":121,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_EMAIL));","lastModifiedDate":"2023-07-14"},{"lineNumber":122,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":123,"author":{"gitId":"-"},"content":" // invalid phone","lastModifiedDate":"2023-07-14"},{"lineNumber":124,"author":{"gitId":"-"},"content":" assertParseFailure(parser, validExpectedPersonString + INVALID_PHONE_DESC,","lastModifiedDate":"2023-07-14"},{"lineNumber":125,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE));","lastModifiedDate":"2023-07-14"},{"lineNumber":126,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":127,"author":{"gitId":"-"},"content":" // invalid address","lastModifiedDate":"2023-07-14"},{"lineNumber":128,"author":{"gitId":"-"},"content":" assertParseFailure(parser, validExpectedPersonString + INVALID_ADDRESS_DESC,","lastModifiedDate":"2023-07-14"},{"lineNumber":129,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_ADDRESS));","lastModifiedDate":"2023-07-14"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-15"},{"lineNumber":131,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":132,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-15"},{"lineNumber":133,"author":{"gitId":"-"},"content":" public void parse_optionalFieldsMissing_success() {","lastModifiedDate":"2017-08-15"},{"lineNumber":134,"author":{"gitId":"-"},"content":" // zero tags","lastModifiedDate":"2017-06-15"},{"lineNumber":135,"author":{"gitId":"-"},"content":" Person expectedPerson \u003d new PersonBuilder(AMY).withTags().build();","lastModifiedDate":"2018-07-25"},{"lineNumber":136,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, NAME_DESC_AMY + PHONE_DESC_AMY + EMAIL_DESC_AMY + ADDRESS_DESC_AMY,","lastModifiedDate":"2017-12-23"},{"lineNumber":137,"author":{"gitId":"-"},"content":" new AddCommand(expectedPerson));","lastModifiedDate":"2017-12-23"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-15"},{"lineNumber":139,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":140,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-15"},{"lineNumber":141,"author":{"gitId":"-"},"content":" public void parse_compulsoryFieldMissing_failure() {","lastModifiedDate":"2017-06-15"},{"lineNumber":142,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddCommand.MESSAGE_USAGE);","lastModifiedDate":"2017-06-15"},{"lineNumber":143,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":144,"author":{"gitId":"-"},"content":" // missing name prefix","lastModifiedDate":"2017-06-15"},{"lineNumber":145,"author":{"gitId":"-"},"content":" assertParseFailure(parser, VALID_NAME_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + ADDRESS_DESC_BOB,","lastModifiedDate":"2017-12-23"},{"lineNumber":146,"author":{"gitId":"-"},"content":" expectedMessage);","lastModifiedDate":"2017-12-23"},{"lineNumber":147,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":148,"author":{"gitId":"-"},"content":" // missing phone prefix","lastModifiedDate":"2017-06-15"},{"lineNumber":149,"author":{"gitId":"-"},"content":" assertParseFailure(parser, NAME_DESC_BOB + VALID_PHONE_BOB + EMAIL_DESC_BOB + ADDRESS_DESC_BOB,","lastModifiedDate":"2017-12-23"},{"lineNumber":150,"author":{"gitId":"-"},"content":" expectedMessage);","lastModifiedDate":"2017-12-23"},{"lineNumber":151,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":152,"author":{"gitId":"-"},"content":" // missing email prefix","lastModifiedDate":"2017-06-15"},{"lineNumber":153,"author":{"gitId":"-"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + VALID_EMAIL_BOB + ADDRESS_DESC_BOB,","lastModifiedDate":"2017-12-23"},{"lineNumber":154,"author":{"gitId":"-"},"content":" expectedMessage);","lastModifiedDate":"2017-12-23"},{"lineNumber":155,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":156,"author":{"gitId":"-"},"content":" // missing address prefix","lastModifiedDate":"2017-06-15"},{"lineNumber":157,"author":{"gitId":"-"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + VALID_ADDRESS_BOB,","lastModifiedDate":"2017-12-23"},{"lineNumber":158,"author":{"gitId":"-"},"content":" expectedMessage);","lastModifiedDate":"2017-12-23"},{"lineNumber":159,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":160,"author":{"gitId":"-"},"content":" // all prefixes missing","lastModifiedDate":"2017-06-15"},{"lineNumber":161,"author":{"gitId":"-"},"content":" assertParseFailure(parser, VALID_NAME_BOB + VALID_PHONE_BOB + VALID_EMAIL_BOB + VALID_ADDRESS_BOB,","lastModifiedDate":"2017-12-23"},{"lineNumber":162,"author":{"gitId":"-"},"content":" expectedMessage);","lastModifiedDate":"2017-12-23"},{"lineNumber":163,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-15"},{"lineNumber":164,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":165,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-15"},{"lineNumber":166,"author":{"gitId":"-"},"content":" public void parse_invalidValue_failure() {","lastModifiedDate":"2017-06-15"},{"lineNumber":167,"author":{"gitId":"-"},"content":" // invalid name","lastModifiedDate":"2017-06-15"},{"lineNumber":168,"author":{"gitId":"-"},"content":" assertParseFailure(parser, INVALID_NAME_DESC + PHONE_DESC_BOB + EMAIL_DESC_BOB + ADDRESS_DESC_BOB","lastModifiedDate":"2017-12-23"},{"lineNumber":169,"author":{"gitId":"-"},"content":" + TAG_DESC_HUSBAND + TAG_DESC_FRIEND, Name.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":170,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":171,"author":{"gitId":"-"},"content":" // invalid phone","lastModifiedDate":"2017-06-15"},{"lineNumber":172,"author":{"gitId":"-"},"content":" assertParseFailure(parser, NAME_DESC_BOB + INVALID_PHONE_DESC + EMAIL_DESC_BOB + ADDRESS_DESC_BOB","lastModifiedDate":"2017-12-23"},{"lineNumber":173,"author":{"gitId":"-"},"content":" + TAG_DESC_HUSBAND + TAG_DESC_FRIEND, Phone.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":174,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":175,"author":{"gitId":"-"},"content":" // invalid email","lastModifiedDate":"2017-06-15"},{"lineNumber":176,"author":{"gitId":"-"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + INVALID_EMAIL_DESC + ADDRESS_DESC_BOB","lastModifiedDate":"2017-12-23"},{"lineNumber":177,"author":{"gitId":"-"},"content":" + TAG_DESC_HUSBAND + TAG_DESC_FRIEND, Email.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":178,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":179,"author":{"gitId":"-"},"content":" // invalid address","lastModifiedDate":"2017-06-15"},{"lineNumber":180,"author":{"gitId":"-"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + INVALID_ADDRESS_DESC","lastModifiedDate":"2017-12-23"},{"lineNumber":181,"author":{"gitId":"-"},"content":" + TAG_DESC_HUSBAND + TAG_DESC_FRIEND, Address.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":182,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":183,"author":{"gitId":"-"},"content":" // invalid tag","lastModifiedDate":"2017-06-15"},{"lineNumber":184,"author":{"gitId":"-"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + ADDRESS_DESC_BOB","lastModifiedDate":"2017-12-23"},{"lineNumber":185,"author":{"gitId":"-"},"content":" + INVALID_TAG_DESC + VALID_TAG_FRIEND, Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":186,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":187,"author":{"gitId":"-"},"content":" // two invalid values, only first invalid value reported","lastModifiedDate":"2017-06-15"},{"lineNumber":188,"author":{"gitId":"-"},"content":" assertParseFailure(parser, INVALID_NAME_DESC + PHONE_DESC_BOB + EMAIL_DESC_BOB + INVALID_ADDRESS_DESC,","lastModifiedDate":"2017-12-23"},{"lineNumber":189,"author":{"gitId":"-"},"content":" Name.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":190,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-23"},{"lineNumber":191,"author":{"gitId":"-"},"content":" // non-empty preamble","lastModifiedDate":"2017-12-23"},{"lineNumber":192,"author":{"gitId":"-"},"content":" assertParseFailure(parser, PREAMBLE_NON_EMPTY + NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB","lastModifiedDate":"2017-12-23"},{"lineNumber":193,"author":{"gitId":"-"},"content":" + ADDRESS_DESC_BOB + TAG_DESC_HUSBAND + TAG_DESC_FRIEND,","lastModifiedDate":"2017-12-23"},{"lineNumber":194,"author":{"gitId":"-"},"content":" String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddCommand.MESSAGE_USAGE));","lastModifiedDate":"2017-12-23"},{"lineNumber":195,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-15"},{"lineNumber":196,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-06-15"}],"authorContributionMap":{"joenus":1,"-":195}},{"path":"src/test/java/seedu/address/logic/parser/EditCommandParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-05-04"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-07-13"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.ADDRESS_DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.ADDRESS_DESC_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.EMAIL_DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.EMAIL_DESC_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_ADDRESS_DESC;","lastModifiedDate":"2017-07-05"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_EMAIL_DESC;","lastModifiedDate":"2017-07-05"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_NAME_DESC;","lastModifiedDate":"2017-07-05"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_PHONE_DESC;","lastModifiedDate":"2017-07-05"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_TAG_DESC;","lastModifiedDate":"2017-07-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.NAME_DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.PHONE_DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.PHONE_DESC_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.TAG_DESC_FRIEND;","lastModifiedDate":"2017-07-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.TAG_DESC_HUSBAND;","lastModifiedDate":"2017-07-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_FRIEND;","lastModifiedDate":"2017-07-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND;","lastModifiedDate":"2017-07-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2023-07-14"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2023-07-14"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2023-07-14"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2017-05-04"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CommandParserTestUtil.assertParseFailure;","lastModifiedDate":"2017-07-06"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CommandParserTestUtil.assertParseSuccess;","lastModifiedDate":"2017-07-06"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON;","lastModifiedDate":"2017-08-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalIndexes.INDEX_SECOND_PERSON;","lastModifiedDate":"2017-08-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalIndexes.INDEX_THIRD_PERSON;","lastModifiedDate":"2017-08-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":35,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":37,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2017-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"import seedu.address.logic.Messages;","lastModifiedDate":"2023-07-14"},{"lineNumber":39,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand;","lastModifiedDate":"2017-05-04"},{"lineNumber":40,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand.EditPersonDescriptor;","lastModifiedDate":"2017-05-04"},{"lineNumber":41,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2017-05-04"},{"lineNumber":42,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2017-05-04"},{"lineNumber":43,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2017-05-04"},{"lineNumber":44,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2017-05-04"},{"lineNumber":45,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.tag.Tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":46,"author":{"gitId":"-"},"content":"import seedu.address.testutil.EditPersonDescriptorBuilder;","lastModifiedDate":"2017-05-04"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":48,"author":{"gitId":"-"},"content":"public class EditCommandParserTest {","lastModifiedDate":"2017-05-04"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":50,"author":{"gitId":"-"},"content":" private static final String TAG_EMPTY \u003d \" \" + PREFIX_TAG;","lastModifiedDate":"2017-05-04"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":52,"author":{"gitId":"-"},"content":" private static final String MESSAGE_INVALID_FORMAT \u003d","lastModifiedDate":"2017-05-04"},{"lineNumber":53,"author":{"gitId":"-"},"content":" String.format(MESSAGE_INVALID_COMMAND_FORMAT, EditCommand.MESSAGE_USAGE);","lastModifiedDate":"2017-05-04"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":55,"author":{"gitId":"-"},"content":" private EditCommandParser parser \u003d new EditCommandParser();","lastModifiedDate":"2017-05-04"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":57,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":58,"author":{"gitId":"-"},"content":" public void parse_missingParts_failure() {","lastModifiedDate":"2017-05-04"},{"lineNumber":59,"author":{"gitId":"-"},"content":" // no index specified","lastModifiedDate":"2017-05-04"},{"lineNumber":60,"author":{"gitId":"-"},"content":" assertParseFailure(parser, VALID_NAME_AMY, MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2017-07-06"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":62,"author":{"gitId":"-"},"content":" // no field specified","lastModifiedDate":"2017-05-04"},{"lineNumber":63,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"1\", EditCommand.MESSAGE_NOT_EDITED);","lastModifiedDate":"2017-07-06"},{"lineNumber":64,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":65,"author":{"gitId":"-"},"content":" // no index and no field specified","lastModifiedDate":"2017-05-04"},{"lineNumber":66,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"\", MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2017-07-06"},{"lineNumber":67,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":69,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":70,"author":{"gitId":"-"},"content":" public void parse_invalidPreamble_failure() {","lastModifiedDate":"2017-06-06"},{"lineNumber":71,"author":{"gitId":"-"},"content":" // negative index","lastModifiedDate":"2017-05-04"},{"lineNumber":72,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"-5\" + NAME_DESC_AMY, MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2017-07-06"},{"lineNumber":73,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":74,"author":{"gitId":"-"},"content":" // zero index","lastModifiedDate":"2017-06-06"},{"lineNumber":75,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"0\" + NAME_DESC_AMY, MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2017-07-06"},{"lineNumber":76,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-06"},{"lineNumber":77,"author":{"gitId":"-"},"content":" // invalid arguments being parsed as preamble","lastModifiedDate":"2017-06-06"},{"lineNumber":78,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"1 some random string\", MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2017-07-06"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-06"},{"lineNumber":80,"author":{"gitId":"-"},"content":" // invalid prefix being parsed as preamble","lastModifiedDate":"2017-06-06"},{"lineNumber":81,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"1 i/ string\", MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2017-07-06"},{"lineNumber":82,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":83,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":84,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":85,"author":{"gitId":"-"},"content":" public void parse_invalidValue_failure() {","lastModifiedDate":"2017-05-04"},{"lineNumber":86,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"1\" + INVALID_NAME_DESC, Name.MESSAGE_CONSTRAINTS); // invalid name","lastModifiedDate":"2018-09-22"},{"lineNumber":87,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"1\" + INVALID_PHONE_DESC, Phone.MESSAGE_CONSTRAINTS); // invalid phone","lastModifiedDate":"2018-09-22"},{"lineNumber":88,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"1\" + INVALID_EMAIL_DESC, Email.MESSAGE_CONSTRAINTS); // invalid email","lastModifiedDate":"2018-09-22"},{"lineNumber":89,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"1\" + INVALID_ADDRESS_DESC, Address.MESSAGE_CONSTRAINTS); // invalid address","lastModifiedDate":"2018-09-22"},{"lineNumber":90,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"1\" + INVALID_TAG_DESC, Tag.MESSAGE_CONSTRAINTS); // invalid tag","lastModifiedDate":"2018-09-22"},{"lineNumber":91,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":92,"author":{"gitId":"-"},"content":" // invalid phone followed by valid email","lastModifiedDate":"2017-05-04"},{"lineNumber":93,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"1\" + INVALID_PHONE_DESC + EMAIL_DESC_AMY, Phone.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":94,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":95,"author":{"gitId":"-"},"content":" // while parsing {@code PREFIX_TAG} alone will reset the tags of the {@code Person} being edited,","lastModifiedDate":"2017-05-04"},{"lineNumber":96,"author":{"gitId":"-"},"content":" // parsing it together with a valid tag results in error","lastModifiedDate":"2017-05-04"},{"lineNumber":97,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"1\" + TAG_DESC_FRIEND + TAG_DESC_HUSBAND + TAG_EMPTY, Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":98,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"1\" + TAG_DESC_FRIEND + TAG_EMPTY + TAG_DESC_HUSBAND, Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":99,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"1\" + TAG_EMPTY + TAG_DESC_FRIEND + TAG_DESC_HUSBAND, Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":100,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":101,"author":{"gitId":"-"},"content":" // multiple invalid values, but only the first invalid value is captured","lastModifiedDate":"2017-05-04"},{"lineNumber":102,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"1\" + INVALID_NAME_DESC + INVALID_EMAIL_DESC + VALID_ADDRESS_AMY + VALID_PHONE_AMY,","lastModifiedDate":"2017-07-06"},{"lineNumber":103,"author":{"gitId":"-"},"content":" Name.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":104,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":105,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":106,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":107,"author":{"gitId":"-"},"content":" public void parse_allFieldsSpecified_success() {","lastModifiedDate":"2017-08-15"},{"lineNumber":108,"author":{"gitId":"-"},"content":" Index targetIndex \u003d INDEX_SECOND_PERSON;","lastModifiedDate":"2017-05-25"},{"lineNumber":109,"author":{"gitId":"-"},"content":" String userInput \u003d targetIndex.getOneBased() + PHONE_DESC_BOB + TAG_DESC_HUSBAND","lastModifiedDate":"2017-06-06"},{"lineNumber":110,"author":{"gitId":"-"},"content":" + EMAIL_DESC_AMY + ADDRESS_DESC_AMY + NAME_DESC_AMY + TAG_DESC_FRIEND;","lastModifiedDate":"2017-06-06"},{"lineNumber":111,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":112,"author":{"gitId":"-"},"content":" EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder().withName(VALID_NAME_AMY)","lastModifiedDate":"2017-05-04"},{"lineNumber":113,"author":{"gitId":"-"},"content":" .withPhone(VALID_PHONE_BOB).withEmail(VALID_EMAIL_AMY).withAddress(VALID_ADDRESS_AMY)","lastModifiedDate":"2017-05-04"},{"lineNumber":114,"author":{"gitId":"-"},"content":" .withTags(VALID_TAG_HUSBAND, VALID_TAG_FRIEND).build();","lastModifiedDate":"2017-05-04"},{"lineNumber":115,"author":{"gitId":"-"},"content":" EditCommand expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2017-05-04"},{"lineNumber":116,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":117,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2017-07-06"},{"lineNumber":118,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":119,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":120,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":121,"author":{"gitId":"-"},"content":" public void parse_someFieldsSpecified_success() {","lastModifiedDate":"2017-08-15"},{"lineNumber":122,"author":{"gitId":"-"},"content":" Index targetIndex \u003d INDEX_FIRST_PERSON;","lastModifiedDate":"2017-05-25"},{"lineNumber":123,"author":{"gitId":"-"},"content":" String userInput \u003d targetIndex.getOneBased() + PHONE_DESC_BOB + EMAIL_DESC_AMY;","lastModifiedDate":"2017-05-25"},{"lineNumber":124,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":125,"author":{"gitId":"-"},"content":" EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder().withPhone(VALID_PHONE_BOB)","lastModifiedDate":"2017-05-04"},{"lineNumber":126,"author":{"gitId":"-"},"content":" .withEmail(VALID_EMAIL_AMY).build();","lastModifiedDate":"2017-05-04"},{"lineNumber":127,"author":{"gitId":"-"},"content":" EditCommand expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2017-05-04"},{"lineNumber":128,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":129,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2017-07-06"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":131,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":132,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":133,"author":{"gitId":"-"},"content":" public void parse_oneFieldSpecified_success() {","lastModifiedDate":"2017-08-15"},{"lineNumber":134,"author":{"gitId":"-"},"content":" // name","lastModifiedDate":"2017-05-04"},{"lineNumber":135,"author":{"gitId":"-"},"content":" Index targetIndex \u003d INDEX_THIRD_PERSON;","lastModifiedDate":"2017-05-25"},{"lineNumber":136,"author":{"gitId":"-"},"content":" String userInput \u003d targetIndex.getOneBased() + NAME_DESC_AMY;","lastModifiedDate":"2017-05-25"},{"lineNumber":137,"author":{"gitId":"-"},"content":" EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder().withName(VALID_NAME_AMY).build();","lastModifiedDate":"2017-05-04"},{"lineNumber":138,"author":{"gitId":"-"},"content":" EditCommand expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2017-05-04"},{"lineNumber":139,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2017-07-06"},{"lineNumber":140,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":141,"author":{"gitId":"-"},"content":" // phone","lastModifiedDate":"2017-05-04"},{"lineNumber":142,"author":{"gitId":"-"},"content":" userInput \u003d targetIndex.getOneBased() + PHONE_DESC_AMY;","lastModifiedDate":"2017-05-25"},{"lineNumber":143,"author":{"gitId":"-"},"content":" descriptor \u003d new EditPersonDescriptorBuilder().withPhone(VALID_PHONE_AMY).build();","lastModifiedDate":"2017-05-04"},{"lineNumber":144,"author":{"gitId":"-"},"content":" expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2017-05-04"},{"lineNumber":145,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2017-07-06"},{"lineNumber":146,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":147,"author":{"gitId":"-"},"content":" // email","lastModifiedDate":"2017-05-04"},{"lineNumber":148,"author":{"gitId":"-"},"content":" userInput \u003d targetIndex.getOneBased() + EMAIL_DESC_AMY;","lastModifiedDate":"2017-05-25"},{"lineNumber":149,"author":{"gitId":"-"},"content":" descriptor \u003d new EditPersonDescriptorBuilder().withEmail(VALID_EMAIL_AMY).build();","lastModifiedDate":"2017-05-04"},{"lineNumber":150,"author":{"gitId":"-"},"content":" expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2017-05-04"},{"lineNumber":151,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2017-07-06"},{"lineNumber":152,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":153,"author":{"gitId":"-"},"content":" // address","lastModifiedDate":"2017-05-04"},{"lineNumber":154,"author":{"gitId":"-"},"content":" userInput \u003d targetIndex.getOneBased() + ADDRESS_DESC_AMY;","lastModifiedDate":"2017-05-25"},{"lineNumber":155,"author":{"gitId":"-"},"content":" descriptor \u003d new EditPersonDescriptorBuilder().withAddress(VALID_ADDRESS_AMY).build();","lastModifiedDate":"2017-05-04"},{"lineNumber":156,"author":{"gitId":"-"},"content":" expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2017-05-04"},{"lineNumber":157,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2017-07-06"},{"lineNumber":158,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":159,"author":{"gitId":"-"},"content":" // tags","lastModifiedDate":"2017-05-04"},{"lineNumber":160,"author":{"gitId":"-"},"content":" userInput \u003d targetIndex.getOneBased() + TAG_DESC_FRIEND;","lastModifiedDate":"2017-05-25"},{"lineNumber":161,"author":{"gitId":"-"},"content":" descriptor \u003d new EditPersonDescriptorBuilder().withTags(VALID_TAG_FRIEND).build();","lastModifiedDate":"2017-05-04"},{"lineNumber":162,"author":{"gitId":"-"},"content":" expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2017-05-04"},{"lineNumber":163,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2017-07-06"},{"lineNumber":164,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":165,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":166,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":167,"author":{"gitId":"-"},"content":" public void parse_multipleRepeatedFields_failure() {","lastModifiedDate":"2023-07-14"},{"lineNumber":168,"author":{"gitId":"-"},"content":" // More extensive testing of duplicate parameter detections is done in","lastModifiedDate":"2023-07-14"},{"lineNumber":169,"author":{"gitId":"-"},"content":" // AddCommandParserTest#parse_repeatedNonTagValue_failure()","lastModifiedDate":"2023-07-14"},{"lineNumber":170,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":171,"author":{"gitId":"-"},"content":" // valid followed by invalid","lastModifiedDate":"2023-07-14"},{"lineNumber":172,"author":{"gitId":"-"},"content":" Index targetIndex \u003d INDEX_FIRST_PERSON;","lastModifiedDate":"2017-05-25"},{"lineNumber":173,"author":{"gitId":"-"},"content":" String userInput \u003d targetIndex.getOneBased() + INVALID_PHONE_DESC + PHONE_DESC_BOB;","lastModifiedDate":"2023-07-14"},{"lineNumber":174,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":175,"author":{"gitId":"-"},"content":" assertParseFailure(parser, userInput, Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE));","lastModifiedDate":"2023-07-14"},{"lineNumber":176,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":177,"author":{"gitId":"-"},"content":" // invalid followed by valid","lastModifiedDate":"2023-07-14"},{"lineNumber":178,"author":{"gitId":"-"},"content":" userInput \u003d targetIndex.getOneBased() + PHONE_DESC_BOB + INVALID_PHONE_DESC;","lastModifiedDate":"2023-07-14"},{"lineNumber":179,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":180,"author":{"gitId":"-"},"content":" assertParseFailure(parser, userInput, Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE));","lastModifiedDate":"2023-07-14"},{"lineNumber":181,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":182,"author":{"gitId":"-"},"content":" // mulltiple valid fields repeated","lastModifiedDate":"2023-07-14"},{"lineNumber":183,"author":{"gitId":"-"},"content":" userInput \u003d targetIndex.getOneBased() + PHONE_DESC_AMY + ADDRESS_DESC_AMY + EMAIL_DESC_AMY","lastModifiedDate":"2023-07-14"},{"lineNumber":184,"author":{"gitId":"-"},"content":" + TAG_DESC_FRIEND + PHONE_DESC_AMY + ADDRESS_DESC_AMY + EMAIL_DESC_AMY + TAG_DESC_FRIEND","lastModifiedDate":"2017-05-25"},{"lineNumber":185,"author":{"gitId":"-"},"content":" + PHONE_DESC_BOB + ADDRESS_DESC_BOB + EMAIL_DESC_BOB + TAG_DESC_HUSBAND;","lastModifiedDate":"2017-05-25"},{"lineNumber":186,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":187,"author":{"gitId":"-"},"content":" assertParseFailure(parser, userInput,","lastModifiedDate":"2023-07-14"},{"lineNumber":188,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS));","lastModifiedDate":"2023-07-14"},{"lineNumber":189,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":190,"author":{"gitId":"-"},"content":" // multiple invalid values","lastModifiedDate":"2023-07-14"},{"lineNumber":191,"author":{"gitId":"-"},"content":" userInput \u003d targetIndex.getOneBased() + INVALID_PHONE_DESC + INVALID_ADDRESS_DESC + INVALID_EMAIL_DESC","lastModifiedDate":"2023-07-14"},{"lineNumber":192,"author":{"gitId":"-"},"content":" + INVALID_PHONE_DESC + INVALID_ADDRESS_DESC + INVALID_EMAIL_DESC;","lastModifiedDate":"2023-07-14"},{"lineNumber":193,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":194,"author":{"gitId":"-"},"content":" assertParseFailure(parser, userInput,","lastModifiedDate":"2023-07-14"},{"lineNumber":195,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS));","lastModifiedDate":"2023-07-14"},{"lineNumber":196,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":197,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":198,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":199,"author":{"gitId":"-"},"content":" public void parse_resetTags_success() {","lastModifiedDate":"2017-08-15"},{"lineNumber":200,"author":{"gitId":"-"},"content":" Index targetIndex \u003d INDEX_THIRD_PERSON;","lastModifiedDate":"2017-05-25"},{"lineNumber":201,"author":{"gitId":"-"},"content":" String userInput \u003d targetIndex.getOneBased() + TAG_EMPTY;","lastModifiedDate":"2017-05-25"},{"lineNumber":202,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":203,"author":{"gitId":"-"},"content":" EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder().withTags().build();","lastModifiedDate":"2017-05-04"},{"lineNumber":204,"author":{"gitId":"-"},"content":" EditCommand expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2017-05-04"},{"lineNumber":205,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":206,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2017-07-06"},{"lineNumber":207,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":208,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-05-04"}],"authorContributionMap":{"joenus":1,"-":207}},{"path":"src/test/java/seedu/address/logic/parser/ParserUtilTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-05-22"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-03-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2019-03-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.ParserUtil.MESSAGE_INVALID_INDEX;","lastModifiedDate":"2017-06-02"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-14"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON;","lastModifiedDate":"2017-08-05"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.Arrays;","lastModifiedDate":"2017-05-22"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import java.util.Collections;","lastModifiedDate":"2017-05-22"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import java.util.HashSet;","lastModifiedDate":"2017-05-22"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-05-22"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2018-07-10"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2017-05-22"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2017-05-22"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2017-05-22"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2017-05-22"},{"lineNumber":21,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.tag.Tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":23,"author":{"gitId":"-"},"content":"public class ParserUtilTest {","lastModifiedDate":"2017-05-22"},{"lineNumber":24,"author":{"gitId":"-"},"content":" private static final String INVALID_NAME \u003d \"R@chel\";","lastModifiedDate":"2017-05-22"},{"lineNumber":25,"author":{"gitId":"-"},"content":" private static final String INVALID_PHONE \u003d \"+651234\";","lastModifiedDate":"2017-05-22"},{"lineNumber":26,"author":{"gitId":"-"},"content":" private static final String INVALID_ADDRESS \u003d \" \";","lastModifiedDate":"2017-05-22"},{"lineNumber":27,"author":{"gitId":"-"},"content":" private static final String INVALID_EMAIL \u003d \"example.com\";","lastModifiedDate":"2017-05-22"},{"lineNumber":28,"author":{"gitId":"-"},"content":" private static final String INVALID_TAG \u003d \"#friend\";","lastModifiedDate":"2017-05-22"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":30,"author":{"gitId":"-"},"content":" private static final String VALID_NAME \u003d \"Rachel Walker\";","lastModifiedDate":"2017-05-22"},{"lineNumber":31,"author":{"gitId":"-"},"content":" private static final String VALID_PHONE \u003d \"123456\";","lastModifiedDate":"2017-05-22"},{"lineNumber":32,"author":{"gitId":"-"},"content":" private static final String VALID_ADDRESS \u003d \"123 Main Street #0505\";","lastModifiedDate":"2017-05-22"},{"lineNumber":33,"author":{"gitId":"-"},"content":" private static final String VALID_EMAIL \u003d \"rachel@example.com\";","lastModifiedDate":"2017-05-22"},{"lineNumber":34,"author":{"gitId":"-"},"content":" private static final String VALID_TAG_1 \u003d \"friend\";","lastModifiedDate":"2017-05-22"},{"lineNumber":35,"author":{"gitId":"-"},"content":" private static final String VALID_TAG_2 \u003d \"neighbour\";","lastModifiedDate":"2017-05-22"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":37,"author":{"gitId":"-"},"content":" private static final String WHITESPACE \u003d \" \\t\\r\\n\";","lastModifiedDate":"2017-05-29"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-29"},{"lineNumber":39,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-26"},{"lineNumber":40,"author":{"gitId":"-"},"content":" public void parseIndex_invalidInput_throwsParseException() {","lastModifiedDate":"2019-03-23"},{"lineNumber":41,"author":{"gitId":"-"},"content":" assertThrows(ParseException.class, () -\u003e ParserUtil.parseIndex(\"10 a\"));","lastModifiedDate":"2019-03-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-26"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-26"},{"lineNumber":44,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-26"},{"lineNumber":45,"author":{"gitId":"-"},"content":" public void parseIndex_outOfRangeInput_throwsParseException() {","lastModifiedDate":"2019-03-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":" assertThrows(ParseException.class, MESSAGE_INVALID_INDEX, ()","lastModifiedDate":"2019-03-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":" -\u003e ParserUtil.parseIndex(Long.toString(Integer.MAX_VALUE + 1)));","lastModifiedDate":"2019-03-23"},{"lineNumber":48,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-26"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-26"},{"lineNumber":50,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-26"},{"lineNumber":51,"author":{"gitId":"-"},"content":" public void parseIndex_validInput_success() throws Exception {","lastModifiedDate":"2017-05-26"},{"lineNumber":52,"author":{"gitId":"-"},"content":" // No whitespaces","lastModifiedDate":"2017-05-26"},{"lineNumber":53,"author":{"gitId":"-"},"content":" assertEquals(INDEX_FIRST_PERSON, ParserUtil.parseIndex(\"1\"));","lastModifiedDate":"2017-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-26"},{"lineNumber":55,"author":{"gitId":"-"},"content":" // Leading and trailing whitespaces","lastModifiedDate":"2017-05-26"},{"lineNumber":56,"author":{"gitId":"-"},"content":" assertEquals(INDEX_FIRST_PERSON, ParserUtil.parseIndex(\" 1 \"));","lastModifiedDate":"2017-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-26"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-26"},{"lineNumber":59,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":60,"author":{"gitId":"-"},"content":" public void parseName_null_throwsNullPointerException() {","lastModifiedDate":"2017-05-29"},{"lineNumber":61,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e ParserUtil.parseName((String) null));","lastModifiedDate":"2019-03-14"},{"lineNumber":62,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":64,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":65,"author":{"gitId":"-"},"content":" public void parseName_invalidValue_throwsParseException() {","lastModifiedDate":"2018-07-10"},{"lineNumber":66,"author":{"gitId":"-"},"content":" assertThrows(ParseException.class, () -\u003e ParserUtil.parseName(INVALID_NAME));","lastModifiedDate":"2019-03-14"},{"lineNumber":67,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":69,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":70,"author":{"gitId":"-"},"content":" public void parseName_validValueWithoutWhitespace_returnsName() throws Exception {","lastModifiedDate":"2017-05-29"},{"lineNumber":71,"author":{"gitId":"-"},"content":" Name expectedName \u003d new Name(VALID_NAME);","lastModifiedDate":"2017-05-22"},{"lineNumber":72,"author":{"gitId":"-"},"content":" assertEquals(expectedName, ParserUtil.parseName(VALID_NAME));","lastModifiedDate":"2017-05-29"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-29"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":75,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-29"},{"lineNumber":76,"author":{"gitId":"-"},"content":" public void parseName_validValueWithWhitespace_returnsTrimmedName() throws Exception {","lastModifiedDate":"2017-05-29"},{"lineNumber":77,"author":{"gitId":"-"},"content":" String nameWithWhitespace \u003d WHITESPACE + VALID_NAME + WHITESPACE;","lastModifiedDate":"2017-05-29"},{"lineNumber":78,"author":{"gitId":"-"},"content":" Name expectedName \u003d new Name(VALID_NAME);","lastModifiedDate":"2017-05-29"},{"lineNumber":79,"author":{"gitId":"-"},"content":" assertEquals(expectedName, ParserUtil.parseName(nameWithWhitespace));","lastModifiedDate":"2017-05-29"},{"lineNumber":80,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":81,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":82,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":83,"author":{"gitId":"-"},"content":" public void parsePhone_null_throwsNullPointerException() {","lastModifiedDate":"2017-05-30"},{"lineNumber":84,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e ParserUtil.parsePhone((String) null));","lastModifiedDate":"2019-03-14"},{"lineNumber":85,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":87,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":88,"author":{"gitId":"-"},"content":" public void parsePhone_invalidValue_throwsParseException() {","lastModifiedDate":"2018-07-10"},{"lineNumber":89,"author":{"gitId":"-"},"content":" assertThrows(ParseException.class, () -\u003e ParserUtil.parsePhone(INVALID_PHONE));","lastModifiedDate":"2019-03-14"},{"lineNumber":90,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":91,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":92,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":93,"author":{"gitId":"-"},"content":" public void parsePhone_validValueWithoutWhitespace_returnsPhone() throws Exception {","lastModifiedDate":"2017-05-30"},{"lineNumber":94,"author":{"gitId":"-"},"content":" Phone expectedPhone \u003d new Phone(VALID_PHONE);","lastModifiedDate":"2017-05-22"},{"lineNumber":95,"author":{"gitId":"-"},"content":" assertEquals(expectedPhone, ParserUtil.parsePhone(VALID_PHONE));","lastModifiedDate":"2017-05-30"},{"lineNumber":96,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":97,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":98,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-30"},{"lineNumber":99,"author":{"gitId":"-"},"content":" public void parsePhone_validValueWithWhitespace_returnsTrimmedPhone() throws Exception {","lastModifiedDate":"2017-05-30"},{"lineNumber":100,"author":{"gitId":"-"},"content":" String phoneWithWhitespace \u003d WHITESPACE + VALID_PHONE + WHITESPACE;","lastModifiedDate":"2017-05-30"},{"lineNumber":101,"author":{"gitId":"-"},"content":" Phone expectedPhone \u003d new Phone(VALID_PHONE);","lastModifiedDate":"2017-05-30"},{"lineNumber":102,"author":{"gitId":"-"},"content":" assertEquals(expectedPhone, ParserUtil.parsePhone(phoneWithWhitespace));","lastModifiedDate":"2017-05-30"},{"lineNumber":103,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":104,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":105,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":106,"author":{"gitId":"-"},"content":" public void parseAddress_null_throwsNullPointerException() {","lastModifiedDate":"2017-05-30"},{"lineNumber":107,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e ParserUtil.parseAddress((String) null));","lastModifiedDate":"2019-03-14"},{"lineNumber":108,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":109,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":110,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":111,"author":{"gitId":"-"},"content":" public void parseAddress_invalidValue_throwsParseException() {","lastModifiedDate":"2018-07-10"},{"lineNumber":112,"author":{"gitId":"-"},"content":" assertThrows(ParseException.class, () -\u003e ParserUtil.parseAddress(INVALID_ADDRESS));","lastModifiedDate":"2019-03-14"},{"lineNumber":113,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":114,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":115,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":116,"author":{"gitId":"-"},"content":" public void parseAddress_validValueWithoutWhitespace_returnsAddress() throws Exception {","lastModifiedDate":"2017-05-30"},{"lineNumber":117,"author":{"gitId":"-"},"content":" Address expectedAddress \u003d new Address(VALID_ADDRESS);","lastModifiedDate":"2017-05-22"},{"lineNumber":118,"author":{"gitId":"-"},"content":" assertEquals(expectedAddress, ParserUtil.parseAddress(VALID_ADDRESS));","lastModifiedDate":"2017-05-30"},{"lineNumber":119,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":121,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-30"},{"lineNumber":122,"author":{"gitId":"-"},"content":" public void parseAddress_validValueWithWhitespace_returnsTrimmedAddress() throws Exception {","lastModifiedDate":"2017-05-30"},{"lineNumber":123,"author":{"gitId":"-"},"content":" String addressWithWhitespace \u003d WHITESPACE + VALID_ADDRESS + WHITESPACE;","lastModifiedDate":"2017-05-30"},{"lineNumber":124,"author":{"gitId":"-"},"content":" Address expectedAddress \u003d new Address(VALID_ADDRESS);","lastModifiedDate":"2017-05-30"},{"lineNumber":125,"author":{"gitId":"-"},"content":" assertEquals(expectedAddress, ParserUtil.parseAddress(addressWithWhitespace));","lastModifiedDate":"2017-05-30"},{"lineNumber":126,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":127,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":128,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":129,"author":{"gitId":"-"},"content":" public void parseEmail_null_throwsNullPointerException() {","lastModifiedDate":"2017-05-30"},{"lineNumber":130,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e ParserUtil.parseEmail((String) null));","lastModifiedDate":"2019-03-14"},{"lineNumber":131,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":132,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":133,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":134,"author":{"gitId":"-"},"content":" public void parseEmail_invalidValue_throwsParseException() {","lastModifiedDate":"2018-07-10"},{"lineNumber":135,"author":{"gitId":"-"},"content":" assertThrows(ParseException.class, () -\u003e ParserUtil.parseEmail(INVALID_EMAIL));","lastModifiedDate":"2019-03-14"},{"lineNumber":136,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":137,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":138,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":139,"author":{"gitId":"-"},"content":" public void parseEmail_validValueWithoutWhitespace_returnsEmail() throws Exception {","lastModifiedDate":"2017-05-30"},{"lineNumber":140,"author":{"gitId":"-"},"content":" Email expectedEmail \u003d new Email(VALID_EMAIL);","lastModifiedDate":"2017-05-22"},{"lineNumber":141,"author":{"gitId":"-"},"content":" assertEquals(expectedEmail, ParserUtil.parseEmail(VALID_EMAIL));","lastModifiedDate":"2017-05-30"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":143,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":144,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-30"},{"lineNumber":145,"author":{"gitId":"-"},"content":" public void parseEmail_validValueWithWhitespace_returnsTrimmedEmail() throws Exception {","lastModifiedDate":"2017-05-30"},{"lineNumber":146,"author":{"gitId":"-"},"content":" String emailWithWhitespace \u003d WHITESPACE + VALID_EMAIL + WHITESPACE;","lastModifiedDate":"2017-05-30"},{"lineNumber":147,"author":{"gitId":"-"},"content":" Email expectedEmail \u003d new Email(VALID_EMAIL);","lastModifiedDate":"2017-05-30"},{"lineNumber":148,"author":{"gitId":"-"},"content":" assertEquals(expectedEmail, ParserUtil.parseEmail(emailWithWhitespace));","lastModifiedDate":"2017-05-30"},{"lineNumber":149,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":150,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":151,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-30"},{"lineNumber":152,"author":{"gitId":"-"},"content":" public void parseTag_null_throwsNullPointerException() {","lastModifiedDate":"2019-03-23"},{"lineNumber":153,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e ParserUtil.parseTag(null));","lastModifiedDate":"2019-03-23"},{"lineNumber":154,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":155,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":156,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-30"},{"lineNumber":157,"author":{"gitId":"-"},"content":" public void parseTag_invalidValue_throwsParseException() {","lastModifiedDate":"2019-03-23"},{"lineNumber":158,"author":{"gitId":"-"},"content":" assertThrows(ParseException.class, () -\u003e ParserUtil.parseTag(INVALID_TAG));","lastModifiedDate":"2019-03-23"},{"lineNumber":159,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":160,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":161,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-30"},{"lineNumber":162,"author":{"gitId":"-"},"content":" public void parseTag_validValueWithoutWhitespace_returnsTag() throws Exception {","lastModifiedDate":"2017-05-30"},{"lineNumber":163,"author":{"gitId":"-"},"content":" Tag expectedTag \u003d new Tag(VALID_TAG_1);","lastModifiedDate":"2017-05-30"},{"lineNumber":164,"author":{"gitId":"-"},"content":" assertEquals(expectedTag, ParserUtil.parseTag(VALID_TAG_1));","lastModifiedDate":"2017-05-30"},{"lineNumber":165,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":166,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":167,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-30"},{"lineNumber":168,"author":{"gitId":"-"},"content":" public void parseTag_validValueWithWhitespace_returnsTrimmedTag() throws Exception {","lastModifiedDate":"2017-05-30"},{"lineNumber":169,"author":{"gitId":"-"},"content":" String tagWithWhitespace \u003d WHITESPACE + VALID_TAG_1 + WHITESPACE;","lastModifiedDate":"2017-05-30"},{"lineNumber":170,"author":{"gitId":"-"},"content":" Tag expectedTag \u003d new Tag(VALID_TAG_1);","lastModifiedDate":"2017-05-30"},{"lineNumber":171,"author":{"gitId":"-"},"content":" assertEquals(expectedTag, ParserUtil.parseTag(tagWithWhitespace));","lastModifiedDate":"2017-05-30"},{"lineNumber":172,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":173,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":174,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":175,"author":{"gitId":"-"},"content":" public void parseTags_null_throwsNullPointerException() {","lastModifiedDate":"2019-03-23"},{"lineNumber":176,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e ParserUtil.parseTags(null));","lastModifiedDate":"2019-03-23"},{"lineNumber":177,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":178,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":179,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":180,"author":{"gitId":"-"},"content":" public void parseTags_collectionWithInvalidTags_throwsParseException() {","lastModifiedDate":"2019-03-23"},{"lineNumber":181,"author":{"gitId":"-"},"content":" assertThrows(ParseException.class, () -\u003e ParserUtil.parseTags(Arrays.asList(VALID_TAG_1, INVALID_TAG)));","lastModifiedDate":"2019-03-23"},{"lineNumber":182,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":183,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":184,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":185,"author":{"gitId":"-"},"content":" public void parseTags_emptyCollection_returnsEmptySet() throws Exception {","lastModifiedDate":"2017-05-22"},{"lineNumber":186,"author":{"gitId":"-"},"content":" assertTrue(ParserUtil.parseTags(Collections.emptyList()).isEmpty());","lastModifiedDate":"2017-05-22"},{"lineNumber":187,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":188,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":189,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":190,"author":{"gitId":"-"},"content":" public void parseTags_collectionWithValidTags_returnsTagSet() throws Exception {","lastModifiedDate":"2017-05-22"},{"lineNumber":191,"author":{"gitId":"-"},"content":" Set\u003cTag\u003e actualTagSet \u003d ParserUtil.parseTags(Arrays.asList(VALID_TAG_1, VALID_TAG_2));","lastModifiedDate":"2017-05-22"},{"lineNumber":192,"author":{"gitId":"-"},"content":" Set\u003cTag\u003e expectedTagSet \u003d new HashSet\u003cTag\u003e(Arrays.asList(new Tag(VALID_TAG_1), new Tag(VALID_TAG_2)));","lastModifiedDate":"2017-05-22"},{"lineNumber":193,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":194,"author":{"gitId":"-"},"content":" assertEquals(expectedTagSet, actualTagSet);","lastModifiedDate":"2017-05-22"},{"lineNumber":195,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":196,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-05-22"}],"authorContributionMap":{"joenus":1,"-":195}},{"path":"src/test/java/seedu/address/model/person/PersonTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model.person;","lastModifiedDate":"2018-03-26"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-02-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2019-03-15"},{"lineNumber":5,"author":{"gitId":"joenus"},"content":"import static org.junit.jupiter.api.Assertions.assertNotEquals;","lastModifiedDate":"2024-03-01"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2019-03-15"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB;","lastModifiedDate":"2018-04-19"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_BOB;","lastModifiedDate":"2018-04-19"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB;","lastModifiedDate":"2018-04-19"},{"lineNumber":10,"author":{"gitId":"joenus"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_NOTE_FLU;","lastModifiedDate":"2024-02-29"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB;","lastModifiedDate":"2018-04-19"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND;","lastModifiedDate":"2018-04-19"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-23"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.ALICE;","lastModifiedDate":"2018-04-19"},{"lineNumber":15,"author":{"gitId":"joenus"},"content":"import static seedu.address.testutil.TypicalPersons.BENSON;","lastModifiedDate":"2024-03-01"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.BOB;","lastModifiedDate":"2018-04-19"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":18,"author":{"gitId":"joenus"},"content":"import org.junit.jupiter.api.Nested;","lastModifiedDate":"2024-03-01"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":21,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Note;","lastModifiedDate":"2024-02-29"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import seedu.address.testutil.PersonBuilder;","lastModifiedDate":"2018-03-26"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":24,"author":{"gitId":"-"},"content":"public class PersonTest {","lastModifiedDate":"2018-03-26"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":26,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-09-01"},{"lineNumber":27,"author":{"gitId":"-"},"content":" public void asObservableList_modifyList_throwsUnsupportedOperationException() {","lastModifiedDate":"2017-09-01"},{"lineNumber":28,"author":{"gitId":"-"},"content":" Person person \u003d new PersonBuilder().build();","lastModifiedDate":"2018-03-26"},{"lineNumber":29,"author":{"gitId":"-"},"content":" assertThrows(UnsupportedOperationException.class, () -\u003e person.getTags().remove(0));","lastModifiedDate":"2019-03-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-09-01"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":32,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-04-19"},{"lineNumber":33,"author":{"gitId":"-"},"content":" public void isSamePerson() {","lastModifiedDate":"2018-04-19"},{"lineNumber":34,"author":{"gitId":"-"},"content":" // same object -\u003e returns true","lastModifiedDate":"2018-04-19"},{"lineNumber":35,"author":{"gitId":"-"},"content":" assertTrue(ALICE.isSamePerson(ALICE));","lastModifiedDate":"2018-04-19"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":37,"author":{"gitId":"-"},"content":" // null -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":38,"author":{"gitId":"-"},"content":" assertFalse(ALICE.isSamePerson(null));","lastModifiedDate":"2018-04-19"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":40,"author":{"gitId":"-"},"content":" // same name, all other attributes different -\u003e returns true","lastModifiedDate":"2020-12-18"},{"lineNumber":41,"author":{"gitId":"-"},"content":" Person editedAlice \u003d new PersonBuilder(ALICE).withPhone(VALID_PHONE_BOB).withEmail(VALID_EMAIL_BOB)","lastModifiedDate":"2020-12-18"},{"lineNumber":42,"author":{"gitId":"-"},"content":" .withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_HUSBAND).build();","lastModifiedDate":"2020-12-18"},{"lineNumber":43,"author":{"gitId":"-"},"content":" assertTrue(ALICE.isSamePerson(editedAlice));","lastModifiedDate":"2020-12-18"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":45,"author":{"gitId":"-"},"content":" // different name, all other attributes same -\u003e returns false","lastModifiedDate":"2020-12-18"},{"lineNumber":46,"author":{"gitId":"-"},"content":" editedAlice \u003d new PersonBuilder(ALICE).withName(VALID_NAME_BOB).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":47,"author":{"gitId":"-"},"content":" assertFalse(ALICE.isSamePerson(editedAlice));","lastModifiedDate":"2018-04-19"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":49,"author":{"gitId":"-"},"content":" // name differs in case, all other attributes same -\u003e returns false","lastModifiedDate":"2020-12-18"},{"lineNumber":50,"author":{"gitId":"-"},"content":" Person editedBob \u003d new PersonBuilder(BOB).withName(VALID_NAME_BOB.toLowerCase()).build();","lastModifiedDate":"2020-12-18"},{"lineNumber":51,"author":{"gitId":"-"},"content":" assertFalse(BOB.isSamePerson(editedBob));","lastModifiedDate":"2020-12-18"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":53,"author":{"gitId":"-"},"content":" // name has trailing spaces, all other attributes same -\u003e returns false","lastModifiedDate":"2020-12-18"},{"lineNumber":54,"author":{"gitId":"-"},"content":" String nameWithTrailingSpaces \u003d VALID_NAME_BOB + \" \";","lastModifiedDate":"2020-12-18"},{"lineNumber":55,"author":{"gitId":"-"},"content":" editedBob \u003d new PersonBuilder(BOB).withName(nameWithTrailingSpaces).build();","lastModifiedDate":"2020-12-18"},{"lineNumber":56,"author":{"gitId":"-"},"content":" assertFalse(BOB.isSamePerson(editedBob));","lastModifiedDate":"2020-12-18"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-04-19"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":59,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-04-19"},{"lineNumber":60,"author":{"gitId":"-"},"content":" public void equals() {","lastModifiedDate":"2018-04-19"},{"lineNumber":61,"author":{"gitId":"-"},"content":" // same values -\u003e returns true","lastModifiedDate":"2018-04-19"},{"lineNumber":62,"author":{"gitId":"-"},"content":" Person aliceCopy \u003d new PersonBuilder(ALICE).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":63,"author":{"gitId":"joenus"},"content":" assertEquals(ALICE, aliceCopy);","lastModifiedDate":"2024-03-01"},{"lineNumber":64,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":65,"author":{"gitId":"-"},"content":" // same object -\u003e returns true","lastModifiedDate":"2018-04-19"},{"lineNumber":66,"author":{"gitId":"joenus"},"content":" assertEquals(ALICE, ALICE);","lastModifiedDate":"2024-03-01"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":68,"author":{"gitId":"-"},"content":" // null -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":69,"author":{"gitId":"joenus"},"content":" assertNotEquals(null, ALICE);","lastModifiedDate":"2024-03-01"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":71,"author":{"gitId":"-"},"content":" // different type -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":72,"author":{"gitId":"joenus"},"content":" assertNotEquals(5, ALICE);","lastModifiedDate":"2024-03-01"},{"lineNumber":73,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":74,"author":{"gitId":"-"},"content":" // different person -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":75,"author":{"gitId":"joenus"},"content":" assertNotEquals(ALICE, BOB);","lastModifiedDate":"2024-03-01"},{"lineNumber":76,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":77,"author":{"gitId":"-"},"content":" // different name -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":78,"author":{"gitId":"-"},"content":" Person editedAlice \u003d new PersonBuilder(ALICE).withName(VALID_NAME_BOB).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":79,"author":{"gitId":"joenus"},"content":" assertNotEquals(ALICE, editedAlice);","lastModifiedDate":"2024-03-01"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":81,"author":{"gitId":"-"},"content":" // different phone -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":82,"author":{"gitId":"-"},"content":" editedAlice \u003d new PersonBuilder(ALICE).withPhone(VALID_PHONE_BOB).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":83,"author":{"gitId":"joenus"},"content":" assertNotEquals(ALICE, editedAlice);","lastModifiedDate":"2024-03-01"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":85,"author":{"gitId":"-"},"content":" // different email -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":86,"author":{"gitId":"-"},"content":" editedAlice \u003d new PersonBuilder(ALICE).withEmail(VALID_EMAIL_BOB).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":87,"author":{"gitId":"joenus"},"content":" assertNotEquals(ALICE, editedAlice);","lastModifiedDate":"2024-03-01"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":89,"author":{"gitId":"-"},"content":" // different address -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":90,"author":{"gitId":"-"},"content":" editedAlice \u003d new PersonBuilder(ALICE).withAddress(VALID_ADDRESS_BOB).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":91,"author":{"gitId":"joenus"},"content":" assertNotEquals(ALICE, editedAlice);","lastModifiedDate":"2024-03-01"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-18"},{"lineNumber":93,"author":{"gitId":"-"},"content":" // different tags -\u003e returns false","lastModifiedDate":"2018-04-18"},{"lineNumber":94,"author":{"gitId":"-"},"content":" editedAlice \u003d new PersonBuilder(ALICE).withTags(VALID_TAG_HUSBAND).build();","lastModifiedDate":"2018-04-18"},{"lineNumber":95,"author":{"gitId":"joenus"},"content":" assertNotEquals(ALICE, editedAlice);","lastModifiedDate":"2024-03-01"},{"lineNumber":96,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":97,"author":{"gitId":"joenus"},"content":" // different notes -\u003e returns false","lastModifiedDate":"2024-02-29"},{"lineNumber":98,"author":{"gitId":"joenus"},"content":" editedAlice \u003d new PersonBuilder(ALICE).withNotes(new Note[] {VALID_NOTE_FLU}).build();","lastModifiedDate":"2024-02-29"},{"lineNumber":99,"author":{"gitId":"joenus"},"content":" assertNotEquals(ALICE, editedAlice);","lastModifiedDate":"2024-03-01"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-04-19"},{"lineNumber":101,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":102,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2019-02-23"},{"lineNumber":103,"author":{"gitId":"-"},"content":" public void toStringMethod() {","lastModifiedDate":"2019-02-23"},{"lineNumber":104,"author":{"gitId":"-"},"content":" String expected \u003d Person.class.getCanonicalName() + \"{name\u003d\" + ALICE.getName() + \", phone\u003d\" + ALICE.getPhone()","lastModifiedDate":"2019-02-23"},{"lineNumber":105,"author":{"gitId":"joenus"},"content":" + \", email\u003d\" + ALICE.getEmail() + \", address\u003d\" + ALICE.getAddress() + \", tags\u003d\" + ALICE.getTags()","lastModifiedDate":"2024-02-29"},{"lineNumber":106,"author":{"gitId":"joenus"},"content":" + \", notes\u003d\" + ALICE.getNotes() + \"}\";","lastModifiedDate":"2024-02-29"},{"lineNumber":107,"author":{"gitId":"-"},"content":" assertEquals(expected, ALICE.toString());","lastModifiedDate":"2019-02-23"},{"lineNumber":108,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":109,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":110,"author":{"gitId":"joenus"},"content":" @Nested","lastModifiedDate":"2024-03-01"},{"lineNumber":111,"author":{"gitId":"joenus"},"content":" class BuilderTests {","lastModifiedDate":"2024-03-01"},{"lineNumber":112,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":113,"author":{"gitId":"joenus"},"content":" public void build_default_returnsPerson() {","lastModifiedDate":"2024-03-01"},{"lineNumber":114,"author":{"gitId":"joenus"},"content":" var builder \u003d new Person.Builder(ALICE);","lastModifiedDate":"2024-03-01"},{"lineNumber":115,"author":{"gitId":"joenus"},"content":" assertEquals(ALICE, builder.build());","lastModifiedDate":"2024-03-01"},{"lineNumber":116,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":117,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":118,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":119,"author":{"gitId":"joenus"},"content":" public void build_updateValues_returnsPerson() {","lastModifiedDate":"2024-03-01"},{"lineNumber":120,"author":{"gitId":"joenus"},"content":" var builder \u003d new Person.Builder(ALICE)","lastModifiedDate":"2024-03-01"},{"lineNumber":121,"author":{"gitId":"joenus"},"content":" .setName(BENSON.getName())","lastModifiedDate":"2024-03-01"},{"lineNumber":122,"author":{"gitId":"joenus"},"content":" .setPhone(BENSON.getPhone())","lastModifiedDate":"2024-03-01"},{"lineNumber":123,"author":{"gitId":"joenus"},"content":" .setEmail(BENSON.getEmail())","lastModifiedDate":"2024-03-01"},{"lineNumber":124,"author":{"gitId":"joenus"},"content":" .setAddress(BENSON.getAddress())","lastModifiedDate":"2024-03-01"},{"lineNumber":125,"author":{"gitId":"joenus"},"content":" .setTags(BENSON.getTags())","lastModifiedDate":"2024-03-01"},{"lineNumber":126,"author":{"gitId":"joenus"},"content":" .setNotes(BENSON.getNotes());","lastModifiedDate":"2024-03-01"},{"lineNumber":127,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":128,"author":{"gitId":"joenus"},"content":" assertEquals(BENSON, builder.build());","lastModifiedDate":"2024-03-01"},{"lineNumber":129,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":130,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":131,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-09-01"}],"authorContributionMap":{"joenus":43,"-":88}},{"path":"src/test/java/seedu/address/model/person/note/DescriptionTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"joenus"},"content":"package seedu.address.model.person.note;","lastModifiedDate":"2024-02-29"},{"lineNumber":2,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":3,"author":{"gitId":"joenus"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2024-03-01"},{"lineNumber":4,"author":{"gitId":"joenus"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2024-02-29"},{"lineNumber":5,"author":{"gitId":"joenus"},"content":"import static org.junit.jupiter.api.Assertions.assertNotEquals;","lastModifiedDate":"2024-03-01"},{"lineNumber":6,"author":{"gitId":"joenus"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2024-02-29"},{"lineNumber":7,"author":{"gitId":"joenus"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2024-02-29"},{"lineNumber":8,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":9,"author":{"gitId":"joenus"},"content":"import org.junit.jupiter.api.Nested;","lastModifiedDate":"2024-02-29"},{"lineNumber":10,"author":{"gitId":"joenus"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2024-02-29"},{"lineNumber":11,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":12,"author":{"gitId":"joenus"},"content":"public class DescriptionTest {","lastModifiedDate":"2024-02-29"},{"lineNumber":13,"author":{"gitId":"joenus"},"content":" @Nested","lastModifiedDate":"2024-02-29"},{"lineNumber":14,"author":{"gitId":"joenus"},"content":" class ConstructorTests {","lastModifiedDate":"2024-02-29"},{"lineNumber":15,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-02-29"},{"lineNumber":16,"author":{"gitId":"joenus"},"content":" public void constructor_null_throwsNullPointerException() {","lastModifiedDate":"2024-02-29"},{"lineNumber":17,"author":{"gitId":"joenus"},"content":" assertThrows(NullPointerException.class, () -\u003e new Description(null));","lastModifiedDate":"2024-02-29"},{"lineNumber":18,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":19,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":20,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-02-29"},{"lineNumber":21,"author":{"gitId":"joenus"},"content":" public void constructor_invalidAddress_throwsIllegalArgumentException() {","lastModifiedDate":"2024-02-29"},{"lineNumber":22,"author":{"gitId":"joenus"},"content":" String invalid \u003d \"\";","lastModifiedDate":"2024-02-29"},{"lineNumber":23,"author":{"gitId":"joenus"},"content":" assertThrows(IllegalArgumentException.class, () -\u003e new Description(invalid));","lastModifiedDate":"2024-02-29"},{"lineNumber":24,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":25,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":26,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":27,"author":{"gitId":"joenus"},"content":" @Nested","lastModifiedDate":"2024-02-29"},{"lineNumber":28,"author":{"gitId":"joenus"},"content":" class IsValidTests {","lastModifiedDate":"2024-02-29"},{"lineNumber":29,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-02-29"},{"lineNumber":30,"author":{"gitId":"joenus"},"content":" public void isValid_null_throwsNullPointerException() {","lastModifiedDate":"2024-02-29"},{"lineNumber":31,"author":{"gitId":"joenus"},"content":" assertThrows(NullPointerException.class, () -\u003e Description.isValid(null));","lastModifiedDate":"2024-02-29"},{"lineNumber":32,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":33,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":34,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-02-29"},{"lineNumber":35,"author":{"gitId":"joenus"},"content":" public void isValid_invalid() {","lastModifiedDate":"2024-02-29"},{"lineNumber":36,"author":{"gitId":"joenus"},"content":" assertFalse(Description.isValid(\"\"));","lastModifiedDate":"2024-02-29"},{"lineNumber":37,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":38,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":39,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-02-29"},{"lineNumber":40,"author":{"gitId":"joenus"},"content":" public void isValid_valid() {","lastModifiedDate":"2024-02-29"},{"lineNumber":41,"author":{"gitId":"joenus"},"content":" assertTrue(Description.isValid(\"Blk 456, Den Road, #01-355\"));","lastModifiedDate":"2024-02-29"},{"lineNumber":42,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":43,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":44,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":45,"author":{"gitId":"joenus"},"content":" @Nested","lastModifiedDate":"2024-03-01"},{"lineNumber":46,"author":{"gitId":"joenus"},"content":" class EqualsTests {","lastModifiedDate":"2024-03-01"},{"lineNumber":47,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":48,"author":{"gitId":"joenus"},"content":" public void equals_sameValues() {","lastModifiedDate":"2024-03-01"},{"lineNumber":49,"author":{"gitId":"joenus"},"content":" Description description1 \u003d new Description(\"Test\");","lastModifiedDate":"2024-03-01"},{"lineNumber":50,"author":{"gitId":"joenus"},"content":" Description description2 \u003d new Description(\"Test\");","lastModifiedDate":"2024-03-01"},{"lineNumber":51,"author":{"gitId":"joenus"},"content":" assertEquals(description1, description2);","lastModifiedDate":"2024-03-01"},{"lineNumber":52,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":53,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":54,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":55,"author":{"gitId":"joenus"},"content":" public void equals_differentValues() {","lastModifiedDate":"2024-03-01"},{"lineNumber":56,"author":{"gitId":"joenus"},"content":" Description description1 \u003d new Description(\"Test1\");","lastModifiedDate":"2024-03-01"},{"lineNumber":57,"author":{"gitId":"joenus"},"content":" Description description2 \u003d new Description(\"Test2\");","lastModifiedDate":"2024-03-01"},{"lineNumber":58,"author":{"gitId":"joenus"},"content":" assertNotEquals(description1, description2);","lastModifiedDate":"2024-03-01"},{"lineNumber":59,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":60,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":61,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":62,"author":{"gitId":"joenus"},"content":" public void equals_null() {","lastModifiedDate":"2024-03-01"},{"lineNumber":63,"author":{"gitId":"joenus"},"content":" Description description \u003d new Description(\"Test\");","lastModifiedDate":"2024-03-01"},{"lineNumber":64,"author":{"gitId":"joenus"},"content":" assertNotEquals(description, null);","lastModifiedDate":"2024-03-01"},{"lineNumber":65,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":66,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":67,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":68,"author":{"gitId":"joenus"},"content":" public void equals_differentClass() {","lastModifiedDate":"2024-03-01"},{"lineNumber":69,"author":{"gitId":"joenus"},"content":" Description description \u003d new Description(\"Test\");","lastModifiedDate":"2024-03-01"},{"lineNumber":70,"author":{"gitId":"joenus"},"content":" Object other \u003d new Object();","lastModifiedDate":"2024-03-01"},{"lineNumber":71,"author":{"gitId":"joenus"},"content":" assertNotEquals(description, other);","lastModifiedDate":"2024-03-01"},{"lineNumber":72,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":73,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":74,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":75,"author":{"gitId":"joenus"},"content":" @Nested","lastModifiedDate":"2024-03-01"},{"lineNumber":76,"author":{"gitId":"joenus"},"content":" class HashCodeTests {","lastModifiedDate":"2024-03-01"},{"lineNumber":77,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":78,"author":{"gitId":"joenus"},"content":" public void hashCode_same() {","lastModifiedDate":"2024-03-01"},{"lineNumber":79,"author":{"gitId":"joenus"},"content":" Description description1 \u003d new Description(\"Test\");","lastModifiedDate":"2024-03-01"},{"lineNumber":80,"author":{"gitId":"joenus"},"content":" Description description2 \u003d new Description(\"Test\");","lastModifiedDate":"2024-03-01"},{"lineNumber":81,"author":{"gitId":"joenus"},"content":" assertEquals(description1.hashCode(), description2.hashCode());","lastModifiedDate":"2024-03-01"},{"lineNumber":82,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":83,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":84,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":85,"author":{"gitId":"joenus"},"content":" public void hashCode_different() {","lastModifiedDate":"2024-03-01"},{"lineNumber":86,"author":{"gitId":"joenus"},"content":" Description description1 \u003d new Description(\"Test1\");","lastModifiedDate":"2024-03-01"},{"lineNumber":87,"author":{"gitId":"joenus"},"content":" Description description2 \u003d new Description(\"Test2\");","lastModifiedDate":"2024-03-01"},{"lineNumber":88,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":89,"author":{"gitId":"joenus"},"content":" assertNotEquals(description1.hashCode(), description2.hashCode());","lastModifiedDate":"2024-03-01"},{"lineNumber":90,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":91,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":92,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":93,"author":{"gitId":"joenus"},"content":" @Nested","lastModifiedDate":"2024-03-01"},{"lineNumber":94,"author":{"gitId":"joenus"},"content":" class ToStringTests {","lastModifiedDate":"2024-03-01"},{"lineNumber":95,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":96,"author":{"gitId":"joenus"},"content":" public void toString_sucess() {","lastModifiedDate":"2024-03-01"},{"lineNumber":97,"author":{"gitId":"joenus"},"content":" String validDescription \u003d \"Some valid description\";","lastModifiedDate":"2024-03-01"},{"lineNumber":98,"author":{"gitId":"joenus"},"content":" Description description \u003d new Description(validDescription);","lastModifiedDate":"2024-03-01"},{"lineNumber":99,"author":{"gitId":"joenus"},"content":" assertEquals(validDescription, description.toString());","lastModifiedDate":"2024-03-01"},{"lineNumber":100,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":101,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":102,"author":{"gitId":"joenus"},"content":"}","lastModifiedDate":"2024-02-29"}],"authorContributionMap":{"joenus":102}},{"path":"src/test/java/seedu/address/model/person/note/NoteTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"joenus"},"content":"package seedu.address.model.person.note;","lastModifiedDate":"2024-02-29"},{"lineNumber":2,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":3,"author":{"gitId":"joenus"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2024-03-01"},{"lineNumber":4,"author":{"gitId":"joenus"},"content":"import static org.junit.jupiter.api.Assertions.assertNotEquals;","lastModifiedDate":"2024-03-01"},{"lineNumber":5,"author":{"gitId":"joenus"},"content":"import static org.junit.jupiter.api.Assertions.assertNotNull;","lastModifiedDate":"2024-03-01"},{"lineNumber":6,"author":{"gitId":"joenus"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2024-02-29"},{"lineNumber":7,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":8,"author":{"gitId":"joenus"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-03-01"},{"lineNumber":9,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":10,"author":{"gitId":"joenus"},"content":"import org.junit.jupiter.api.Nested;","lastModifiedDate":"2024-02-29"},{"lineNumber":11,"author":{"gitId":"joenus"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2024-02-29"},{"lineNumber":12,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":13,"author":{"gitId":"joenus"},"content":"public class NoteTest {","lastModifiedDate":"2024-02-29"},{"lineNumber":14,"author":{"gitId":"joenus"},"content":" @Nested","lastModifiedDate":"2024-02-29"},{"lineNumber":15,"author":{"gitId":"joenus"},"content":" class ConstructorTests {","lastModifiedDate":"2024-02-29"},{"lineNumber":16,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-02-29"},{"lineNumber":17,"author":{"gitId":"joenus"},"content":" public void constructor_null_throwsNullPointerException() {","lastModifiedDate":"2024-02-29"},{"lineNumber":18,"author":{"gitId":"joenus"},"content":" assertThrows(NullPointerException.class, () -\u003e new Note(null, null));","lastModifiedDate":"2024-02-29"},{"lineNumber":19,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":20,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":21,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":22,"author":{"gitId":"joenus"},"content":" public void constructor_success_createsInstance() {","lastModifiedDate":"2024-03-01"},{"lineNumber":23,"author":{"gitId":"joenus"},"content":" LocalDateTime dateTime \u003d LocalDateTime.now();","lastModifiedDate":"2024-03-01"},{"lineNumber":24,"author":{"gitId":"joenus"},"content":" Description description \u003d new Description(\"Some description\");","lastModifiedDate":"2024-03-01"},{"lineNumber":25,"author":{"gitId":"joenus"},"content":" Note note \u003d new Note(dateTime, description);","lastModifiedDate":"2024-03-01"},{"lineNumber":26,"author":{"gitId":"joenus"},"content":" assertNotNull(note);","lastModifiedDate":"2024-03-01"},{"lineNumber":27,"author":{"gitId":"joenus"},"content":" assertEquals(dateTime, note.getDateTime());","lastModifiedDate":"2024-03-01"},{"lineNumber":28,"author":{"gitId":"joenus"},"content":" assertEquals(description, note.getDescription());","lastModifiedDate":"2024-03-01"},{"lineNumber":29,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":30,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":31,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":32,"author":{"gitId":"joenus"},"content":" @Nested","lastModifiedDate":"2024-03-01"},{"lineNumber":33,"author":{"gitId":"joenus"},"content":" class EqualsTests {","lastModifiedDate":"2024-03-01"},{"lineNumber":34,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":35,"author":{"gitId":"joenus"},"content":" public void equals_same() {","lastModifiedDate":"2024-03-01"},{"lineNumber":36,"author":{"gitId":"joenus"},"content":" LocalDateTime dateTime \u003d LocalDateTime.now();","lastModifiedDate":"2024-03-01"},{"lineNumber":37,"author":{"gitId":"joenus"},"content":" Description description \u003d new Description(\"Test description\");","lastModifiedDate":"2024-03-01"},{"lineNumber":38,"author":{"gitId":"joenus"},"content":" Note note1 \u003d new Note(dateTime, description);","lastModifiedDate":"2024-03-01"},{"lineNumber":39,"author":{"gitId":"joenus"},"content":" Note note2 \u003d new Note(dateTime, description);","lastModifiedDate":"2024-03-01"},{"lineNumber":40,"author":{"gitId":"joenus"},"content":" assertEquals(note1, note2);","lastModifiedDate":"2024-03-01"},{"lineNumber":41,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":42,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":43,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":44,"author":{"gitId":"joenus"},"content":" public void equals_differentDateTime() {","lastModifiedDate":"2024-03-01"},{"lineNumber":45,"author":{"gitId":"joenus"},"content":" Description description \u003d new Description(\"Test description\");","lastModifiedDate":"2024-03-01"},{"lineNumber":46,"author":{"gitId":"joenus"},"content":" Note note1 \u003d new Note(LocalDateTime.now(), description);","lastModifiedDate":"2024-03-01"},{"lineNumber":47,"author":{"gitId":"joenus"},"content":" Note note2 \u003d new Note(LocalDateTime.now().plusDays(1), description);","lastModifiedDate":"2024-03-01"},{"lineNumber":48,"author":{"gitId":"joenus"},"content":" assertNotEquals(note1, note2);","lastModifiedDate":"2024-03-01"},{"lineNumber":49,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":50,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":51,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":52,"author":{"gitId":"joenus"},"content":" public void equals_differentDescription() {","lastModifiedDate":"2024-03-01"},{"lineNumber":53,"author":{"gitId":"joenus"},"content":" LocalDateTime dateTime \u003d LocalDateTime.now();","lastModifiedDate":"2024-03-01"},{"lineNumber":54,"author":{"gitId":"joenus"},"content":" Note note1 \u003d new Note(dateTime, new Description(\"Description 1\"));","lastModifiedDate":"2024-03-01"},{"lineNumber":55,"author":{"gitId":"joenus"},"content":" Note note2 \u003d new Note(dateTime, new Description(\"Description 2\"));","lastModifiedDate":"2024-03-01"},{"lineNumber":56,"author":{"gitId":"joenus"},"content":" assertNotEquals(note1, note2);","lastModifiedDate":"2024-03-01"},{"lineNumber":57,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":58,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":59,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":60,"author":{"gitId":"joenus"},"content":" @Nested","lastModifiedDate":"2024-03-01"},{"lineNumber":61,"author":{"gitId":"joenus"},"content":" class HashCodeTests {","lastModifiedDate":"2024-03-01"},{"lineNumber":62,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":63,"author":{"gitId":"joenus"},"content":" public void hashCode_same() {","lastModifiedDate":"2024-03-01"},{"lineNumber":64,"author":{"gitId":"joenus"},"content":" LocalDateTime dateTime \u003d LocalDateTime.now();","lastModifiedDate":"2024-03-01"},{"lineNumber":65,"author":{"gitId":"joenus"},"content":" Description description \u003d new Description(\"Test description\");","lastModifiedDate":"2024-03-01"},{"lineNumber":66,"author":{"gitId":"joenus"},"content":" Note note1 \u003d new Note(dateTime, description);","lastModifiedDate":"2024-03-01"},{"lineNumber":67,"author":{"gitId":"joenus"},"content":" Note note2 \u003d new Note(dateTime, description);","lastModifiedDate":"2024-03-01"},{"lineNumber":68,"author":{"gitId":"joenus"},"content":" assertEquals(note1.hashCode(), note2.hashCode());","lastModifiedDate":"2024-03-01"},{"lineNumber":69,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":70,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":71,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":72,"author":{"gitId":"joenus"},"content":" public void hashCode_different() {","lastModifiedDate":"2024-03-01"},{"lineNumber":73,"author":{"gitId":"joenus"},"content":" LocalDateTime dateTime \u003d LocalDateTime.now();","lastModifiedDate":"2024-03-01"},{"lineNumber":74,"author":{"gitId":"joenus"},"content":" Description description \u003d new Description(\"Test description\");","lastModifiedDate":"2024-03-01"},{"lineNumber":75,"author":{"gitId":"joenus"},"content":" Note note1 \u003d new Note(dateTime, description);","lastModifiedDate":"2024-03-01"},{"lineNumber":76,"author":{"gitId":"joenus"},"content":" Note note2 \u003d new Note(dateTime, description);","lastModifiedDate":"2024-03-01"},{"lineNumber":77,"author":{"gitId":"joenus"},"content":" assertEquals(note1.hashCode(), note2.hashCode());","lastModifiedDate":"2024-03-01"},{"lineNumber":78,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":79,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":80,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":81,"author":{"gitId":"joenus"},"content":" @Nested","lastModifiedDate":"2024-03-01"},{"lineNumber":82,"author":{"gitId":"joenus"},"content":" class ToStringTests {","lastModifiedDate":"2024-03-01"},{"lineNumber":83,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":84,"author":{"gitId":"joenus"},"content":" public void toString_success() {","lastModifiedDate":"2024-03-01"},{"lineNumber":85,"author":{"gitId":"joenus"},"content":" LocalDateTime dateTime \u003d LocalDateTime.of(2023, 4, 20, 15, 30);","lastModifiedDate":"2024-03-01"},{"lineNumber":86,"author":{"gitId":"joenus"},"content":" Description description \u003d new Description(\"Appointment at clinic\");","lastModifiedDate":"2024-03-01"},{"lineNumber":87,"author":{"gitId":"joenus"},"content":" Note note \u003d new Note(dateTime, description);","lastModifiedDate":"2024-03-01"},{"lineNumber":88,"author":{"gitId":"joenus"},"content":" String expected \u003d","lastModifiedDate":"2024-03-01"},{"lineNumber":89,"author":{"gitId":"joenus"},"content":" String.format(\"seedu.address.model.person.note.Note{dateTime\u003d%s, description\u003d%s}\", dateTime,","lastModifiedDate":"2024-03-01"},{"lineNumber":90,"author":{"gitId":"joenus"},"content":" description);","lastModifiedDate":"2024-03-01"},{"lineNumber":91,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":92,"author":{"gitId":"joenus"},"content":" assertEquals(expected, note.toString());","lastModifiedDate":"2024-03-01"},{"lineNumber":93,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":94,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":95,"author":{"gitId":"joenus"},"content":"}","lastModifiedDate":"2024-02-29"}],"authorContributionMap":{"joenus":95}},{"path":"src/test/java/seedu/address/model/person/tag/TagTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"joenus"},"content":"package seedu.address.model.person.tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-04"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-14"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-03-14"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-04"},{"lineNumber":7,"author":{"gitId":"-"},"content":"public class TagTest {","lastModifiedDate":"2017-12-04"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-04"},{"lineNumber":9,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-12-04"},{"lineNumber":10,"author":{"gitId":"-"},"content":" public void constructor_null_throwsNullPointerException() {","lastModifiedDate":"2017-12-04"},{"lineNumber":11,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e new Tag(null));","lastModifiedDate":"2019-03-14"},{"lineNumber":12,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-12-04"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-04"},{"lineNumber":14,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-30"},{"lineNumber":15,"author":{"gitId":"-"},"content":" public void constructor_invalidTagName_throwsIllegalArgumentException() {","lastModifiedDate":"2017-05-30"},{"lineNumber":16,"author":{"gitId":"-"},"content":" String invalidTagName \u003d \"\";","lastModifiedDate":"2017-05-30"},{"lineNumber":17,"author":{"gitId":"-"},"content":" assertThrows(IllegalArgumentException.class, () -\u003e new Tag(invalidTagName));","lastModifiedDate":"2019-03-14"},{"lineNumber":18,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":20,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-12-04"},{"lineNumber":21,"author":{"gitId":"-"},"content":" public void isValidTagName() {","lastModifiedDate":"2017-12-04"},{"lineNumber":22,"author":{"gitId":"-"},"content":" // null tag name","lastModifiedDate":"2017-12-04"},{"lineNumber":23,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e Tag.isValidTagName(null));","lastModifiedDate":"2019-03-14"},{"lineNumber":24,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-12-04"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-04"},{"lineNumber":26,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-12-04"}],"authorContributionMap":{"joenus":1,"-":25}},{"path":"src/test/java/seedu/address/model/util/SampleDataUtilTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"joenus"},"content":"package seedu.address.model.util;","lastModifiedDate":"2024-03-01"},{"lineNumber":2,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":3,"author":{"gitId":"joenus"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2024-03-01"},{"lineNumber":4,"author":{"gitId":"joenus"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2024-03-01"},{"lineNumber":5,"author":{"gitId":"joenus"},"content":"import static org.junit.jupiter.api.Assertions.assertNotNull;","lastModifiedDate":"2024-03-01"},{"lineNumber":6,"author":{"gitId":"joenus"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2024-03-01"},{"lineNumber":7,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":8,"author":{"gitId":"joenus"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-03-01"},{"lineNumber":9,"author":{"gitId":"joenus"},"content":"import java.util.Set;","lastModifiedDate":"2024-03-01"},{"lineNumber":10,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":11,"author":{"gitId":"joenus"},"content":"import org.junit.jupiter.api.Nested;","lastModifiedDate":"2024-03-01"},{"lineNumber":12,"author":{"gitId":"joenus"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2024-03-01"},{"lineNumber":13,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":14,"author":{"gitId":"joenus"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2024-03-01"},{"lineNumber":15,"author":{"gitId":"joenus"},"content":"import seedu.address.model.ReadOnlyAddressBook;","lastModifiedDate":"2024-03-01"},{"lineNumber":16,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Description;","lastModifiedDate":"2024-03-01"},{"lineNumber":17,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Note;","lastModifiedDate":"2024-03-01"},{"lineNumber":18,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.tag.Tag;","lastModifiedDate":"2024-03-01"},{"lineNumber":19,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":20,"author":{"gitId":"joenus"},"content":"public class SampleDataUtilTest {","lastModifiedDate":"2024-03-01"},{"lineNumber":21,"author":{"gitId":"joenus"},"content":" private static final LocalDateTime TEST_DATE_TIME \u003d LocalDateTime.of(2024, 1, 1, 12, 30);","lastModifiedDate":"2024-03-01"},{"lineNumber":22,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":23,"author":{"gitId":"joenus"},"content":" @Nested","lastModifiedDate":"2024-03-01"},{"lineNumber":24,"author":{"gitId":"joenus"},"content":" class GetSampleAddressBookTests {","lastModifiedDate":"2024-03-01"},{"lineNumber":25,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":26,"author":{"gitId":"joenus"},"content":" public void getSampleAddressBook_success_returnsAddressBook() {","lastModifiedDate":"2024-03-01"},{"lineNumber":27,"author":{"gitId":"joenus"},"content":" ReadOnlyAddressBook result \u003d SampleDataUtil.getSampleAddressBook();","lastModifiedDate":"2024-03-01"},{"lineNumber":28,"author":{"gitId":"joenus"},"content":" assertNotNull(result);","lastModifiedDate":"2024-03-01"},{"lineNumber":29,"author":{"gitId":"joenus"},"content":" assertFalse(result.getPersonList().isEmpty());","lastModifiedDate":"2024-03-01"},{"lineNumber":30,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":31,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":32,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":33,"author":{"gitId":"joenus"},"content":" @Nested","lastModifiedDate":"2024-03-01"},{"lineNumber":34,"author":{"gitId":"joenus"},"content":" class GetTagsTests {","lastModifiedDate":"2024-03-01"},{"lineNumber":35,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":36,"author":{"gitId":"joenus"},"content":" void getTags_success_returnsEmptySet() {","lastModifiedDate":"2024-03-01"},{"lineNumber":37,"author":{"gitId":"joenus"},"content":" Set\u003cTag\u003e tags \u003d SampleDataUtil.getTags();","lastModifiedDate":"2024-03-01"},{"lineNumber":38,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":39,"author":{"gitId":"joenus"},"content":" assertTrue(tags.isEmpty());","lastModifiedDate":"2024-03-01"},{"lineNumber":40,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":41,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":42,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":43,"author":{"gitId":"joenus"},"content":" public void getTags_success_returnsPopulatedSet() {","lastModifiedDate":"2024-03-01"},{"lineNumber":44,"author":{"gitId":"joenus"},"content":" String[] tags \u003d {\"friend\", \"colleague\"};","lastModifiedDate":"2024-03-01"},{"lineNumber":45,"author":{"gitId":"joenus"},"content":" Set\u003cTag\u003e result \u003d SampleDataUtil.getTags(tags);","lastModifiedDate":"2024-03-01"},{"lineNumber":46,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":47,"author":{"gitId":"joenus"},"content":" assertEquals(2, result.size());","lastModifiedDate":"2024-03-01"},{"lineNumber":48,"author":{"gitId":"joenus"},"content":" assertTrue(result.contains(new Tag(tags[0])));","lastModifiedDate":"2024-03-01"},{"lineNumber":49,"author":{"gitId":"joenus"},"content":" assertTrue(result.contains(new Tag(tags[1])));","lastModifiedDate":"2024-03-01"},{"lineNumber":50,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":51,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":52,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":53,"author":{"gitId":"joenus"},"content":" @Nested","lastModifiedDate":"2024-03-01"},{"lineNumber":54,"author":{"gitId":"joenus"},"content":" class GetNotesTests {","lastModifiedDate":"2024-03-01"},{"lineNumber":55,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":56,"author":{"gitId":"joenus"},"content":" public void getNotes_success_returnsEmptyList() {","lastModifiedDate":"2024-03-01"},{"lineNumber":57,"author":{"gitId":"joenus"},"content":" Note[] notes \u003d {};","lastModifiedDate":"2024-03-01"},{"lineNumber":58,"author":{"gitId":"joenus"},"content":" ObservableList\u003cNote\u003e result \u003d SampleDataUtil.getNotes(notes);","lastModifiedDate":"2024-03-01"},{"lineNumber":59,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":60,"author":{"gitId":"joenus"},"content":" assertTrue(result.isEmpty());","lastModifiedDate":"2024-03-01"},{"lineNumber":61,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":62,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":63,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":64,"author":{"gitId":"joenus"},"content":" public void getNotes_success_returnsPopulatedList() {","lastModifiedDate":"2024-03-01"},{"lineNumber":65,"author":{"gitId":"joenus"},"content":" var note1 \u003d new Note(TEST_DATE_TIME, new Description(\"Sample note 1\"));","lastModifiedDate":"2024-03-01"},{"lineNumber":66,"author":{"gitId":"joenus"},"content":" var note2 \u003d new Note(TEST_DATE_TIME, new Description(\"Sample note 2\"));","lastModifiedDate":"2024-03-01"},{"lineNumber":67,"author":{"gitId":"joenus"},"content":" Note[] notes \u003d {note1, note2};","lastModifiedDate":"2024-03-01"},{"lineNumber":68,"author":{"gitId":"joenus"},"content":" ObservableList\u003cNote\u003e result \u003d SampleDataUtil.getNotes(notes);","lastModifiedDate":"2024-03-01"},{"lineNumber":69,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":70,"author":{"gitId":"joenus"},"content":" assertEquals(2, result.size());","lastModifiedDate":"2024-03-01"},{"lineNumber":71,"author":{"gitId":"joenus"},"content":" assertEquals(note1, result.get(0));","lastModifiedDate":"2024-03-01"},{"lineNumber":72,"author":{"gitId":"joenus"},"content":" assertEquals(note2, result.get(1));","lastModifiedDate":"2024-03-01"},{"lineNumber":73,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":74,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":75,"author":{"gitId":"joenus"},"content":"}","lastModifiedDate":"2024-03-01"}],"authorContributionMap":{"joenus":75}},{"path":"src/test/java/seedu/address/storage/JsonAdapatedNoteTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"joenus"},"content":"package seedu.address.storage;","lastModifiedDate":"2024-03-01"},{"lineNumber":2,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":3,"author":{"gitId":"joenus"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2024-03-01"},{"lineNumber":4,"author":{"gitId":"joenus"},"content":"import static org.junit.jupiter.api.Assertions.assertNotNull;","lastModifiedDate":"2024-03-01"},{"lineNumber":5,"author":{"gitId":"joenus"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2024-03-01"},{"lineNumber":6,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":7,"author":{"gitId":"joenus"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-03-01"},{"lineNumber":8,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":9,"author":{"gitId":"joenus"},"content":"import org.junit.jupiter.api.Nested;","lastModifiedDate":"2024-03-01"},{"lineNumber":10,"author":{"gitId":"joenus"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2024-03-01"},{"lineNumber":11,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":12,"author":{"gitId":"joenus"},"content":"import seedu.address.commons.exceptions.IllegalValueException;","lastModifiedDate":"2024-03-01"},{"lineNumber":13,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Description;","lastModifiedDate":"2024-03-01"},{"lineNumber":14,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Note;","lastModifiedDate":"2024-03-01"},{"lineNumber":15,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":16,"author":{"gitId":"joenus"},"content":"public class JsonAdapatedNoteTest {","lastModifiedDate":"2024-03-01"},{"lineNumber":17,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":18,"author":{"gitId":"joenus"},"content":" private static final LocalDateTime TEST_DATE_TIME \u003d LocalDateTime.of(2024, 1, 1, 12, 30);","lastModifiedDate":"2024-03-01"},{"lineNumber":19,"author":{"gitId":"joenus"},"content":" private static final String VALID_DESCRIPTION \u003d \"General Flu\";","lastModifiedDate":"2024-03-01"},{"lineNumber":20,"author":{"gitId":"joenus"},"content":" private static final String INVALID_DESCRIPTION \u003d \"\";","lastModifiedDate":"2024-03-01"},{"lineNumber":21,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":22,"author":{"gitId":"joenus"},"content":" @Nested","lastModifiedDate":"2024-03-01"},{"lineNumber":23,"author":{"gitId":"joenus"},"content":" class ConstructorTests {","lastModifiedDate":"2024-03-01"},{"lineNumber":24,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":25,"author":{"gitId":"joenus"},"content":" public void constructor_jsonProperty_returnsNote() {","lastModifiedDate":"2024-03-01"},{"lineNumber":26,"author":{"gitId":"joenus"},"content":" JsonAdapatedNote jsonAdapatedNote \u003d new JsonAdapatedNote(TEST_DATE_TIME, VALID_DESCRIPTION);","lastModifiedDate":"2024-03-01"},{"lineNumber":27,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":28,"author":{"gitId":"joenus"},"content":" assertNotNull(jsonAdapatedNote);","lastModifiedDate":"2024-03-01"},{"lineNumber":29,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":30,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":31,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":32,"author":{"gitId":"joenus"},"content":" public void constructor_note_returnsNote() {","lastModifiedDate":"2024-03-01"},{"lineNumber":33,"author":{"gitId":"joenus"},"content":" JsonAdapatedNote jsonAdapatedNote \u003d","lastModifiedDate":"2024-03-01"},{"lineNumber":34,"author":{"gitId":"joenus"},"content":" new JsonAdapatedNote(new Note(TEST_DATE_TIME, new Description(VALID_DESCRIPTION)));","lastModifiedDate":"2024-03-01"},{"lineNumber":35,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":36,"author":{"gitId":"joenus"},"content":" assertNotNull(jsonAdapatedNote);","lastModifiedDate":"2024-03-01"},{"lineNumber":37,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":38,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":39,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":40,"author":{"gitId":"joenus"},"content":" @Nested","lastModifiedDate":"2024-03-01"},{"lineNumber":41,"author":{"gitId":"joenus"},"content":" class ToModelTypeTests {","lastModifiedDate":"2024-03-01"},{"lineNumber":42,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":43,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":44,"author":{"gitId":"joenus"},"content":" public void toModelType_success_returnsNote() throws Exception {","lastModifiedDate":"2024-03-01"},{"lineNumber":45,"author":{"gitId":"joenus"},"content":" Note original \u003d new Note(TEST_DATE_TIME, new Description(VALID_DESCRIPTION));","lastModifiedDate":"2024-03-01"},{"lineNumber":46,"author":{"gitId":"joenus"},"content":" JsonAdapatedNote jsonAdapatedNote \u003d new JsonAdapatedNote(original);","lastModifiedDate":"2024-03-01"},{"lineNumber":47,"author":{"gitId":"joenus"},"content":" Note modelNote \u003d jsonAdapatedNote.toModelType();","lastModifiedDate":"2024-03-01"},{"lineNumber":48,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":49,"author":{"gitId":"joenus"},"content":" assertEquals(original, modelNote);","lastModifiedDate":"2024-03-01"},{"lineNumber":50,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":51,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":52,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":53,"author":{"gitId":"joenus"},"content":" public void toModelType_invalidDescription_throwsIllegalValueException() {","lastModifiedDate":"2024-03-01"},{"lineNumber":54,"author":{"gitId":"joenus"},"content":" JsonAdapatedNote jsonAdapatedNote \u003d new JsonAdapatedNote(TEST_DATE_TIME, INVALID_DESCRIPTION);","lastModifiedDate":"2024-03-01"},{"lineNumber":55,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":56,"author":{"gitId":"joenus"},"content":" assertThrows(IllegalValueException.class, jsonAdapatedNote::toModelType);","lastModifiedDate":"2024-03-01"},{"lineNumber":57,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":58,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":59,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":60,"author":{"gitId":"joenus"},"content":" public void toModelType_nullDescription_throwsIllegalValueException() {","lastModifiedDate":"2024-03-01"},{"lineNumber":61,"author":{"gitId":"joenus"},"content":" JsonAdapatedNote jsonAdapatedNote \u003d new JsonAdapatedNote(TEST_DATE_TIME, null);","lastModifiedDate":"2024-03-01"},{"lineNumber":62,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":63,"author":{"gitId":"joenus"},"content":" assertThrows(IllegalValueException.class, jsonAdapatedNote::toModelType);","lastModifiedDate":"2024-03-01"},{"lineNumber":64,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":65,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":66,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":67,"author":{"gitId":"joenus"},"content":"}","lastModifiedDate":"2024-03-01"}],"authorContributionMap":{"joenus":67}},{"path":"src/test/java/seedu/address/storage/JsonAdaptedPersonTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.storage;","lastModifiedDate":"2018-08-13"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-03-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.storage.JsonAdaptedPerson.MISSING_FIELD_MESSAGE_FORMAT;","lastModifiedDate":"2018-08-13"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-14"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.BENSON;","lastModifiedDate":"2018-08-13"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.ArrayList;","lastModifiedDate":"2018-08-13"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2018-08-13"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2018-08-13"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":14,"author":{"gitId":"joenus"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2024-02-29"},{"lineNumber":15,"author":{"gitId":"joenus"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2024-02-29"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.commons.exceptions.IllegalValueException;","lastModifiedDate":"2018-08-13"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2018-08-13"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2018-08-13"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2018-08-13"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2018-08-13"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":22,"author":{"gitId":"-"},"content":"public class JsonAdaptedPersonTest {","lastModifiedDate":"2018-08-13"},{"lineNumber":23,"author":{"gitId":"-"},"content":" private static final String INVALID_NAME \u003d \"R@chel\";","lastModifiedDate":"2018-08-13"},{"lineNumber":24,"author":{"gitId":"-"},"content":" private static final String INVALID_PHONE \u003d \"+651234\";","lastModifiedDate":"2018-08-13"},{"lineNumber":25,"author":{"gitId":"-"},"content":" private static final String INVALID_ADDRESS \u003d \" \";","lastModifiedDate":"2018-08-13"},{"lineNumber":26,"author":{"gitId":"-"},"content":" private static final String INVALID_EMAIL \u003d \"example.com\";","lastModifiedDate":"2018-08-13"},{"lineNumber":27,"author":{"gitId":"-"},"content":" private static final String INVALID_TAG \u003d \"#friend\";","lastModifiedDate":"2018-08-13"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":29,"author":{"gitId":"-"},"content":" private static final String VALID_NAME \u003d BENSON.getName().toString();","lastModifiedDate":"2018-08-13"},{"lineNumber":30,"author":{"gitId":"-"},"content":" private static final String VALID_PHONE \u003d BENSON.getPhone().toString();","lastModifiedDate":"2018-08-13"},{"lineNumber":31,"author":{"gitId":"-"},"content":" private static final String VALID_EMAIL \u003d BENSON.getEmail().toString();","lastModifiedDate":"2018-08-13"},{"lineNumber":32,"author":{"gitId":"-"},"content":" private static final String VALID_ADDRESS \u003d BENSON.getAddress().toString();","lastModifiedDate":"2018-08-13"},{"lineNumber":33,"author":{"gitId":"-"},"content":" private static final List\u003cJsonAdaptedTag\u003e VALID_TAGS \u003d BENSON.getTags().stream()","lastModifiedDate":"2018-08-13"},{"lineNumber":34,"author":{"gitId":"-"},"content":" .map(JsonAdaptedTag::new)","lastModifiedDate":"2018-08-13"},{"lineNumber":35,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2018-08-13"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":37,"author":{"gitId":"joenus"},"content":" private static final ObservableList\u003cJsonAdapatedNote\u003e VALID_NOTES \u003d BENSON.getNotes().stream()","lastModifiedDate":"2024-02-29"},{"lineNumber":38,"author":{"gitId":"joenus"},"content":" .map(JsonAdapatedNote::new)","lastModifiedDate":"2024-02-29"},{"lineNumber":39,"author":{"gitId":"joenus"},"content":" .collect(Collectors.toCollection(FXCollections::observableArrayList));","lastModifiedDate":"2024-02-29"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":41,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":42,"author":{"gitId":"-"},"content":" public void toModelType_validPersonDetails_returnsPerson() throws Exception {","lastModifiedDate":"2018-08-13"},{"lineNumber":43,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d new JsonAdaptedPerson(BENSON);","lastModifiedDate":"2018-08-13"},{"lineNumber":44,"author":{"gitId":"-"},"content":" assertEquals(BENSON, person.toModelType());","lastModifiedDate":"2018-08-13"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":47,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":48,"author":{"gitId":"-"},"content":" public void toModelType_invalidName_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":49,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2018-08-13"},{"lineNumber":50,"author":{"gitId":"joenus"},"content":" new JsonAdaptedPerson(INVALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS, VALID_NOTES);","lastModifiedDate":"2024-02-29"},{"lineNumber":51,"author":{"gitId":"-"},"content":" String expectedMessage \u003d Name.MESSAGE_CONSTRAINTS;","lastModifiedDate":"2018-08-13"},{"lineNumber":52,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":55,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":56,"author":{"gitId":"-"},"content":" public void toModelType_nullName_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":57,"author":{"gitId":"joenus"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2024-02-29"},{"lineNumber":58,"author":{"gitId":"joenus"},"content":" new JsonAdaptedPerson(null, VALID_PHONE, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS, VALID_NOTES);","lastModifiedDate":"2024-02-29"},{"lineNumber":59,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(MISSING_FIELD_MESSAGE_FORMAT, Name.class.getSimpleName());","lastModifiedDate":"2018-08-13"},{"lineNumber":60,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":63,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":64,"author":{"gitId":"-"},"content":" public void toModelType_invalidPhone_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":65,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2018-08-13"},{"lineNumber":66,"author":{"gitId":"joenus"},"content":" new JsonAdaptedPerson(VALID_NAME, INVALID_PHONE, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS, VALID_NOTES);","lastModifiedDate":"2024-02-29"},{"lineNumber":67,"author":{"gitId":"-"},"content":" String expectedMessage \u003d Phone.MESSAGE_CONSTRAINTS;","lastModifiedDate":"2018-08-13"},{"lineNumber":68,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":69,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":71,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":72,"author":{"gitId":"-"},"content":" public void toModelType_nullPhone_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":73,"author":{"gitId":"joenus"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2024-02-29"},{"lineNumber":74,"author":{"gitId":"joenus"},"content":" new JsonAdaptedPerson(VALID_NAME, null, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS, VALID_NOTES);","lastModifiedDate":"2024-02-29"},{"lineNumber":75,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(MISSING_FIELD_MESSAGE_FORMAT, Phone.class.getSimpleName());","lastModifiedDate":"2018-08-13"},{"lineNumber":76,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":77,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":78,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":79,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":80,"author":{"gitId":"-"},"content":" public void toModelType_invalidEmail_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":81,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2018-08-13"},{"lineNumber":82,"author":{"gitId":"joenus"},"content":" new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, INVALID_EMAIL, VALID_ADDRESS, VALID_TAGS, VALID_NOTES);","lastModifiedDate":"2024-02-29"},{"lineNumber":83,"author":{"gitId":"-"},"content":" String expectedMessage \u003d Email.MESSAGE_CONSTRAINTS;","lastModifiedDate":"2018-08-13"},{"lineNumber":84,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":85,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":87,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":88,"author":{"gitId":"-"},"content":" public void toModelType_nullEmail_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":89,"author":{"gitId":"joenus"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2024-02-29"},{"lineNumber":90,"author":{"gitId":"joenus"},"content":" new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, null, VALID_ADDRESS, VALID_TAGS, VALID_NOTES);","lastModifiedDate":"2024-02-29"},{"lineNumber":91,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(MISSING_FIELD_MESSAGE_FORMAT, Email.class.getSimpleName());","lastModifiedDate":"2018-08-13"},{"lineNumber":92,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":93,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":94,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":95,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":96,"author":{"gitId":"-"},"content":" public void toModelType_invalidAddress_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":97,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2018-08-13"},{"lineNumber":98,"author":{"gitId":"joenus"},"content":" new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, INVALID_ADDRESS, VALID_TAGS, VALID_NOTES);","lastModifiedDate":"2024-02-29"},{"lineNumber":99,"author":{"gitId":"-"},"content":" String expectedMessage \u003d Address.MESSAGE_CONSTRAINTS;","lastModifiedDate":"2018-08-13"},{"lineNumber":100,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":101,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":102,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":103,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":104,"author":{"gitId":"-"},"content":" public void toModelType_nullAddress_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":105,"author":{"gitId":"joenus"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2024-02-29"},{"lineNumber":106,"author":{"gitId":"joenus"},"content":" new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, null, VALID_TAGS, VALID_NOTES);","lastModifiedDate":"2024-02-29"},{"lineNumber":107,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(MISSING_FIELD_MESSAGE_FORMAT, Address.class.getSimpleName());","lastModifiedDate":"2018-08-13"},{"lineNumber":108,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":109,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":110,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":111,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":112,"author":{"gitId":"-"},"content":" public void toModelType_invalidTags_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":113,"author":{"gitId":"-"},"content":" List\u003cJsonAdaptedTag\u003e invalidTags \u003d new ArrayList\u003c\u003e(VALID_TAGS);","lastModifiedDate":"2018-08-13"},{"lineNumber":114,"author":{"gitId":"-"},"content":" invalidTags.add(new JsonAdaptedTag(INVALID_TAG));","lastModifiedDate":"2018-08-13"},{"lineNumber":115,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2018-08-13"},{"lineNumber":116,"author":{"gitId":"joenus"},"content":" new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_ADDRESS, invalidTags, VALID_NOTES);","lastModifiedDate":"2024-02-29"},{"lineNumber":117,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":118,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":119,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2018-08-13"}],"authorContributionMap":{"joenus":18,"-":101}},{"path":"src/test/java/seedu/address/storage/JsonSerializableAddressBookTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.storage;","lastModifiedDate":"2018-08-13"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-03-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.nio.file.Path;","lastModifiedDate":"2018-08-13"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2018-08-13"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.commons.exceptions.IllegalValueException;","lastModifiedDate":"2018-08-13"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.JsonUtil;","lastModifiedDate":"2018-08-13"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.model.AddressBook;","lastModifiedDate":"2018-08-13"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.testutil.TypicalPersons;","lastModifiedDate":"2018-08-13"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":16,"author":{"gitId":"-"},"content":"public class JsonSerializableAddressBookTest {","lastModifiedDate":"2018-08-13"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":18,"author":{"gitId":"-"},"content":" private static final Path TEST_DATA_FOLDER \u003d Paths.get(\"src\", \"test\", \"data\", \"JsonSerializableAddressBookTest\");","lastModifiedDate":"2018-08-13"},{"lineNumber":19,"author":{"gitId":"-"},"content":" private static final Path TYPICAL_PERSONS_FILE \u003d TEST_DATA_FOLDER.resolve(\"typicalPersonsAddressBook.json\");","lastModifiedDate":"2018-08-13"},{"lineNumber":20,"author":{"gitId":"-"},"content":" private static final Path INVALID_PERSON_FILE \u003d TEST_DATA_FOLDER.resolve(\"invalidPersonAddressBook.json\");","lastModifiedDate":"2018-08-13"},{"lineNumber":21,"author":{"gitId":"-"},"content":" private static final Path DUPLICATE_PERSON_FILE \u003d TEST_DATA_FOLDER.resolve(\"duplicatePersonAddressBook.json\");","lastModifiedDate":"2018-08-13"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":23,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":24,"author":{"gitId":"-"},"content":" public void toModelType_typicalPersonsFile_success() throws Exception {","lastModifiedDate":"2018-08-13"},{"lineNumber":25,"author":{"gitId":"-"},"content":" JsonSerializableAddressBook dataFromFile \u003d JsonUtil.readJsonFile(TYPICAL_PERSONS_FILE,","lastModifiedDate":"2018-08-13"},{"lineNumber":26,"author":{"gitId":"-"},"content":" JsonSerializableAddressBook.class).get();","lastModifiedDate":"2018-08-13"},{"lineNumber":27,"author":{"gitId":"-"},"content":" AddressBook addressBookFromFile \u003d dataFromFile.toModelType();","lastModifiedDate":"2018-08-13"},{"lineNumber":28,"author":{"gitId":"-"},"content":" AddressBook typicalPersonsAddressBook \u003d TypicalPersons.getTypicalAddressBook();","lastModifiedDate":"2018-08-13"},{"lineNumber":29,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":30,"author":{"gitId":"-"},"content":" assertEquals(addressBookFromFile, typicalPersonsAddressBook);","lastModifiedDate":"2018-08-13"},{"lineNumber":31,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":33,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":34,"author":{"gitId":"-"},"content":" public void toModelType_invalidPersonFile_throwsIllegalValueException() throws Exception {","lastModifiedDate":"2018-08-13"},{"lineNumber":35,"author":{"gitId":"-"},"content":" JsonSerializableAddressBook dataFromFile \u003d JsonUtil.readJsonFile(INVALID_PERSON_FILE,","lastModifiedDate":"2018-08-13"},{"lineNumber":36,"author":{"gitId":"-"},"content":" JsonSerializableAddressBook.class).get();","lastModifiedDate":"2018-08-13"},{"lineNumber":37,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, dataFromFile::toModelType);","lastModifiedDate":"2019-03-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":40,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":41,"author":{"gitId":"-"},"content":" public void toModelType_duplicatePersons_throwsIllegalValueException() throws Exception {","lastModifiedDate":"2018-08-13"},{"lineNumber":42,"author":{"gitId":"-"},"content":" JsonSerializableAddressBook dataFromFile \u003d JsonUtil.readJsonFile(DUPLICATE_PERSON_FILE,","lastModifiedDate":"2018-08-13"},{"lineNumber":43,"author":{"gitId":"-"},"content":" JsonSerializableAddressBook.class).get();","lastModifiedDate":"2018-08-13"},{"lineNumber":44,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, JsonSerializableAddressBook.MESSAGE_DUPLICATE_PERSON,","lastModifiedDate":"2019-03-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":" dataFromFile::toModelType);","lastModifiedDate":"2019-03-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2018-08-13"}],"authorContributionMap":{"joenus":1,"-":47}},{"path":"src/test/java/seedu/address/testutil/EditPersonDescriptorBuilder.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.testutil;","lastModifiedDate":"2017-05-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-12-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2017-12-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.stream.Stream;","lastModifiedDate":"2017-12-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand.EditPersonDescriptor;","lastModifiedDate":"2017-05-05"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2017-12-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2017-12-23"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2017-12-23"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-01-10"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2017-12-23"},{"lineNumber":13,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.tag.Tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-05-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":" * A utility class to help with building EditPersonDescriptor objects.","lastModifiedDate":"2017-05-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":"public class EditPersonDescriptorBuilder {","lastModifiedDate":"2017-05-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":" private EditPersonDescriptor descriptor;","lastModifiedDate":"2017-05-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":" public EditPersonDescriptorBuilder() {","lastModifiedDate":"2017-05-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":" descriptor \u003d new EditPersonDescriptor();","lastModifiedDate":"2017-05-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":" public EditPersonDescriptorBuilder(EditPersonDescriptor descriptor) {","lastModifiedDate":"2017-05-05"},{"lineNumber":27,"author":{"gitId":"-"},"content":" this.descriptor \u003d new EditPersonDescriptor(descriptor);","lastModifiedDate":"2017-05-05"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":30,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-06-05"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * Returns an {@code EditPersonDescriptor} with fields containing {@code person}\u0027s details","lastModifiedDate":"2017-06-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-06-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":" public EditPersonDescriptorBuilder(Person person) {","lastModifiedDate":"2018-01-10"},{"lineNumber":34,"author":{"gitId":"-"},"content":" descriptor \u003d new EditPersonDescriptor();","lastModifiedDate":"2017-06-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":" descriptor.setName(person.getName());","lastModifiedDate":"2017-06-21"},{"lineNumber":36,"author":{"gitId":"-"},"content":" descriptor.setPhone(person.getPhone());","lastModifiedDate":"2017-06-21"},{"lineNumber":37,"author":{"gitId":"-"},"content":" descriptor.setEmail(person.getEmail());","lastModifiedDate":"2017-06-21"},{"lineNumber":38,"author":{"gitId":"-"},"content":" descriptor.setAddress(person.getAddress());","lastModifiedDate":"2017-06-21"},{"lineNumber":39,"author":{"gitId":"-"},"content":" descriptor.setTags(person.getTags());","lastModifiedDate":"2017-06-21"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-05"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":42,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":43,"author":{"gitId":"-"},"content":" * Sets the {@code Name} of the {@code EditPersonDescriptor} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":44,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":45,"author":{"gitId":"-"},"content":" public EditPersonDescriptorBuilder withName(String name) {","lastModifiedDate":"2017-08-15"},{"lineNumber":46,"author":{"gitId":"-"},"content":" descriptor.setName(new Name(name));","lastModifiedDate":"2017-12-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2017-05-05"},{"lineNumber":48,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":50,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":51,"author":{"gitId":"-"},"content":" * Sets the {@code Phone} of the {@code EditPersonDescriptor} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":52,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":53,"author":{"gitId":"-"},"content":" public EditPersonDescriptorBuilder withPhone(String phone) {","lastModifiedDate":"2017-08-15"},{"lineNumber":54,"author":{"gitId":"-"},"content":" descriptor.setPhone(new Phone(phone));","lastModifiedDate":"2017-12-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2017-05-05"},{"lineNumber":56,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":58,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":59,"author":{"gitId":"-"},"content":" * Sets the {@code Email} of the {@code EditPersonDescriptor} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":60,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":61,"author":{"gitId":"-"},"content":" public EditPersonDescriptorBuilder withEmail(String email) {","lastModifiedDate":"2017-08-15"},{"lineNumber":62,"author":{"gitId":"-"},"content":" descriptor.setEmail(new Email(email));","lastModifiedDate":"2017-12-23"},{"lineNumber":63,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2017-05-05"},{"lineNumber":64,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":66,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":67,"author":{"gitId":"-"},"content":" * Sets the {@code Address} of the {@code EditPersonDescriptor} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":68,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":69,"author":{"gitId":"-"},"content":" public EditPersonDescriptorBuilder withAddress(String address) {","lastModifiedDate":"2017-08-15"},{"lineNumber":70,"author":{"gitId":"-"},"content":" descriptor.setAddress(new Address(address));","lastModifiedDate":"2017-12-23"},{"lineNumber":71,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2017-05-05"},{"lineNumber":72,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":73,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":74,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":75,"author":{"gitId":"-"},"content":" * Parses the {@code tags} into a {@code Set\u003cTag\u003e} and set it to the {@code EditPersonDescriptor}","lastModifiedDate":"2017-07-26"},{"lineNumber":76,"author":{"gitId":"-"},"content":" * that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":77,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":78,"author":{"gitId":"-"},"content":" public EditPersonDescriptorBuilder withTags(String... tags) {","lastModifiedDate":"2017-08-15"},{"lineNumber":79,"author":{"gitId":"-"},"content":" Set\u003cTag\u003e tagSet \u003d Stream.of(tags).map(Tag::new).collect(Collectors.toSet());","lastModifiedDate":"2017-12-23"},{"lineNumber":80,"author":{"gitId":"-"},"content":" descriptor.setTags(tagSet);","lastModifiedDate":"2017-12-23"},{"lineNumber":81,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2017-05-05"},{"lineNumber":82,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":83,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":84,"author":{"gitId":"-"},"content":" public EditPersonDescriptor build() {","lastModifiedDate":"2017-05-05"},{"lineNumber":85,"author":{"gitId":"-"},"content":" return descriptor;","lastModifiedDate":"2017-05-05"},{"lineNumber":86,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":87,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-05-05"}],"authorContributionMap":{"joenus":1,"-":86}},{"path":"src/test/java/seedu/address/testutil/PersonBuilder.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.testutil;","lastModifiedDate":"2016-09-03"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.HashSet;","lastModifiedDate":"2017-12-20"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-04-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-05"},{"lineNumber":6,"author":{"gitId":"joenus"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2024-02-29"},{"lineNumber":7,"author":{"gitId":"joenus"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2024-02-29"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2017-01-18"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2017-01-18"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2017-01-18"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2017-04-05"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2017-01-18"},{"lineNumber":13,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Note;","lastModifiedDate":"2024-02-29"},{"lineNumber":14,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.tag.Tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.model.util.SampleDataUtil;","lastModifiedDate":"2017-04-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":17,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-09-03"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * A utility class to help with building Person objects.","lastModifiedDate":"2017-04-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-09-03"},{"lineNumber":20,"author":{"gitId":"-"},"content":"public class PersonBuilder {","lastModifiedDate":"2016-09-03"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":22,"author":{"gitId":"-"},"content":" public static final String DEFAULT_NAME \u003d \"Amy Bee\";","lastModifiedDate":"2020-12-18"},{"lineNumber":23,"author":{"gitId":"-"},"content":" public static final String DEFAULT_PHONE \u003d \"85355255\";","lastModifiedDate":"2017-04-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":" public static final String DEFAULT_EMAIL \u003d \"amy@gmail.com\";","lastModifiedDate":"2020-12-18"},{"lineNumber":25,"author":{"gitId":"-"},"content":" public static final String DEFAULT_ADDRESS \u003d \"123, Jurong West Ave 6, #08-111\";","lastModifiedDate":"2017-04-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-05"},{"lineNumber":27,"author":{"gitId":"-"},"content":" private Name name;","lastModifiedDate":"2017-12-20"},{"lineNumber":28,"author":{"gitId":"-"},"content":" private Phone phone;","lastModifiedDate":"2017-12-20"},{"lineNumber":29,"author":{"gitId":"-"},"content":" private Email email;","lastModifiedDate":"2017-12-20"},{"lineNumber":30,"author":{"gitId":"-"},"content":" private Address address;","lastModifiedDate":"2017-12-20"},{"lineNumber":31,"author":{"gitId":"joenus"},"content":" private Set\u003cTag\u003e tags \u003d new HashSet\u003c\u003e();","lastModifiedDate":"2024-02-29"},{"lineNumber":32,"author":{"gitId":"joenus"},"content":" private ObservableList\u003cNote\u003e notes \u003d FXCollections.observableArrayList();","lastModifiedDate":"2024-02-29"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":34,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2020-05-27"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * Creates a {@code PersonBuilder} with the default details.","lastModifiedDate":"2020-05-27"},{"lineNumber":36,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2020-05-27"},{"lineNumber":37,"author":{"gitId":"-"},"content":" public PersonBuilder() {","lastModifiedDate":"2017-08-15"},{"lineNumber":38,"author":{"gitId":"-"},"content":" name \u003d new Name(DEFAULT_NAME);","lastModifiedDate":"2017-12-20"},{"lineNumber":39,"author":{"gitId":"-"},"content":" phone \u003d new Phone(DEFAULT_PHONE);","lastModifiedDate":"2017-12-20"},{"lineNumber":40,"author":{"gitId":"-"},"content":" email \u003d new Email(DEFAULT_EMAIL);","lastModifiedDate":"2017-12-20"},{"lineNumber":41,"author":{"gitId":"-"},"content":" address \u003d new Address(DEFAULT_ADDRESS);","lastModifiedDate":"2017-12-20"},{"lineNumber":42,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":44,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-12-11"},{"lineNumber":45,"author":{"gitId":"-"},"content":" * Initializes the PersonBuilder with the data of {@code personToCopy}.","lastModifiedDate":"2016-12-11"},{"lineNumber":46,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-11"},{"lineNumber":47,"author":{"gitId":"-"},"content":" public PersonBuilder(Person personToCopy) {","lastModifiedDate":"2018-01-10"},{"lineNumber":48,"author":{"gitId":"-"},"content":" name \u003d personToCopy.getName();","lastModifiedDate":"2017-12-20"},{"lineNumber":49,"author":{"gitId":"-"},"content":" phone \u003d personToCopy.getPhone();","lastModifiedDate":"2017-12-20"},{"lineNumber":50,"author":{"gitId":"-"},"content":" email \u003d personToCopy.getEmail();","lastModifiedDate":"2017-12-20"},{"lineNumber":51,"author":{"gitId":"-"},"content":" address \u003d personToCopy.getAddress();","lastModifiedDate":"2017-12-20"},{"lineNumber":52,"author":{"gitId":"joenus"},"content":" this.tags.addAll(personToCopy.getTags());","lastModifiedDate":"2024-02-29"},{"lineNumber":53,"author":{"gitId":"joenus"},"content":" this.notes.addAll(personToCopy.getNotes());","lastModifiedDate":"2024-02-29"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-11"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-11"},{"lineNumber":56,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":57,"author":{"gitId":"-"},"content":" * Sets the {@code Name} of the {@code Person} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":58,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":59,"author":{"gitId":"-"},"content":" public PersonBuilder withName(String name) {","lastModifiedDate":"2017-08-15"},{"lineNumber":60,"author":{"gitId":"-"},"content":" this.name \u003d new Name(name);","lastModifiedDate":"2017-12-20"},{"lineNumber":61,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2016-09-03"},{"lineNumber":62,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":64,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":65,"author":{"gitId":"-"},"content":" * Parses the {@code tags} into a {@code Set\u003cTag\u003e} and set it to the {@code Person} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":66,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":67,"author":{"gitId":"-"},"content":" public PersonBuilder withTags(String ... tags) {","lastModifiedDate":"2017-08-15"},{"lineNumber":68,"author":{"gitId":"joenus"},"content":" this.tags \u003d SampleDataUtil.getTags(tags);","lastModifiedDate":"2024-02-29"},{"lineNumber":69,"author":{"gitId":"joenus"},"content":" return this;","lastModifiedDate":"2024-02-29"},{"lineNumber":70,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":71,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":72,"author":{"gitId":"joenus"},"content":" /**","lastModifiedDate":"2024-02-29"},{"lineNumber":73,"author":{"gitId":"joenus"},"content":" * Parses the {@code notes} into a {@code ObservableList\u003cNote\u003e} and set it to the {@code Person} that we are","lastModifiedDate":"2024-02-29"},{"lineNumber":74,"author":{"gitId":"joenus"},"content":" * building.","lastModifiedDate":"2024-02-29"},{"lineNumber":75,"author":{"gitId":"joenus"},"content":" */","lastModifiedDate":"2024-02-29"},{"lineNumber":76,"author":{"gitId":"joenus"},"content":" public PersonBuilder withNotes(Note[] notes) {","lastModifiedDate":"2024-02-29"},{"lineNumber":77,"author":{"gitId":"joenus"},"content":" this.notes \u003d SampleDataUtil.getNotes(notes);","lastModifiedDate":"2024-02-29"},{"lineNumber":78,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2016-09-03"},{"lineNumber":79,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":81,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":82,"author":{"gitId":"-"},"content":" * Sets the {@code Address} of the {@code Person} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":83,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":84,"author":{"gitId":"-"},"content":" public PersonBuilder withAddress(String address) {","lastModifiedDate":"2017-08-15"},{"lineNumber":85,"author":{"gitId":"-"},"content":" this.address \u003d new Address(address);","lastModifiedDate":"2017-12-20"},{"lineNumber":86,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2016-09-03"},{"lineNumber":87,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":89,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":90,"author":{"gitId":"-"},"content":" * Sets the {@code Phone} of the {@code Person} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":91,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":92,"author":{"gitId":"-"},"content":" public PersonBuilder withPhone(String phone) {","lastModifiedDate":"2017-08-15"},{"lineNumber":93,"author":{"gitId":"-"},"content":" this.phone \u003d new Phone(phone);","lastModifiedDate":"2017-12-20"},{"lineNumber":94,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2016-09-03"},{"lineNumber":95,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":97,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":98,"author":{"gitId":"-"},"content":" * Sets the {@code Email} of the {@code Person} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":99,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":100,"author":{"gitId":"-"},"content":" public PersonBuilder withEmail(String email) {","lastModifiedDate":"2017-08-15"},{"lineNumber":101,"author":{"gitId":"-"},"content":" this.email \u003d new Email(email);","lastModifiedDate":"2017-12-20"},{"lineNumber":102,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2016-09-03"},{"lineNumber":103,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":104,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":105,"author":{"gitId":"-"},"content":" public Person build() {","lastModifiedDate":"2017-04-05"},{"lineNumber":106,"author":{"gitId":"joenus"},"content":" return new Person(name, phone, email, address, tags, notes);","lastModifiedDate":"2024-02-29"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":108,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":109,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-09-03"}],"authorContributionMap":{"joenus":19,"-":90}},{"path":"src/test/java/seedu/address/testutil/PersonUtil.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.testutil;","lastModifiedDate":"2017-04-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2017-05-09"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2017-05-09"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2017-06-06"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2017-05-09"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2017-05-09"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-09"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2018-03-26"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-03-26"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.AddCommand;","lastModifiedDate":"2017-03-29"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand.EditPersonDescriptor;","lastModifiedDate":"2018-03-26"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-01-10"},{"lineNumber":14,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.tag.Tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-04-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * A utility class for Person.","lastModifiedDate":"2017-04-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-04-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"public class PersonUtil {","lastModifiedDate":"2017-04-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-04-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * Returns an add command string for adding the {@code person}.","lastModifiedDate":"2017-04-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-04-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":" public static String getAddCommand(Person person) {","lastModifiedDate":"2018-01-10"},{"lineNumber":25,"author":{"gitId":"-"},"content":" return AddCommand.COMMAND_WORD + \" \" + getPersonDetails(person);","lastModifiedDate":"2017-03-29"},{"lineNumber":26,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-04-06"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-06"},{"lineNumber":28,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-04-06"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * Returns the part of command string for the given {@code person}\u0027s details.","lastModifiedDate":"2017-04-06"},{"lineNumber":30,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-04-06"},{"lineNumber":31,"author":{"gitId":"-"},"content":" public static String getPersonDetails(Person person) {","lastModifiedDate":"2018-01-10"},{"lineNumber":32,"author":{"gitId":"-"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2017-04-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":" sb.append(PREFIX_NAME + person.getName().fullName + \" \");","lastModifiedDate":"2017-06-06"},{"lineNumber":34,"author":{"gitId":"-"},"content":" sb.append(PREFIX_PHONE + person.getPhone().value + \" \");","lastModifiedDate":"2017-05-09"},{"lineNumber":35,"author":{"gitId":"-"},"content":" sb.append(PREFIX_EMAIL + person.getEmail().value + \" \");","lastModifiedDate":"2017-05-09"},{"lineNumber":36,"author":{"gitId":"-"},"content":" sb.append(PREFIX_ADDRESS + person.getAddress().value + \" \");","lastModifiedDate":"2017-05-09"},{"lineNumber":37,"author":{"gitId":"-"},"content":" person.getTags().stream().forEach(","lastModifiedDate":"2017-05-09"},{"lineNumber":38,"author":{"gitId":"-"},"content":" s -\u003e sb.append(PREFIX_TAG + s.tagName + \" \")","lastModifiedDate":"2017-05-09"},{"lineNumber":39,"author":{"gitId":"-"},"content":" );","lastModifiedDate":"2017-05-09"},{"lineNumber":40,"author":{"gitId":"-"},"content":" return sb.toString();","lastModifiedDate":"2017-04-05"},{"lineNumber":41,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-04-05"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-03-26"},{"lineNumber":43,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-03-26"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * Returns the part of command string for the given {@code EditPersonDescriptor}\u0027s details.","lastModifiedDate":"2018-03-26"},{"lineNumber":45,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-03-26"},{"lineNumber":46,"author":{"gitId":"-"},"content":" public static String getEditPersonDescriptorDetails(EditPersonDescriptor descriptor) {","lastModifiedDate":"2018-03-26"},{"lineNumber":47,"author":{"gitId":"-"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2018-03-26"},{"lineNumber":48,"author":{"gitId":"-"},"content":" descriptor.getName().ifPresent(name -\u003e sb.append(PREFIX_NAME).append(name.fullName).append(\" \"));","lastModifiedDate":"2018-03-26"},{"lineNumber":49,"author":{"gitId":"-"},"content":" descriptor.getPhone().ifPresent(phone -\u003e sb.append(PREFIX_PHONE).append(phone.value).append(\" \"));","lastModifiedDate":"2018-03-26"},{"lineNumber":50,"author":{"gitId":"-"},"content":" descriptor.getEmail().ifPresent(email -\u003e sb.append(PREFIX_EMAIL).append(email.value).append(\" \"));","lastModifiedDate":"2018-03-26"},{"lineNumber":51,"author":{"gitId":"-"},"content":" descriptor.getAddress().ifPresent(address -\u003e sb.append(PREFIX_ADDRESS).append(address.value).append(\" \"));","lastModifiedDate":"2018-03-26"},{"lineNumber":52,"author":{"gitId":"-"},"content":" if (descriptor.getTags().isPresent()) {","lastModifiedDate":"2018-03-26"},{"lineNumber":53,"author":{"gitId":"-"},"content":" Set\u003cTag\u003e tags \u003d descriptor.getTags().get();","lastModifiedDate":"2018-03-26"},{"lineNumber":54,"author":{"gitId":"-"},"content":" if (tags.isEmpty()) {","lastModifiedDate":"2018-03-26"},{"lineNumber":55,"author":{"gitId":"-"},"content":" sb.append(PREFIX_TAG);","lastModifiedDate":"2018-03-26"},{"lineNumber":56,"author":{"gitId":"-"},"content":" } else {","lastModifiedDate":"2018-03-26"},{"lineNumber":57,"author":{"gitId":"-"},"content":" tags.forEach(s -\u003e sb.append(PREFIX_TAG).append(s.tagName).append(\" \"));","lastModifiedDate":"2018-03-26"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-03-26"},{"lineNumber":59,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-03-26"},{"lineNumber":60,"author":{"gitId":"-"},"content":" return sb.toString();","lastModifiedDate":"2018-03-26"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-03-26"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-04-05"}],"authorContributionMap":{"joenus":1,"-":61}},{"path":"src/test/java/seedu/address/testutil/TypicalPersons.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.testutil;","lastModifiedDate":"2016-09-13"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-13"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_AMY;","lastModifiedDate":"2017-08-22"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB;","lastModifiedDate":"2017-08-22"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_AMY;","lastModifiedDate":"2017-08-22"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_BOB;","lastModifiedDate":"2017-08-22"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_AMY;","lastModifiedDate":"2017-08-22"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB;","lastModifiedDate":"2017-08-22"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_AMY;","lastModifiedDate":"2017-08-22"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB;","lastModifiedDate":"2017-08-22"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_FRIEND;","lastModifiedDate":"2017-08-22"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND;","lastModifiedDate":"2017-08-22"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-08-22"},{"lineNumber":14,"author":{"gitId":"joenus"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-03-01"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import java.util.ArrayList;","lastModifiedDate":"2017-08-07"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import java.util.Arrays;","lastModifiedDate":"2017-08-07"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2017-08-07"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-08-07"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.model.AddressBook;","lastModifiedDate":"2016-09-21"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-01-10"},{"lineNumber":21,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Description;","lastModifiedDate":"2024-03-01"},{"lineNumber":22,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Note;","lastModifiedDate":"2024-03-01"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-13"},{"lineNumber":24,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-09-13"},{"lineNumber":25,"author":{"gitId":"-"},"content":" * A utility class containing a list of {@code Person} objects to be used in tests.","lastModifiedDate":"2017-08-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-09-13"},{"lineNumber":27,"author":{"gitId":"-"},"content":"public class TypicalPersons {","lastModifiedDate":"2017-04-05"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-13"},{"lineNumber":29,"author":{"gitId":"-"},"content":" public static final Person ALICE \u003d new PersonBuilder().withName(\"Alice Pauline\")","lastModifiedDate":"2018-01-10"},{"lineNumber":30,"author":{"gitId":"-"},"content":" .withAddress(\"123, Jurong West Ave 6, #08-111\").withEmail(\"alice@example.com\")","lastModifiedDate":"2017-04-05"},{"lineNumber":31,"author":{"gitId":"-"},"content":" .withPhone(\"94351253\")","lastModifiedDate":"2018-04-19"},{"lineNumber":32,"author":{"gitId":"joenus"},"content":" .withTags(\"friends\").withNotes(new Note[] {","lastModifiedDate":"2024-03-01"},{"lineNumber":33,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 2, 19, 21, 30), new Description(\"General Flu\")),","lastModifiedDate":"2024-03-01"},{"lineNumber":34,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 2, 28, 8, 30), new Description(\"Headache\")),","lastModifiedDate":"2024-03-01"},{"lineNumber":35,"author":{"gitId":"joenus"},"content":" }).build();","lastModifiedDate":"2024-03-01"},{"lineNumber":36,"author":{"gitId":"-"},"content":" public static final Person BENSON \u003d new PersonBuilder().withName(\"Benson Meier\")","lastModifiedDate":"2018-01-10"},{"lineNumber":37,"author":{"gitId":"-"},"content":" .withAddress(\"311, Clementi Ave 2, #02-25\")","lastModifiedDate":"2017-09-21"},{"lineNumber":38,"author":{"gitId":"-"},"content":" .withEmail(\"johnd@example.com\").withPhone(\"98765432\")","lastModifiedDate":"2017-04-05"},{"lineNumber":39,"author":{"gitId":"joenus"},"content":" .withTags(\"owesMoney\", \"friends\").withNotes(new Note[] {","lastModifiedDate":"2024-03-01"},{"lineNumber":40,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 2, 20, 15, 30), new Description(\"Joint pain assessment\")),","lastModifiedDate":"2024-03-01"},{"lineNumber":41,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 4, 4, 10, 30), new Description(\"Post-surgery checkup\")),","lastModifiedDate":"2024-03-01"},{"lineNumber":42,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 5, 19, 17, 0), new Description(\"Sports injury follow-up\")),","lastModifiedDate":"2024-03-01"},{"lineNumber":43,"author":{"gitId":"joenus"},"content":" }).build();","lastModifiedDate":"2024-03-01"},{"lineNumber":44,"author":{"gitId":"-"},"content":" public static final Person CARL \u003d new PersonBuilder().withName(\"Carl Kurz\").withPhone(\"95352563\")","lastModifiedDate":"2018-01-10"},{"lineNumber":45,"author":{"gitId":"-"},"content":" .withEmail(\"heinz@example.com\").withAddress(\"wall street\").build();","lastModifiedDate":"2017-04-05"},{"lineNumber":46,"author":{"gitId":"-"},"content":" public static final Person DANIEL \u003d new PersonBuilder().withName(\"Daniel Meier\").withPhone(\"87652533\")","lastModifiedDate":"2018-01-10"},{"lineNumber":47,"author":{"gitId":"-"},"content":" .withEmail(\"cornelia@example.com\").withAddress(\"10th street\").withTags(\"friends\").build();","lastModifiedDate":"2018-03-26"},{"lineNumber":48,"author":{"gitId":"-"},"content":" public static final Person ELLE \u003d new PersonBuilder().withName(\"Elle Meyer\").withPhone(\"9482224\")","lastModifiedDate":"2018-01-10"},{"lineNumber":49,"author":{"gitId":"-"},"content":" .withEmail(\"werner@example.com\").withAddress(\"michegan ave\").build();","lastModifiedDate":"2017-04-05"},{"lineNumber":50,"author":{"gitId":"-"},"content":" public static final Person FIONA \u003d new PersonBuilder().withName(\"Fiona Kunz\").withPhone(\"9482427\")","lastModifiedDate":"2018-01-10"},{"lineNumber":51,"author":{"gitId":"-"},"content":" .withEmail(\"lydia@example.com\").withAddress(\"little tokyo\").build();","lastModifiedDate":"2017-04-05"},{"lineNumber":52,"author":{"gitId":"-"},"content":" public static final Person GEORGE \u003d new PersonBuilder().withName(\"George Best\").withPhone(\"9482442\")","lastModifiedDate":"2018-01-10"},{"lineNumber":53,"author":{"gitId":"-"},"content":" .withEmail(\"anna@example.com\").withAddress(\"4th street\").build();","lastModifiedDate":"2017-04-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-13"},{"lineNumber":55,"author":{"gitId":"-"},"content":" // Manually added","lastModifiedDate":"2016-09-13"},{"lineNumber":56,"author":{"gitId":"-"},"content":" public static final Person HOON \u003d new PersonBuilder().withName(\"Hoon Meier\").withPhone(\"8482424\")","lastModifiedDate":"2018-01-10"},{"lineNumber":57,"author":{"gitId":"-"},"content":" .withEmail(\"stefan@example.com\").withAddress(\"little india\").build();","lastModifiedDate":"2017-04-05"},{"lineNumber":58,"author":{"gitId":"-"},"content":" public static final Person IDA \u003d new PersonBuilder().withName(\"Ida Mueller\").withPhone(\"8482131\")","lastModifiedDate":"2018-01-10"},{"lineNumber":59,"author":{"gitId":"-"},"content":" .withEmail(\"hans@example.com\").withAddress(\"chicago ave\").build();","lastModifiedDate":"2017-04-05"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-08-22"},{"lineNumber":61,"author":{"gitId":"-"},"content":" // Manually added - Person\u0027s details found in {@code CommandTestUtil}","lastModifiedDate":"2017-08-22"},{"lineNumber":62,"author":{"gitId":"-"},"content":" public static final Person AMY \u003d new PersonBuilder().withName(VALID_NAME_AMY).withPhone(VALID_PHONE_AMY)","lastModifiedDate":"2018-01-10"},{"lineNumber":63,"author":{"gitId":"-"},"content":" .withEmail(VALID_EMAIL_AMY).withAddress(VALID_ADDRESS_AMY).withTags(VALID_TAG_FRIEND).build();","lastModifiedDate":"2017-09-21"},{"lineNumber":64,"author":{"gitId":"-"},"content":" public static final Person BOB \u003d new PersonBuilder().withName(VALID_NAME_BOB).withPhone(VALID_PHONE_BOB)","lastModifiedDate":"2018-01-10"},{"lineNumber":65,"author":{"gitId":"-"},"content":" .withEmail(VALID_EMAIL_BOB).withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_HUSBAND, VALID_TAG_FRIEND)","lastModifiedDate":"2017-09-21"},{"lineNumber":66,"author":{"gitId":"-"},"content":" .build();","lastModifiedDate":"2017-09-21"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-21"},{"lineNumber":68,"author":{"gitId":"-"},"content":" public static final String KEYWORD_MATCHING_MEIER \u003d \"Meier\"; // A keyword that matches MEIER","lastModifiedDate":"2017-09-21"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-13"},{"lineNumber":70,"author":{"gitId":"joenus"},"content":" private TypicalPersons() {","lastModifiedDate":"2024-03-01"},{"lineNumber":71,"author":{"gitId":"joenus"},"content":" } // prevents instantiation","lastModifiedDate":"2024-03-01"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-20"},{"lineNumber":73,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":74,"author":{"gitId":"-"},"content":" * Returns an {@code AddressBook} with all the typical persons.","lastModifiedDate":"2017-08-05"},{"lineNumber":75,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":76,"author":{"gitId":"-"},"content":" public static AddressBook getTypicalAddressBook() {","lastModifiedDate":"2017-08-05"},{"lineNumber":77,"author":{"gitId":"-"},"content":" AddressBook ab \u003d new AddressBook();","lastModifiedDate":"2017-08-05"},{"lineNumber":78,"author":{"gitId":"-"},"content":" for (Person person : getTypicalPersons()) {","lastModifiedDate":"2018-01-10"},{"lineNumber":79,"author":{"gitId":"-"},"content":" ab.addPerson(person);","lastModifiedDate":"2017-08-05"},{"lineNumber":80,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-13"},{"lineNumber":81,"author":{"gitId":"-"},"content":" return ab;","lastModifiedDate":"2016-09-24"},{"lineNumber":82,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-24"},{"lineNumber":83,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-08-04"},{"lineNumber":84,"author":{"gitId":"-"},"content":" public static List\u003cPerson\u003e getTypicalPersons() {","lastModifiedDate":"2018-01-10"},{"lineNumber":85,"author":{"gitId":"-"},"content":" return new ArrayList\u003c\u003e(Arrays.asList(ALICE, BENSON, CARL, DANIEL, ELLE, FIONA, GEORGE));","lastModifiedDate":"2017-08-07"},{"lineNumber":86,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-08-04"},{"lineNumber":87,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-09-13"}],"authorContributionMap":{"joenus":14,"-":73}}] +[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"joenus"},"content":"[![Java CI](https://github.com/AY2324S2-CS2103-F09-4/tp/actions/workflows/gradle.yml/badge.svg)](https://github.com/AY2324S2-CS2103-F09-4/tp/actions/workflows/gradle.yml)","lastModifiedDate":"2024-02-28"},{"lineNumber":2,"author":{"gitId":"jmsandiegoo"},"content":"[![codecov](https://codecov.io/gh/AY2324S2-CS2103-F09-4/tp/graph/badge.svg?token\u003dZCUENL7XA6)](https://codecov.io/gh/AY2324S2-CS2103-F09-4/tp)","lastModifiedDate":"2024-02-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"![Ui](docs/images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"joenus"},"content":"**HealthSync** helps optimize clinical efficiency with a keyboard-driven system for doctors to manage patient records, notes, medical certificates, and medication dispensing, all in one streamlined interface, enhancing care quality and focus in a busy clinical setting. While it has a GUI, most of the user interactions happen using a CLI (Command Line Interface).","lastModifiedDate":"2024-02-28"},{"lineNumber":7,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":8,"author":{"gitId":"joenus"},"content":"* If you are interested in using HealthSync, head over to the [_Quick Start_ section of the **User Guide**](UserGuide.html#quick-start).","lastModifiedDate":"2024-02-28"},{"lineNumber":9,"author":{"gitId":"joenus"},"content":"* If you are interested about developing HealthSync, the [**Developer Guide**](DeveloperGuide.html) is a good place to start.","lastModifiedDate":"2024-02-28"},{"lineNumber":10,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":11,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":12,"author":{"gitId":"joenus"},"content":"**Acknowledgements**","lastModifiedDate":"2024-02-28"},{"lineNumber":13,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":14,"author":{"gitId":"joenus"},"content":"* Libraries used: [JavaFX](https://openjfx.io/), [Jackson](https://github.com/FasterXML/jackson), [JUnit5](https://github.com/junit-team/junit5)","lastModifiedDate":"2024-02-28"}],"authorContributionMap":{"joenus":10,"jmsandiegoo":1,"-":3}},{"path":"build.gradle","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"plugins {","lastModifiedDate":"2016-08-29"},{"lineNumber":2,"author":{"gitId":"-"},"content":" id \u0027java\u0027","lastModifiedDate":"2017-12-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":" id \u0027checkstyle\u0027","lastModifiedDate":"2017-12-05"},{"lineNumber":4,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2022-06-17"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027application\u0027","lastModifiedDate":"2016-12-08"},{"lineNumber":6,"author":{"gitId":"-"},"content":" id \u0027jacoco\u0027","lastModifiedDate":"2020-08-07"},{"lineNumber":7,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-29"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-29"},{"lineNumber":9,"author":{"gitId":"-"},"content":"mainClassName \u003d \u0027seedu.address.Main\u0027","lastModifiedDate":"2019-02-08"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-08"},{"lineNumber":11,"author":{"gitId":"-"},"content":"sourceCompatibility \u003d JavaVersion.VERSION_11","lastModifiedDate":"2019-02-20"},{"lineNumber":12,"author":{"gitId":"-"},"content":"targetCompatibility \u003d JavaVersion.VERSION_11","lastModifiedDate":"2019-02-20"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":14,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2016-08-08"},{"lineNumber":15,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2016-08-08"},{"lineNumber":16,"author":{"gitId":"-"},"content":" maven { url \u0027https://oss.sonatype.org/content/repositories/snapshots/\u0027 }","lastModifiedDate":"2018-04-11"},{"lineNumber":17,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":19,"author":{"gitId":"-"},"content":"checkstyle {","lastModifiedDate":"2016-10-12"},{"lineNumber":20,"author":{"gitId":"-"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2022-04-29"},{"lineNumber":21,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-10-12"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-10-12"},{"lineNumber":23,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2018-03-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2018-03-23"},{"lineNumber":25,"author":{"gitId":"-"},"content":" finalizedBy jacocoTestReport","lastModifiedDate":"2020-08-07"},{"lineNumber":26,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-08-07"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-08-07"},{"lineNumber":28,"author":{"gitId":"-"},"content":"task coverage(type: JacocoReport) {","lastModifiedDate":"2020-08-07"},{"lineNumber":29,"author":{"gitId":"-"},"content":" sourceDirectories.from files(sourceSets.main.allSource.srcDirs)","lastModifiedDate":"2020-08-07"},{"lineNumber":30,"author":{"gitId":"-"},"content":" classDirectories.from files(sourceSets.main.output)","lastModifiedDate":"2020-08-07"},{"lineNumber":31,"author":{"gitId":"-"},"content":" executionData.from files(jacocoTestReport.executionData)","lastModifiedDate":"2020-08-07"},{"lineNumber":32,"author":{"gitId":"-"},"content":" afterEvaluate {","lastModifiedDate":"2020-08-07"},{"lineNumber":33,"author":{"gitId":"-"},"content":" classDirectories.from files(classDirectories.files.collect {","lastModifiedDate":"2020-08-07"},{"lineNumber":34,"author":{"gitId":"-"},"content":" fileTree(dir: it, exclude: [\u0027**/*.jar\u0027])","lastModifiedDate":"2020-08-07"},{"lineNumber":35,"author":{"gitId":"-"},"content":" })","lastModifiedDate":"2020-08-07"},{"lineNumber":36,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-08-07"},{"lineNumber":37,"author":{"gitId":"-"},"content":" reports {","lastModifiedDate":"2020-08-07"},{"lineNumber":38,"author":{"gitId":"-"},"content":" html.required \u003d true","lastModifiedDate":"2022-06-17"},{"lineNumber":39,"author":{"gitId":"-"},"content":" xml.required \u003d true","lastModifiedDate":"2022-06-17"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-08-07"},{"lineNumber":41,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2018-03-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-03-23"},{"lineNumber":43,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2016-08-08"},{"lineNumber":44,"author":{"gitId":"-"},"content":" String jUnitVersion \u003d \u00275.4.0\u0027","lastModifiedDate":"2019-02-10"},{"lineNumber":45,"author":{"gitId":"-"},"content":" String javaFxVersion \u003d \u002717.0.7\u0027","lastModifiedDate":"2023-07-27"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-08"},{"lineNumber":47,"author":{"gitId":"-"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2019-02-19"},{"lineNumber":48,"author":{"gitId":"-"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2019-02-19"},{"lineNumber":49,"author":{"gitId":"-"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-base\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2019-02-19"},{"lineNumber":50,"author":{"gitId":"-"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2019-02-19"},{"lineNumber":51,"author":{"gitId":"-"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2019-02-19"},{"lineNumber":52,"author":{"gitId":"-"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-controls\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2019-02-19"},{"lineNumber":53,"author":{"gitId":"-"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2019-02-19"},{"lineNumber":54,"author":{"gitId":"-"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2019-02-19"},{"lineNumber":55,"author":{"gitId":"-"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-fxml\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2019-02-19"},{"lineNumber":56,"author":{"gitId":"-"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027win\u0027","lastModifiedDate":"2019-02-19"},{"lineNumber":57,"author":{"gitId":"-"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027mac\u0027","lastModifiedDate":"2019-02-19"},{"lineNumber":58,"author":{"gitId":"-"},"content":" implementation group: \u0027org.openjfx\u0027, name: \u0027javafx-graphics\u0027, version: javaFxVersion, classifier: \u0027linux\u0027","lastModifiedDate":"2019-02-19"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-05"},{"lineNumber":60,"author":{"gitId":"-"},"content":" implementation group: \u0027com.fasterxml.jackson.core\u0027, name: \u0027jackson-databind\u0027, version: \u00272.7.0\u0027","lastModifiedDate":"2018-03-29"},{"lineNumber":61,"author":{"gitId":"-"},"content":" implementation group: \u0027com.fasterxml.jackson.datatype\u0027, name: \u0027jackson-datatype-jsr310\u0027, version: \u00272.7.4\u0027","lastModifiedDate":"2018-03-29"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-05"},{"lineNumber":63,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: jUnitVersion","lastModifiedDate":"2018-03-23"},{"lineNumber":64,"author":{"gitId":"joenus"},"content":" testImplementation \"org.mockito:mockito-core:3.+\"","lastModifiedDate":"2024-02-29"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-03-23"},{"lineNumber":66,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: jUnitVersion","lastModifiedDate":"2018-03-23"},{"lineNumber":67,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-29"},{"lineNumber":69,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2016-08-29"},{"lineNumber":70,"author":{"gitId":"-"},"content":" archiveFileName \u003d \u0027addressbook.jar\u0027","lastModifiedDate":"2022-06-17"},{"lineNumber":71,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-29"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":73,"author":{"gitId":"-"},"content":"defaultTasks \u0027clean\u0027, \u0027test\u0027","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"joenus":1,"-":72}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":"layout: page","lastModifiedDate":"2020-05-23"},{"lineNumber":3,"author":{"gitId":"-"},"content":"title: About Us","lastModifiedDate":"2020-05-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"We are a team based in the [School of Computing, National University of Singapore](http://www.comp.nus.edu.sg).","lastModifiedDate":"2020-05-23"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":8,"author":{"gitId":"-"},"content":"You can reach us at the email `seer[at]comp.nus.edu.sg`","lastModifiedDate":"2020-06-17"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-06-17"},{"lineNumber":10,"author":{"gitId":"-"},"content":"## Project team","lastModifiedDate":"2020-06-07"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"raysonchia"},"content":"### Rayson Chia","lastModifiedDate":"2024-03-01"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":14,"author":{"gitId":"raysonchia"},"content":"\u003cimg src\u003d\"images/raysonchia.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-01"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"raysonchia"},"content":"[[github](http://github.com/raysonchia)]","lastModifiedDate":"2024-03-01"},{"lineNumber":17,"author":{"gitId":"raysonchia"},"content":"[[portfolio](team/raysonchia.md)]","lastModifiedDate":"2024-03-01"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"raysonchia"},"content":"* Role: Developer","lastModifiedDate":"2024-03-01"},{"lineNumber":20,"author":{"gitId":"raysonchia"},"content":"* Responsibilities: Developer","lastModifiedDate":"2024-03-01"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"rickkoh"},"content":"### Rick Koh","lastModifiedDate":"2024-03-01"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"rickkoh"},"content":"\u003cimg src\u003d\"images/rickkoh.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-01"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"rickkoh"},"content":"[[github](http://github.com/rickkoh)]","lastModifiedDate":"2024-03-01"},{"lineNumber":27,"author":{"gitId":"rickkoh"},"content":"[[portfolio](team/rickkoh.md)]","lastModifiedDate":"2024-03-01"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":29,"author":{"gitId":"rickkoh"},"content":"* Role: QA, Developer","lastModifiedDate":"2024-03-01"},{"lineNumber":30,"author":{"gitId":"rickkoh"},"content":"* Responsibilities: Developer","lastModifiedDate":"2024-03-01"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"sebin0817"},"content":"### Aum Sebin","lastModifiedDate":"2024-02-29"},{"lineNumber":33,"author":{"gitId":"sebin0817"},"content":"\u003cimg src\u003d\"images/sebin0817.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-08"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":35,"author":{"gitId":"sebin0817"},"content":"[[github](http://github.com/sebin0817)]","lastModifiedDate":"2024-02-29"},{"lineNumber":36,"author":{"gitId":"sebin0817"},"content":"[[portfolio](team/sebin.md)]","lastModifiedDate":"2024-02-29"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2024-03-08"},{"lineNumber":39,"author":{"gitId":"sebin0817"},"content":"* Responsibilities: Developer","lastModifiedDate":"2024-03-08"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-08"},{"lineNumber":41,"author":{"gitId":"jmsandiegoo"},"content":"### Jm San Diego ⚡️","lastModifiedDate":"2024-02-29"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"jmsandiegoo"},"content":"\u003cimg src\u003d\"images/jmsandiegoo.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-29"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"jmsandiegoo"},"content":"[[github](http://github.com/jmsandiegoo)]","lastModifiedDate":"2024-02-29"},{"lineNumber":46,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"jmsandiegoo"},"content":"* Responsibilities: Developer","lastModifiedDate":"2024-02-29"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"joenus"},"content":"### Joe Kawai","lastModifiedDate":"2024-02-28"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"joenus"},"content":"\u003cimg src\u003d\"images/joenus.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-28"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"joenus"},"content":"[[github](https://github.com/joenus)]","lastModifiedDate":"2024-02-28"},{"lineNumber":56,"author":{"gitId":"joenus"},"content":"[[portfolio](team/joe.md)]","lastModifiedDate":"2024-02-28"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":58,"author":{"gitId":"jmsandiegoo"},"content":"* Role: Team Lead, Developer","lastModifiedDate":"2024-02-29"},{"lineNumber":59,"author":{"gitId":"joenus"},"content":"* Responsibilities: Developer","lastModifiedDate":"2024-02-28"}],"authorContributionMap":{"joenus":5,"jmsandiegoo":5,"raysonchia":6,"sebin0817":5,"-":32,"rickkoh":6}},{"path":"docs/DeveloperGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":"layout: page","lastModifiedDate":"2020-05-23"},{"lineNumber":3,"author":{"gitId":"-"},"content":"title: Developer Guide","lastModifiedDate":"2020-05-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"* Table of Contents","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"{:toc}","lastModifiedDate":"2020-05-23"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":8,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":10,"author":{"gitId":"-"},"content":"## **Acknowledgements**","lastModifiedDate":"2021-07-30"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":12,"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":"2021-07-30"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":14,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2021-07-30"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"-"},"content":"## **Setting up, getting started**","lastModifiedDate":"2020-05-23"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"Refer to the guide [_Setting up and getting started_](SettingUp.md).","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"## **Design**","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-primary\"\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"-"},"content":":bulb: **Tip:** The `.puml` files used to create diagrams in this document `docs/diagrams` folder. Refer to the [_PlantUML Tutorial_ at se-edu/guides](https://se-education.org/guides/tutorials/plantUml.html) to learn how to create and edit diagrams.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":29,"author":{"gitId":"-"},"content":"### Architecture","lastModifiedDate":"2021-07-31"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/ArchitectureDiagram.png\" width\u003d\"280\" /\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":33,"author":{"gitId":"-"},"content":"The ***Architecture Diagram*** given above explains the high-level design of the App.","lastModifiedDate":"2021-07-31"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":35,"author":{"gitId":"-"},"content":"Given below is a quick overview of main components and how they interact with each other.","lastModifiedDate":"2021-07-31"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":37,"author":{"gitId":"-"},"content":"**Main components of the architecture**","lastModifiedDate":"2021-07-31"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"joenus"},"content":"**`Main`** (consisting of classes [`Main`](https://github.com/se-edu/HealthSync-level3/tree/master/src/main/java/seedu/address/Main.java) and [`MainApp`](https://github.com/se-edu/HealthSync-level3/tree/master/src/main/java/seedu/address/MainApp.java)) is in charge of the app launch and shut down.","lastModifiedDate":"2024-02-28"},{"lineNumber":40,"author":{"gitId":"-"},"content":"* At app launch, it initializes the other components in the correct sequence, and connects them up with each other.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"-"},"content":"* At shut down, it shuts down the other components and invokes cleanup methods where necessary.","lastModifiedDate":"2023-09-03"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"-"},"content":"The bulk of the app\u0027s work is done by the following four components:","lastModifiedDate":"2023-09-03"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":"* [**`UI`**](#ui-component): The UI of the App.","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":"* [**`Logic`**](#logic-component): The command executor.","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* [**`Model`**](#model-component): Holds the data of the App in memory.","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"-"},"content":"* [**`Storage`**](#storage-component): Reads data from, and writes data to, the hard disk.","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":50,"author":{"gitId":"-"},"content":"[**`Commons`**](#common-classes) represents a collection of classes used by multiple other components.","lastModifiedDate":"2023-09-03"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"-"},"content":"**How the architecture components interact with each other**","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"-"},"content":"The *Sequence Diagram* below shows how the components interact with each other for the scenario where the user issues the command `delete 1`.","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":56,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/ArchitectureSequenceDiagram.png\" width\u003d\"574\" /\u003e","lastModifiedDate":"2020-06-07"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":58,"author":{"gitId":"-"},"content":"Each of the four main components (also shown in the diagram above),","lastModifiedDate":"2021-07-31"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":60,"author":{"gitId":"-"},"content":"* defines its *API* in an `interface` with the same name as the Component.","lastModifiedDate":"2021-07-31"},{"lineNumber":61,"author":{"gitId":"-"},"content":"* implements its functionality using a concrete `{Component Name}Manager` class (which follows the corresponding API `interface` mentioned in the previous point.","lastModifiedDate":"2021-07-31"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":63,"author":{"gitId":"-"},"content":"For example, the `Logic` component defines its API in the `Logic.java` interface and implements its functionality using the `LogicManager.java` class which follows the `Logic` interface. Other components interact with a given component through its interface rather than the concrete class (reason: to prevent outside component\u0027s being coupled to the implementation of a component), as illustrated in the (partial) class diagram below.","lastModifiedDate":"2021-07-31"},{"lineNumber":64,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":65,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/ComponentManagers.png\" width\u003d\"300\" /\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":67,"author":{"gitId":"-"},"content":"The sections below give more details of each component.","lastModifiedDate":"2020-05-23"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":69,"author":{"gitId":"-"},"content":"### UI component","lastModifiedDate":"2020-05-23"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":71,"author":{"gitId":"joenus"},"content":"The **API** of this component is specified in [`Ui.java`](https://github.com/se-edu/HealthSync-level3/tree/master/src/main/java/seedu/address/ui/Ui.java)","lastModifiedDate":"2024-02-28"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":73,"author":{"gitId":"-"},"content":"![Structure of the UI Component](images/UiClassDiagram.png)","lastModifiedDate":"2021-07-31"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":75,"author":{"gitId":"-"},"content":"The UI consists of a `MainWindow` that is made up of parts e.g.`CommandBox`, `ResultDisplay`, `PersonListPanel`, `StatusBarFooter` etc. All these, including the `MainWindow`, inherit from the abstract `UiPart` class which captures the commonalities between classes that represent parts of the visible GUI.","lastModifiedDate":"2021-07-31"},{"lineNumber":76,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":77,"author":{"gitId":"joenus"},"content":"The `UI` component uses the JavaFx UI framework. The layout of these UI parts are defined in matching `.fxml` files that are in the `src/main/resources/view` folder. For example, the layout of the [`MainWindow`](https://github.com/se-edu/HealthSync-level3/tree/master/src/main/java/seedu/address/ui/MainWindow.java) is specified in [`MainWindow.fxml`](https://github.com/se-edu/HealthSync-level3/tree/master/src/main/resources/view/MainWindow.fxml)","lastModifiedDate":"2024-02-28"},{"lineNumber":78,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":79,"author":{"gitId":"-"},"content":"The `UI` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":81,"author":{"gitId":"-"},"content":"* executes user commands using the `Logic` component.","lastModifiedDate":"2021-07-31"},{"lineNumber":82,"author":{"gitId":"-"},"content":"* listens for changes to `Model` data so that the UI can be updated with the modified data.","lastModifiedDate":"2021-07-31"},{"lineNumber":83,"author":{"gitId":"-"},"content":"* keeps a reference to the `Logic` component, because the `UI` relies on the `Logic` to execute commands.","lastModifiedDate":"2021-07-31"},{"lineNumber":84,"author":{"gitId":"-"},"content":"* depends on some classes in the `Model` component, as it displays `Person` object residing in the `Model`.","lastModifiedDate":"2021-07-31"},{"lineNumber":85,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":86,"author":{"gitId":"-"},"content":"### Logic component","lastModifiedDate":"2020-05-23"},{"lineNumber":87,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":88,"author":{"gitId":"joenus"},"content":"**API** : [`Logic.java`](https://github.com/se-edu/HealthSync-level3/tree/master/src/main/java/seedu/address/logic/Logic.java)","lastModifiedDate":"2024-02-28"},{"lineNumber":89,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":90,"author":{"gitId":"-"},"content":"Here\u0027s a (partial) class diagram of the `Logic` component:","lastModifiedDate":"2021-07-31"},{"lineNumber":91,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":92,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/LogicClassDiagram.png\" width\u003d\"550\"/\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":93,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":94,"author":{"gitId":"-"},"content":"The sequence diagram below illustrates the interactions within the `Logic` component, taking `execute(\"delete 1\")` API call as an example.","lastModifiedDate":"2023-09-03"},{"lineNumber":95,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":96,"author":{"gitId":"-"},"content":"![Interactions Inside the Logic Component for the `delete 1` Command](images/DeleteSequenceDiagram.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":97,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":98,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-info\"\u003e:information_source: **Note:** The lifeline for `DeleteCommandParser` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline continues till the end of diagram.","lastModifiedDate":"2024-02-09"},{"lineNumber":99,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":100,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":101,"author":{"gitId":"-"},"content":"How the `Logic` component works:","lastModifiedDate":"2023-09-03"},{"lineNumber":102,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"joenus"},"content":"1. When `Logic` is called upon to execute a command, it is passed to an `HealthSyncParser` object which in turn creates a parser that matches the command (e.g., `DeleteCommandParser`) and uses it to parse the command.","lastModifiedDate":"2024-02-28"},{"lineNumber":104,"author":{"gitId":"-"},"content":"1. This results in a `Command` object (more precisely, an object of one of its subclasses e.g., `DeleteCommand`) which is executed by the `LogicManager`.","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"-"},"content":"1. The command can communicate with the `Model` when it is executed (e.g. to delete a person).\u003cbr\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":106,"author":{"gitId":"-"},"content":" Note that although this is shown as a single step in the diagram above (for simplicity), in the code it can take several interactions (between the command object and the `Model`) to achieve.","lastModifiedDate":"2024-02-09"},{"lineNumber":107,"author":{"gitId":"-"},"content":"1. The result of the command execution is encapsulated as a `CommandResult` object which is returned back from `Logic`.","lastModifiedDate":"2023-09-03"},{"lineNumber":108,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"-"},"content":"Here are the other classes in `Logic` (omitted from the class diagram above) that are used for parsing a user command:","lastModifiedDate":"2021-07-31"},{"lineNumber":110,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":111,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/ParserClasses.png\" width\u003d\"600\"/\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":112,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":113,"author":{"gitId":"-"},"content":"How the parsing works:","lastModifiedDate":"2021-07-31"},{"lineNumber":114,"author":{"gitId":"joenus"},"content":"* When called upon to parse a user command, the `HealthSyncParser` class creates an `XYZCommandParser` (`XYZ` is a placeholder for the specific command name e.g., `AddCommandParser`) which uses the other classes shown above to parse the user command and create a `XYZCommand` object (e.g., `AddCommand`) which the `HealthSyncParser` returns back as a `Command` object.","lastModifiedDate":"2024-02-28"},{"lineNumber":115,"author":{"gitId":"-"},"content":"* All `XYZCommandParser` classes (e.g., `AddCommandParser`, `DeleteCommandParser`, ...) inherit from the `Parser` interface so that they can be treated similarly where possible e.g, during testing.","lastModifiedDate":"2021-07-31"},{"lineNumber":116,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":117,"author":{"gitId":"-"},"content":"### Model component","lastModifiedDate":"2021-07-31"},{"lineNumber":118,"author":{"gitId":"joenus"},"content":"**API** : [`Model.java`](https://github.com/se-edu/HealthSync-level3/tree/master/src/main/java/seedu/address/model/Model.java)","lastModifiedDate":"2024-02-28"},{"lineNumber":119,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":120,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/ModelClassDiagram.png\" width\u003d\"450\" /\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":121,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":122,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":123,"author":{"gitId":"-"},"content":"The `Model` component,","lastModifiedDate":"2021-07-31"},{"lineNumber":124,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":125,"author":{"gitId":"-"},"content":"* stores the address book data i.e., all `Person` objects (which are contained in a `UniquePersonList` object).","lastModifiedDate":"2021-07-31"},{"lineNumber":126,"author":{"gitId":"-"},"content":"* stores the currently \u0027selected\u0027 `Person` objects (e.g., results of a search query) as a separate _filtered_ list which is exposed to outsiders as an unmodifiable `ObservableList\u003cPerson\u003e` that can be \u0027observed\u0027 e.g. the UI can be bound to this list so that the UI automatically updates when the data in the list change.","lastModifiedDate":"2021-07-31"},{"lineNumber":127,"author":{"gitId":"-"},"content":"* stores a `UserPref` object that represents the user’s preferences. This is exposed to the outside as a `ReadOnlyUserPref` objects.","lastModifiedDate":"2021-07-31"},{"lineNumber":128,"author":{"gitId":"-"},"content":"* does not depend on any of the other three components (as the `Model` represents data entities of the domain, they should make sense on their own without depending on other components)","lastModifiedDate":"2021-07-31"},{"lineNumber":129,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":130,"author":{"gitId":"joenus"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-info\"\u003e:information_source: **Note:** An alternative (arguably, a more OOP) model is given below. It has a `Tag` list in the `HealthSync`, which `Person` references. This allows `HealthSync` to only require one `Tag` object per unique tag, instead of each `Person` needing their own `Tag` objects.\u003cbr\u003e","lastModifiedDate":"2024-02-28"},{"lineNumber":131,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":132,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/BetterModelClassDiagram.png\" width\u003d\"450\" /\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":133,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":134,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":135,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":137,"author":{"gitId":"-"},"content":"### Storage component","lastModifiedDate":"2020-05-23"},{"lineNumber":138,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":139,"author":{"gitId":"joenus"},"content":"**API** : [`Storage.java`](https://github.com/se-edu/HealthSync-level3/tree/master/src/main/java/seedu/address/storage/Storage.java)","lastModifiedDate":"2024-02-28"},{"lineNumber":140,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":141,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/StorageClassDiagram.png\" width\u003d\"550\" /\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":142,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":143,"author":{"gitId":"-"},"content":"The `Storage` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":144,"author":{"gitId":"-"},"content":"* can save both address book data and user preference data in JSON format, and read them back into corresponding objects.","lastModifiedDate":"2023-09-03"},{"lineNumber":145,"author":{"gitId":"joenus"},"content":"* inherits from both `HealthSyncStorage` and `UserPrefStorage`, which means it can be treated as either one (if only the functionality of only one is needed).","lastModifiedDate":"2024-02-28"},{"lineNumber":146,"author":{"gitId":"-"},"content":"* depends on some classes in the `Model` component (because the `Storage` component\u0027s job is to save/retrieve objects that belong to the `Model`)","lastModifiedDate":"2021-07-21"},{"lineNumber":147,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":148,"author":{"gitId":"-"},"content":"### Common classes","lastModifiedDate":"2020-05-23"},{"lineNumber":149,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":150,"author":{"gitId":"joenus"},"content":"Classes used by multiple components are in the `seedu.HealthSync.commons` package.","lastModifiedDate":"2024-02-28"},{"lineNumber":151,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":152,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":153,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":154,"author":{"gitId":"-"},"content":"## **Implementation**","lastModifiedDate":"2020-05-23"},{"lineNumber":155,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":156,"author":{"gitId":"-"},"content":"This section describes some noteworthy details on how certain features are implemented.","lastModifiedDate":"2020-05-23"},{"lineNumber":157,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":158,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Undo/redo feature","lastModifiedDate":"2020-06-07"},{"lineNumber":159,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":160,"author":{"gitId":"-"},"content":"#### Proposed Implementation","lastModifiedDate":"2020-05-23"},{"lineNumber":161,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":162,"author":{"gitId":"joenus"},"content":"The proposed undo/redo mechanism is facilitated by `VersionedHealthSync`. It extends `HealthSync` with an undo/redo history, stored internally as an `HealthSyncStateList` and `currentStatePointer`. Additionally, it implements the following operations:","lastModifiedDate":"2024-02-28"},{"lineNumber":163,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":164,"author":{"gitId":"joenus"},"content":"* `VersionedHealthSync#commit()` — Saves the current address book state in its history.","lastModifiedDate":"2024-02-28"},{"lineNumber":165,"author":{"gitId":"joenus"},"content":"* `VersionedHealthSync#undo()` — Restores the previous address book state from its history.","lastModifiedDate":"2024-02-28"},{"lineNumber":166,"author":{"gitId":"joenus"},"content":"* `VersionedHealthSync#redo()` — Restores a previously undone address book state from its history.","lastModifiedDate":"2024-02-28"},{"lineNumber":167,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":168,"author":{"gitId":"joenus"},"content":"These operations are exposed in the `Model` interface as `Model#commitHealthSync()`, `Model#undoHealthSync()` and `Model#redoHealthSync()` respectively.","lastModifiedDate":"2024-02-28"},{"lineNumber":169,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":170,"author":{"gitId":"-"},"content":"Given below is an example usage scenario and how the undo/redo mechanism behaves at each step.","lastModifiedDate":"2020-05-23"},{"lineNumber":171,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":172,"author":{"gitId":"joenus"},"content":"Step 1. The user launches the application for the first time. The `VersionedHealthSync` will be initialized with the initial address book state, and the `currentStatePointer` pointing to that single address book state.","lastModifiedDate":"2024-02-28"},{"lineNumber":173,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":174,"author":{"gitId":"-"},"content":"![UndoRedoState0](images/UndoRedoState0.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":175,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":176,"author":{"gitId":"joenus"},"content":"Step 2. The user executes `delete 5` command to delete the 5th person in the address book. The `delete` command calls `Model#commitHealthSync()`, causing the modified state of the address book after the `delete 5` command executes to be saved in the `HealthSyncStateList`, and the `currentStatePointer` is shifted to the newly inserted address book state.","lastModifiedDate":"2024-02-28"},{"lineNumber":177,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":178,"author":{"gitId":"-"},"content":"![UndoRedoState1](images/UndoRedoState1.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":179,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":180,"author":{"gitId":"joenus"},"content":"Step 3. The user executes `add n/David …​` to add a new person. The `add` command also calls `Model#commitHealthSync()`, causing another modified address book state to be saved into the `HealthSyncStateList`.","lastModifiedDate":"2024-02-28"},{"lineNumber":181,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":182,"author":{"gitId":"-"},"content":"![UndoRedoState2](images/UndoRedoState2.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":183,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":184,"author":{"gitId":"joenus"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-info\"\u003e:information_source: **Note:** If a command fails its execution, it will not call `Model#commitHealthSync()`, so the address book state will not be saved into the `HealthSyncStateList`.","lastModifiedDate":"2024-02-28"},{"lineNumber":185,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":186,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":187,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":188,"author":{"gitId":"joenus"},"content":"Step 4. The user now decides that adding the person was a mistake, and decides to undo that action by executing the `undo` command. The `undo` command will call `Model#undoHealthSync()`, which will shift the `currentStatePointer` once to the left, pointing it to the previous address book state, and restores the address book to that state.","lastModifiedDate":"2024-02-28"},{"lineNumber":189,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":190,"author":{"gitId":"-"},"content":"![UndoRedoState3](images/UndoRedoState3.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":191,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":192,"author":{"gitId":"joenus"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-info\"\u003e:information_source: **Note:** If the `currentStatePointer` is at index 0, pointing to the initial HealthSync state, then there are no previous HealthSync states to restore. The `undo` command uses `Model#canUndoHealthSync()` to check if this is the case. If so, it will return an error to the user rather","lastModifiedDate":"2024-02-28"},{"lineNumber":193,"author":{"gitId":"-"},"content":"than attempting to perform the undo.","lastModifiedDate":"2020-05-23"},{"lineNumber":194,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":195,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":196,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":197,"author":{"gitId":"-"},"content":"The following sequence diagram shows how an undo operation goes through the `Logic` component:","lastModifiedDate":"2024-02-09"},{"lineNumber":198,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":199,"author":{"gitId":"-"},"content":"![UndoSequenceDiagram](images/UndoSequenceDiagram-Logic.png)","lastModifiedDate":"2024-02-09"},{"lineNumber":200,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":201,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-info\"\u003e:information_source: **Note:** The lifeline for `UndoCommand` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram.","lastModifiedDate":"2020-05-23"},{"lineNumber":202,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":203,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":204,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":205,"author":{"gitId":"-"},"content":"Similarly, how an undo operation goes through the `Model` component is shown below:","lastModifiedDate":"2024-02-09"},{"lineNumber":206,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":207,"author":{"gitId":"-"},"content":"![UndoSequenceDiagram](images/UndoSequenceDiagram-Model.png)","lastModifiedDate":"2024-02-09"},{"lineNumber":208,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":209,"author":{"gitId":"joenus"},"content":"The `redo` command does the opposite — it calls `Model#redoHealthSync()`, which shifts the `currentStatePointer` once to the right, pointing to the previously undone state, and restores the address book to that state.","lastModifiedDate":"2024-02-28"},{"lineNumber":210,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":211,"author":{"gitId":"joenus"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-info\"\u003e:information_source: **Note:** If the `currentStatePointer` is at index `HealthSyncStateList.size() - 1`, pointing to the latest address book state, then there are no undone HealthSync states to restore. The `redo` command uses `Model#canRedoHealthSync()` to check if this is the case. If so, it will return an error to the user rather than attempting to perform the redo.","lastModifiedDate":"2024-02-28"},{"lineNumber":212,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":213,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":214,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":215,"author":{"gitId":"joenus"},"content":"Step 5. The user then decides to execute the command `list`. Commands that do not modify the address book, such as `list`, will usually not call `Model#commitHealthSync()`, `Model#undoHealthSync()` or `Model#redoHealthSync()`. Thus, the `HealthSyncStateList` remains unchanged.","lastModifiedDate":"2024-02-28"},{"lineNumber":216,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":217,"author":{"gitId":"-"},"content":"![UndoRedoState4](images/UndoRedoState4.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":218,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":219,"author":{"gitId":"joenus"},"content":"Step 6. The user executes `clear`, which calls `Model#commitHealthSync()`. Since the `currentStatePointer` is not pointing at the end of the `HealthSyncStateList`, all address book states after the `currentStatePointer` will be purged. Reason: It no longer makes sense to redo the `add n/David …​` command. This is the behavior that most modern desktop applications follow.","lastModifiedDate":"2024-02-28"},{"lineNumber":220,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":221,"author":{"gitId":"-"},"content":"![UndoRedoState5](images/UndoRedoState5.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":222,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":223,"author":{"gitId":"-"},"content":"The following activity diagram summarizes what happens when a user executes a new command:","lastModifiedDate":"2020-05-23"},{"lineNumber":224,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":225,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/CommitActivityDiagram.png\" width\u003d\"250\" /\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":226,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":227,"author":{"gitId":"-"},"content":"#### Design considerations:","lastModifiedDate":"2021-07-31"},{"lineNumber":228,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":229,"author":{"gitId":"-"},"content":"**Aspect: How undo \u0026 redo executes:**","lastModifiedDate":"2021-07-31"},{"lineNumber":230,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":231,"author":{"gitId":"-"},"content":"* **Alternative 1 (current choice):** Saves the entire address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":232,"author":{"gitId":"-"},"content":" * Pros: Easy to implement.","lastModifiedDate":"2020-05-23"},{"lineNumber":233,"author":{"gitId":"-"},"content":" * Cons: May have performance issues in terms of memory usage.","lastModifiedDate":"2020-05-23"},{"lineNumber":234,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":235,"author":{"gitId":"-"},"content":"* **Alternative 2:** Individual command knows how to undo/redo by","lastModifiedDate":"2020-05-23"},{"lineNumber":236,"author":{"gitId":"-"},"content":" itself.","lastModifiedDate":"2020-05-23"},{"lineNumber":237,"author":{"gitId":"-"},"content":" * Pros: Will use less memory (e.g. for `delete`, just save the person being deleted).","lastModifiedDate":"2020-05-23"},{"lineNumber":238,"author":{"gitId":"-"},"content":" * Cons: We must ensure that the implementation of each individual command are correct.","lastModifiedDate":"2020-05-23"},{"lineNumber":239,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":240,"author":{"gitId":"-"},"content":"_{more aspects and alternatives to be added}_","lastModifiedDate":"2020-05-23"},{"lineNumber":241,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":242,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Data archiving","lastModifiedDate":"2020-05-23"},{"lineNumber":243,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":244,"author":{"gitId":"-"},"content":"_{Explain here how the data archiving feature will be implemented}_","lastModifiedDate":"2020-05-23"},{"lineNumber":245,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":246,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":247,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":248,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":249,"author":{"gitId":"-"},"content":"## **Documentation, logging, testing, configuration, dev-ops**","lastModifiedDate":"2020-06-07"},{"lineNumber":250,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":251,"author":{"gitId":"-"},"content":"* [Documentation guide](Documentation.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":252,"author":{"gitId":"-"},"content":"* [Testing guide](Testing.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":253,"author":{"gitId":"-"},"content":"* [Logging guide](Logging.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":254,"author":{"gitId":"-"},"content":"* [Configuration guide](Configuration.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":255,"author":{"gitId":"-"},"content":"* [DevOps guide](DevOps.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":256,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":257,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":258,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":259,"author":{"gitId":"-"},"content":"## **Appendix: Requirements**","lastModifiedDate":"2020-05-23"},{"lineNumber":260,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":261,"author":{"gitId":"-"},"content":"### Product scope","lastModifiedDate":"2020-05-23"},{"lineNumber":262,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":263,"author":{"gitId":"-"},"content":"**Target user profile**:","lastModifiedDate":"2020-05-23"},{"lineNumber":264,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":265,"author":{"gitId":"jmsandiegoo"},"content":"* Dr. Emily Chen is a General Practitioner","lastModifiedDate":"2024-03-01"},{"lineNumber":266,"author":{"gitId":"jmsandiegoo"},"content":"* She aims to enhance clinical efficiency and maintain high-quality care","lastModifiedDate":"2024-03-01"},{"lineNumber":267,"author":{"gitId":"jmsandiegoo"},"content":"* Challenges include time constraints and documentation overload","lastModifiedDate":"2024-03-01"},{"lineNumber":268,"author":{"gitId":"jmsandiegoo"},"content":"* She needs seamless workflow management and a keyboard-driven system","lastModifiedDate":"2024-03-01"},{"lineNumber":269,"author":{"gitId":"jmsandiegoo"},"content":"* Her personality is dedicated and empathetic, with a focus on patient care","lastModifiedDate":"2024-03-01"},{"lineNumber":270,"author":{"gitId":"jmsandiegoo"},"content":"* Can type fast hence loves to play type racer during her free time","lastModifiedDate":"2024-03-01"},{"lineNumber":271,"author":{"gitId":"jmsandiegoo"},"content":"* Prefers to type over mouse interactions","lastModifiedDate":"2024-03-01"},{"lineNumber":272,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":273,"author":{"gitId":"jmsandiegoo"},"content":"**Value proposition**: manage patient medical records faster than a typical mouse/GUI driven app","lastModifiedDate":"2024-03-01"},{"lineNumber":274,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":275,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":276,"author":{"gitId":"-"},"content":"### User stories","lastModifiedDate":"2020-06-07"},{"lineNumber":277,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":278,"author":{"gitId":"-"},"content":"Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unlikely to have) - `*`","lastModifiedDate":"2020-05-23"},{"lineNumber":279,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":280,"author":{"gitId":"-"},"content":"| Priority | As a …​ | I want to …​ | So that I can…​ |","lastModifiedDate":"2020-05-23"},{"lineNumber":281,"author":{"gitId":"jmsandiegoo"},"content":"| -------- | ------------------------------------------ |---------------------------------------|----------------------------------------------------------|","lastModifiedDate":"2024-03-01"},{"lineNumber":282,"author":{"gitId":"jmsandiegoo"},"content":"| `* * *` | user | view all my patient\u0027s medical records | have a clear overview of all my records |","lastModifiedDate":"2024-03-01"},{"lineNumber":283,"author":{"gitId":"jmsandiegoo"},"content":"| `* * *` | user | add a patient\u0027s medical record | record new patients I work with |","lastModifiedDate":"2024-03-01"},{"lineNumber":284,"author":{"gitId":"raysonchia"},"content":"| `* * *` | user | edit a patient\u0027s medical record | amend necessary details of a medical record when needed |","lastModifiedDate":"2024-03-01"},{"lineNumber":285,"author":{"gitId":"raysonchia"},"content":"| `* * *` | user | delete a patient\u0027s medical record | remove patient\u0027s medical record that I no longer need |","lastModifiedDate":"2024-03-01"},{"lineNumber":286,"author":{"gitId":"sebin0817"},"content":"| `* * *` | user | list all patients\u0027 appointment notes | view all existing appointment notes |","lastModifiedDate":"2024-03-01"},{"lineNumber":287,"author":{"gitId":"joenus"},"content":"| `* * *` | user | add a patient\u0027s appointment note | record keep the details of each appointment |","lastModifiedDate":"2024-02-28"},{"lineNumber":288,"author":{"gitId":"sebin0817"},"content":"| `* * *` | user | edit a patient\u0027s appointment note | update the details of an appointment |","lastModifiedDate":"2024-03-01"},{"lineNumber":289,"author":{"gitId":"joenus"},"content":"| `* * *` | user | delete a patient\u0027s appointment note | remove entries that I no longer need |","lastModifiedDate":"2024-02-28"},{"lineNumber":290,"author":{"gitId":"rickkoh"},"content":"| `* * *` | user | access a help page for quick reference | have a better idea where to get started |","lastModifiedDate":"2024-03-02"},{"lineNumber":291,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":292,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":293,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":294,"author":{"gitId":"-"},"content":"### Use cases","lastModifiedDate":"2020-06-07"},{"lineNumber":295,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":296,"author":{"gitId":"joenus"},"content":"(For all use cases below, the **System** is the `HealthSync` and the **Actor** is the `user`, unless specified otherwise)","lastModifiedDate":"2024-02-28"},{"lineNumber":297,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":298,"author":{"gitId":"sebin0817"},"content":"#### Use case: List all patients\u0027 appointment notes","lastModifiedDate":"2024-03-01"},{"lineNumber":299,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":300,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2024-03-01"},{"lineNumber":301,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":302,"author":{"gitId":"sebin0817"},"content":"1. User requests to list patients","lastModifiedDate":"2024-03-01"},{"lineNumber":303,"author":{"gitId":"sebin0817"},"content":"2. HealthSync shows a list of patients","lastModifiedDate":"2024-03-01"},{"lineNumber":304,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":305,"author":{"gitId":"sebin0817"},"content":" Use case ends.","lastModifiedDate":"2024-03-01"},{"lineNumber":306,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":307,"author":{"gitId":"sebin0817"},"content":"**Extensions**","lastModifiedDate":"2024-03-01"},{"lineNumber":308,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":309,"author":{"gitId":"sebin0817"},"content":"* 2a. The list of patients is empty.","lastModifiedDate":"2024-03-01"},{"lineNumber":310,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":311,"author":{"gitId":"sebin0817"},"content":" Use case ends.","lastModifiedDate":"2024-03-01"},{"lineNumber":312,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":313,"author":{"gitId":"joenus"},"content":"#### Use case: Add a patient\u0027s appointment note","lastModifiedDate":"2024-02-28"},{"lineNumber":314,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":315,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2020-05-23"},{"lineNumber":316,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":317,"author":{"gitId":"joenus"},"content":"1. User requests to list patients","lastModifiedDate":"2024-02-28"},{"lineNumber":318,"author":{"gitId":"joenus"},"content":"2. HealthSync shows a list of patients","lastModifiedDate":"2024-02-28"},{"lineNumber":319,"author":{"gitId":"joenus"},"content":"3. User requests to add an appointment note for a given patient","lastModifiedDate":"2024-02-28"},{"lineNumber":320,"author":{"gitId":"joenus"},"content":"4. HealthSync adds the appointment note","lastModifiedDate":"2024-02-28"},{"lineNumber":321,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":322,"author":{"gitId":"joenus"},"content":" Use case ends.","lastModifiedDate":"2024-02-28"},{"lineNumber":323,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":324,"author":{"gitId":"joenus"},"content":"**Extensions**","lastModifiedDate":"2024-02-28"},{"lineNumber":325,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":326,"author":{"gitId":"joenus"},"content":"* 2a. The list of patients is empty.","lastModifiedDate":"2024-02-28"},{"lineNumber":327,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":328,"author":{"gitId":"joenus"},"content":" Use case ends.","lastModifiedDate":"2024-02-28"},{"lineNumber":329,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":330,"author":{"gitId":"joenus"},"content":"* 3a. The given patient index is invalid.","lastModifiedDate":"2024-02-28"},{"lineNumber":331,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":332,"author":{"gitId":"joenus"},"content":" * 3a1. HealthSync shows an error message.","lastModifiedDate":"2024-02-28"},{"lineNumber":333,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":334,"author":{"gitId":"joenus"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-02-28"},{"lineNumber":335,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":336,"author":{"gitId":"sebin0817"},"content":"#### Use case: Edit a patient\u0027s appointment note","lastModifiedDate":"2024-03-01"},{"lineNumber":337,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":338,"author":{"gitId":"sebin0817"},"content":"**MSS**","lastModifiedDate":"2024-03-01"},{"lineNumber":339,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":340,"author":{"gitId":"sebin0817"},"content":"1. User requests to list patients","lastModifiedDate":"2024-03-01"},{"lineNumber":341,"author":{"gitId":"sebin0817"},"content":"2. HealthSync shows a list of patients","lastModifiedDate":"2024-03-01"},{"lineNumber":342,"author":{"gitId":"sebin0817"},"content":"3. User requests to edit an appointment note for a given patient","lastModifiedDate":"2024-03-01"},{"lineNumber":343,"author":{"gitId":"sebin0817"},"content":"4. HealthSync edits the appointment note","lastModifiedDate":"2024-03-01"},{"lineNumber":344,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":345,"author":{"gitId":"sebin0817"},"content":" Use case ends.","lastModifiedDate":"2024-03-01"},{"lineNumber":346,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":347,"author":{"gitId":"sebin0817"},"content":"**Extensions**","lastModifiedDate":"2024-03-01"},{"lineNumber":348,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":349,"author":{"gitId":"sebin0817"},"content":"* 2a. The list of patients is empty.","lastModifiedDate":"2024-03-01"},{"lineNumber":350,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":351,"author":{"gitId":"sebin0817"},"content":" Use case ends.","lastModifiedDate":"2024-03-01"},{"lineNumber":352,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":353,"author":{"gitId":"sebin0817"},"content":"* 3a. The given patient index is invalid.","lastModifiedDate":"2024-03-01"},{"lineNumber":354,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":355,"author":{"gitId":"sebin0817"},"content":" * 3a1. HealthSync shows an error message.","lastModifiedDate":"2024-03-01"},{"lineNumber":356,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":357,"author":{"gitId":"sebin0817"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-03-01"},{"lineNumber":358,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":359,"author":{"gitId":"sebin0817"},"content":"* 3b. The given appointment note index is invalid.","lastModifiedDate":"2024-03-01"},{"lineNumber":360,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":361,"author":{"gitId":"sebin0817"},"content":" * 3b1. HealthSync shows an error message.","lastModifiedDate":"2024-03-01"},{"lineNumber":362,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":363,"author":{"gitId":"sebin0817"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-03-01"},{"lineNumber":364,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":365,"author":{"gitId":"joenus"},"content":"#### Use case: Delete a patient\u0027s appointment note","lastModifiedDate":"2024-02-28"},{"lineNumber":366,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":367,"author":{"gitId":"joenus"},"content":"**MSS**","lastModifiedDate":"2024-02-28"},{"lineNumber":368,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":369,"author":{"gitId":"joenus"},"content":"1. User requests to list patients","lastModifiedDate":"2024-02-28"},{"lineNumber":370,"author":{"gitId":"joenus"},"content":"2. HealthSync shows a list of patients","lastModifiedDate":"2024-02-28"},{"lineNumber":371,"author":{"gitId":"-"},"content":"3. User requests to delete a specific person in the list","lastModifiedDate":"2020-05-23"},{"lineNumber":372,"author":{"gitId":"joenus"},"content":"4. HealthSync deletes the person","lastModifiedDate":"2024-02-28"},{"lineNumber":373,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":374,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":375,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":376,"author":{"gitId":"-"},"content":"**Extensions**","lastModifiedDate":"2020-05-23"},{"lineNumber":377,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":378,"author":{"gitId":"-"},"content":"* 2a. The list is empty.","lastModifiedDate":"2020-05-23"},{"lineNumber":379,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":380,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":381,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":382,"author":{"gitId":"joenus"},"content":"* 3a. The given patient index is invalid.","lastModifiedDate":"2024-02-28"},{"lineNumber":383,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":384,"author":{"gitId":"joenus"},"content":" * 3a1. HealthSync shows an error message.","lastModifiedDate":"2024-02-28"},{"lineNumber":385,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":386,"author":{"gitId":"-"},"content":" Use case resumes at step 2.","lastModifiedDate":"2020-05-23"},{"lineNumber":387,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":388,"author":{"gitId":"joenus"},"content":"* 3b. The given appointment note index is invalid.","lastModifiedDate":"2024-02-28"},{"lineNumber":389,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":390,"author":{"gitId":"joenus"},"content":" * 3b1. HealthSync shows an error message.","lastModifiedDate":"2024-02-28"},{"lineNumber":391,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":392,"author":{"gitId":"joenus"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-02-28"},{"lineNumber":393,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":394,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":395,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":396,"author":{"gitId":"-"},"content":"1. Should work on any _mainstream OS_ as long as it has Java `11` or above installed.","lastModifiedDate":"2020-05-23"},{"lineNumber":397,"author":{"gitId":"joenus"},"content":"2. Should be able to hold up to 1000 patients without a noticeable sluggishness in performance for typical usage.","lastModifiedDate":"2024-02-28"},{"lineNumber":398,"author":{"gitId":"joenus"},"content":"3. Should be able to hold up to 200 appointment note per patient without a noticeable sluggishness in performance for typical usage.","lastModifiedDate":"2024-02-28"},{"lineNumber":399,"author":{"gitId":"joenus"},"content":"4. A user with above average typing speed for regular English text (i.e. not code, not system admin commands) should be able to accomplish most of the tasks faster using commands than using the mouse.","lastModifiedDate":"2024-02-28"},{"lineNumber":400,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":401,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":402,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":403,"author":{"gitId":"-"},"content":"* **Mainstream OS**: Windows, Linux, Unix, MacOS","lastModifiedDate":"2024-02-09"},{"lineNumber":404,"author":{"gitId":"raysonchia"},"content":"* **Patient\u0027s medical record**: Essential information about a patient, including name, NRIC, phone number and other relevant details","lastModifiedDate":"2024-03-01"},{"lineNumber":405,"author":{"gitId":"raysonchia"},"content":"* **Patient\u0027s appointment note**: Information on a scheduled patient appointment, including date, time and assessment","lastModifiedDate":"2024-03-01"},{"lineNumber":406,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":407,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":408,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":409,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":410,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":411,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":412,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":413,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":414,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-info\"\u003e:information_source: **Note:** These instructions only provide a starting point for testers to work on;","lastModifiedDate":"2020-05-23"},{"lineNumber":415,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":416,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":417,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":418,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":419,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":420,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":421,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":422,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":423,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":424,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":425,"author":{"gitId":"-"},"content":" 1. Double-click the jar file Expected: Shows the GUI with a set of sample contacts. The window size may not be optimum.","lastModifiedDate":"2020-05-23"},{"lineNumber":426,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":427,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":428,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":429,"author":{"gitId":"-"},"content":" 1. Resize the window to an optimum size. Move the window to a different location. Close the window.","lastModifiedDate":"2020-05-23"},{"lineNumber":430,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":431,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":432,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","lastModifiedDate":"2020-05-23"},{"lineNumber":433,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":434,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":435,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":436,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":437,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":438,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":439,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":440,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":441,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":442,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":443,"author":{"gitId":"-"},"content":" Expected: First contact is deleted from the list. Details of the deleted contact shown in the status message. Timestamp in the status bar is updated.","lastModifiedDate":"2020-05-23"},{"lineNumber":444,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":445,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":446,"author":{"gitId":"-"},"content":" Expected: No person is deleted. Error details shown in the status message. Status bar remains the same.","lastModifiedDate":"2020-05-23"},{"lineNumber":447,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":448,"author":{"gitId":"-"},"content":" 1. Other incorrect delete commands to try: `delete`, `delete x`, `...` (where x is larger than the list size)\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":449,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":450,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":451,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":452,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":453,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":454,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":455,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":456,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":457,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":458,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":459,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"joenus":66,"jmsandiegoo":11,"raysonchia":4,"sebin0817":42,"-":335,"rickkoh":1}},{"path":"docs/UserGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":"layout: page","lastModifiedDate":"2020-05-23"},{"lineNumber":3,"author":{"gitId":"-"},"content":"title: User Guide","lastModifiedDate":"2020-05-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"joenus"},"content":"**HealthSync** helps optimize clinical efficiency with a keyboard-driven system for doctors to manage patient records, notes, medical certificates, and medication dispensing, all in one streamlined interface, enhancing care quality and focus in a busy clinical setting. While it has a GUI, most of the user interactions happen using a CLI (Command Line Interface).","lastModifiedDate":"2024-02-28"},{"lineNumber":7,"author":{"gitId":"raysonchia"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":8,"author":{"gitId":"raysonchia"},"content":"# Table of Contents","lastModifiedDate":"2024-03-01"},{"lineNumber":9,"author":{"gitId":"raysonchia"},"content":"- [Quick Start](#quick-start)","lastModifiedDate":"2024-03-01"},{"lineNumber":10,"author":{"gitId":"raysonchia"},"content":"- [Features](#features)","lastModifiedDate":"2024-03-01"},{"lineNumber":11,"author":{"gitId":"raysonchia"},"content":" - [Help](#viewing-help--help)","lastModifiedDate":"2024-03-01"},{"lineNumber":12,"author":{"gitId":"raysonchia"},"content":" - [Add patient medical record](#adding-a-patient-medical-record-add)","lastModifiedDate":"2024-03-01"},{"lineNumber":13,"author":{"gitId":"raysonchia"},"content":" - [Listing all patient medical records](#listing-all-patient-medical-records--list)","lastModifiedDate":"2024-03-01"},{"lineNumber":14,"author":{"gitId":"raysonchia"},"content":" - [Editing a patient medical record](#editing-a-patient-medical-record--edit)","lastModifiedDate":"2024-03-01"},{"lineNumber":15,"author":{"gitId":"raysonchia"},"content":" - [Deleting a patient medical record](#deleting-a-patient-medical-record--delete)","lastModifiedDate":"2024-03-01"},{"lineNumber":16,"author":{"gitId":"raysonchia"},"content":" - [Adding an appointment note](#adding-an-appointment-note-add-an)","lastModifiedDate":"2024-03-01"},{"lineNumber":17,"author":{"gitId":"raysonchia"},"content":" - [Deleting an appointment note](#deleting-an-appointment-note--delete-an)","lastModifiedDate":"2024-03-01"},{"lineNumber":18,"author":{"gitId":"raysonchia"},"content":" - [Clearing all entries](#clearing-all-entries--clear)","lastModifiedDate":"2024-03-01"},{"lineNumber":19,"author":{"gitId":"raysonchia"},"content":" - [Exiting the program](#exiting-the-program--exit)","lastModifiedDate":"2024-03-01"},{"lineNumber":20,"author":{"gitId":"raysonchia"},"content":" - [Saving the data](#saving-the-data)","lastModifiedDate":"2024-03-01"},{"lineNumber":21,"author":{"gitId":"raysonchia"},"content":" - [Editing the data file](#editing-the-data-file)","lastModifiedDate":"2024-03-01"},{"lineNumber":22,"author":{"gitId":"raysonchia"},"content":"- [FAQ](#faq)","lastModifiedDate":"2024-03-01"},{"lineNumber":23,"author":{"gitId":"raysonchia"},"content":"- [Known issues](#known-issues)","lastModifiedDate":"2024-03-01"},{"lineNumber":24,"author":{"gitId":"raysonchia"},"content":"- [Command summary](#command-summary)","lastModifiedDate":"2024-03-01"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":"## Quick start","lastModifiedDate":"2020-05-23"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":"1. Ensure you have Java `11` or above installed in your Computer.","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"joenus"},"content":"1. Download the latest `healthsync.jar` from [here](https://github.com/AY2324S2-CS2103-F09-4/tp/releases).","lastModifiedDate":"2024-02-28"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"joenus"},"content":"1. Copy the file to the folder you want to use as the _home folder_ for your HealthSync.","lastModifiedDate":"2024-02-28"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"joenus"},"content":"1. Open a command terminal, `cd` into the folder you put the jar file in, and use the `java -jar healthsync.jar` command to run the application.\u003cbr\u003e","lastModifiedDate":"2024-02-28"},{"lineNumber":37,"author":{"gitId":"-"},"content":" A GUI similar to the below should appear in a few seconds. Note how the app contains some sample data.\u003cbr\u003e","lastModifiedDate":"2023-01-01"},{"lineNumber":38,"author":{"gitId":"-"},"content":" ![Ui](images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":40,"author":{"gitId":"-"},"content":"1. Type the command in the command box and press Enter to execute it. e.g. typing **`help`** and pressing Enter will open the help window.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":41,"author":{"gitId":"-"},"content":" Some example commands you can try:","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"-"},"content":" * `list` : Lists all contacts.","lastModifiedDate":"2023-01-01"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":" * `add n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01` : Adds a contact named `John Doe` to the Address Book.","lastModifiedDate":"2023-01-01"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":" * `delete 3` : Deletes the 3rd contact shown in the current list.","lastModifiedDate":"2023-01-01"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"-"},"content":" * `clear` : Deletes all contacts.","lastModifiedDate":"2023-01-01"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"-"},"content":" * `exit` : Exits the app.","lastModifiedDate":"2023-01-01"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":"1. Refer to the [Features](#features) below for details of each command.","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":57,"author":{"gitId":"-"},"content":"## Features","lastModifiedDate":"2020-05-23"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":59,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"block\" class\u003d\"alert alert-info\"\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":61,"author":{"gitId":"-"},"content":"**:information_source: Notes about the command format:**\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":63,"author":{"gitId":"-"},"content":"* Words in `UPPER_CASE` are the parameters to be supplied by the user.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":64,"author":{"gitId":"-"},"content":" e.g. in `add n/NAME`, `NAME` is a parameter which can be used as `add n/John Doe`.","lastModifiedDate":"2020-05-23"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":66,"author":{"gitId":"-"},"content":"* Items in square brackets are optional.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":67,"author":{"gitId":"-"},"content":" e.g `n/NAME [t/TAG]` can be used as `n/John Doe t/friend` or as `n/John Doe`.","lastModifiedDate":"2020-05-23"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":69,"author":{"gitId":"-"},"content":"* Items with `…`​ after them can be used multiple times including zero times.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":70,"author":{"gitId":"-"},"content":" e.g. `[t/TAG]…​` can be used as ` ` (i.e. 0 times), `t/friend`, `t/friend t/family` etc.","lastModifiedDate":"2020-05-23"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":72,"author":{"gitId":"-"},"content":"* Parameters can be in any order.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":73,"author":{"gitId":"-"},"content":" e.g. if the command specifies `n/NAME p/PHONE_NUMBER`, `p/PHONE_NUMBER n/NAME` is also acceptable.","lastModifiedDate":"2020-05-23"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":75,"author":{"gitId":"-"},"content":"* Extraneous parameters for commands that do not take in parameters (such as `help`, `list`, `exit` and `clear`) will be ignored.\u003cbr\u003e","lastModifiedDate":"2021-02-03"},{"lineNumber":76,"author":{"gitId":"-"},"content":" e.g. if the command specifies `help 123`, it will be interpreted as `help`.","lastModifiedDate":"2021-02-03"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-02-03"},{"lineNumber":78,"author":{"gitId":"-"},"content":"* If you are using a PDF version of this document, be careful when copying and pasting commands that span multiple lines as space characters surrounding line-breaks may be omitted when copied over to the application.","lastModifiedDate":"2023-06-26"},{"lineNumber":79,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":81,"author":{"gitId":"-"},"content":"### Viewing help : `help`","lastModifiedDate":"2020-05-23"},{"lineNumber":82,"author":{"gitId":"rickkoh"},"content":"Displays a comprehensive list of available commands within the application, assisting users in navigating and utilizing Healthsync effectively for managing patient medical and appointment records.","lastModifiedDate":"2024-03-01"},{"lineNumber":83,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":84,"author":{"gitId":"rickkoh"},"content":"Format: `help`","lastModifiedDate":"2024-03-01"},{"lineNumber":85,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":86,"author":{"gitId":"rickkoh"},"content":"- This command does not require any parameters.","lastModifiedDate":"2024-03-01"},{"lineNumber":87,"author":{"gitId":"rickkoh"},"content":"- Upon execution, it presents a list of commands along with their formats, example usages, and descriptions.","lastModifiedDate":"2024-03-01"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":89,"author":{"gitId":"rickkoh"},"content":"Example:","lastModifiedDate":"2024-03-01"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":91,"author":{"gitId":"rickkoh"},"content":"- Entering `help` in Healthsync will produce a list of commands as shown above, guiding users through the process of managing patient records and appointments within the system.","lastModifiedDate":"2024-03-01"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":93,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":94,"author":{"gitId":"jmsandiegoo"},"content":"### Adding a patient medical record: `add`","lastModifiedDate":"2024-03-01"},{"lineNumber":95,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":96,"author":{"gitId":"jmsandiegoo"},"content":"Adds a patient medical record to the system.","lastModifiedDate":"2024-03-01"},{"lineNumber":97,"author":{"gitId":"jmsandiegoo"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":98,"author":{"gitId":"jmsandiegoo"},"content":"Format: `add ic/NRIC n/NAME p/PHONE_NUMBER [g/GENDER] b/BIRTHDATE i/ILLNESS_CATEGORY [d/DRUG_ALLERGIES]`","lastModifiedDate":"2024-03-01"},{"lineNumber":99,"author":{"gitId":"jmsandiegoo"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":100,"author":{"gitId":"jmsandiegoo"},"content":"* `NRIC` must be an alphanumeric and it must follow Singapore\u0027s NRIC format","lastModifiedDate":"2024-03-01"},{"lineNumber":101,"author":{"gitId":"jmsandiegoo"},"content":"* `NAME` can contain an alphanumeric, spaces, special characters.","lastModifiedDate":"2024-03-01"},{"lineNumber":102,"author":{"gitId":"jmsandiegoo"},"content":"* `PHONE_NUMBER` numeric characters and must follow the format \"+65 XXXXXXXX\".","lastModifiedDate":"2024-03-01"},{"lineNumber":103,"author":{"gitId":"jmsandiegoo"},"content":"* `GENDER` Male or M, Female F or exclude from the command for Prefer not to say option.","lastModifiedDate":"2024-03-01"},{"lineNumber":104,"author":{"gitId":"jmsandiegoo"},"content":"* `BIRTHDATE` must be in the form of DD-MM-YYYY and must not be in the future.","lastModifiedDate":"2024-03-01"},{"lineNumber":105,"author":{"gitId":"jmsandiegoo"},"content":"* `ILLNESS` one of the following options - Infectious Disease, Chronic Conditions, Autoimmune Disorders, ","lastModifiedDate":"2024-03-01"},{"lineNumber":106,"author":{"gitId":"jmsandiegoo"},"content":"Genetic Disorders, Mental Health Disorders, Neurological Disorders, Metabolic Disorder, Nutritional Deficiencies, ","lastModifiedDate":"2024-03-01"},{"lineNumber":107,"author":{"gitId":"jmsandiegoo"},"content":"Environmental Illnesses, Degenerative Diseases or Others.","lastModifiedDate":"2024-03-01"},{"lineNumber":108,"author":{"gitId":"jmsandiegoo"},"content":"* `DRUG_ALLERGIES` can contain an alphanumeric, spaces, special characters.","lastModifiedDate":"2024-03-01"},{"lineNumber":109,"author":{"gitId":"jmsandiegoo"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":110,"author":{"gitId":"jmsandiegoo"},"content":"Examples:","lastModifiedDate":"2024-03-01"},{"lineNumber":111,"author":{"gitId":"jmsandiegoo"},"content":"* `add ic/S9974944F n/John Doe p/91234567 g/Male b/11-11-1990 i/Infectious Disease d/Paracetamol Allergy` Adds a new ","lastModifiedDate":"2024-03-01"},{"lineNumber":112,"author":{"gitId":"jmsandiegoo"},"content":"patient record with nric of `S9974944F` name of `John Doe`, phone no. of `+65 91234567`, gender of `Male`, ","lastModifiedDate":"2024-03-01"},{"lineNumber":113,"author":{"gitId":"jmsandiegoo"},"content":"birthdate of `11-11-1990`, llness of `Infectious Disease` and allergy of `Paracetamol Allergy`.","lastModifiedDate":"2024-03-01"},{"lineNumber":114,"author":{"gitId":"jmsandiegoo"},"content":"### Listing all patient medical records : `list`","lastModifiedDate":"2024-03-01"},{"lineNumber":115,"author":{"gitId":"jmsandiegoo"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":116,"author":{"gitId":"jmsandiegoo"},"content":"Displays the list of patients in the application. Each row of patients displays a basic details of the patients ","lastModifiedDate":"2024-03-01"},{"lineNumber":117,"author":{"gitId":"jmsandiegoo"},"content":"(e.g. name, gender, age, illness, phone number)","lastModifiedDate":"2024-03-01"},{"lineNumber":118,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":119,"author":{"gitId":"jmsandiegoo"},"content":"Format: `list`","lastModifiedDate":"2024-03-01"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":121,"author":{"gitId":"jmsandiegoo"},"content":"### Editing a patient medical record : `edit`","lastModifiedDate":"2024-03-01"},{"lineNumber":122,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":123,"author":{"gitId":"jmsandiegoo"},"content":"Edits a particular patient medical record. Users can select which particular detail to be updated.","lastModifiedDate":"2024-03-01"},{"lineNumber":124,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":125,"author":{"gitId":"jmsandiegoo"},"content":"Format: `edit PATIENT_","lastModifiedDate":"2024-03-01"},{"lineNumber":126,"author":{"gitId":"jmsandiegoo"},"content":"INDEX [ic/NRIC] [n/NAME] [p/PHONE_NUMBER] [g/GENDER] [b/BIRTHDATE] [i/ILLNESS_CATEGORY] ","lastModifiedDate":"2024-03-01"},{"lineNumber":127,"author":{"gitId":"jmsandiegoo"},"content":"[d/DRUG_ALLERGIES]`","lastModifiedDate":"2024-03-01"},{"lineNumber":128,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":129,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-primary\"\u003e:bulb: **Tip:**","lastModifiedDate":"2020-05-23"},{"lineNumber":130,"author":{"gitId":"jmsandiegoo"},"content":"Edit should have atleast one parameter / detail to update.","lastModifiedDate":"2024-03-01"},{"lineNumber":131,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":132,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":133,"author":{"gitId":"jmsandiegoo"},"content":"* Edits the medical record at the specified `PATIENT_INDEX`. The index refers to the index number shown in the ","lastModifiedDate":"2024-03-01"},{"lineNumber":134,"author":{"gitId":"jmsandiegoo"},"content":"displayed patient medical record list. The index **must be a positive integer** 1, 2, 3, …​","lastModifiedDate":"2024-03-01"},{"lineNumber":135,"author":{"gitId":"jmsandiegoo"},"content":"* `NRIC` must be an alphanumeric and it must follow Singapore\u0027s NRIC format","lastModifiedDate":"2024-03-01"},{"lineNumber":136,"author":{"gitId":"jmsandiegoo"},"content":"* `NAME` can contain an alphanumeric, spaces, special characters.","lastModifiedDate":"2024-03-01"},{"lineNumber":137,"author":{"gitId":"jmsandiegoo"},"content":"* `PHONE_NUMBER` numeric characters and must follow the format \"+65 XXXXXXXX\".","lastModifiedDate":"2024-03-01"},{"lineNumber":138,"author":{"gitId":"jmsandiegoo"},"content":"* `GENDER` Male or M, Female F or exclude from the command for Prefer not to say option.","lastModifiedDate":"2024-03-01"},{"lineNumber":139,"author":{"gitId":"jmsandiegoo"},"content":"* `BIRTHDATE` must be in the form of DD-MM-YYYY and must not be in the future.","lastModifiedDate":"2024-03-01"},{"lineNumber":140,"author":{"gitId":"jmsandiegoo"},"content":"* `ILLNESS` one of the following options - Infectious Disease, Chronic Conditions, Autoimmune Disorders,","lastModifiedDate":"2024-03-01"},{"lineNumber":141,"author":{"gitId":"jmsandiegoo"},"content":" Genetic Disorders, Mental Health Disorders, Neurological Disorders, Metabolic Disorder, Nutritional Deficiencies,","lastModifiedDate":"2024-03-01"},{"lineNumber":142,"author":{"gitId":"jmsandiegoo"},"content":" Environmental Illnesses, Degenerative Diseases or Others.","lastModifiedDate":"2024-03-01"},{"lineNumber":143,"author":{"gitId":"jmsandiegoo"},"content":"* `DRUG_ALLERGIES` can contain an alphanumeric, spaces, special characters.","lastModifiedDate":"2024-03-01"},{"lineNumber":144,"author":{"gitId":"jmsandiegoo"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":145,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":146,"author":{"gitId":"jmsandiegoo"},"content":"* `edit 1 n/Mark Tan p/94505333 g/Female b/11-11-1991 i/Genetic Disorders d/Antibiotic Allergy` Edit the whole patient ","lastModifiedDate":"2024-03-01"},{"lineNumber":147,"author":{"gitId":"jmsandiegoo"},"content":"medical record that has the `PATIENT_INDEX` of 1.","lastModifiedDate":"2024-03-01"},{"lineNumber":148,"author":{"gitId":"jmsandiegoo"},"content":"* `edit 1 g/Male b/11-07-1999` Edits patient medical record that has the `PATIENT_INDEX` of 1 to have a gender of ","lastModifiedDate":"2024-03-01"},{"lineNumber":149,"author":{"gitId":"jmsandiegoo"},"content":"`Male` and birthdate of `11-07-1999`.","lastModifiedDate":"2024-03-01"},{"lineNumber":150,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":151,"author":{"gitId":"jmsandiegoo"},"content":"[//]: # (### Locating persons by name: `find`)","lastModifiedDate":"2024-03-01"},{"lineNumber":152,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":153,"author":{"gitId":"jmsandiegoo"},"content":"[//]: # ()","lastModifiedDate":"2024-03-01"},{"lineNumber":154,"author":{"gitId":"jmsandiegoo"},"content":"[//]: # (Finds persons whose names contain any of the given keywords.)","lastModifiedDate":"2024-03-01"},{"lineNumber":155,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":156,"author":{"gitId":"jmsandiegoo"},"content":"[//]: # (Format: `find KEYWORD [MORE_KEYWORDS]`)","lastModifiedDate":"2024-03-01"},{"lineNumber":157,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":158,"author":{"gitId":"jmsandiegoo"},"content":"[//]: # ()","lastModifiedDate":"2024-03-01"},{"lineNumber":159,"author":{"gitId":"jmsandiegoo"},"content":"[//]: # (* The search is case-insensitive. e.g `hans` will match `Hans`)","lastModifiedDate":"2024-03-01"},{"lineNumber":160,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":161,"author":{"gitId":"jmsandiegoo"},"content":"[//]: # (* The order of the keywords does not matter. e.g. `Hans Bo` will match `Bo Hans`)","lastModifiedDate":"2024-03-01"},{"lineNumber":162,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":163,"author":{"gitId":"jmsandiegoo"},"content":"[//]: # (* Only the name is searched.)","lastModifiedDate":"2024-03-01"},{"lineNumber":164,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":165,"author":{"gitId":"jmsandiegoo"},"content":"[//]: # (* Only full words will be matched e.g. `Han` will not match `Hans`)","lastModifiedDate":"2024-03-01"},{"lineNumber":166,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":167,"author":{"gitId":"jmsandiegoo"},"content":"[//]: # (* Persons matching at least one keyword will be returned \u0026#40;i.e. `OR` search\u0026#41;.)","lastModifiedDate":"2024-03-01"},{"lineNumber":168,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":169,"author":{"gitId":"jmsandiegoo"},"content":"[//]: # ( e.g. `Hans Bo` will return `Hans Gruber`, `Bo Yang`)","lastModifiedDate":"2024-03-01"},{"lineNumber":170,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":171,"author":{"gitId":"jmsandiegoo"},"content":"[//]: # ()","lastModifiedDate":"2024-03-01"},{"lineNumber":172,"author":{"gitId":"jmsandiegoo"},"content":"[//]: # (Examples:)","lastModifiedDate":"2024-03-01"},{"lineNumber":173,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":174,"author":{"gitId":"jmsandiegoo"},"content":"[//]: # (* `find John` returns `john` and `John Doe`)","lastModifiedDate":"2024-03-01"},{"lineNumber":175,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":176,"author":{"gitId":"jmsandiegoo"},"content":"[//]: # (* `find alex david` returns `Alex Yeoh`, `David Li`\u003cbr\u003e)","lastModifiedDate":"2024-03-01"},{"lineNumber":177,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":178,"author":{"gitId":"jmsandiegoo"},"content":"[//]: # ( ![result for \u0027find alex david\u0027]\u0026#40;images/findAlexDavidResult.png\u0026#41;)","lastModifiedDate":"2024-03-01"},{"lineNumber":179,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":180,"author":{"gitId":"raysonchia"},"content":"### Deleting a patient medical record : `delete`","lastModifiedDate":"2024-03-01"},{"lineNumber":181,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":182,"author":{"gitId":"raysonchia"},"content":"Deletes a particular patient\u0027s medical records.","lastModifiedDate":"2024-03-01"},{"lineNumber":183,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":184,"author":{"gitId":"raysonchia"},"content":"Format: `delete PATIENT_INDEX`","lastModifiedDate":"2024-03-01"},{"lineNumber":185,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":186,"author":{"gitId":"raysonchia"},"content":"* Deletes the patient medical record at the specified `INDEX`.","lastModifiedDate":"2024-03-01"},{"lineNumber":187,"author":{"gitId":"raysonchia"},"content":"* The index refers to the index number shown in the displayed patient list.","lastModifiedDate":"2024-03-01"},{"lineNumber":188,"author":{"gitId":"-"},"content":"* The index **must be a positive integer** 1, 2, 3, …​","lastModifiedDate":"2020-05-23"},{"lineNumber":189,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":190,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":191,"author":{"gitId":"raysonchia"},"content":"* `list` followed by `delete 2` deletes the 2nd patient medical record in the patient list.","lastModifiedDate":"2024-03-01"},{"lineNumber":192,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":193,"author":{"gitId":"sebin0817"},"content":"### Listing all appointment notes: `list-an`","lastModifiedDate":"2024-02-29"},{"lineNumber":194,"author":{"gitId":"sebin0817"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":195,"author":{"gitId":"sebin0817"},"content":"Shows a list of all appointment notes.","lastModifiedDate":"2024-02-29"},{"lineNumber":196,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":197,"author":{"gitId":"sebin0817"},"content":"Format: `list-an`","lastModifiedDate":"2024-02-29"},{"lineNumber":198,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":199,"author":{"gitId":"joenus"},"content":"### Adding an appointment note: `add-an`","lastModifiedDate":"2024-02-28"},{"lineNumber":200,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":201,"author":{"gitId":"joenus"},"content":"Adds an appointment note to a patient. Please note that the time parameter is in 24-hour format.","lastModifiedDate":"2024-02-28"},{"lineNumber":202,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":203,"author":{"gitId":"joenus"},"content":"Format: `add-an PATIENT_INDEX d/DD-MM-YYYY t/HHMM n/NOTE`","lastModifiedDate":"2024-02-28"},{"lineNumber":204,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":205,"author":{"gitId":"joenus"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-primary\"\u003e:bulb: **Tip:**","lastModifiedDate":"2024-02-28"},{"lineNumber":206,"author":{"gitId":"joenus"},"content":"A person can have any number of appointment record (including 0)","lastModifiedDate":"2024-02-28"},{"lineNumber":207,"author":{"gitId":"sebin0817"},"content":"\u003c/div\u003e``","lastModifiedDate":"2024-02-29"},{"lineNumber":208,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":209,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2024-02-29"},{"lineNumber":210,"author":{"gitId":"sebin0817"},"content":"* `add-an 1 d/19-02-2024 t/1130 n/General Flu`","lastModifiedDate":"2024-02-29"},{"lineNumber":211,"author":{"gitId":"sebin0817"},"content":"* `add-an 1 d/30-12-2023 t/2100 n/Headache`","lastModifiedDate":"2024-02-29"},{"lineNumber":212,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":213,"author":{"gitId":"sebin0817"},"content":"### Editing an appointment note: `edit-an`","lastModifiedDate":"2024-02-29"},{"lineNumber":214,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":215,"author":{"gitId":"sebin0817"},"content":"Edits an appointment note to a patient. Please note that the time parameter is in 24-hour format.","lastModifiedDate":"2024-02-29"},{"lineNumber":216,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":217,"author":{"gitId":"sebin0817"},"content":"Format: `edit-an PATIENT_INDEX INDEX d/DD-MM-YYYY t/HHMM n/NOTE`","lastModifiedDate":"2024-02-29"},{"lineNumber":218,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":219,"author":{"gitId":"sebin0817"},"content":"* Edits the appointment record at the specified `INDEX` for given patient from `PATIENT_INDEX`.","lastModifiedDate":"2024-02-29"},{"lineNumber":220,"author":{"gitId":"sebin0817"},"content":"* The index refers to the index number shown in the displayed patient list.","lastModifiedDate":"2024-02-29"},{"lineNumber":221,"author":{"gitId":"sebin0817"},"content":"* The patient index refers to the index number shown in the displayed patient list.","lastModifiedDate":"2024-02-29"},{"lineNumber":222,"author":{"gitId":"sebin0817"},"content":"* The index **must be a positive integer** 1, 2, 3, …","lastModifiedDate":"2024-02-29"},{"lineNumber":223,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":224,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2024-02-28"},{"lineNumber":225,"author":{"gitId":"sebin0817"},"content":"* `edit-an 1 1 d/19-02-2024 t/1230 n/General Flu`","lastModifiedDate":"2024-02-29"},{"lineNumber":226,"author":{"gitId":"sebin0817"},"content":"* `edit-an 1 2 d/30-12-2023 t/2100 n/Stomach Virus`","lastModifiedDate":"2024-02-29"},{"lineNumber":227,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":228,"author":{"gitId":"joenus"},"content":"### Deleting an appointment note : `delete-an`","lastModifiedDate":"2024-02-28"},{"lineNumber":229,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":230,"author":{"gitId":"joenus"},"content":"Deletes the specified appointment note from a patient.","lastModifiedDate":"2024-02-28"},{"lineNumber":231,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":232,"author":{"gitId":"joenus"},"content":"Format: `delete-an PATIENT_INDEX INDEX`","lastModifiedDate":"2024-02-28"},{"lineNumber":233,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":234,"author":{"gitId":"joenus"},"content":"* Deletes the appointment record at the specified `INDEX` for given patient from `PATIENT_INDEX`.","lastModifiedDate":"2024-02-28"},{"lineNumber":235,"author":{"gitId":"joenus"},"content":"* The index refers to the index number shown in the displayed patient list.","lastModifiedDate":"2024-02-28"},{"lineNumber":236,"author":{"gitId":"joenus"},"content":"* The patient index refers to the index number shown in the displayed patient list.","lastModifiedDate":"2024-02-28"},{"lineNumber":237,"author":{"gitId":"joenus"},"content":"* The index **must be a positive integer** 1, 2, 3, …","lastModifiedDate":"2024-02-28"},{"lineNumber":238,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":239,"author":{"gitId":"joenus"},"content":"Examples:","lastModifiedDate":"2024-02-28"},{"lineNumber":240,"author":{"gitId":"sebin0817"},"content":"* `list-an` followed by `delete-an 1 2` deletes the 2nd appointment note from the 1st patient.","lastModifiedDate":"2024-02-29"},{"lineNumber":241,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":242,"author":{"gitId":"sebin0817"},"content":"``","lastModifiedDate":"2024-02-29"},{"lineNumber":243,"author":{"gitId":"-"},"content":"### Clearing all entries : `clear`","lastModifiedDate":"2020-05-23"},{"lineNumber":244,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":245,"author":{"gitId":"-"},"content":"Clears all entries from the address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":246,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":247,"author":{"gitId":"-"},"content":"Format: `clear`","lastModifiedDate":"2020-05-23"},{"lineNumber":248,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":249,"author":{"gitId":"-"},"content":"### Exiting the program : `exit`","lastModifiedDate":"2020-05-23"},{"lineNumber":250,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":251,"author":{"gitId":"-"},"content":"Exits the program.","lastModifiedDate":"2020-05-23"},{"lineNumber":252,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":253,"author":{"gitId":"-"},"content":"Format: `exit`","lastModifiedDate":"2020-05-23"},{"lineNumber":254,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":255,"author":{"gitId":"-"},"content":"### Saving the data","lastModifiedDate":"2020-05-23"},{"lineNumber":256,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":257,"author":{"gitId":"joenus"},"content":"HealthSync data are saved in the hard disk automatically after any command that changes the data. There is no need to save manually.","lastModifiedDate":"2024-02-28"},{"lineNumber":258,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":259,"author":{"gitId":"-"},"content":"### Editing the data file","lastModifiedDate":"2021-02-04"},{"lineNumber":260,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-02-04"},{"lineNumber":261,"author":{"gitId":"joenus"},"content":"HealthSync data are saved automatically as a JSON file `[JAR file location]/data/HealthSync.json`. Advanced users are welcome to update data directly by editing that data file.","lastModifiedDate":"2024-02-28"},{"lineNumber":262,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-02-04"},{"lineNumber":263,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-warning\"\u003e:exclamation: **Caution:**","lastModifiedDate":"2021-02-04"},{"lineNumber":264,"author":{"gitId":"joenus"},"content":"If your changes to the data file makes its format invalid, HealthSync will discard all data and start with an empty data file at the next run. Hence, it is recommended to take a backup of the file before editing it.\u003cbr\u003e","lastModifiedDate":"2024-02-28"},{"lineNumber":265,"author":{"gitId":"joenus"},"content":"Furthermore, certain edits can cause the HealthSync to behave in unexpected ways (e.g., if a value entered is outside of the acceptable range). Therefore, edit the data file only if you are confident that you can update it correctly.","lastModifiedDate":"2024-02-28"},{"lineNumber":266,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2021-02-04"},{"lineNumber":267,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-02-04"},{"lineNumber":268,"author":{"gitId":"-"},"content":"### Archiving data files `[coming in v2.0]`","lastModifiedDate":"2020-05-23"},{"lineNumber":269,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":270,"author":{"gitId":"-"},"content":"_Details coming soon ..._","lastModifiedDate":"2021-02-04"},{"lineNumber":271,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":272,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":273,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":274,"author":{"gitId":"-"},"content":"## FAQ","lastModifiedDate":"2020-05-23"},{"lineNumber":275,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":276,"author":{"gitId":"-"},"content":"**Q**: How do I transfer my data to another Computer?\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":277,"author":{"gitId":"joenus"},"content":"**A**: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous HealthSync home folder.","lastModifiedDate":"2024-02-28"},{"lineNumber":278,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":279,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":280,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":281,"author":{"gitId":"-"},"content":"## Known issues","lastModifiedDate":"2023-09-08"},{"lineNumber":282,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":283,"author":{"gitId":"-"},"content":"1. **When using multiple screens**, if you move the application to a secondary screen, and later switch to using only the primary screen, the GUI will open off-screen. The remedy is to delete the `preferences.json` file created by the application before running the application again.","lastModifiedDate":"2023-09-08"},{"lineNumber":284,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":285,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2023-09-08"},{"lineNumber":286,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":287,"author":{"gitId":"-"},"content":"## Command summary","lastModifiedDate":"2020-05-23"},{"lineNumber":288,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":289,"author":{"gitId":"-"},"content":"Action | Format, Examples","lastModifiedDate":"2020-05-23"},{"lineNumber":290,"author":{"gitId":"-"},"content":"--------|------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":291,"author":{"gitId":"jmsandiegoo"},"content":"**Add Patient Medical Record** | `add ic/NRIC n/NAME p/PHONE_NUMBER [g/GENDER] b/BIRTHDATE i/ILLNESS_CATEGORY [d/DRUG_ALLERGIES]` \u003cbr\u003e e.g. `add ic/S9974944F n/John Doe p/91234567 g/Male b/11-11-1990 i/Infectious Disease d/Paracetamol Allergy`","lastModifiedDate":"2024-03-01"},{"lineNumber":292,"author":{"gitId":"jmsandiegoo"},"content":"**List All Patient Medical Records** | `list`","lastModifiedDate":"2024-03-01"},{"lineNumber":293,"author":{"gitId":"jmsandiegoo"},"content":"**Edit Patient Medical Record** | `edit PATIENT_INDEX [ic/NRIC] [n/NAME] [p/PHONE_NUMBER] [g/GENDER] [b/BIRTHDATE] [i/ILLNESS_CATEGORY] [d/DRUG_ALLERGIES]` \u003cbr\u003e e.g. `edit 1 g/Male b/11-07-1999`","lastModifiedDate":"2024-03-01"},{"lineNumber":294,"author":{"gitId":"-"},"content":"**Delete** | `delete INDEX`\u003cbr\u003e e.g., `delete 3`","lastModifiedDate":"2020-05-23"},{"lineNumber":295,"author":{"gitId":"-"},"content":"**Edit** | `edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [t/TAG]…​`\u003cbr\u003e e.g.,`edit 2 n/James Lee e/jameslee@example.com`","lastModifiedDate":"2020-05-23"},{"lineNumber":296,"author":{"gitId":"-"},"content":"**Find** | `find KEYWORD [MORE_KEYWORDS]`\u003cbr\u003e e.g., `find James Jake`","lastModifiedDate":"2020-05-23"},{"lineNumber":297,"author":{"gitId":"sebin0817"},"content":"**List Appointment Note** | `list-an`","lastModifiedDate":"2024-02-29"},{"lineNumber":298,"author":{"gitId":"sebin0817"},"content":"**Add Appointment Note** | `add-an PATIENT_INDEX d/DD-MM-YYYY t/HHMM n/NOTE`\u003cbr\u003e e.g., `add-an 1 d/30-12-2023 t/2100 n/Headache`","lastModifiedDate":"2024-02-29"},{"lineNumber":299,"author":{"gitId":"sebin0817"},"content":"**Edit Appointment Note** | `edit-an PATIENT_INDEX INDEX d/DD-MM-YYYY t/HHMM n/NOTE`\u003cbr\u003e e.g., `edit-an 1 1 d/19-02-2024 t/1230 n/General Flu`","lastModifiedDate":"2024-02-29"},{"lineNumber":300,"author":{"gitId":"sebin0817"},"content":"**Delete Appointment Note** | `delete-an PATIENT_INDEX INDEX`\u003cbr\u003e e.g., `delete-an 1 2`","lastModifiedDate":"2024-02-29"},{"lineNumber":301,"author":{"gitId":"-"},"content":"**List** | `list`","lastModifiedDate":"2020-05-23"},{"lineNumber":302,"author":{"gitId":"-"},"content":"**Help** | `help`","lastModifiedDate":"2020-05-23"},{"lineNumber":303,"author":{"gitId":"jmsandiegoo"},"content":"**Clear** | `clear`","lastModifiedDate":"2024-03-01"}],"authorContributionMap":{"joenus":28,"jmsandiegoo":66,"raysonchia":24,"sebin0817":22,"-":157,"rickkoh":6}},{"path":"docs/index.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":"layout: page","lastModifiedDate":"2020-05-23"},{"lineNumber":3,"author":{"gitId":"joenus"},"content":"title: 💊 HealthSync","lastModifiedDate":"2024-02-28"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"joenus"},"content":"[![Java CI](https://github.com/AY2324S2-CS2103-F09-4/tp/actions/workflows/gradle.yml/badge.svg)](https://github.com/AY2324S2-CS2103-F09-4/tp/actions/workflows/gradle.yml)","lastModifiedDate":"2024-02-28"},{"lineNumber":7,"author":{"gitId":"joenus"},"content":"[![codecov](https://codecov.io/gh/AY2324S2-CS2103-F09-4/tp/graph/badge.svg?token\u003dZCUENL7XA6)](https://codecov.io/gh/AY2324S2-CS2103-F09-4/tp)","lastModifiedDate":"2024-02-28"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"![Ui](images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":11,"author":{"gitId":"joenus"},"content":"**HealthSync** helps optimize clinical efficiency with a keyboard-driven system for doctors to manage patient records, notes, medical certificates, and medication dispensing, all in one streamlined interface, enhancing care quality and focus in a busy clinical setting. While it has a GUI, most of the user interactions happen using a CLI (Command Line Interface).","lastModifiedDate":"2024-02-28"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":13,"author":{"gitId":"joenus"},"content":"* If you are interested in using HealthSync, head over to the [_Quick Start_ section of the **User Guide**](UserGuide.html#quick-start).","lastModifiedDate":"2024-02-28"},{"lineNumber":14,"author":{"gitId":"joenus"},"content":"* If you are interested about developing HealthSync, the [**Developer Guide**](DeveloperGuide.html) is a good place to start.","lastModifiedDate":"2024-02-28"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":17,"author":{"gitId":"-"},"content":"**Acknowledgements**","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"* Libraries used: [JavaFX](https://openjfx.io/), [Jackson](https://github.com/FasterXML/jackson), [JUnit5](https://github.com/junit-team/junit5)","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"joenus":6,"-":13}},{"path":"src/main/java/seedu/address/logic/Messages.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic;","lastModifiedDate":"2023-07-13"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2023-07-14"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-07-14"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.stream.Stream;","lastModifiedDate":"2023-07-14"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.Prefix;","lastModifiedDate":"2023-07-14"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2019-02-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":10,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":" * Container for user visible messages.","lastModifiedDate":"2016-08-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class Messages {","lastModifiedDate":"2016-08-24"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":" public static final String MESSAGE_UNKNOWN_COMMAND \u003d \"Unknown command\";","lastModifiedDate":"2016-09-21"},{"lineNumber":16,"author":{"gitId":"-"},"content":" public static final String MESSAGE_INVALID_COMMAND_FORMAT \u003d \"Invalid command format! \\n%1$s\";","lastModifiedDate":"2016-08-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":" public static final String MESSAGE_INVALID_PERSON_DISPLAYED_INDEX \u003d \"The person index provided is invalid\";","lastModifiedDate":"2016-08-24"},{"lineNumber":18,"author":{"gitId":"-"},"content":" public static final String MESSAGE_PERSONS_LISTED_OVERVIEW \u003d \"%1$d persons listed!\";","lastModifiedDate":"2016-08-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":" public static final String MESSAGE_DUPLICATE_FIELDS \u003d","lastModifiedDate":"2023-07-14"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \"Multiple values specified for the following single-valued field(s): \";","lastModifiedDate":"2023-07-14"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":22,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-07-14"},{"lineNumber":23,"author":{"gitId":"-"},"content":" * Returns an error message indicating the duplicate prefixes.","lastModifiedDate":"2023-07-14"},{"lineNumber":24,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-07-14"},{"lineNumber":25,"author":{"gitId":"-"},"content":" public static String getErrorMessageForDuplicatePrefixes(Prefix... duplicatePrefixes) {","lastModifiedDate":"2023-07-14"},{"lineNumber":26,"author":{"gitId":"-"},"content":" assert duplicatePrefixes.length \u003e 0;","lastModifiedDate":"2023-07-14"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":28,"author":{"gitId":"-"},"content":" Set\u003cString\u003e duplicateFields \u003d","lastModifiedDate":"2023-07-14"},{"lineNumber":29,"author":{"gitId":"-"},"content":" Stream.of(duplicatePrefixes).map(Prefix::toString).collect(Collectors.toSet());","lastModifiedDate":"2023-07-14"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":31,"author":{"gitId":"-"},"content":" return MESSAGE_DUPLICATE_FIELDS + String.join(\" \", duplicateFields);","lastModifiedDate":"2023-07-14"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-14"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-28"},{"lineNumber":34,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2019-02-23"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * Formats the {@code person} for display to the user.","lastModifiedDate":"2019-02-23"},{"lineNumber":36,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2019-02-23"},{"lineNumber":37,"author":{"gitId":"-"},"content":" public static String format(Person person) {","lastModifiedDate":"2019-02-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":" final StringBuilder builder \u003d new StringBuilder();","lastModifiedDate":"2019-02-23"},{"lineNumber":39,"author":{"gitId":"-"},"content":" builder.append(person.getName())","lastModifiedDate":"2019-02-23"},{"lineNumber":40,"author":{"gitId":"-"},"content":" .append(\"; Phone: \")","lastModifiedDate":"2019-02-23"},{"lineNumber":41,"author":{"gitId":"-"},"content":" .append(person.getPhone())","lastModifiedDate":"2019-02-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":" .append(\"; Email: \")","lastModifiedDate":"2019-02-23"},{"lineNumber":43,"author":{"gitId":"-"},"content":" .append(person.getEmail())","lastModifiedDate":"2019-02-23"},{"lineNumber":44,"author":{"gitId":"-"},"content":" .append(\"; Address: \")","lastModifiedDate":"2019-02-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":" .append(person.getAddress())","lastModifiedDate":"2019-02-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":" .append(\"; Tags: \");","lastModifiedDate":"2019-02-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":" person.getTags().forEach(builder::append);","lastModifiedDate":"2019-02-23"},{"lineNumber":48,"author":{"gitId":"joenus"},"content":" builder.append(\"; Notes: \");","lastModifiedDate":"2024-03-01"},{"lineNumber":49,"author":{"gitId":"joenus"},"content":" person.getNotes().forEach(builder::append);","lastModifiedDate":"2024-03-01"},{"lineNumber":50,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":51,"author":{"gitId":"-"},"content":" return builder.toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":54,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-24"}],"authorContributionMap":{"joenus":3,"-":51}},{"path":"src/main/java/seedu/address/logic/commands/EditCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.commands;","lastModifiedDate":"2016-12-26"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2017-05-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2017-05-09"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2017-05-09"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2017-06-06"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2017-05-09"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2017-05-09"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.model.Model.PREDICATE_SHOW_ALL_PERSONS;","lastModifiedDate":"2017-08-05"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-09"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import java.util.Collections;","lastModifiedDate":"2018-01-11"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import java.util.HashSet;","lastModifiedDate":"2018-01-11"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2016-12-26"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import java.util.Objects;","lastModifiedDate":"2023-07-13"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import java.util.Optional;","lastModifiedDate":"2016-12-26"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-03-07"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2017-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.CollectionUtil;","lastModifiedDate":"2016-12-26"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.ToStringBuilder;","lastModifiedDate":"2019-02-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import seedu.address.logic.Messages;","lastModifiedDate":"2023-07-13"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.exceptions.CommandException;","lastModifiedDate":"2017-02-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import seedu.address.model.Model;","lastModifiedDate":"2018-08-08"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2016-12-26"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2016-12-26"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2016-12-26"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2016-12-26"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2016-12-26"},{"lineNumber":29,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.tag.Tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":31,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-12-26"},{"lineNumber":32,"author":{"gitId":"-"},"content":" * Edits the details of an existing person in the address book.","lastModifiedDate":"2016-12-26"},{"lineNumber":33,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-26"},{"lineNumber":34,"author":{"gitId":"-"},"content":"public class EditCommand extends Command {","lastModifiedDate":"2018-04-19"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":36,"author":{"gitId":"-"},"content":" public static final String COMMAND_WORD \u003d \"edit\";","lastModifiedDate":"2016-12-26"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":38,"author":{"gitId":"-"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Edits the details of the person identified \"","lastModifiedDate":"2016-12-26"},{"lineNumber":39,"author":{"gitId":"-"},"content":" + \"by the index number used in the displayed person list. \"","lastModifiedDate":"2018-04-01"},{"lineNumber":40,"author":{"gitId":"-"},"content":" + \"Existing values will be overwritten by the input values.\\n\"","lastModifiedDate":"2016-12-26"},{"lineNumber":41,"author":{"gitId":"-"},"content":" + \"Parameters: INDEX (must be a positive integer) \"","lastModifiedDate":"2017-06-06"},{"lineNumber":42,"author":{"gitId":"-"},"content":" + \"[\" + PREFIX_NAME + \"NAME] \"","lastModifiedDate":"2017-06-06"},{"lineNumber":43,"author":{"gitId":"-"},"content":" + \"[\" + PREFIX_PHONE + \"PHONE] \"","lastModifiedDate":"2017-05-09"},{"lineNumber":44,"author":{"gitId":"-"},"content":" + \"[\" + PREFIX_EMAIL + \"EMAIL] \"","lastModifiedDate":"2017-05-09"},{"lineNumber":45,"author":{"gitId":"-"},"content":" + \"[\" + PREFIX_ADDRESS + \"ADDRESS] \"","lastModifiedDate":"2017-05-09"},{"lineNumber":46,"author":{"gitId":"-"},"content":" + \"[\" + PREFIX_TAG + \"TAG]...\\n\"","lastModifiedDate":"2017-05-09"},{"lineNumber":47,"author":{"gitId":"-"},"content":" + \"Example: \" + COMMAND_WORD + \" 1 \"","lastModifiedDate":"2017-05-09"},{"lineNumber":48,"author":{"gitId":"-"},"content":" + PREFIX_PHONE + \"91234567 \"","lastModifiedDate":"2017-05-09"},{"lineNumber":49,"author":{"gitId":"-"},"content":" + PREFIX_EMAIL + \"johndoe@example.com\";","lastModifiedDate":"2017-05-09"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":51,"author":{"gitId":"-"},"content":" public static final String MESSAGE_EDIT_PERSON_SUCCESS \u003d \"Edited Person: %1$s\";","lastModifiedDate":"2016-12-26"},{"lineNumber":52,"author":{"gitId":"-"},"content":" public static final String MESSAGE_NOT_EDITED \u003d \"At least one field to edit must be provided.\";","lastModifiedDate":"2016-12-26"},{"lineNumber":53,"author":{"gitId":"-"},"content":" public static final String MESSAGE_DUPLICATE_PERSON \u003d \"This person already exists in the address book.\";","lastModifiedDate":"2016-12-26"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":55,"author":{"gitId":"-"},"content":" private final Index index;","lastModifiedDate":"2017-05-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" private final EditPersonDescriptor editPersonDescriptor;","lastModifiedDate":"2016-12-26"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":58,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-12-26"},{"lineNumber":59,"author":{"gitId":"-"},"content":" * @param index of the person in the filtered person list to edit","lastModifiedDate":"2017-05-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":" * @param editPersonDescriptor details to edit the person with","lastModifiedDate":"2016-12-26"},{"lineNumber":61,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-26"},{"lineNumber":62,"author":{"gitId":"-"},"content":" public EditCommand(Index index, EditPersonDescriptor editPersonDescriptor) {","lastModifiedDate":"2017-05-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":" requireNonNull(index);","lastModifiedDate":"2017-05-25"},{"lineNumber":64,"author":{"gitId":"-"},"content":" requireNonNull(editPersonDescriptor);","lastModifiedDate":"2017-05-15"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":66,"author":{"gitId":"-"},"content":" this.index \u003d index;","lastModifiedDate":"2017-05-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":" this.editPersonDescriptor \u003d new EditPersonDescriptor(editPersonDescriptor);","lastModifiedDate":"2016-12-26"},{"lineNumber":68,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":70,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-12-26"},{"lineNumber":71,"author":{"gitId":"-"},"content":" public CommandResult execute(Model model) throws CommandException {","lastModifiedDate":"2019-01-25"},{"lineNumber":72,"author":{"gitId":"-"},"content":" requireNonNull(model);","lastModifiedDate":"2018-08-08"},{"lineNumber":73,"author":{"gitId":"-"},"content":" List\u003cPerson\u003e lastShownList \u003d model.getFilteredPersonList();","lastModifiedDate":"2018-04-19"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":75,"author":{"gitId":"-"},"content":" if (index.getZeroBased() \u003e\u003d lastShownList.size()) {","lastModifiedDate":"2018-04-19"},{"lineNumber":76,"author":{"gitId":"-"},"content":" throw new CommandException(Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX);","lastModifiedDate":"2018-04-19"},{"lineNumber":77,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-04-19"},{"lineNumber":78,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":79,"author":{"gitId":"-"},"content":" Person personToEdit \u003d lastShownList.get(index.getZeroBased());","lastModifiedDate":"2018-04-19"},{"lineNumber":80,"author":{"gitId":"-"},"content":" Person editedPerson \u003d createEditedPerson(personToEdit, editPersonDescriptor);","lastModifiedDate":"2018-04-19"},{"lineNumber":81,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":82,"author":{"gitId":"-"},"content":" if (!personToEdit.isSamePerson(editedPerson) \u0026\u0026 model.hasPerson(editedPerson)) {","lastModifiedDate":"2018-08-07"},{"lineNumber":83,"author":{"gitId":"-"},"content":" throw new CommandException(MESSAGE_DUPLICATE_PERSON);","lastModifiedDate":"2018-08-07"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-07"},{"lineNumber":85,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-07"},{"lineNumber":86,"author":{"gitId":"-"},"content":" model.setPerson(personToEdit, editedPerson);","lastModifiedDate":"2018-08-17"},{"lineNumber":87,"author":{"gitId":"-"},"content":" model.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS);","lastModifiedDate":"2017-08-05"},{"lineNumber":88,"author":{"gitId":"-"},"content":" return new CommandResult(String.format(MESSAGE_EDIT_PERSON_SUCCESS, Messages.format(editedPerson)));","lastModifiedDate":"2019-02-23"},{"lineNumber":89,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":91,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-12-26"},{"lineNumber":92,"author":{"gitId":"-"},"content":" * Creates and returns a {@code Person} with the details of {@code personToEdit}","lastModifiedDate":"2016-12-26"},{"lineNumber":93,"author":{"gitId":"-"},"content":" * edited with {@code editPersonDescriptor}.","lastModifiedDate":"2016-12-26"},{"lineNumber":94,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-26"},{"lineNumber":95,"author":{"gitId":"-"},"content":" private static Person createEditedPerson(Person personToEdit, EditPersonDescriptor editPersonDescriptor) {","lastModifiedDate":"2018-01-10"},{"lineNumber":96,"author":{"gitId":"-"},"content":" assert personToEdit !\u003d null;","lastModifiedDate":"2016-12-26"},{"lineNumber":97,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":98,"author":{"gitId":"-"},"content":" Name updatedName \u003d editPersonDescriptor.getName().orElse(personToEdit.getName());","lastModifiedDate":"2017-06-21"},{"lineNumber":99,"author":{"gitId":"-"},"content":" Phone updatedPhone \u003d editPersonDescriptor.getPhone().orElse(personToEdit.getPhone());","lastModifiedDate":"2017-06-21"},{"lineNumber":100,"author":{"gitId":"-"},"content":" Email updatedEmail \u003d editPersonDescriptor.getEmail().orElse(personToEdit.getEmail());","lastModifiedDate":"2017-06-21"},{"lineNumber":101,"author":{"gitId":"-"},"content":" Address updatedAddress \u003d editPersonDescriptor.getAddress().orElse(personToEdit.getAddress());","lastModifiedDate":"2017-06-21"},{"lineNumber":102,"author":{"gitId":"-"},"content":" Set\u003cTag\u003e updatedTags \u003d editPersonDescriptor.getTags().orElse(personToEdit.getTags());","lastModifiedDate":"2017-06-21"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":104,"author":{"gitId":"joenus"},"content":" return new Person(updatedName, updatedPhone, updatedEmail, updatedAddress, updatedTags,","lastModifiedDate":"2024-02-29"},{"lineNumber":105,"author":{"gitId":"joenus"},"content":" personToEdit.getNotes());","lastModifiedDate":"2024-02-29"},{"lineNumber":106,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":107,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":108,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-05-08"},{"lineNumber":109,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2017-05-08"},{"lineNumber":110,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2017-05-08"},{"lineNumber":111,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2017-05-08"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-08"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":114,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2017-05-08"},{"lineNumber":115,"author":{"gitId":"-"},"content":" if (!(other instanceof EditCommand)) {","lastModifiedDate":"2017-05-08"},{"lineNumber":116,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2017-05-08"},{"lineNumber":117,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-08"},{"lineNumber":118,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":119,"author":{"gitId":"-"},"content":" EditCommand otherEditCommand \u003d (EditCommand) other;","lastModifiedDate":"2023-07-13"},{"lineNumber":120,"author":{"gitId":"-"},"content":" return index.equals(otherEditCommand.index)","lastModifiedDate":"2023-07-13"},{"lineNumber":121,"author":{"gitId":"-"},"content":" \u0026\u0026 editPersonDescriptor.equals(otherEditCommand.editPersonDescriptor);","lastModifiedDate":"2023-07-13"},{"lineNumber":122,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-08"},{"lineNumber":123,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":124,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2019-02-23"},{"lineNumber":125,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2019-02-23"},{"lineNumber":126,"author":{"gitId":"-"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2019-02-23"},{"lineNumber":127,"author":{"gitId":"-"},"content":" .add(\"index\", index)","lastModifiedDate":"2019-02-23"},{"lineNumber":128,"author":{"gitId":"-"},"content":" .add(\"editPersonDescriptor\", editPersonDescriptor)","lastModifiedDate":"2019-02-23"},{"lineNumber":129,"author":{"gitId":"-"},"content":" .toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":131,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":132,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-12-26"},{"lineNumber":133,"author":{"gitId":"-"},"content":" * Stores the details to edit the person with. Each non-empty field value will replace the","lastModifiedDate":"2016-12-26"},{"lineNumber":134,"author":{"gitId":"-"},"content":" * corresponding field value of the person.","lastModifiedDate":"2016-12-26"},{"lineNumber":135,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-26"},{"lineNumber":136,"author":{"gitId":"-"},"content":" public static class EditPersonDescriptor {","lastModifiedDate":"2016-12-26"},{"lineNumber":137,"author":{"gitId":"-"},"content":" private Name name;","lastModifiedDate":"2017-06-21"},{"lineNumber":138,"author":{"gitId":"-"},"content":" private Phone phone;","lastModifiedDate":"2017-06-21"},{"lineNumber":139,"author":{"gitId":"-"},"content":" private Email email;","lastModifiedDate":"2017-06-21"},{"lineNumber":140,"author":{"gitId":"-"},"content":" private Address address;","lastModifiedDate":"2017-06-21"},{"lineNumber":141,"author":{"gitId":"-"},"content":" private Set\u003cTag\u003e tags;","lastModifiedDate":"2017-06-21"},{"lineNumber":142,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":143,"author":{"gitId":"joenus"},"content":" public EditPersonDescriptor() {","lastModifiedDate":"2024-02-29"},{"lineNumber":144,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":145,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":146,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-01-11"},{"lineNumber":147,"author":{"gitId":"-"},"content":" * Copy constructor.","lastModifiedDate":"2018-01-11"},{"lineNumber":148,"author":{"gitId":"-"},"content":" * A defensive copy of {@code tags} is used internally.","lastModifiedDate":"2018-01-11"},{"lineNumber":149,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-01-11"},{"lineNumber":150,"author":{"gitId":"-"},"content":" public EditPersonDescriptor(EditPersonDescriptor toCopy) {","lastModifiedDate":"2016-12-26"},{"lineNumber":151,"author":{"gitId":"-"},"content":" setName(toCopy.name);","lastModifiedDate":"2018-01-15"},{"lineNumber":152,"author":{"gitId":"-"},"content":" setPhone(toCopy.phone);","lastModifiedDate":"2018-01-15"},{"lineNumber":153,"author":{"gitId":"-"},"content":" setEmail(toCopy.email);","lastModifiedDate":"2018-01-15"},{"lineNumber":154,"author":{"gitId":"-"},"content":" setAddress(toCopy.address);","lastModifiedDate":"2018-01-15"},{"lineNumber":155,"author":{"gitId":"-"},"content":" setTags(toCopy.tags);","lastModifiedDate":"2018-01-11"},{"lineNumber":156,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":157,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":158,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-12-26"},{"lineNumber":159,"author":{"gitId":"-"},"content":" * Returns true if at least one field is edited.","lastModifiedDate":"2016-12-26"},{"lineNumber":160,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-26"},{"lineNumber":161,"author":{"gitId":"-"},"content":" public boolean isAnyFieldEdited() {","lastModifiedDate":"2016-12-26"},{"lineNumber":162,"author":{"gitId":"-"},"content":" return CollectionUtil.isAnyNonNull(name, phone, email, address, tags);","lastModifiedDate":"2018-08-14"},{"lineNumber":163,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":164,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":165,"author":{"gitId":"-"},"content":" public void setName(Name name) {","lastModifiedDate":"2017-06-21"},{"lineNumber":166,"author":{"gitId":"-"},"content":" this.name \u003d name;","lastModifiedDate":"2017-06-21"},{"lineNumber":167,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":168,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":169,"author":{"gitId":"-"},"content":" public Optional\u003cName\u003e getName() {","lastModifiedDate":"2016-12-26"},{"lineNumber":170,"author":{"gitId":"-"},"content":" return Optional.ofNullable(name);","lastModifiedDate":"2017-06-21"},{"lineNumber":171,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":172,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":173,"author":{"gitId":"-"},"content":" public void setPhone(Phone phone) {","lastModifiedDate":"2017-06-21"},{"lineNumber":174,"author":{"gitId":"-"},"content":" this.phone \u003d phone;","lastModifiedDate":"2017-06-21"},{"lineNumber":175,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":176,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":177,"author":{"gitId":"-"},"content":" public Optional\u003cPhone\u003e getPhone() {","lastModifiedDate":"2016-12-26"},{"lineNumber":178,"author":{"gitId":"-"},"content":" return Optional.ofNullable(phone);","lastModifiedDate":"2017-06-21"},{"lineNumber":179,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":180,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":181,"author":{"gitId":"-"},"content":" public void setEmail(Email email) {","lastModifiedDate":"2017-06-21"},{"lineNumber":182,"author":{"gitId":"-"},"content":" this.email \u003d email;","lastModifiedDate":"2017-06-21"},{"lineNumber":183,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":184,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":185,"author":{"gitId":"-"},"content":" public Optional\u003cEmail\u003e getEmail() {","lastModifiedDate":"2016-12-26"},{"lineNumber":186,"author":{"gitId":"-"},"content":" return Optional.ofNullable(email);","lastModifiedDate":"2017-06-21"},{"lineNumber":187,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":188,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":189,"author":{"gitId":"-"},"content":" public void setAddress(Address address) {","lastModifiedDate":"2017-06-21"},{"lineNumber":190,"author":{"gitId":"-"},"content":" this.address \u003d address;","lastModifiedDate":"2017-06-21"},{"lineNumber":191,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":192,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":193,"author":{"gitId":"-"},"content":" public Optional\u003cAddress\u003e getAddress() {","lastModifiedDate":"2016-12-26"},{"lineNumber":194,"author":{"gitId":"-"},"content":" return Optional.ofNullable(address);","lastModifiedDate":"2017-06-21"},{"lineNumber":195,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":196,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":197,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-01-11"},{"lineNumber":198,"author":{"gitId":"-"},"content":" * Sets {@code tags} to this object\u0027s {@code tags}.","lastModifiedDate":"2018-01-11"},{"lineNumber":199,"author":{"gitId":"-"},"content":" * A defensive copy of {@code tags} is used internally.","lastModifiedDate":"2018-01-11"},{"lineNumber":200,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-01-11"},{"lineNumber":201,"author":{"gitId":"-"},"content":" public void setTags(Set\u003cTag\u003e tags) {","lastModifiedDate":"2017-06-21"},{"lineNumber":202,"author":{"gitId":"-"},"content":" this.tags \u003d (tags !\u003d null) ? new HashSet\u003c\u003e(tags) : null;","lastModifiedDate":"2018-01-11"},{"lineNumber":203,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":204,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":205,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-01-11"},{"lineNumber":206,"author":{"gitId":"-"},"content":" * Returns an unmodifiable tag set, which throws {@code UnsupportedOperationException}","lastModifiedDate":"2018-01-11"},{"lineNumber":207,"author":{"gitId":"-"},"content":" * if modification is attempted.","lastModifiedDate":"2018-01-11"},{"lineNumber":208,"author":{"gitId":"-"},"content":" * Returns {@code Optional#empty()} if {@code tags} is null.","lastModifiedDate":"2018-01-11"},{"lineNumber":209,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-01-11"},{"lineNumber":210,"author":{"gitId":"-"},"content":" public Optional\u003cSet\u003cTag\u003e\u003e getTags() {","lastModifiedDate":"2017-03-07"},{"lineNumber":211,"author":{"gitId":"-"},"content":" return (tags !\u003d null) ? Optional.of(Collections.unmodifiableSet(tags)) : Optional.empty();","lastModifiedDate":"2018-01-11"},{"lineNumber":212,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":213,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":214,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-05-05"},{"lineNumber":215,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2017-05-05"},{"lineNumber":216,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2017-05-05"},{"lineNumber":217,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2017-05-05"},{"lineNumber":218,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":219,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":220,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2017-05-05"},{"lineNumber":221,"author":{"gitId":"-"},"content":" if (!(other instanceof EditPersonDescriptor)) {","lastModifiedDate":"2017-05-05"},{"lineNumber":222,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2017-05-05"},{"lineNumber":223,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":224,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":225,"author":{"gitId":"-"},"content":" EditPersonDescriptor otherEditPersonDescriptor \u003d (EditPersonDescriptor) other;","lastModifiedDate":"2023-07-13"},{"lineNumber":226,"author":{"gitId":"-"},"content":" return Objects.equals(name, otherEditPersonDescriptor.name)","lastModifiedDate":"2023-07-13"},{"lineNumber":227,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(phone, otherEditPersonDescriptor.phone)","lastModifiedDate":"2023-07-13"},{"lineNumber":228,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(email, otherEditPersonDescriptor.email)","lastModifiedDate":"2023-07-13"},{"lineNumber":229,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(address, otherEditPersonDescriptor.address)","lastModifiedDate":"2023-07-13"},{"lineNumber":230,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(tags, otherEditPersonDescriptor.tags);","lastModifiedDate":"2023-07-13"},{"lineNumber":231,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":232,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":233,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2019-02-23"},{"lineNumber":234,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2019-02-23"},{"lineNumber":235,"author":{"gitId":"-"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2019-02-23"},{"lineNumber":236,"author":{"gitId":"-"},"content":" .add(\"name\", name)","lastModifiedDate":"2019-02-23"},{"lineNumber":237,"author":{"gitId":"-"},"content":" .add(\"phone\", phone)","lastModifiedDate":"2019-02-23"},{"lineNumber":238,"author":{"gitId":"-"},"content":" .add(\"email\", email)","lastModifiedDate":"2019-02-23"},{"lineNumber":239,"author":{"gitId":"-"},"content":" .add(\"address\", address)","lastModifiedDate":"2019-02-23"},{"lineNumber":240,"author":{"gitId":"-"},"content":" .add(\"tags\", tags)","lastModifiedDate":"2019-02-23"},{"lineNumber":241,"author":{"gitId":"-"},"content":" .toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":242,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":243,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":244,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-12-26"}],"authorContributionMap":{"joenus":5,"-":239}},{"path":"src/main/java/seedu/address/logic/parser/AddCommandParser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-02-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-07-13"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2017-02-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2017-02-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2017-06-06"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2017-02-05"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2017-02-05"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-03-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import java.util.stream.Stream;","lastModifiedDate":"2017-03-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":13,"author":{"gitId":"joenus"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2024-02-29"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.AddCommand;","lastModifiedDate":"2017-02-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2017-03-11"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2017-03-17"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2017-03-17"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2017-03-17"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2017-03-17"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2017-03-17"},{"lineNumber":21,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.tag.Tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-02-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * Parses input arguments and creates a new AddCommand object","lastModifiedDate":"2017-02-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":"public class AddCommandParser implements Parser\u003cAddCommand\u003e {","lastModifiedDate":"2017-07-06"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":28,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-02-05"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * Parses the given {@code String} of arguments in the context of the AddCommand","lastModifiedDate":"2017-02-05"},{"lineNumber":30,"author":{"gitId":"-"},"content":" * and returns an AddCommand object for execution.","lastModifiedDate":"2017-02-05"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * @throws ParseException if the user input does not conform the expected format","lastModifiedDate":"2017-03-11"},{"lineNumber":32,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":" public AddCommand parse(String args) throws ParseException {","lastModifiedDate":"2017-03-11"},{"lineNumber":34,"author":{"gitId":"-"},"content":" ArgumentMultimap argMultimap \u003d","lastModifiedDate":"2017-03-20"},{"lineNumber":35,"author":{"gitId":"-"},"content":" ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS, PREFIX_TAG);","lastModifiedDate":"2017-06-06"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-17"},{"lineNumber":37,"author":{"gitId":"-"},"content":" if (!arePrefixesPresent(argMultimap, PREFIX_NAME, PREFIX_ADDRESS, PREFIX_PHONE, PREFIX_EMAIL)","lastModifiedDate":"2017-12-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":" || !argMultimap.getPreamble().isEmpty()) {","lastModifiedDate":"2017-12-23"},{"lineNumber":39,"author":{"gitId":"-"},"content":" throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddCommand.MESSAGE_USAGE));","lastModifiedDate":"2017-03-11"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-03-17"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-17"},{"lineNumber":42,"author":{"gitId":"-"},"content":" argMultimap.verifyNoDuplicatePrefixesFor(PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS);","lastModifiedDate":"2023-07-14"},{"lineNumber":43,"author":{"gitId":"-"},"content":" Name name \u003d ParserUtil.parseName(argMultimap.getValue(PREFIX_NAME).get());","lastModifiedDate":"2018-07-10"},{"lineNumber":44,"author":{"gitId":"-"},"content":" Phone phone \u003d ParserUtil.parsePhone(argMultimap.getValue(PREFIX_PHONE).get());","lastModifiedDate":"2018-07-10"},{"lineNumber":45,"author":{"gitId":"-"},"content":" Email email \u003d ParserUtil.parseEmail(argMultimap.getValue(PREFIX_EMAIL).get());","lastModifiedDate":"2018-07-10"},{"lineNumber":46,"author":{"gitId":"-"},"content":" Address address \u003d ParserUtil.parseAddress(argMultimap.getValue(PREFIX_ADDRESS).get());","lastModifiedDate":"2018-07-10"},{"lineNumber":47,"author":{"gitId":"-"},"content":" Set\u003cTag\u003e tagList \u003d ParserUtil.parseTags(argMultimap.getAllValues(PREFIX_TAG));","lastModifiedDate":"2017-03-17"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-17"},{"lineNumber":49,"author":{"gitId":"joenus"},"content":" Person person \u003d new Person(name, phone, email, address, tagList, FXCollections.observableArrayList());","lastModifiedDate":"2024-02-29"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-17"},{"lineNumber":51,"author":{"gitId":"-"},"content":" return new AddCommand(person);","lastModifiedDate":"2017-03-17"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-05"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-03-17"},{"lineNumber":55,"author":{"gitId":"-"},"content":" * Returns true if none of the prefixes contains empty {@code Optional} values in the given","lastModifiedDate":"2017-03-17"},{"lineNumber":56,"author":{"gitId":"-"},"content":" * {@code ArgumentMultimap}.","lastModifiedDate":"2017-03-17"},{"lineNumber":57,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-03-17"},{"lineNumber":58,"author":{"gitId":"-"},"content":" private static boolean arePrefixesPresent(ArgumentMultimap argumentMultimap, Prefix... prefixes) {","lastModifiedDate":"2017-03-17"},{"lineNumber":59,"author":{"gitId":"-"},"content":" return Stream.of(prefixes).allMatch(prefix -\u003e argumentMultimap.getValue(prefix).isPresent());","lastModifiedDate":"2017-03-17"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-03-17"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-17"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-02-05"}],"authorContributionMap":{"joenus":3,"-":59}},{"path":"src/main/java/seedu/address/logic/parser/EditCommandParser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-01-26"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2017-05-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-07-13"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2017-01-26"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2017-01-26"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2017-06-06"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2017-01-26"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2017-01-26"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import java.util.Collection;","lastModifiedDate":"2017-01-26"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import java.util.Collections;","lastModifiedDate":"2017-01-26"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import java.util.Optional;","lastModifiedDate":"2017-01-26"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-03-07"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2017-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand;","lastModifiedDate":"2017-01-26"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand.EditPersonDescriptor;","lastModifiedDate":"2017-01-26"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2017-03-11"},{"lineNumber":20,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.tag.Tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":22,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-01-26"},{"lineNumber":23,"author":{"gitId":"-"},"content":" * Parses input arguments and creates a new EditCommand object","lastModifiedDate":"2017-01-26"},{"lineNumber":24,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-01-26"},{"lineNumber":25,"author":{"gitId":"-"},"content":"public class EditCommandParser implements Parser\u003cEditCommand\u003e {","lastModifiedDate":"2017-07-06"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":27,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-01-26"},{"lineNumber":28,"author":{"gitId":"-"},"content":" * Parses the given {@code String} of arguments in the context of the EditCommand","lastModifiedDate":"2017-01-26"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * and returns an EditCommand object for execution.","lastModifiedDate":"2017-01-26"},{"lineNumber":30,"author":{"gitId":"-"},"content":" * @throws ParseException if the user input does not conform the expected format","lastModifiedDate":"2017-03-11"},{"lineNumber":31,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-01-26"},{"lineNumber":32,"author":{"gitId":"-"},"content":" public EditCommand parse(String args) throws ParseException {","lastModifiedDate":"2017-03-11"},{"lineNumber":33,"author":{"gitId":"-"},"content":" requireNonNull(args);","lastModifiedDate":"2017-05-15"},{"lineNumber":34,"author":{"gitId":"-"},"content":" ArgumentMultimap argMultimap \u003d","lastModifiedDate":"2017-03-20"},{"lineNumber":35,"author":{"gitId":"-"},"content":" ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS, PREFIX_TAG);","lastModifiedDate":"2017-06-06"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-15"},{"lineNumber":37,"author":{"gitId":"-"},"content":" Index index;","lastModifiedDate":"2017-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-15"},{"lineNumber":39,"author":{"gitId":"-"},"content":" try {","lastModifiedDate":"2017-05-15"},{"lineNumber":40,"author":{"gitId":"-"},"content":" index \u003d ParserUtil.parseIndex(argMultimap.getPreamble());","lastModifiedDate":"2017-06-06"},{"lineNumber":41,"author":{"gitId":"-"},"content":" } catch (ParseException pe) {","lastModifiedDate":"2018-07-10"},{"lineNumber":42,"author":{"gitId":"-"},"content":" throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, EditCommand.MESSAGE_USAGE), pe);","lastModifiedDate":"2018-08-06"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-01-26"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":45,"author":{"gitId":"-"},"content":" argMultimap.verifyNoDuplicatePrefixesFor(PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS);","lastModifiedDate":"2023-07-14"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":47,"author":{"gitId":"-"},"content":" EditPersonDescriptor editPersonDescriptor \u003d new EditPersonDescriptor();","lastModifiedDate":"2017-01-26"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":49,"author":{"gitId":"-"},"content":" if (argMultimap.getValue(PREFIX_NAME).isPresent()) {","lastModifiedDate":"2018-07-10"},{"lineNumber":50,"author":{"gitId":"-"},"content":" editPersonDescriptor.setName(ParserUtil.parseName(argMultimap.getValue(PREFIX_NAME).get()));","lastModifiedDate":"2018-07-10"},{"lineNumber":51,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-07-10"},{"lineNumber":52,"author":{"gitId":"-"},"content":" if (argMultimap.getValue(PREFIX_PHONE).isPresent()) {","lastModifiedDate":"2018-07-10"},{"lineNumber":53,"author":{"gitId":"-"},"content":" editPersonDescriptor.setPhone(ParserUtil.parsePhone(argMultimap.getValue(PREFIX_PHONE).get()));","lastModifiedDate":"2018-07-10"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-07-10"},{"lineNumber":55,"author":{"gitId":"-"},"content":" if (argMultimap.getValue(PREFIX_EMAIL).isPresent()) {","lastModifiedDate":"2018-07-10"},{"lineNumber":56,"author":{"gitId":"-"},"content":" editPersonDescriptor.setEmail(ParserUtil.parseEmail(argMultimap.getValue(PREFIX_EMAIL).get()));","lastModifiedDate":"2018-07-10"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-07-10"},{"lineNumber":58,"author":{"gitId":"-"},"content":" if (argMultimap.getValue(PREFIX_ADDRESS).isPresent()) {","lastModifiedDate":"2018-07-10"},{"lineNumber":59,"author":{"gitId":"-"},"content":" editPersonDescriptor.setAddress(ParserUtil.parseAddress(argMultimap.getValue(PREFIX_ADDRESS).get()));","lastModifiedDate":"2018-07-10"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-07-10"},{"lineNumber":61,"author":{"gitId":"-"},"content":" parseTagsForEdit(argMultimap.getAllValues(PREFIX_TAG)).ifPresent(editPersonDescriptor::setTags);","lastModifiedDate":"2017-06-21"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":63,"author":{"gitId":"-"},"content":" if (!editPersonDescriptor.isAnyFieldEdited()) {","lastModifiedDate":"2017-01-26"},{"lineNumber":64,"author":{"gitId":"-"},"content":" throw new ParseException(EditCommand.MESSAGE_NOT_EDITED);","lastModifiedDate":"2017-03-11"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-01-26"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":67,"author":{"gitId":"-"},"content":" return new EditCommand(index, editPersonDescriptor);","lastModifiedDate":"2017-05-15"},{"lineNumber":68,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-01-26"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":70,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-01-26"},{"lineNumber":71,"author":{"gitId":"-"},"content":" * Parses {@code Collection\u003cString\u003e tags} into a {@code Set\u003cTag\u003e} if {@code tags} is non-empty.","lastModifiedDate":"2017-03-07"},{"lineNumber":72,"author":{"gitId":"-"},"content":" * If {@code tags} contain only one element which is an empty string, it will be parsed into a","lastModifiedDate":"2017-01-26"},{"lineNumber":73,"author":{"gitId":"-"},"content":" * {@code Set\u003cTag\u003e} containing zero tags.","lastModifiedDate":"2017-03-07"},{"lineNumber":74,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-01-26"},{"lineNumber":75,"author":{"gitId":"-"},"content":" private Optional\u003cSet\u003cTag\u003e\u003e parseTagsForEdit(Collection\u003cString\u003e tags) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":76,"author":{"gitId":"-"},"content":" assert tags !\u003d null;","lastModifiedDate":"2017-01-26"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":78,"author":{"gitId":"-"},"content":" if (tags.isEmpty()) {","lastModifiedDate":"2017-01-26"},{"lineNumber":79,"author":{"gitId":"-"},"content":" return Optional.empty();","lastModifiedDate":"2017-01-26"},{"lineNumber":80,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-01-26"},{"lineNumber":81,"author":{"gitId":"-"},"content":" Collection\u003cString\u003e tagSet \u003d tags.size() \u003d\u003d 1 \u0026\u0026 tags.contains(\"\") ? Collections.emptySet() : tags;","lastModifiedDate":"2017-01-26"},{"lineNumber":82,"author":{"gitId":"-"},"content":" return Optional.of(ParserUtil.parseTags(tagSet));","lastModifiedDate":"2017-01-26"},{"lineNumber":83,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-01-26"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":85,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-01-26"}],"authorContributionMap":{"joenus":1,"-":84}},{"path":"src/main/java/seedu/address/logic/parser/ParserUtil.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-02-11"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2017-05-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.Collection;","lastModifiedDate":"2017-02-11"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.HashSet;","lastModifiedDate":"2017-02-11"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-02-11"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2017-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.StringUtil;","lastModifiedDate":"2017-02-11"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2018-07-10"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2017-02-11"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2017-02-11"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2017-02-11"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2017-02-11"},{"lineNumber":16,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.tag.Tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":18,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-02-11"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * Contains utility methods used for parsing strings in the various *Parser classes.","lastModifiedDate":"2017-07-18"},{"lineNumber":20,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-11"},{"lineNumber":21,"author":{"gitId":"-"},"content":"public class ParserUtil {","lastModifiedDate":"2017-02-11"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":23,"author":{"gitId":"-"},"content":" public static final String MESSAGE_INVALID_INDEX \u003d \"Index is not a non-zero unsigned integer.\";","lastModifiedDate":"2017-06-02"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-02"},{"lineNumber":25,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-02-11"},{"lineNumber":26,"author":{"gitId":"-"},"content":" * Parses {@code oneBasedIndex} into an {@code Index} and returns it. Leading and trailing whitespaces will be","lastModifiedDate":"2017-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" * trimmed.","lastModifiedDate":"2017-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" * @throws ParseException if the specified index is invalid (not non-zero unsigned integer).","lastModifiedDate":"2018-07-10"},{"lineNumber":29,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-11"},{"lineNumber":30,"author":{"gitId":"-"},"content":" public static Index parseIndex(String oneBasedIndex) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":31,"author":{"gitId":"-"},"content":" String trimmedIndex \u003d oneBasedIndex.trim();","lastModifiedDate":"2017-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" if (!StringUtil.isNonZeroUnsignedInteger(trimmedIndex)) {","lastModifiedDate":"2017-06-02"},{"lineNumber":33,"author":{"gitId":"-"},"content":" throw new ParseException(MESSAGE_INVALID_INDEX);","lastModifiedDate":"2018-07-10"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-11"},{"lineNumber":35,"author":{"gitId":"-"},"content":" return Index.fromOneBased(Integer.parseInt(trimmedIndex));","lastModifiedDate":"2017-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-11"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":38,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-29"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * Parses a {@code String name} into a {@code Name}.","lastModifiedDate":"2017-05-29"},{"lineNumber":40,"author":{"gitId":"-"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2017-05-29"},{"lineNumber":41,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2017-05-29"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * @throws ParseException if the given {@code name} is invalid.","lastModifiedDate":"2018-07-10"},{"lineNumber":43,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-29"},{"lineNumber":44,"author":{"gitId":"-"},"content":" public static Name parseName(String name) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":45,"author":{"gitId":"-"},"content":" requireNonNull(name);","lastModifiedDate":"2017-05-29"},{"lineNumber":46,"author":{"gitId":"-"},"content":" String trimmedName \u003d name.trim();","lastModifiedDate":"2017-05-29"},{"lineNumber":47,"author":{"gitId":"-"},"content":" if (!Name.isValidName(trimmedName)) {","lastModifiedDate":"2017-05-30"},{"lineNumber":48,"author":{"gitId":"-"},"content":" throw new ParseException(Name.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":50,"author":{"gitId":"-"},"content":" return new Name(trimmedName);","lastModifiedDate":"2017-05-29"},{"lineNumber":51,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-29"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-29"},{"lineNumber":53,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-30"},{"lineNumber":54,"author":{"gitId":"-"},"content":" * Parses a {@code String phone} into a {@code Phone}.","lastModifiedDate":"2017-05-30"},{"lineNumber":55,"author":{"gitId":"-"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2017-05-30"},{"lineNumber":56,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2017-05-30"},{"lineNumber":57,"author":{"gitId":"-"},"content":" * @throws ParseException if the given {@code phone} is invalid.","lastModifiedDate":"2018-07-10"},{"lineNumber":58,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-30"},{"lineNumber":59,"author":{"gitId":"-"},"content":" public static Phone parsePhone(String phone) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":60,"author":{"gitId":"-"},"content":" requireNonNull(phone);","lastModifiedDate":"2017-05-30"},{"lineNumber":61,"author":{"gitId":"-"},"content":" String trimmedPhone \u003d phone.trim();","lastModifiedDate":"2017-05-30"},{"lineNumber":62,"author":{"gitId":"-"},"content":" if (!Phone.isValidPhone(trimmedPhone)) {","lastModifiedDate":"2017-05-30"},{"lineNumber":63,"author":{"gitId":"-"},"content":" throw new ParseException(Phone.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":64,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":65,"author":{"gitId":"-"},"content":" return new Phone(trimmedPhone);","lastModifiedDate":"2017-05-30"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":68,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-30"},{"lineNumber":69,"author":{"gitId":"-"},"content":" * Parses a {@code String address} into an {@code Address}.","lastModifiedDate":"2017-05-30"},{"lineNumber":70,"author":{"gitId":"-"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2017-05-30"},{"lineNumber":71,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2017-05-30"},{"lineNumber":72,"author":{"gitId":"-"},"content":" * @throws ParseException if the given {@code address} is invalid.","lastModifiedDate":"2018-07-10"},{"lineNumber":73,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-30"},{"lineNumber":74,"author":{"gitId":"-"},"content":" public static Address parseAddress(String address) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":75,"author":{"gitId":"-"},"content":" requireNonNull(address);","lastModifiedDate":"2017-05-30"},{"lineNumber":76,"author":{"gitId":"-"},"content":" String trimmedAddress \u003d address.trim();","lastModifiedDate":"2017-05-30"},{"lineNumber":77,"author":{"gitId":"-"},"content":" if (!Address.isValidAddress(trimmedAddress)) {","lastModifiedDate":"2017-05-30"},{"lineNumber":78,"author":{"gitId":"-"},"content":" throw new ParseException(Address.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":79,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":80,"author":{"gitId":"-"},"content":" return new Address(trimmedAddress);","lastModifiedDate":"2017-05-30"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":82,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":83,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-30"},{"lineNumber":84,"author":{"gitId":"-"},"content":" * Parses a {@code String email} into an {@code Email}.","lastModifiedDate":"2017-05-30"},{"lineNumber":85,"author":{"gitId":"-"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2017-05-30"},{"lineNumber":86,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2017-05-30"},{"lineNumber":87,"author":{"gitId":"-"},"content":" * @throws ParseException if the given {@code email} is invalid.","lastModifiedDate":"2018-07-10"},{"lineNumber":88,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-30"},{"lineNumber":89,"author":{"gitId":"-"},"content":" public static Email parseEmail(String email) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":90,"author":{"gitId":"-"},"content":" requireNonNull(email);","lastModifiedDate":"2017-05-30"},{"lineNumber":91,"author":{"gitId":"-"},"content":" String trimmedEmail \u003d email.trim();","lastModifiedDate":"2017-05-30"},{"lineNumber":92,"author":{"gitId":"-"},"content":" if (!Email.isValidEmail(trimmedEmail)) {","lastModifiedDate":"2017-05-30"},{"lineNumber":93,"author":{"gitId":"-"},"content":" throw new ParseException(Email.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":94,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":95,"author":{"gitId":"-"},"content":" return new Email(trimmedEmail);","lastModifiedDate":"2017-05-30"},{"lineNumber":96,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":97,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":98,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-30"},{"lineNumber":99,"author":{"gitId":"-"},"content":" * Parses a {@code String tag} into a {@code Tag}.","lastModifiedDate":"2017-05-30"},{"lineNumber":100,"author":{"gitId":"-"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2017-05-30"},{"lineNumber":101,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2017-05-30"},{"lineNumber":102,"author":{"gitId":"-"},"content":" * @throws ParseException if the given {@code tag} is invalid.","lastModifiedDate":"2018-07-10"},{"lineNumber":103,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-30"},{"lineNumber":104,"author":{"gitId":"-"},"content":" public static Tag parseTag(String tag) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":105,"author":{"gitId":"-"},"content":" requireNonNull(tag);","lastModifiedDate":"2017-05-30"},{"lineNumber":106,"author":{"gitId":"-"},"content":" String trimmedTag \u003d tag.trim();","lastModifiedDate":"2017-05-30"},{"lineNumber":107,"author":{"gitId":"-"},"content":" if (!Tag.isValidTagName(trimmedTag)) {","lastModifiedDate":"2017-05-30"},{"lineNumber":108,"author":{"gitId":"-"},"content":" throw new ParseException(Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":109,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":110,"author":{"gitId":"-"},"content":" return new Tag(trimmedTag);","lastModifiedDate":"2017-05-30"},{"lineNumber":111,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":112,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":113,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-02-11"},{"lineNumber":114,"author":{"gitId":"-"},"content":" * Parses {@code Collection\u003cString\u003e tags} into a {@code Set\u003cTag\u003e}.","lastModifiedDate":"2017-03-07"},{"lineNumber":115,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-11"},{"lineNumber":116,"author":{"gitId":"-"},"content":" public static Set\u003cTag\u003e parseTags(Collection\u003cString\u003e tags) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":117,"author":{"gitId":"-"},"content":" requireNonNull(tags);","lastModifiedDate":"2017-05-15"},{"lineNumber":118,"author":{"gitId":"-"},"content":" final Set\u003cTag\u003e tagSet \u003d new HashSet\u003c\u003e();","lastModifiedDate":"2017-02-11"},{"lineNumber":119,"author":{"gitId":"-"},"content":" for (String tagName : tags) {","lastModifiedDate":"2017-02-11"},{"lineNumber":120,"author":{"gitId":"-"},"content":" tagSet.add(parseTag(tagName));","lastModifiedDate":"2017-05-30"},{"lineNumber":121,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-11"},{"lineNumber":122,"author":{"gitId":"-"},"content":" return tagSet;","lastModifiedDate":"2017-03-07"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-11"},{"lineNumber":124,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-02-11"}],"authorContributionMap":{"joenus":1,"-":123}},{"path":"src/main/java/seedu/address/model/ModelManager.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model;","lastModifiedDate":"2016-08-08"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2017-08-05"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.commons.util.CollectionUtil.requireAllNonNull;","lastModifiedDate":"2017-05-19"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-15"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.nio.file.Path;","lastModifiedDate":"2018-11-27"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.function.Predicate;","lastModifiedDate":"2017-06-12"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2017-01-19"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-19"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2017-09-01"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import javafx.collections.transformation.FilteredList;","lastModifiedDate":"2016-08-26"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.GuiSettings;","lastModifiedDate":"2018-11-27"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.LogsCenter;","lastModifiedDate":"2016-09-23"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-01-10"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":16,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-08"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * Represents the in-memory model of the address book data.","lastModifiedDate":"2016-08-08"},{"lineNumber":18,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-08"},{"lineNumber":19,"author":{"gitId":"-"},"content":"public class ModelManager implements Model {","lastModifiedDate":"2018-12-09"},{"lineNumber":20,"author":{"gitId":"-"},"content":" private static final Logger logger \u003d LogsCenter.getLogger(ModelManager.class);","lastModifiedDate":"2016-09-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":22,"author":{"gitId":"-"},"content":" private final AddressBook addressBook;","lastModifiedDate":"2019-01-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" private final UserPrefs userPrefs;","lastModifiedDate":"2018-12-06"},{"lineNumber":24,"author":{"gitId":"-"},"content":" private final FilteredList\u003cPerson\u003e filteredPersons;","lastModifiedDate":"2018-01-10"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":26,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-08-08"},{"lineNumber":27,"author":{"gitId":"-"},"content":" * Initializes a ModelManager with the given addressBook and userPrefs.","lastModifiedDate":"2016-12-24"},{"lineNumber":28,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-08"},{"lineNumber":29,"author":{"gitId":"-"},"content":" public ModelManager(ReadOnlyAddressBook addressBook, ReadOnlyUserPrefs userPrefs) {","lastModifiedDate":"2018-12-06"},{"lineNumber":30,"author":{"gitId":"-"},"content":" requireAllNonNull(addressBook, userPrefs);","lastModifiedDate":"2017-05-19"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" logger.fine(\"Initializing with address book: \" + addressBook + \" and user prefs \" + userPrefs);","lastModifiedDate":"2016-12-24"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":34,"author":{"gitId":"-"},"content":" this.addressBook \u003d new AddressBook(addressBook);","lastModifiedDate":"2019-01-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" this.userPrefs \u003d new UserPrefs(userPrefs);","lastModifiedDate":"2018-12-06"},{"lineNumber":36,"author":{"gitId":"-"},"content":" filteredPersons \u003d new FilteredList\u003c\u003e(this.addressBook.getPersonList());","lastModifiedDate":"2019-01-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-08"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":39,"author":{"gitId":"-"},"content":" public ModelManager() {","lastModifiedDate":"2016-09-22"},{"lineNumber":40,"author":{"gitId":"-"},"content":" this(new AddressBook(), new UserPrefs());","lastModifiedDate":"2016-09-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-08"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":43,"author":{"gitId":"joenus"},"content":" // UserPrefs","lastModifiedDate":"2024-02-29"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":45,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":46,"author":{"gitId":"-"},"content":" public void setUserPrefs(ReadOnlyUserPrefs userPrefs) {","lastModifiedDate":"2018-12-06"},{"lineNumber":47,"author":{"gitId":"-"},"content":" requireNonNull(userPrefs);","lastModifiedDate":"2018-11-27"},{"lineNumber":48,"author":{"gitId":"-"},"content":" this.userPrefs.resetData(userPrefs);","lastModifiedDate":"2018-12-06"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":51,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":52,"author":{"gitId":"-"},"content":" public ReadOnlyUserPrefs getUserPrefs() {","lastModifiedDate":"2018-11-27"},{"lineNumber":53,"author":{"gitId":"-"},"content":" return userPrefs;","lastModifiedDate":"2018-11-27"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":56,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":57,"author":{"gitId":"-"},"content":" public GuiSettings getGuiSettings() {","lastModifiedDate":"2018-11-27"},{"lineNumber":58,"author":{"gitId":"-"},"content":" return userPrefs.getGuiSettings();","lastModifiedDate":"2018-11-27"},{"lineNumber":59,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":61,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":62,"author":{"gitId":"-"},"content":" public void setGuiSettings(GuiSettings guiSettings) {","lastModifiedDate":"2018-11-27"},{"lineNumber":63,"author":{"gitId":"-"},"content":" requireNonNull(guiSettings);","lastModifiedDate":"2018-11-27"},{"lineNumber":64,"author":{"gitId":"-"},"content":" userPrefs.setGuiSettings(guiSettings);","lastModifiedDate":"2018-11-27"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":67,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":68,"author":{"gitId":"-"},"content":" public Path getAddressBookFilePath() {","lastModifiedDate":"2018-11-27"},{"lineNumber":69,"author":{"gitId":"-"},"content":" return userPrefs.getAddressBookFilePath();","lastModifiedDate":"2018-11-27"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":72,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":73,"author":{"gitId":"-"},"content":" public void setAddressBookFilePath(Path addressBookFilePath) {","lastModifiedDate":"2018-11-27"},{"lineNumber":74,"author":{"gitId":"-"},"content":" requireNonNull(addressBookFilePath);","lastModifiedDate":"2018-11-27"},{"lineNumber":75,"author":{"gitId":"-"},"content":" userPrefs.setAddressBookFilePath(addressBookFilePath);","lastModifiedDate":"2018-11-27"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":78,"author":{"gitId":"joenus"},"content":" // AddressBook","lastModifiedDate":"2024-02-29"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":80,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-09-25"},{"lineNumber":81,"author":{"gitId":"-"},"content":" public void setAddressBook(ReadOnlyAddressBook addressBook) {","lastModifiedDate":"2018-11-27"},{"lineNumber":82,"author":{"gitId":"-"},"content":" this.addressBook.resetData(addressBook);","lastModifiedDate":"2019-01-25"},{"lineNumber":83,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-08"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":85,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-09-25"},{"lineNumber":86,"author":{"gitId":"-"},"content":" public ReadOnlyAddressBook getAddressBook() {","lastModifiedDate":"2016-09-21"},{"lineNumber":87,"author":{"gitId":"-"},"content":" return addressBook;","lastModifiedDate":"2019-01-25"},{"lineNumber":88,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-21"},{"lineNumber":89,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":90,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-08-06"},{"lineNumber":91,"author":{"gitId":"-"},"content":" public boolean hasPerson(Person person) {","lastModifiedDate":"2018-08-15"},{"lineNumber":92,"author":{"gitId":"-"},"content":" requireNonNull(person);","lastModifiedDate":"2018-08-06"},{"lineNumber":93,"author":{"gitId":"-"},"content":" return addressBook.hasPerson(person);","lastModifiedDate":"2019-01-25"},{"lineNumber":94,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-06"},{"lineNumber":95,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-06"},{"lineNumber":96,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-09-25"},{"lineNumber":97,"author":{"gitId":"-"},"content":" public void deletePerson(Person target) {","lastModifiedDate":"2018-08-15"},{"lineNumber":98,"author":{"gitId":"-"},"content":" addressBook.removePerson(target);","lastModifiedDate":"2019-01-25"},{"lineNumber":99,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-08"},{"lineNumber":100,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":101,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-09-25"},{"lineNumber":102,"author":{"gitId":"-"},"content":" public void addPerson(Person person) {","lastModifiedDate":"2018-08-15"},{"lineNumber":103,"author":{"gitId":"-"},"content":" addressBook.addPerson(person);","lastModifiedDate":"2019-01-25"},{"lineNumber":104,"author":{"gitId":"-"},"content":" updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS);","lastModifiedDate":"2017-08-05"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-26"},{"lineNumber":106,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-26"},{"lineNumber":107,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-12-13"},{"lineNumber":108,"author":{"gitId":"-"},"content":" public void setPerson(Person target, Person editedPerson) {","lastModifiedDate":"2018-08-17"},{"lineNumber":109,"author":{"gitId":"-"},"content":" requireAllNonNull(target, editedPerson);","lastModifiedDate":"2017-06-07"},{"lineNumber":110,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-13"},{"lineNumber":111,"author":{"gitId":"-"},"content":" addressBook.setPerson(target, editedPerson);","lastModifiedDate":"2019-01-25"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-13"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-13"},{"lineNumber":114,"author":{"gitId":"joenus"},"content":" // Filtered Person List Accessors","lastModifiedDate":"2024-02-29"},{"lineNumber":115,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":116,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-19"},{"lineNumber":117,"author":{"gitId":"-"},"content":" * Returns an unmodifiable view of the list of {@code Person} backed by the internal list of","lastModifiedDate":"2018-01-10"},{"lineNumber":118,"author":{"gitId":"-"},"content":" * {@code versionedAddressBook}","lastModifiedDate":"2018-06-11"},{"lineNumber":119,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-19"},{"lineNumber":120,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-09-25"},{"lineNumber":121,"author":{"gitId":"-"},"content":" public ObservableList\u003cPerson\u003e getFilteredPersonList() {","lastModifiedDate":"2018-01-10"},{"lineNumber":122,"author":{"gitId":"-"},"content":" return filteredPersons;","lastModifiedDate":"2018-12-09"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-22"},{"lineNumber":124,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-22"},{"lineNumber":125,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-09-25"},{"lineNumber":126,"author":{"gitId":"-"},"content":" public void updateFilteredPersonList(Predicate\u003cPerson\u003e predicate) {","lastModifiedDate":"2018-01-10"},{"lineNumber":127,"author":{"gitId":"-"},"content":" requireNonNull(predicate);","lastModifiedDate":"2017-08-05"},{"lineNumber":128,"author":{"gitId":"-"},"content":" filteredPersons.setPredicate(predicate);","lastModifiedDate":"2017-06-12"},{"lineNumber":129,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-22"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-22"},{"lineNumber":131,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-05-31"},{"lineNumber":132,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-07-13"},{"lineNumber":133,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2023-07-13"},{"lineNumber":134,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2017-05-31"},{"lineNumber":135,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-31"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":137,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2017-05-31"},{"lineNumber":138,"author":{"gitId":"-"},"content":" if (!(other instanceof ModelManager)) {","lastModifiedDate":"2023-07-13"},{"lineNumber":139,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2017-05-31"},{"lineNumber":140,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-31"},{"lineNumber":141,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":142,"author":{"gitId":"-"},"content":" ModelManager otherModelManager \u003d (ModelManager) other;","lastModifiedDate":"2023-07-13"},{"lineNumber":143,"author":{"gitId":"-"},"content":" return addressBook.equals(otherModelManager.addressBook)","lastModifiedDate":"2023-07-13"},{"lineNumber":144,"author":{"gitId":"-"},"content":" \u0026\u0026 userPrefs.equals(otherModelManager.userPrefs)","lastModifiedDate":"2023-07-13"},{"lineNumber":145,"author":{"gitId":"-"},"content":" \u0026\u0026 filteredPersons.equals(otherModelManager.filteredPersons);","lastModifiedDate":"2023-07-13"},{"lineNumber":146,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-31"},{"lineNumber":147,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":148,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"}],"authorContributionMap":{"joenus":3,"-":145}},{"path":"src/main/java/seedu/address/model/person/Person.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model.person;","lastModifiedDate":"2016-08-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":3,"author":{"gitId":"joenus"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2024-02-29"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.commons.util.CollectionUtil.requireAllNonNull;","lastModifiedDate":"2017-05-19"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-15"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.Collections;","lastModifiedDate":"2017-03-07"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.HashSet;","lastModifiedDate":"2018-03-26"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.Objects;","lastModifiedDate":"2017-01-19"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-03-07"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-19"},{"lineNumber":11,"author":{"gitId":"joenus"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2024-02-29"},{"lineNumber":12,"author":{"gitId":"joenus"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2024-02-29"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.ToStringBuilder;","lastModifiedDate":"2019-02-23"},{"lineNumber":14,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Note;","lastModifiedDate":"2024-02-29"},{"lineNumber":15,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.tag.Tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-24"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * Represents a Person in the address book.","lastModifiedDate":"2016-08-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * Guarantees: details are present and not null, field values are validated, immutable.","lastModifiedDate":"2017-12-20"},{"lineNumber":20,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":21,"author":{"gitId":"-"},"content":"public class Person {","lastModifiedDate":"2018-01-10"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":23,"author":{"gitId":"-"},"content":" // Identity fields","lastModifiedDate":"2018-04-19"},{"lineNumber":24,"author":{"gitId":"-"},"content":" private final Name name;","lastModifiedDate":"2017-12-20"},{"lineNumber":25,"author":{"gitId":"-"},"content":" private final Phone phone;","lastModifiedDate":"2017-12-20"},{"lineNumber":26,"author":{"gitId":"-"},"content":" private final Email email;","lastModifiedDate":"2017-12-20"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":28,"author":{"gitId":"-"},"content":" // Data fields","lastModifiedDate":"2018-04-19"},{"lineNumber":29,"author":{"gitId":"-"},"content":" private final Address address;","lastModifiedDate":"2018-04-19"},{"lineNumber":30,"author":{"gitId":"-"},"content":" private final Set\u003cTag\u003e tags \u003d new HashSet\u003c\u003e();","lastModifiedDate":"2018-03-26"},{"lineNumber":31,"author":{"gitId":"joenus"},"content":" private final ObservableList\u003cNote\u003e notes \u003d FXCollections.observableArrayList();","lastModifiedDate":"2024-02-29"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":33,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-08-24"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * Every field must be present and not null.","lastModifiedDate":"2016-08-24"},{"lineNumber":35,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":36,"author":{"gitId":"joenus"},"content":" public Person(Name name, Phone phone, Email email, Address address, Set\u003cTag\u003e tags, ObservableList\u003cNote\u003e notes) {","lastModifiedDate":"2024-02-29"},{"lineNumber":37,"author":{"gitId":"joenus"},"content":" requireAllNonNull(name, phone, email, address, tags, notes);","lastModifiedDate":"2024-02-29"},{"lineNumber":38,"author":{"gitId":"-"},"content":" this.name \u003d name;","lastModifiedDate":"2017-12-20"},{"lineNumber":39,"author":{"gitId":"-"},"content":" this.phone \u003d phone;","lastModifiedDate":"2017-12-20"},{"lineNumber":40,"author":{"gitId":"-"},"content":" this.email \u003d email;","lastModifiedDate":"2017-12-20"},{"lineNumber":41,"author":{"gitId":"-"},"content":" this.address \u003d address;","lastModifiedDate":"2017-12-20"},{"lineNumber":42,"author":{"gitId":"-"},"content":" this.tags.addAll(tags);","lastModifiedDate":"2018-03-26"},{"lineNumber":43,"author":{"gitId":"joenus"},"content":" this.notes.addAll(notes);","lastModifiedDate":"2024-02-29"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":46,"author":{"gitId":"-"},"content":" public Name getName() {","lastModifiedDate":"2017-07-12"},{"lineNumber":47,"author":{"gitId":"-"},"content":" return name;","lastModifiedDate":"2017-12-20"},{"lineNumber":48,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":50,"author":{"gitId":"-"},"content":" public Phone getPhone() {","lastModifiedDate":"2017-07-12"},{"lineNumber":51,"author":{"gitId":"-"},"content":" return phone;","lastModifiedDate":"2017-12-20"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":54,"author":{"gitId":"-"},"content":" public Email getEmail() {","lastModifiedDate":"2017-07-12"},{"lineNumber":55,"author":{"gitId":"-"},"content":" return email;","lastModifiedDate":"2017-12-20"},{"lineNumber":56,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":58,"author":{"gitId":"-"},"content":" public Address getAddress() {","lastModifiedDate":"2017-07-12"},{"lineNumber":59,"author":{"gitId":"-"},"content":" return address;","lastModifiedDate":"2017-12-20"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-07-12"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-12"},{"lineNumber":62,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-03-07"},{"lineNumber":63,"author":{"gitId":"-"},"content":" * Returns an immutable tag set, which throws {@code UnsupportedOperationException}","lastModifiedDate":"2017-03-07"},{"lineNumber":64,"author":{"gitId":"-"},"content":" * if modification is attempted.","lastModifiedDate":"2017-03-07"},{"lineNumber":65,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-03-07"},{"lineNumber":66,"author":{"gitId":"-"},"content":" public Set\u003cTag\u003e getTags() {","lastModifiedDate":"2017-03-07"},{"lineNumber":67,"author":{"gitId":"-"},"content":" return Collections.unmodifiableSet(tags);","lastModifiedDate":"2018-03-26"},{"lineNumber":68,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-21"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":70,"author":{"gitId":"joenus"},"content":" /**","lastModifiedDate":"2024-02-29"},{"lineNumber":71,"author":{"gitId":"joenus"},"content":" * Returns an immutable notes list, which throws {@code UnsupportedOperationException}","lastModifiedDate":"2024-02-29"},{"lineNumber":72,"author":{"gitId":"joenus"},"content":" * if modification is attempted.","lastModifiedDate":"2024-02-29"},{"lineNumber":73,"author":{"gitId":"joenus"},"content":" */","lastModifiedDate":"2024-02-29"},{"lineNumber":74,"author":{"gitId":"joenus"},"content":" public ObservableList\u003cNote\u003e getNotes() {","lastModifiedDate":"2024-02-29"},{"lineNumber":75,"author":{"gitId":"joenus"},"content":" return FXCollections.unmodifiableObservableList(notes);","lastModifiedDate":"2024-02-29"},{"lineNumber":76,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":77,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":78,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-04-19"},{"lineNumber":79,"author":{"gitId":"-"},"content":" * Returns true if both persons have the same name.","lastModifiedDate":"2020-12-18"},{"lineNumber":80,"author":{"gitId":"-"},"content":" * This defines a weaker notion of equality between two persons.","lastModifiedDate":"2018-04-19"},{"lineNumber":81,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-04-19"},{"lineNumber":82,"author":{"gitId":"-"},"content":" public boolean isSamePerson(Person otherPerson) {","lastModifiedDate":"2018-04-19"},{"lineNumber":83,"author":{"gitId":"-"},"content":" if (otherPerson \u003d\u003d this) {","lastModifiedDate":"2018-04-19"},{"lineNumber":84,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2018-04-19"},{"lineNumber":85,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-04-19"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":87,"author":{"gitId":"-"},"content":" return otherPerson !\u003d null","lastModifiedDate":"2018-04-19"},{"lineNumber":88,"author":{"gitId":"-"},"content":" \u0026\u0026 otherPerson.getName().equals(getName());","lastModifiedDate":"2020-12-18"},{"lineNumber":89,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-04-19"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":91,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-04-19"},{"lineNumber":92,"author":{"gitId":"-"},"content":" * Returns true if both persons have the same identity and data fields.","lastModifiedDate":"2018-04-19"},{"lineNumber":93,"author":{"gitId":"-"},"content":" * This defines a stronger notion of equality between two persons.","lastModifiedDate":"2018-04-19"},{"lineNumber":94,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-04-19"},{"lineNumber":95,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":96,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2016-08-24"},{"lineNumber":97,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2018-01-10"},{"lineNumber":98,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2018-01-10"},{"lineNumber":99,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-01-10"},{"lineNumber":100,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-01-10"},{"lineNumber":101,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2023-07-13"},{"lineNumber":102,"author":{"gitId":"-"},"content":" if (!(other instanceof Person)) {","lastModifiedDate":"2018-01-10"},{"lineNumber":103,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2018-01-10"},{"lineNumber":104,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-01-10"},{"lineNumber":105,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-01-10"},{"lineNumber":106,"author":{"gitId":"-"},"content":" Person otherPerson \u003d (Person) other;","lastModifiedDate":"2018-01-10"},{"lineNumber":107,"author":{"gitId":"-"},"content":" return name.equals(otherPerson.name)","lastModifiedDate":"2023-07-13"},{"lineNumber":108,"author":{"gitId":"-"},"content":" \u0026\u0026 phone.equals(otherPerson.phone)","lastModifiedDate":"2023-07-13"},{"lineNumber":109,"author":{"gitId":"-"},"content":" \u0026\u0026 email.equals(otherPerson.email)","lastModifiedDate":"2023-07-13"},{"lineNumber":110,"author":{"gitId":"-"},"content":" \u0026\u0026 address.equals(otherPerson.address)","lastModifiedDate":"2023-07-13"},{"lineNumber":111,"author":{"gitId":"joenus"},"content":" \u0026\u0026 tags.equals(otherPerson.tags)","lastModifiedDate":"2024-02-29"},{"lineNumber":112,"author":{"gitId":"joenus"},"content":" \u0026\u0026 notes.equals(otherPerson.notes);","lastModifiedDate":"2024-02-29"},{"lineNumber":113,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":114,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":115,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":116,"author":{"gitId":"-"},"content":" public int hashCode() {","lastModifiedDate":"2016-08-24"},{"lineNumber":117,"author":{"gitId":"joenus"},"content":" return Objects.hash(name, phone, email, address, tags, notes);","lastModifiedDate":"2024-02-29"},{"lineNumber":118,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":119,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":120,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":121,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2016-08-24"},{"lineNumber":122,"author":{"gitId":"-"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2019-02-23"},{"lineNumber":123,"author":{"gitId":"-"},"content":" .add(\"name\", name)","lastModifiedDate":"2019-02-23"},{"lineNumber":124,"author":{"gitId":"-"},"content":" .add(\"phone\", phone)","lastModifiedDate":"2019-02-23"},{"lineNumber":125,"author":{"gitId":"-"},"content":" .add(\"email\", email)","lastModifiedDate":"2019-02-23"},{"lineNumber":126,"author":{"gitId":"-"},"content":" .add(\"address\", address)","lastModifiedDate":"2019-02-23"},{"lineNumber":127,"author":{"gitId":"-"},"content":" .add(\"tags\", tags)","lastModifiedDate":"2019-02-23"},{"lineNumber":128,"author":{"gitId":"joenus"},"content":" .add(\"notes\", notes)","lastModifiedDate":"2024-02-29"},{"lineNumber":129,"author":{"gitId":"-"},"content":" .toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":131,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":132,"author":{"gitId":"joenus"},"content":" /**","lastModifiedDate":"2024-02-29"},{"lineNumber":133,"author":{"gitId":"joenus"},"content":" * Represents a builder for a {@link Person}.","lastModifiedDate":"2024-02-29"},{"lineNumber":134,"author":{"gitId":"joenus"},"content":" */","lastModifiedDate":"2024-02-29"},{"lineNumber":135,"author":{"gitId":"joenus"},"content":" public static class Builder {","lastModifiedDate":"2024-02-29"},{"lineNumber":136,"author":{"gitId":"joenus"},"content":" private Name name;","lastModifiedDate":"2024-02-29"},{"lineNumber":137,"author":{"gitId":"joenus"},"content":" private Phone phone;","lastModifiedDate":"2024-02-29"},{"lineNumber":138,"author":{"gitId":"joenus"},"content":" private Email email;","lastModifiedDate":"2024-02-29"},{"lineNumber":139,"author":{"gitId":"joenus"},"content":" private Address address;","lastModifiedDate":"2024-02-29"},{"lineNumber":140,"author":{"gitId":"joenus"},"content":" private Set\u003cTag\u003e tags \u003d new HashSet\u003c\u003e();","lastModifiedDate":"2024-02-29"},{"lineNumber":141,"author":{"gitId":"joenus"},"content":" private ObservableList\u003cNote\u003e notes \u003d FXCollections.observableArrayList();","lastModifiedDate":"2024-02-29"},{"lineNumber":142,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":143,"author":{"gitId":"joenus"},"content":" /**","lastModifiedDate":"2024-02-29"},{"lineNumber":144,"author":{"gitId":"joenus"},"content":" * Creates a {@code Builder} with the given parameters.","lastModifiedDate":"2024-02-29"},{"lineNumber":145,"author":{"gitId":"joenus"},"content":" */","lastModifiedDate":"2024-02-29"},{"lineNumber":146,"author":{"gitId":"joenus"},"content":" public Builder(Name name, Phone phone, Email email, Address address, Set\u003cTag\u003e tags,","lastModifiedDate":"2024-02-29"},{"lineNumber":147,"author":{"gitId":"joenus"},"content":" ObservableList\u003cNote\u003e notes) {","lastModifiedDate":"2024-02-29"},{"lineNumber":148,"author":{"gitId":"joenus"},"content":" this.name \u003d name;","lastModifiedDate":"2024-02-29"},{"lineNumber":149,"author":{"gitId":"joenus"},"content":" this.phone \u003d phone;","lastModifiedDate":"2024-02-29"},{"lineNumber":150,"author":{"gitId":"joenus"},"content":" this.email \u003d email;","lastModifiedDate":"2024-02-29"},{"lineNumber":151,"author":{"gitId":"joenus"},"content":" this.address \u003d address;","lastModifiedDate":"2024-02-29"},{"lineNumber":152,"author":{"gitId":"joenus"},"content":" this.tags.addAll(tags);","lastModifiedDate":"2024-02-29"},{"lineNumber":153,"author":{"gitId":"joenus"},"content":" this.notes.addAll(notes);","lastModifiedDate":"2024-02-29"},{"lineNumber":154,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":155,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":156,"author":{"gitId":"joenus"},"content":" /**","lastModifiedDate":"2024-02-29"},{"lineNumber":157,"author":{"gitId":"joenus"},"content":" * Initializes the {@code Builder} with the data of {@code person}.","lastModifiedDate":"2024-02-29"},{"lineNumber":158,"author":{"gitId":"joenus"},"content":" */","lastModifiedDate":"2024-02-29"},{"lineNumber":159,"author":{"gitId":"joenus"},"content":" public Builder(Person person) {","lastModifiedDate":"2024-02-29"},{"lineNumber":160,"author":{"gitId":"joenus"},"content":" this(person.getName(), person.getPhone(), person.getEmail(), person.getAddress(), person.getTags(),","lastModifiedDate":"2024-02-29"},{"lineNumber":161,"author":{"gitId":"joenus"},"content":" person.getNotes());","lastModifiedDate":"2024-02-29"},{"lineNumber":162,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":163,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":164,"author":{"gitId":"joenus"},"content":" public Name getName() {","lastModifiedDate":"2024-02-29"},{"lineNumber":165,"author":{"gitId":"joenus"},"content":" return name;","lastModifiedDate":"2024-02-29"},{"lineNumber":166,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":167,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":168,"author":{"gitId":"joenus"},"content":" public Phone getPhone() {","lastModifiedDate":"2024-02-29"},{"lineNumber":169,"author":{"gitId":"joenus"},"content":" return phone;","lastModifiedDate":"2024-02-29"},{"lineNumber":170,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":171,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":172,"author":{"gitId":"joenus"},"content":" public Email getEmail() {","lastModifiedDate":"2024-02-29"},{"lineNumber":173,"author":{"gitId":"joenus"},"content":" return email;","lastModifiedDate":"2024-02-29"},{"lineNumber":174,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":175,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":176,"author":{"gitId":"joenus"},"content":" public Address getAddress() {","lastModifiedDate":"2024-02-29"},{"lineNumber":177,"author":{"gitId":"joenus"},"content":" return address;","lastModifiedDate":"2024-02-29"},{"lineNumber":178,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":179,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":180,"author":{"gitId":"joenus"},"content":" public Set\u003cTag\u003e getTags() {","lastModifiedDate":"2024-02-29"},{"lineNumber":181,"author":{"gitId":"joenus"},"content":" return tags;","lastModifiedDate":"2024-02-29"},{"lineNumber":182,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":183,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":184,"author":{"gitId":"joenus"},"content":" public ObservableList\u003cNote\u003e getNotes() {","lastModifiedDate":"2024-02-29"},{"lineNumber":185,"author":{"gitId":"joenus"},"content":" return notes;","lastModifiedDate":"2024-02-29"},{"lineNumber":186,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":187,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":188,"author":{"gitId":"joenus"},"content":" public Builder setName(Name name) {","lastModifiedDate":"2024-02-29"},{"lineNumber":189,"author":{"gitId":"joenus"},"content":" requireNonNull(name);","lastModifiedDate":"2024-02-29"},{"lineNumber":190,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":191,"author":{"gitId":"joenus"},"content":" this.name \u003d name;","lastModifiedDate":"2024-02-29"},{"lineNumber":192,"author":{"gitId":"joenus"},"content":" return this;","lastModifiedDate":"2024-02-29"},{"lineNumber":193,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":194,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":195,"author":{"gitId":"joenus"},"content":" public Builder setPhone(Phone phone) {","lastModifiedDate":"2024-02-29"},{"lineNumber":196,"author":{"gitId":"joenus"},"content":" requireNonNull(phone);","lastModifiedDate":"2024-02-29"},{"lineNumber":197,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":198,"author":{"gitId":"joenus"},"content":" this.phone \u003d phone;","lastModifiedDate":"2024-02-29"},{"lineNumber":199,"author":{"gitId":"joenus"},"content":" return this;","lastModifiedDate":"2024-02-29"},{"lineNumber":200,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":201,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":202,"author":{"gitId":"joenus"},"content":" public Builder setEmail(Email email) {","lastModifiedDate":"2024-02-29"},{"lineNumber":203,"author":{"gitId":"joenus"},"content":" requireNonNull(email);","lastModifiedDate":"2024-02-29"},{"lineNumber":204,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":205,"author":{"gitId":"joenus"},"content":" this.email \u003d email;","lastModifiedDate":"2024-02-29"},{"lineNumber":206,"author":{"gitId":"joenus"},"content":" return this;","lastModifiedDate":"2024-02-29"},{"lineNumber":207,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":208,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":209,"author":{"gitId":"joenus"},"content":" public Builder setAddress(Address address) {","lastModifiedDate":"2024-02-29"},{"lineNumber":210,"author":{"gitId":"joenus"},"content":" requireNonNull(address);","lastModifiedDate":"2024-02-29"},{"lineNumber":211,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":212,"author":{"gitId":"joenus"},"content":" this.address \u003d address;","lastModifiedDate":"2024-02-29"},{"lineNumber":213,"author":{"gitId":"joenus"},"content":" return this;","lastModifiedDate":"2024-02-29"},{"lineNumber":214,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":215,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":216,"author":{"gitId":"joenus"},"content":" public Builder setTags(Set\u003cTag\u003e tags) {","lastModifiedDate":"2024-02-29"},{"lineNumber":217,"author":{"gitId":"joenus"},"content":" requireNonNull(tags);","lastModifiedDate":"2024-02-29"},{"lineNumber":218,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":219,"author":{"gitId":"joenus"},"content":" this.tags.clear();","lastModifiedDate":"2024-03-01"},{"lineNumber":220,"author":{"gitId":"joenus"},"content":" this.tags.addAll(tags);","lastModifiedDate":"2024-02-29"},{"lineNumber":221,"author":{"gitId":"joenus"},"content":" return this;","lastModifiedDate":"2024-02-29"},{"lineNumber":222,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":223,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":224,"author":{"gitId":"joenus"},"content":" public Builder setNotes(ObservableList\u003cNote\u003e notes) {","lastModifiedDate":"2024-02-29"},{"lineNumber":225,"author":{"gitId":"joenus"},"content":" requireNonNull(notes);","lastModifiedDate":"2024-02-29"},{"lineNumber":226,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":227,"author":{"gitId":"joenus"},"content":" this.notes.clear();","lastModifiedDate":"2024-03-01"},{"lineNumber":228,"author":{"gitId":"joenus"},"content":" this.notes.addAll(notes);","lastModifiedDate":"2024-02-29"},{"lineNumber":229,"author":{"gitId":"joenus"},"content":" return this;","lastModifiedDate":"2024-02-29"},{"lineNumber":230,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":231,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":232,"author":{"gitId":"joenus"},"content":" /**","lastModifiedDate":"2024-02-29"},{"lineNumber":233,"author":{"gitId":"joenus"},"content":" * Builds a {@link Person} with the latest values.","lastModifiedDate":"2024-02-29"},{"lineNumber":234,"author":{"gitId":"joenus"},"content":" */","lastModifiedDate":"2024-02-29"},{"lineNumber":235,"author":{"gitId":"joenus"},"content":" public Person build() {","lastModifiedDate":"2024-02-29"},{"lineNumber":236,"author":{"gitId":"joenus"},"content":" return new Person(name, phone, email, address, tags, notes);","lastModifiedDate":"2024-02-29"},{"lineNumber":237,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":238,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":239,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-24"}],"authorContributionMap":{"joenus":128,"-":111}},{"path":"src/main/java/seedu/address/model/person/note/Description.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"joenus"},"content":"package seedu.address.model.person.note;","lastModifiedDate":"2024-02-29"},{"lineNumber":2,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":3,"author":{"gitId":"joenus"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2024-02-29"},{"lineNumber":4,"author":{"gitId":"joenus"},"content":"import static seedu.address.commons.util.AppUtil.checkArgument;","lastModifiedDate":"2024-02-29"},{"lineNumber":5,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":6,"author":{"gitId":"joenus"},"content":"import java.util.Objects;","lastModifiedDate":"2024-02-29"},{"lineNumber":7,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":8,"author":{"gitId":"joenus"},"content":"/**","lastModifiedDate":"2024-02-29"},{"lineNumber":9,"author":{"gitId":"joenus"},"content":" * Represents a Note\u0027s description.","lastModifiedDate":"2024-02-29"},{"lineNumber":10,"author":{"gitId":"joenus"},"content":" */","lastModifiedDate":"2024-02-29"},{"lineNumber":11,"author":{"gitId":"joenus"},"content":"public class Description {","lastModifiedDate":"2024-02-29"},{"lineNumber":12,"author":{"gitId":"joenus"},"content":" public static final String MESSAGE_CONSTRAINTS \u003d \"Note should not be blank\";","lastModifiedDate":"2024-02-29"},{"lineNumber":13,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":14,"author":{"gitId":"joenus"},"content":" public final String description;","lastModifiedDate":"2024-02-29"},{"lineNumber":15,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":16,"author":{"gitId":"joenus"},"content":" /**","lastModifiedDate":"2024-02-29"},{"lineNumber":17,"author":{"gitId":"joenus"},"content":" * Constructs a {@code Description}.","lastModifiedDate":"2024-02-29"},{"lineNumber":18,"author":{"gitId":"joenus"},"content":" *","lastModifiedDate":"2024-02-29"},{"lineNumber":19,"author":{"gitId":"joenus"},"content":" * @param description A valid description.","lastModifiedDate":"2024-02-29"},{"lineNumber":20,"author":{"gitId":"joenus"},"content":" */","lastModifiedDate":"2024-02-29"},{"lineNumber":21,"author":{"gitId":"joenus"},"content":" public Description(String description) {","lastModifiedDate":"2024-02-29"},{"lineNumber":22,"author":{"gitId":"joenus"},"content":" requireNonNull(description);","lastModifiedDate":"2024-02-29"},{"lineNumber":23,"author":{"gitId":"joenus"},"content":" checkArgument(isValid(description), MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-29"},{"lineNumber":24,"author":{"gitId":"joenus"},"content":" this.description \u003d description;","lastModifiedDate":"2024-02-29"},{"lineNumber":25,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":26,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":27,"author":{"gitId":"joenus"},"content":" public static boolean isValid(String test) {","lastModifiedDate":"2024-02-29"},{"lineNumber":28,"author":{"gitId":"joenus"},"content":" return !test.isEmpty();","lastModifiedDate":"2024-02-29"},{"lineNumber":29,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":30,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":31,"author":{"gitId":"joenus"},"content":" @Override","lastModifiedDate":"2024-02-29"},{"lineNumber":32,"author":{"gitId":"joenus"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2024-02-29"},{"lineNumber":33,"author":{"gitId":"joenus"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2024-02-29"},{"lineNumber":34,"author":{"gitId":"joenus"},"content":" return true;","lastModifiedDate":"2024-02-29"},{"lineNumber":35,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":36,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":37,"author":{"gitId":"joenus"},"content":" if (o \u003d\u003d null || getClass() !\u003d o.getClass()) {","lastModifiedDate":"2024-02-29"},{"lineNumber":38,"author":{"gitId":"joenus"},"content":" return false;","lastModifiedDate":"2024-02-29"},{"lineNumber":39,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":40,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":41,"author":{"gitId":"joenus"},"content":" Description that \u003d (Description) o;","lastModifiedDate":"2024-02-29"},{"lineNumber":42,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":43,"author":{"gitId":"joenus"},"content":" return Objects.equals(description, that.description);","lastModifiedDate":"2024-02-29"},{"lineNumber":44,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":45,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":46,"author":{"gitId":"joenus"},"content":" @Override","lastModifiedDate":"2024-02-29"},{"lineNumber":47,"author":{"gitId":"joenus"},"content":" public int hashCode() {","lastModifiedDate":"2024-02-29"},{"lineNumber":48,"author":{"gitId":"joenus"},"content":" return Objects.hash(description);","lastModifiedDate":"2024-03-01"},{"lineNumber":49,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":50,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":51,"author":{"gitId":"joenus"},"content":" @Override","lastModifiedDate":"2024-02-29"},{"lineNumber":52,"author":{"gitId":"joenus"},"content":" public String toString() {","lastModifiedDate":"2024-02-29"},{"lineNumber":53,"author":{"gitId":"joenus"},"content":" return description;","lastModifiedDate":"2024-02-29"},{"lineNumber":54,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":55,"author":{"gitId":"joenus"},"content":"}","lastModifiedDate":"2024-02-29"}],"authorContributionMap":{"joenus":55}},{"path":"src/main/java/seedu/address/model/person/note/Note.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"joenus"},"content":"package seedu.address.model.person.note;","lastModifiedDate":"2024-02-29"},{"lineNumber":2,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":3,"author":{"gitId":"joenus"},"content":"import static seedu.address.commons.util.CollectionUtil.requireAllNonNull;","lastModifiedDate":"2024-02-29"},{"lineNumber":4,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":5,"author":{"gitId":"joenus"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-02-29"},{"lineNumber":6,"author":{"gitId":"joenus"},"content":"import java.util.Objects;","lastModifiedDate":"2024-02-29"},{"lineNumber":7,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":8,"author":{"gitId":"joenus"},"content":"import seedu.address.commons.util.ToStringBuilder;","lastModifiedDate":"2024-02-29"},{"lineNumber":9,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":10,"author":{"gitId":"joenus"},"content":"/**","lastModifiedDate":"2024-02-29"},{"lineNumber":11,"author":{"gitId":"joenus"},"content":" * Represents an Appointment Note.","lastModifiedDate":"2024-02-29"},{"lineNumber":12,"author":{"gitId":"joenus"},"content":" */","lastModifiedDate":"2024-02-29"},{"lineNumber":13,"author":{"gitId":"joenus"},"content":"public class Note {","lastModifiedDate":"2024-02-29"},{"lineNumber":14,"author":{"gitId":"joenus"},"content":" private final LocalDateTime dateTime;","lastModifiedDate":"2024-02-29"},{"lineNumber":15,"author":{"gitId":"joenus"},"content":" private final Description description;","lastModifiedDate":"2024-02-29"},{"lineNumber":16,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":17,"author":{"gitId":"joenus"},"content":" /**","lastModifiedDate":"2024-02-29"},{"lineNumber":18,"author":{"gitId":"joenus"},"content":" * Constructs a {@code Note}.","lastModifiedDate":"2024-02-29"},{"lineNumber":19,"author":{"gitId":"joenus"},"content":" *","lastModifiedDate":"2024-02-29"},{"lineNumber":20,"author":{"gitId":"joenus"},"content":" * @param dateTime A date and time.","lastModifiedDate":"2024-02-29"},{"lineNumber":21,"author":{"gitId":"joenus"},"content":" * @param description A valid description.","lastModifiedDate":"2024-02-29"},{"lineNumber":22,"author":{"gitId":"joenus"},"content":" */","lastModifiedDate":"2024-02-29"},{"lineNumber":23,"author":{"gitId":"joenus"},"content":" public Note(LocalDateTime dateTime, Description description) {","lastModifiedDate":"2024-02-29"},{"lineNumber":24,"author":{"gitId":"joenus"},"content":" requireAllNonNull(dateTime, description);","lastModifiedDate":"2024-02-29"},{"lineNumber":25,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":26,"author":{"gitId":"joenus"},"content":" this.dateTime \u003d dateTime;","lastModifiedDate":"2024-02-29"},{"lineNumber":27,"author":{"gitId":"joenus"},"content":" this.description \u003d description;","lastModifiedDate":"2024-02-29"},{"lineNumber":28,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":29,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":30,"author":{"gitId":"joenus"},"content":" public LocalDateTime getDateTime() {","lastModifiedDate":"2024-02-29"},{"lineNumber":31,"author":{"gitId":"joenus"},"content":" return dateTime;","lastModifiedDate":"2024-02-29"},{"lineNumber":32,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":33,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":34,"author":{"gitId":"joenus"},"content":" public Description getDescription() {","lastModifiedDate":"2024-02-29"},{"lineNumber":35,"author":{"gitId":"joenus"},"content":" return description;","lastModifiedDate":"2024-02-29"},{"lineNumber":36,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":37,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":38,"author":{"gitId":"joenus"},"content":" @Override","lastModifiedDate":"2024-02-29"},{"lineNumber":39,"author":{"gitId":"joenus"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2024-02-29"},{"lineNumber":40,"author":{"gitId":"joenus"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2024-02-29"},{"lineNumber":41,"author":{"gitId":"joenus"},"content":" return true;","lastModifiedDate":"2024-02-29"},{"lineNumber":42,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":43,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":44,"author":{"gitId":"joenus"},"content":" if (o \u003d\u003d null || getClass() !\u003d o.getClass()) {","lastModifiedDate":"2024-02-29"},{"lineNumber":45,"author":{"gitId":"joenus"},"content":" return false;","lastModifiedDate":"2024-02-29"},{"lineNumber":46,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":47,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":48,"author":{"gitId":"joenus"},"content":" Note note \u003d (Note) o;","lastModifiedDate":"2024-02-29"},{"lineNumber":49,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":50,"author":{"gitId":"joenus"},"content":" if (!Objects.equals(dateTime, note.dateTime)) {","lastModifiedDate":"2024-02-29"},{"lineNumber":51,"author":{"gitId":"joenus"},"content":" return false;","lastModifiedDate":"2024-02-29"},{"lineNumber":52,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":53,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":54,"author":{"gitId":"joenus"},"content":" return Objects.equals(description, note.description);","lastModifiedDate":"2024-02-29"},{"lineNumber":55,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":56,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":57,"author":{"gitId":"joenus"},"content":" @Override","lastModifiedDate":"2024-02-29"},{"lineNumber":58,"author":{"gitId":"joenus"},"content":" public int hashCode() {","lastModifiedDate":"2024-02-29"},{"lineNumber":59,"author":{"gitId":"joenus"},"content":" return Objects.hash(dateTime, description);","lastModifiedDate":"2024-03-01"},{"lineNumber":60,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":61,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":62,"author":{"gitId":"joenus"},"content":" @Override","lastModifiedDate":"2024-02-29"},{"lineNumber":63,"author":{"gitId":"joenus"},"content":" public String toString() {","lastModifiedDate":"2024-02-29"},{"lineNumber":64,"author":{"gitId":"joenus"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2024-02-29"},{"lineNumber":65,"author":{"gitId":"joenus"},"content":" .add(\"dateTime\", dateTime)","lastModifiedDate":"2024-02-29"},{"lineNumber":66,"author":{"gitId":"joenus"},"content":" .add(\"description\", description)","lastModifiedDate":"2024-02-29"},{"lineNumber":67,"author":{"gitId":"joenus"},"content":" .toString();","lastModifiedDate":"2024-02-29"},{"lineNumber":68,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":69,"author":{"gitId":"joenus"},"content":"}","lastModifiedDate":"2024-02-29"}],"authorContributionMap":{"joenus":69}},{"path":"src/main/java/seedu/address/model/person/note/exceptions/NoteNotFoundException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"joenus"},"content":"package seedu.address.model.person.note.exceptions;","lastModifiedDate":"2024-02-29"},{"lineNumber":2,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":3,"author":{"gitId":"joenus"},"content":"/**","lastModifiedDate":"2024-02-29"},{"lineNumber":4,"author":{"gitId":"joenus"},"content":" * Signals that the operation is unable to find the specified note.","lastModifiedDate":"2024-02-29"},{"lineNumber":5,"author":{"gitId":"joenus"},"content":" */","lastModifiedDate":"2024-02-29"},{"lineNumber":6,"author":{"gitId":"joenus"},"content":"public class NoteNotFoundException extends RuntimeException { }","lastModifiedDate":"2024-02-29"}],"authorContributionMap":{"joenus":6}},{"path":"src/main/java/seedu/address/model/person/tag/Tag.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"joenus"},"content":"package seedu.address.model.person.tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2017-05-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.commons.util.AppUtil.checkArgument;","lastModifiedDate":"2017-05-30"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-24"},{"lineNumber":7,"author":{"gitId":"-"},"content":" * Represents a Tag in the address book.","lastModifiedDate":"2016-08-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":" * Guarantees: immutable; name is valid as declared in {@link #isValidTagName(String)}","lastModifiedDate":"2016-08-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":"public class Tag {","lastModifiedDate":"2016-08-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":" public static final String MESSAGE_CONSTRAINTS \u003d \"Tags names should be alphanumeric\";","lastModifiedDate":"2018-09-22"},{"lineNumber":13,"author":{"gitId":"-"},"content":" public static final String VALIDATION_REGEX \u003d \"\\\\p{Alnum}+\";","lastModifiedDate":"2018-09-22"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":" public final String tagName;","lastModifiedDate":"2016-10-19"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-08-24"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * Constructs a {@code Tag}.","lastModifiedDate":"2017-05-30"},{"lineNumber":19,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2016-08-24"},{"lineNumber":20,"author":{"gitId":"-"},"content":" * @param tagName A valid tag name.","lastModifiedDate":"2017-05-30"},{"lineNumber":21,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":22,"author":{"gitId":"-"},"content":" public Tag(String tagName) {","lastModifiedDate":"2017-05-30"},{"lineNumber":23,"author":{"gitId":"-"},"content":" requireNonNull(tagName);","lastModifiedDate":"2017-05-30"},{"lineNumber":24,"author":{"gitId":"-"},"content":" checkArgument(isValidTagName(tagName), MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":25,"author":{"gitId":"-"},"content":" this.tagName \u003d tagName;","lastModifiedDate":"2017-05-30"},{"lineNumber":26,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":28,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-08-24"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * Returns true if a given string is a valid tag name.","lastModifiedDate":"2016-09-22"},{"lineNumber":30,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":31,"author":{"gitId":"-"},"content":" public static boolean isValidTagName(String test) {","lastModifiedDate":"2016-08-24"},{"lineNumber":32,"author":{"gitId":"-"},"content":" return test.matches(VALIDATION_REGEX);","lastModifiedDate":"2018-09-22"},{"lineNumber":33,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":35,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":36,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2016-08-24"},{"lineNumber":37,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2023-07-13"},{"lineNumber":38,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2023-07-13"},{"lineNumber":39,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-13"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-13"},{"lineNumber":41,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2023-07-13"},{"lineNumber":42,"author":{"gitId":"-"},"content":" if (!(other instanceof Tag)) {","lastModifiedDate":"2023-07-13"},{"lineNumber":43,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2023-07-13"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-13"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-13"},{"lineNumber":46,"author":{"gitId":"-"},"content":" Tag otherTag \u003d (Tag) other;","lastModifiedDate":"2023-07-13"},{"lineNumber":47,"author":{"gitId":"-"},"content":" return tagName.equals(otherTag.tagName);","lastModifiedDate":"2023-07-13"},{"lineNumber":48,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":50,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":51,"author":{"gitId":"-"},"content":" public int hashCode() {","lastModifiedDate":"2016-08-24"},{"lineNumber":52,"author":{"gitId":"-"},"content":" return tagName.hashCode();","lastModifiedDate":"2016-08-24"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":55,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-08-24"},{"lineNumber":56,"author":{"gitId":"-"},"content":" * Format state as text for viewing.","lastModifiedDate":"2016-08-24"},{"lineNumber":57,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":58,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2016-08-24"},{"lineNumber":59,"author":{"gitId":"-"},"content":" return \u0027[\u0027 + tagName + \u0027]\u0027;","lastModifiedDate":"2016-08-24"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-24"}],"authorContributionMap":{"joenus":1,"-":61}},{"path":"src/main/java/seedu/address/model/util/SampleDataUtil.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model.util;","lastModifiedDate":"2016-12-20"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-20"},{"lineNumber":3,"author":{"gitId":"joenus"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-02-29"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.Arrays;","lastModifiedDate":"2018-01-21"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-03-14"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2018-01-21"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-14"},{"lineNumber":8,"author":{"gitId":"joenus"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2024-02-29"},{"lineNumber":9,"author":{"gitId":"joenus"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2024-02-29"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import seedu.address.model.AddressBook;","lastModifiedDate":"2016-12-20"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.model.ReadOnlyAddressBook;","lastModifiedDate":"2016-12-20"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2016-12-20"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2016-12-20"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2016-12-20"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2016-12-20"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2016-12-20"},{"lineNumber":17,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Description;","lastModifiedDate":"2024-02-29"},{"lineNumber":18,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Note;","lastModifiedDate":"2024-02-29"},{"lineNumber":19,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.tag.Tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-20"},{"lineNumber":21,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-08-16"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * Contains utility methods for populating {@code AddressBook} with sample data.","lastModifiedDate":"2017-08-16"},{"lineNumber":23,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-08-16"},{"lineNumber":24,"author":{"gitId":"-"},"content":"public class SampleDataUtil {","lastModifiedDate":"2016-12-20"},{"lineNumber":25,"author":{"gitId":"-"},"content":" public static Person[] getSamplePersons() {","lastModifiedDate":"2016-12-20"},{"lineNumber":26,"author":{"gitId":"-"},"content":" return new Person[]{","lastModifiedDate":"2016-12-20"},{"lineNumber":27,"author":{"gitId":"-"},"content":" new Person(new Name(\"Alex Yeoh\"), new Phone(\"87438807\"), new Email(\"alexyeoh@example.com\"),","lastModifiedDate":"2017-04-05"},{"lineNumber":28,"author":{"gitId":"-"},"content":" new Address(\"Blk 30 Geylang Street 29, #06-40\"),","lastModifiedDate":"2016-12-20"},{"lineNumber":29,"author":{"gitId":"joenus"},"content":" getTags(\"friends\"), getNotes(","lastModifiedDate":"2024-02-29"},{"lineNumber":30,"author":{"gitId":"joenus"},"content":" new Note[]{","lastModifiedDate":"2024-02-29"},{"lineNumber":31,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 2, 19, 21, 30), new Description(\"General Flu\")),","lastModifiedDate":"2024-02-29"},{"lineNumber":32,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 2, 28, 8, 30), new Description(\"Headache\")),","lastModifiedDate":"2024-02-29"},{"lineNumber":33,"author":{"gitId":"joenus"},"content":" })),","lastModifiedDate":"2024-02-29"},{"lineNumber":34,"author":{"gitId":"-"},"content":" new Person(new Name(\"Bernice Yu\"), new Phone(\"99272758\"), new Email(\"berniceyu@example.com\"),","lastModifiedDate":"2017-04-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":" new Address(\"Blk 30 Lorong 3 Serangoon Gardens, #07-18\"),","lastModifiedDate":"2016-12-20"},{"lineNumber":36,"author":{"gitId":"joenus"},"content":" getTags(\"colleagues\", \"friends\"), getNotes(","lastModifiedDate":"2024-02-29"},{"lineNumber":37,"author":{"gitId":"joenus"},"content":" new Note[]{","lastModifiedDate":"2024-02-29"},{"lineNumber":38,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 1, 2, 10, 0), new Description(\"Annual physical exam\")),","lastModifiedDate":"2024-02-29"},{"lineNumber":39,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 3, 15, 9, 15), new Description(\"Follow-up for blood pressure\")),","lastModifiedDate":"2024-02-29"},{"lineNumber":40,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 6, 7, 15, 0), new Description(\"Dermatology consultation\"))","lastModifiedDate":"2024-02-29"},{"lineNumber":41,"author":{"gitId":"joenus"},"content":" })),","lastModifiedDate":"2024-02-29"},{"lineNumber":42,"author":{"gitId":"-"},"content":" new Person(new Name(\"Charlotte Oliveiro\"), new Phone(\"93210283\"), new Email(\"charlotte@example.com\"),","lastModifiedDate":"2017-04-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":" new Address(\"Blk 11 Ang Mo Kio Street 74, #11-04\"),","lastModifiedDate":"2016-12-20"},{"lineNumber":44,"author":{"gitId":"joenus"},"content":" getTags(\"neighbours\"), getNotes(","lastModifiedDate":"2024-02-29"},{"lineNumber":45,"author":{"gitId":"joenus"},"content":" new Note[]{","lastModifiedDate":"2024-02-29"},{"lineNumber":46,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2023, 2, 10, 14, 0), new Description(\"Vision checkup\")),","lastModifiedDate":"2024-02-29"},{"lineNumber":47,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2023, 5, 23, 9, 0), new Description(\"Stomach pain evaluation\")),","lastModifiedDate":"2024-02-29"},{"lineNumber":48,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 6, 6, 11, 15), new Description(\"Prenatal checkup\")),","lastModifiedDate":"2024-02-29"},{"lineNumber":49,"author":{"gitId":"joenus"},"content":" })),","lastModifiedDate":"2024-02-29"},{"lineNumber":50,"author":{"gitId":"-"},"content":" new Person(new Name(\"David Li\"), new Phone(\"91031282\"), new Email(\"lidavid@example.com\"),","lastModifiedDate":"2017-04-05"},{"lineNumber":51,"author":{"gitId":"-"},"content":" new Address(\"Blk 436 Serangoon Gardens Street 26, #16-43\"),","lastModifiedDate":"2016-12-20"},{"lineNumber":52,"author":{"gitId":"joenus"},"content":" getTags(\"family\"), getNotes(","lastModifiedDate":"2024-02-29"},{"lineNumber":53,"author":{"gitId":"joenus"},"content":" new Note[]{","lastModifiedDate":"2024-02-29"},{"lineNumber":54,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 2, 20, 15, 30), new Description(\"Joint pain assessment\")),","lastModifiedDate":"2024-02-29"},{"lineNumber":55,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 4, 4, 10, 30), new Description(\"Post-surgery checkup\")),","lastModifiedDate":"2024-02-29"},{"lineNumber":56,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 5, 19, 17, 0), new Description(\"Sports injury follow-up\")),","lastModifiedDate":"2024-02-29"},{"lineNumber":57,"author":{"gitId":"joenus"},"content":" })),","lastModifiedDate":"2024-02-29"},{"lineNumber":58,"author":{"gitId":"-"},"content":" new Person(new Name(\"Irfan Ibrahim\"), new Phone(\"92492021\"), new Email(\"irfan@example.com\"),","lastModifiedDate":"2017-04-05"},{"lineNumber":59,"author":{"gitId":"-"},"content":" new Address(\"Blk 47 Tampines Street 20, #17-35\"),","lastModifiedDate":"2016-12-20"},{"lineNumber":60,"author":{"gitId":"joenus"},"content":" getTags(\"classmates\"), getNotes(new Note[]{})),","lastModifiedDate":"2024-02-29"},{"lineNumber":61,"author":{"gitId":"-"},"content":" new Person(new Name(\"Roy Balakrishnan\"), new Phone(\"92624417\"), new Email(\"royb@example.com\"),","lastModifiedDate":"2017-04-05"},{"lineNumber":62,"author":{"gitId":"-"},"content":" new Address(\"Blk 45 Aljunied Street 85, #11-31\"),","lastModifiedDate":"2016-12-20"},{"lineNumber":63,"author":{"gitId":"joenus"},"content":" getTags(\"colleagues\"), getNotes(","lastModifiedDate":"2024-02-29"},{"lineNumber":64,"author":{"gitId":"joenus"},"content":" new Note[]{","lastModifiedDate":"2024-02-29"},{"lineNumber":65,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2023, 8, 16, 14, 45), new Description(\"Mental health consultation\")),","lastModifiedDate":"2024-02-29"},{"lineNumber":66,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 1, 28, 10, 15), new Description(\"Blood sugar review\")),","lastModifiedDate":"2024-02-29"},{"lineNumber":67,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 4, 5, 16, 0), new Description(\"Sore throat and fever\")),","lastModifiedDate":"2024-02-29"},{"lineNumber":68,"author":{"gitId":"joenus"},"content":" }))","lastModifiedDate":"2024-02-29"},{"lineNumber":69,"author":{"gitId":"-"},"content":" };","lastModifiedDate":"2016-12-20"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-20"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-20"},{"lineNumber":72,"author":{"gitId":"-"},"content":" public static ReadOnlyAddressBook getSampleAddressBook() {","lastModifiedDate":"2016-12-20"},{"lineNumber":73,"author":{"gitId":"-"},"content":" AddressBook sampleAb \u003d new AddressBook();","lastModifiedDate":"2017-04-07"},{"lineNumber":74,"author":{"gitId":"-"},"content":" for (Person samplePerson : getSamplePersons()) {","lastModifiedDate":"2016-12-20"},{"lineNumber":75,"author":{"gitId":"-"},"content":" sampleAb.addPerson(samplePerson);","lastModifiedDate":"2017-04-07"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-20"},{"lineNumber":77,"author":{"gitId":"-"},"content":" return sampleAb;","lastModifiedDate":"2017-04-07"},{"lineNumber":78,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-20"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-14"},{"lineNumber":80,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-03-14"},{"lineNumber":81,"author":{"gitId":"-"},"content":" * Returns a tag set containing the list of strings given.","lastModifiedDate":"2017-03-14"},{"lineNumber":82,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-03-14"},{"lineNumber":83,"author":{"gitId":"joenus"},"content":" public static Set\u003cTag\u003e getTags(String... strings) {","lastModifiedDate":"2024-02-29"},{"lineNumber":84,"author":{"gitId":"-"},"content":" return Arrays.stream(strings)","lastModifiedDate":"2018-01-21"},{"lineNumber":85,"author":{"gitId":"-"},"content":" .map(Tag::new)","lastModifiedDate":"2018-01-21"},{"lineNumber":86,"author":{"gitId":"-"},"content":" .collect(Collectors.toSet());","lastModifiedDate":"2018-01-21"},{"lineNumber":87,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-03-14"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-14"},{"lineNumber":89,"author":{"gitId":"joenus"},"content":" /**","lastModifiedDate":"2024-02-29"},{"lineNumber":90,"author":{"gitId":"joenus"},"content":" * Returns a note list containing the list of notes given.","lastModifiedDate":"2024-02-29"},{"lineNumber":91,"author":{"gitId":"joenus"},"content":" */","lastModifiedDate":"2024-02-29"},{"lineNumber":92,"author":{"gitId":"joenus"},"content":" public static ObservableList\u003cNote\u003e getNotes(Note[] notes) {","lastModifiedDate":"2024-02-29"},{"lineNumber":93,"author":{"gitId":"joenus"},"content":" return Arrays.stream(notes)","lastModifiedDate":"2024-02-29"},{"lineNumber":94,"author":{"gitId":"joenus"},"content":" .collect(Collectors.toCollection(FXCollections::observableArrayList));","lastModifiedDate":"2024-02-29"},{"lineNumber":95,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":97,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-12-20"}],"authorContributionMap":{"joenus":43,"-":54}},{"path":"src/main/java/seedu/address/storage/JsonAdapatedNote.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"joenus"},"content":"package seedu.address.storage;","lastModifiedDate":"2024-02-29"},{"lineNumber":2,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":3,"author":{"gitId":"joenus"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-02-29"},{"lineNumber":4,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":5,"author":{"gitId":"joenus"},"content":"import com.fasterxml.jackson.annotation.JsonCreator;","lastModifiedDate":"2024-02-29"},{"lineNumber":6,"author":{"gitId":"joenus"},"content":"import com.fasterxml.jackson.annotation.JsonProperty;","lastModifiedDate":"2024-02-29"},{"lineNumber":7,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":8,"author":{"gitId":"joenus"},"content":"import seedu.address.commons.exceptions.IllegalValueException;","lastModifiedDate":"2024-02-29"},{"lineNumber":9,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2024-02-29"},{"lineNumber":10,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Description;","lastModifiedDate":"2024-02-29"},{"lineNumber":11,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Note;","lastModifiedDate":"2024-02-29"},{"lineNumber":12,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":13,"author":{"gitId":"joenus"},"content":"/**","lastModifiedDate":"2024-02-29"},{"lineNumber":14,"author":{"gitId":"joenus"},"content":" * Jackson-friendly version of {@link Note}.","lastModifiedDate":"2024-02-29"},{"lineNumber":15,"author":{"gitId":"joenus"},"content":" */","lastModifiedDate":"2024-02-29"},{"lineNumber":16,"author":{"gitId":"joenus"},"content":"public class JsonAdapatedNote {","lastModifiedDate":"2024-02-29"},{"lineNumber":17,"author":{"gitId":"joenus"},"content":" public static final String MISSING_FIELD_MESSAGE_FORMAT \u003d \"Note\u0027s %s field is missing!\";","lastModifiedDate":"2024-02-29"},{"lineNumber":18,"author":{"gitId":"joenus"},"content":" private final LocalDateTime dateTime;","lastModifiedDate":"2024-02-29"},{"lineNumber":19,"author":{"gitId":"joenus"},"content":" private final String description;","lastModifiedDate":"2024-02-29"},{"lineNumber":20,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":21,"author":{"gitId":"joenus"},"content":" /**","lastModifiedDate":"2024-02-29"},{"lineNumber":22,"author":{"gitId":"joenus"},"content":" * Constructs a {@code JsonAdapatedNote} with the given parameters.","lastModifiedDate":"2024-02-29"},{"lineNumber":23,"author":{"gitId":"joenus"},"content":" */","lastModifiedDate":"2024-02-29"},{"lineNumber":24,"author":{"gitId":"joenus"},"content":" @JsonCreator","lastModifiedDate":"2024-02-29"},{"lineNumber":25,"author":{"gitId":"joenus"},"content":" public JsonAdapatedNote(@JsonProperty(\"dateTime\") LocalDateTime dateTime,","lastModifiedDate":"2024-02-29"},{"lineNumber":26,"author":{"gitId":"joenus"},"content":" @JsonProperty(\"description\") String description) {","lastModifiedDate":"2024-02-29"},{"lineNumber":27,"author":{"gitId":"joenus"},"content":" this.dateTime \u003d dateTime;","lastModifiedDate":"2024-02-29"},{"lineNumber":28,"author":{"gitId":"joenus"},"content":" this.description \u003d description;","lastModifiedDate":"2024-02-29"},{"lineNumber":29,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":30,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":31,"author":{"gitId":"joenus"},"content":" /**","lastModifiedDate":"2024-02-29"},{"lineNumber":32,"author":{"gitId":"joenus"},"content":" * Converts a given {@code Note} into this class for Jackson use.","lastModifiedDate":"2024-02-29"},{"lineNumber":33,"author":{"gitId":"joenus"},"content":" */","lastModifiedDate":"2024-02-29"},{"lineNumber":34,"author":{"gitId":"joenus"},"content":" public JsonAdapatedNote(Note source) {","lastModifiedDate":"2024-02-29"},{"lineNumber":35,"author":{"gitId":"joenus"},"content":" this.dateTime \u003d source.getDateTime();","lastModifiedDate":"2024-02-29"},{"lineNumber":36,"author":{"gitId":"joenus"},"content":" this.description \u003d source.getDescription().toString();","lastModifiedDate":"2024-02-29"},{"lineNumber":37,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":38,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":39,"author":{"gitId":"joenus"},"content":" /**","lastModifiedDate":"2024-02-29"},{"lineNumber":40,"author":{"gitId":"joenus"},"content":" * Converts this Jackson-friendly adapted tag object into the model\u0027s {@code Note} object.","lastModifiedDate":"2024-02-29"},{"lineNumber":41,"author":{"gitId":"joenus"},"content":" *","lastModifiedDate":"2024-02-29"},{"lineNumber":42,"author":{"gitId":"joenus"},"content":" * @throws IllegalValueException if there were any data constraints violated in the adapted tag.","lastModifiedDate":"2024-02-29"},{"lineNumber":43,"author":{"gitId":"joenus"},"content":" */","lastModifiedDate":"2024-02-29"},{"lineNumber":44,"author":{"gitId":"joenus"},"content":" public Note toModelType() throws IllegalValueException {","lastModifiedDate":"2024-02-29"},{"lineNumber":45,"author":{"gitId":"joenus"},"content":" if (this.description \u003d\u003d null) {","lastModifiedDate":"2024-02-29"},{"lineNumber":46,"author":{"gitId":"joenus"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Name.class.getSimpleName()));","lastModifiedDate":"2024-02-29"},{"lineNumber":47,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":48,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":49,"author":{"gitId":"joenus"},"content":" if (!Description.isValid(this.description)) {","lastModifiedDate":"2024-02-29"},{"lineNumber":50,"author":{"gitId":"joenus"},"content":" throw new IllegalValueException(Description.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-29"},{"lineNumber":51,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":52,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":53,"author":{"gitId":"joenus"},"content":" final Description description \u003d new Description(this.description);","lastModifiedDate":"2024-02-29"},{"lineNumber":54,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":55,"author":{"gitId":"joenus"},"content":" return new Note(dateTime, description);","lastModifiedDate":"2024-02-29"},{"lineNumber":56,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":57,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":58,"author":{"gitId":"joenus"},"content":"}","lastModifiedDate":"2024-02-29"}],"authorContributionMap":{"joenus":58}},{"path":"src/main/java/seedu/address/storage/JsonAdaptedPerson.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.storage;","lastModifiedDate":"2018-08-13"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.ArrayList;","lastModifiedDate":"2018-08-13"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.HashSet;","lastModifiedDate":"2018-08-13"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2018-08-13"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2018-08-13"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2018-08-13"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import com.fasterxml.jackson.annotation.JsonCreator;","lastModifiedDate":"2018-08-13"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import com.fasterxml.jackson.annotation.JsonProperty;","lastModifiedDate":"2018-08-13"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":12,"author":{"gitId":"joenus"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2024-02-29"},{"lineNumber":13,"author":{"gitId":"joenus"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2024-02-29"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.commons.exceptions.IllegalValueException;","lastModifiedDate":"2018-08-13"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2018-08-13"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2018-08-13"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2018-08-13"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-08-13"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2018-08-13"},{"lineNumber":20,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Note;","lastModifiedDate":"2024-02-29"},{"lineNumber":21,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.tag.Tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":23,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2018-08-13"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * Jackson-friendly version of {@link Person}.","lastModifiedDate":"2018-08-13"},{"lineNumber":25,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-13"},{"lineNumber":26,"author":{"gitId":"-"},"content":"class JsonAdaptedPerson {","lastModifiedDate":"2018-12-03"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":28,"author":{"gitId":"-"},"content":" public static final String MISSING_FIELD_MESSAGE_FORMAT \u003d \"Person\u0027s %s field is missing!\";","lastModifiedDate":"2018-08-13"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":30,"author":{"gitId":"-"},"content":" private final String name;","lastModifiedDate":"2018-08-13"},{"lineNumber":31,"author":{"gitId":"-"},"content":" private final String phone;","lastModifiedDate":"2018-08-13"},{"lineNumber":32,"author":{"gitId":"-"},"content":" private final String email;","lastModifiedDate":"2018-08-13"},{"lineNumber":33,"author":{"gitId":"-"},"content":" private final String address;","lastModifiedDate":"2018-08-13"},{"lineNumber":34,"author":{"gitId":"-"},"content":" private final List\u003cJsonAdaptedTag\u003e tags \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-01-09"},{"lineNumber":35,"author":{"gitId":"joenus"},"content":" private final List\u003cJsonAdapatedNote\u003e notes \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-02-29"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":37,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-13"},{"lineNumber":38,"author":{"gitId":"-"},"content":" * Constructs a {@code JsonAdaptedPerson} with the given person details.","lastModifiedDate":"2018-08-13"},{"lineNumber":39,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-13"},{"lineNumber":40,"author":{"gitId":"-"},"content":" @JsonCreator","lastModifiedDate":"2018-08-13"},{"lineNumber":41,"author":{"gitId":"-"},"content":" public JsonAdaptedPerson(@JsonProperty(\"name\") String name, @JsonProperty(\"phone\") String phone,","lastModifiedDate":"2018-08-13"},{"lineNumber":42,"author":{"gitId":"-"},"content":" @JsonProperty(\"email\") String email, @JsonProperty(\"address\") String address,","lastModifiedDate":"2018-08-13"},{"lineNumber":43,"author":{"gitId":"joenus"},"content":" @JsonProperty(\"tags\") List\u003cJsonAdaptedTag\u003e tags,","lastModifiedDate":"2024-02-29"},{"lineNumber":44,"author":{"gitId":"joenus"},"content":" @JsonProperty(\"notes\") List\u003cJsonAdapatedNote\u003e notes) {","lastModifiedDate":"2024-02-29"},{"lineNumber":45,"author":{"gitId":"-"},"content":" this.name \u003d name;","lastModifiedDate":"2018-08-13"},{"lineNumber":46,"author":{"gitId":"-"},"content":" this.phone \u003d phone;","lastModifiedDate":"2018-08-13"},{"lineNumber":47,"author":{"gitId":"-"},"content":" this.email \u003d email;","lastModifiedDate":"2018-08-13"},{"lineNumber":48,"author":{"gitId":"-"},"content":" this.address \u003d address;","lastModifiedDate":"2018-08-13"},{"lineNumber":49,"author":{"gitId":"-"},"content":" if (tags !\u003d null) {","lastModifiedDate":"2023-01-09"},{"lineNumber":50,"author":{"gitId":"-"},"content":" this.tags.addAll(tags);","lastModifiedDate":"2023-01-09"},{"lineNumber":51,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":52,"author":{"gitId":"joenus"},"content":" if (notes !\u003d null) {","lastModifiedDate":"2024-02-29"},{"lineNumber":53,"author":{"gitId":"joenus"},"content":" this.notes.addAll(notes);","lastModifiedDate":"2024-02-29"},{"lineNumber":54,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":57,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-13"},{"lineNumber":58,"author":{"gitId":"-"},"content":" * Converts a given {@code Person} into this class for Jackson use.","lastModifiedDate":"2018-08-13"},{"lineNumber":59,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-13"},{"lineNumber":60,"author":{"gitId":"-"},"content":" public JsonAdaptedPerson(Person source) {","lastModifiedDate":"2018-08-13"},{"lineNumber":61,"author":{"gitId":"-"},"content":" name \u003d source.getName().fullName;","lastModifiedDate":"2018-08-13"},{"lineNumber":62,"author":{"gitId":"-"},"content":" phone \u003d source.getPhone().value;","lastModifiedDate":"2018-08-13"},{"lineNumber":63,"author":{"gitId":"-"},"content":" email \u003d source.getEmail().value;","lastModifiedDate":"2018-08-13"},{"lineNumber":64,"author":{"gitId":"-"},"content":" address \u003d source.getAddress().value;","lastModifiedDate":"2018-08-13"},{"lineNumber":65,"author":{"gitId":"-"},"content":" tags.addAll(source.getTags().stream()","lastModifiedDate":"2023-01-09"},{"lineNumber":66,"author":{"gitId":"-"},"content":" .map(JsonAdaptedTag::new)","lastModifiedDate":"2018-08-13"},{"lineNumber":67,"author":{"gitId":"-"},"content":" .collect(Collectors.toList()));","lastModifiedDate":"2018-08-13"},{"lineNumber":68,"author":{"gitId":"joenus"},"content":" notes.addAll(source.getNotes().stream()","lastModifiedDate":"2024-02-29"},{"lineNumber":69,"author":{"gitId":"joenus"},"content":" .map(JsonAdapatedNote::new)","lastModifiedDate":"2024-02-29"},{"lineNumber":70,"author":{"gitId":"joenus"},"content":" .collect(Collectors.toList()));","lastModifiedDate":"2024-02-29"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":73,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-13"},{"lineNumber":74,"author":{"gitId":"-"},"content":" * Converts this Jackson-friendly adapted person object into the model\u0027s {@code Person} object.","lastModifiedDate":"2018-08-13"},{"lineNumber":75,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2018-08-13"},{"lineNumber":76,"author":{"gitId":"-"},"content":" * @throws IllegalValueException if there were any data constraints violated in the adapted person.","lastModifiedDate":"2018-08-13"},{"lineNumber":77,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-13"},{"lineNumber":78,"author":{"gitId":"-"},"content":" public Person toModelType() throws IllegalValueException {","lastModifiedDate":"2018-08-13"},{"lineNumber":79,"author":{"gitId":"joenus"},"content":" final List\u003cTag\u003e tags \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2024-02-29"},{"lineNumber":80,"author":{"gitId":"joenus"},"content":" for (JsonAdaptedTag tag : this.tags) {","lastModifiedDate":"2024-02-29"},{"lineNumber":81,"author":{"gitId":"joenus"},"content":" tags.add(tag.toModelType());","lastModifiedDate":"2024-02-29"},{"lineNumber":82,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":83,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":84,"author":{"gitId":"joenus"},"content":" final ObservableList\u003cNote\u003e notes \u003d FXCollections.observableArrayList();","lastModifiedDate":"2024-02-29"},{"lineNumber":85,"author":{"gitId":"joenus"},"content":" for (JsonAdapatedNote note : this.notes) {","lastModifiedDate":"2024-02-29"},{"lineNumber":86,"author":{"gitId":"joenus"},"content":" notes.add(note.toModelType());","lastModifiedDate":"2024-02-29"},{"lineNumber":87,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":89,"author":{"gitId":"-"},"content":" if (name \u003d\u003d null) {","lastModifiedDate":"2018-08-13"},{"lineNumber":90,"author":{"gitId":"-"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Name.class.getSimpleName()));","lastModifiedDate":"2018-08-13"},{"lineNumber":91,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":92,"author":{"gitId":"-"},"content":" if (!Name.isValidName(name)) {","lastModifiedDate":"2018-08-13"},{"lineNumber":93,"author":{"gitId":"-"},"content":" throw new IllegalValueException(Name.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-08-13"},{"lineNumber":94,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":95,"author":{"gitId":"-"},"content":" final Name modelName \u003d new Name(name);","lastModifiedDate":"2018-08-13"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":97,"author":{"gitId":"-"},"content":" if (phone \u003d\u003d null) {","lastModifiedDate":"2018-08-13"},{"lineNumber":98,"author":{"gitId":"-"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Phone.class.getSimpleName()));","lastModifiedDate":"2018-08-13"},{"lineNumber":99,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":100,"author":{"gitId":"-"},"content":" if (!Phone.isValidPhone(phone)) {","lastModifiedDate":"2018-08-13"},{"lineNumber":101,"author":{"gitId":"-"},"content":" throw new IllegalValueException(Phone.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-08-13"},{"lineNumber":102,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":103,"author":{"gitId":"-"},"content":" final Phone modelPhone \u003d new Phone(phone);","lastModifiedDate":"2018-08-13"},{"lineNumber":104,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":105,"author":{"gitId":"-"},"content":" if (email \u003d\u003d null) {","lastModifiedDate":"2018-08-13"},{"lineNumber":106,"author":{"gitId":"-"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Email.class.getSimpleName()));","lastModifiedDate":"2018-08-13"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":108,"author":{"gitId":"-"},"content":" if (!Email.isValidEmail(email)) {","lastModifiedDate":"2018-08-13"},{"lineNumber":109,"author":{"gitId":"-"},"content":" throw new IllegalValueException(Email.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-08-13"},{"lineNumber":110,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":111,"author":{"gitId":"-"},"content":" final Email modelEmail \u003d new Email(email);","lastModifiedDate":"2018-08-13"},{"lineNumber":112,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":113,"author":{"gitId":"-"},"content":" if (address \u003d\u003d null) {","lastModifiedDate":"2018-08-13"},{"lineNumber":114,"author":{"gitId":"-"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Address.class.getSimpleName()));","lastModifiedDate":"2018-08-13"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":116,"author":{"gitId":"-"},"content":" if (!Address.isValidAddress(address)) {","lastModifiedDate":"2018-08-13"},{"lineNumber":117,"author":{"gitId":"-"},"content":" throw new IllegalValueException(Address.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-08-13"},{"lineNumber":118,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":119,"author":{"gitId":"-"},"content":" final Address modelAddress \u003d new Address(address);","lastModifiedDate":"2018-08-13"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":121,"author":{"gitId":"joenus"},"content":" final Set\u003cTag\u003e modelTags \u003d new HashSet\u003c\u003e(tags);","lastModifiedDate":"2024-02-29"},{"lineNumber":122,"author":{"gitId":"joenus"},"content":" return new Person(modelName, modelPhone, modelEmail, modelAddress, modelTags, notes);","lastModifiedDate":"2024-02-29"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":124,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":125,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2018-08-13"}],"authorContributionMap":{"joenus":23,"-":102}},{"path":"src/main/java/seedu/address/storage/JsonAdaptedTag.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.storage;","lastModifiedDate":"2018-08-13"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import com.fasterxml.jackson.annotation.JsonCreator;","lastModifiedDate":"2018-08-13"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import com.fasterxml.jackson.annotation.JsonValue;","lastModifiedDate":"2018-08-13"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import seedu.address.commons.exceptions.IllegalValueException;","lastModifiedDate":"2018-08-13"},{"lineNumber":7,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.tag.Tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":9,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2018-08-13"},{"lineNumber":10,"author":{"gitId":"-"},"content":" * Jackson-friendly version of {@link Tag}.","lastModifiedDate":"2018-08-13"},{"lineNumber":11,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-13"},{"lineNumber":12,"author":{"gitId":"-"},"content":"class JsonAdaptedTag {","lastModifiedDate":"2018-12-03"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":14,"author":{"gitId":"-"},"content":" private final String tagName;","lastModifiedDate":"2018-08-13"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":16,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-13"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * Constructs a {@code JsonAdaptedTag} with the given {@code tagName}.","lastModifiedDate":"2018-08-13"},{"lineNumber":18,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-13"},{"lineNumber":19,"author":{"gitId":"-"},"content":" @JsonCreator","lastModifiedDate":"2018-08-13"},{"lineNumber":20,"author":{"gitId":"-"},"content":" public JsonAdaptedTag(String tagName) {","lastModifiedDate":"2018-08-13"},{"lineNumber":21,"author":{"gitId":"-"},"content":" this.tagName \u003d tagName;","lastModifiedDate":"2018-08-13"},{"lineNumber":22,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":24,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-13"},{"lineNumber":25,"author":{"gitId":"-"},"content":" * Converts a given {@code Tag} into this class for Jackson use.","lastModifiedDate":"2018-08-13"},{"lineNumber":26,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-13"},{"lineNumber":27,"author":{"gitId":"-"},"content":" public JsonAdaptedTag(Tag source) {","lastModifiedDate":"2018-08-13"},{"lineNumber":28,"author":{"gitId":"-"},"content":" tagName \u003d source.tagName;","lastModifiedDate":"2018-08-13"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":31,"author":{"gitId":"-"},"content":" @JsonValue","lastModifiedDate":"2018-08-13"},{"lineNumber":32,"author":{"gitId":"-"},"content":" public String getTagName() {","lastModifiedDate":"2018-08-13"},{"lineNumber":33,"author":{"gitId":"-"},"content":" return tagName;","lastModifiedDate":"2018-08-13"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":36,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-13"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * Converts this Jackson-friendly adapted tag object into the model\u0027s {@code Tag} object.","lastModifiedDate":"2018-08-13"},{"lineNumber":38,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2018-08-13"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * @throws IllegalValueException if there were any data constraints violated in the adapted tag.","lastModifiedDate":"2018-08-13"},{"lineNumber":40,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-13"},{"lineNumber":41,"author":{"gitId":"-"},"content":" public Tag toModelType() throws IllegalValueException {","lastModifiedDate":"2018-08-13"},{"lineNumber":42,"author":{"gitId":"-"},"content":" if (!Tag.isValidTagName(tagName)) {","lastModifiedDate":"2018-08-13"},{"lineNumber":43,"author":{"gitId":"-"},"content":" throw new IllegalValueException(Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-08-13"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":45,"author":{"gitId":"-"},"content":" return new Tag(tagName);","lastModifiedDate":"2018-08-13"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2018-08-13"}],"authorContributionMap":{"joenus":1,"-":47}},{"path":"src/test/java/seedu/address/logic/commands/CommandTestUtil.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.commands;","lastModifiedDate":"2017-06-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-03-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2019-03-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2017-07-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2017-07-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2017-07-05"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2017-07-05"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2017-07-05"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-23"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":12,"author":{"gitId":"joenus"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-02-29"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import java.util.ArrayList;","lastModifiedDate":"2017-06-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import java.util.Arrays;","lastModifiedDate":"2017-07-20"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2017-06-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2018-01-31"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.exceptions.CommandException;","lastModifiedDate":"2017-06-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.model.AddressBook;","lastModifiedDate":"2017-06-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.model.Model;","lastModifiedDate":"2017-06-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import seedu.address.model.person.NameContainsKeywordsPredicate;","lastModifiedDate":"2017-07-20"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-01-10"},{"lineNumber":23,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Description;","lastModifiedDate":"2024-02-29"},{"lineNumber":24,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Note;","lastModifiedDate":"2024-02-29"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import seedu.address.testutil.EditPersonDescriptorBuilder;","lastModifiedDate":"2017-07-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":27,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-06-05"},{"lineNumber":28,"author":{"gitId":"-"},"content":" * Contains helper methods for testing commands.","lastModifiedDate":"2017-06-05"},{"lineNumber":29,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-06-05"},{"lineNumber":30,"author":{"gitId":"-"},"content":"public class CommandTestUtil {","lastModifiedDate":"2017-06-05"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":" public static final String VALID_NAME_AMY \u003d \"Amy Bee\";","lastModifiedDate":"2017-07-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":" public static final String VALID_NAME_BOB \u003d \"Bob Choo\";","lastModifiedDate":"2017-07-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":" public static final String VALID_PHONE_AMY \u003d \"11111111\";","lastModifiedDate":"2017-07-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":" public static final String VALID_PHONE_BOB \u003d \"22222222\";","lastModifiedDate":"2017-07-05"},{"lineNumber":36,"author":{"gitId":"-"},"content":" public static final String VALID_EMAIL_AMY \u003d \"amy@example.com\";","lastModifiedDate":"2017-07-05"},{"lineNumber":37,"author":{"gitId":"-"},"content":" public static final String VALID_EMAIL_BOB \u003d \"bob@example.com\";","lastModifiedDate":"2017-07-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":" public static final String VALID_ADDRESS_AMY \u003d \"Block 312, Amy Street 1\";","lastModifiedDate":"2017-07-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":" public static final String VALID_ADDRESS_BOB \u003d \"Block 123, Bobby Street 3\";","lastModifiedDate":"2017-07-05"},{"lineNumber":40,"author":{"gitId":"-"},"content":" public static final String VALID_TAG_HUSBAND \u003d \"husband\";","lastModifiedDate":"2017-07-05"},{"lineNumber":41,"author":{"gitId":"-"},"content":" public static final String VALID_TAG_FRIEND \u003d \"friend\";","lastModifiedDate":"2017-07-05"},{"lineNumber":42,"author":{"gitId":"joenus"},"content":" public static final Note VALID_NOTE_FLU \u003d","lastModifiedDate":"2024-02-29"},{"lineNumber":43,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 2, 19, 21, 30), new Description(\"General Flu\"));","lastModifiedDate":"2024-02-29"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-05"},{"lineNumber":45,"author":{"gitId":"-"},"content":" public static final String NAME_DESC_AMY \u003d \" \" + PREFIX_NAME + VALID_NAME_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":46,"author":{"gitId":"-"},"content":" public static final String NAME_DESC_BOB \u003d \" \" + PREFIX_NAME + VALID_NAME_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":47,"author":{"gitId":"-"},"content":" public static final String PHONE_DESC_AMY \u003d \" \" + PREFIX_PHONE + VALID_PHONE_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":48,"author":{"gitId":"-"},"content":" public static final String PHONE_DESC_BOB \u003d \" \" + PREFIX_PHONE + VALID_PHONE_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":49,"author":{"gitId":"-"},"content":" public static final String EMAIL_DESC_AMY \u003d \" \" + PREFIX_EMAIL + VALID_EMAIL_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":50,"author":{"gitId":"-"},"content":" public static final String EMAIL_DESC_BOB \u003d \" \" + PREFIX_EMAIL + VALID_EMAIL_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":51,"author":{"gitId":"-"},"content":" public static final String ADDRESS_DESC_AMY \u003d \" \" + PREFIX_ADDRESS + VALID_ADDRESS_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":52,"author":{"gitId":"-"},"content":" public static final String ADDRESS_DESC_BOB \u003d \" \" + PREFIX_ADDRESS + VALID_ADDRESS_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":53,"author":{"gitId":"-"},"content":" public static final String TAG_DESC_FRIEND \u003d \" \" + PREFIX_TAG + VALID_TAG_FRIEND;","lastModifiedDate":"2017-07-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":" public static final String TAG_DESC_HUSBAND \u003d \" \" + PREFIX_TAG + VALID_TAG_HUSBAND;","lastModifiedDate":"2017-07-05"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-05"},{"lineNumber":56,"author":{"gitId":"-"},"content":" public static final String INVALID_NAME_DESC \u003d \" \" + PREFIX_NAME + \"James\u0026\"; // \u0027\u0026\u0027 not allowed in names","lastModifiedDate":"2017-07-05"},{"lineNumber":57,"author":{"gitId":"-"},"content":" public static final String INVALID_PHONE_DESC \u003d \" \" + PREFIX_PHONE + \"911a\"; // \u0027a\u0027 not allowed in phones","lastModifiedDate":"2017-07-05"},{"lineNumber":58,"author":{"gitId":"-"},"content":" public static final String INVALID_EMAIL_DESC \u003d \" \" + PREFIX_EMAIL + \"bob!yahoo\"; // missing \u0027@\u0027 symbol","lastModifiedDate":"2017-07-05"},{"lineNumber":59,"author":{"gitId":"-"},"content":" public static final String INVALID_ADDRESS_DESC \u003d \" \" + PREFIX_ADDRESS; // empty string not allowed for addresses","lastModifiedDate":"2017-07-05"},{"lineNumber":60,"author":{"gitId":"-"},"content":" public static final String INVALID_TAG_DESC \u003d \" \" + PREFIX_TAG + \"hubby*\"; // \u0027*\u0027 not allowed in tags","lastModifiedDate":"2017-07-05"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-05"},{"lineNumber":62,"author":{"gitId":"-"},"content":" public static final String PREAMBLE_WHITESPACE \u003d \"\\t \\r \\n\";","lastModifiedDate":"2017-12-23"},{"lineNumber":63,"author":{"gitId":"-"},"content":" public static final String PREAMBLE_NON_EMPTY \u003d \"NonEmptyPreamble\";","lastModifiedDate":"2017-12-23"},{"lineNumber":64,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-23"},{"lineNumber":65,"author":{"gitId":"-"},"content":" public static final EditCommand.EditPersonDescriptor DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":66,"author":{"gitId":"-"},"content":" public static final EditCommand.EditPersonDescriptor DESC_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-05"},{"lineNumber":68,"author":{"gitId":"-"},"content":" static {","lastModifiedDate":"2017-07-05"},{"lineNumber":69,"author":{"gitId":"-"},"content":" DESC_AMY \u003d new EditPersonDescriptorBuilder().withName(VALID_NAME_AMY)","lastModifiedDate":"2017-07-05"},{"lineNumber":70,"author":{"gitId":"-"},"content":" .withPhone(VALID_PHONE_AMY).withEmail(VALID_EMAIL_AMY).withAddress(VALID_ADDRESS_AMY)","lastModifiedDate":"2017-07-05"},{"lineNumber":71,"author":{"gitId":"-"},"content":" .withTags(VALID_TAG_FRIEND).build();","lastModifiedDate":"2017-07-05"},{"lineNumber":72,"author":{"gitId":"-"},"content":" DESC_BOB \u003d new EditPersonDescriptorBuilder().withName(VALID_NAME_BOB)","lastModifiedDate":"2017-07-05"},{"lineNumber":73,"author":{"gitId":"-"},"content":" .withPhone(VALID_PHONE_BOB).withEmail(VALID_EMAIL_BOB).withAddress(VALID_ADDRESS_BOB)","lastModifiedDate":"2017-07-05"},{"lineNumber":74,"author":{"gitId":"-"},"content":" .withTags(VALID_TAG_HUSBAND, VALID_TAG_FRIEND).build();","lastModifiedDate":"2017-07-05"},{"lineNumber":75,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-07-05"},{"lineNumber":76,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-05"},{"lineNumber":77,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-06-05"},{"lineNumber":78,"author":{"gitId":"-"},"content":" * Executes the given {@code command}, confirms that \u003cbr\u003e","lastModifiedDate":"2017-06-05"},{"lineNumber":79,"author":{"gitId":"-"},"content":" * - the returned {@link CommandResult} matches {@code expectedCommandResult} \u003cbr\u003e","lastModifiedDate":"2018-12-09"},{"lineNumber":80,"author":{"gitId":"-"},"content":" * - the {@code actualModel} matches {@code expectedModel}","lastModifiedDate":"2019-01-25"},{"lineNumber":81,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-06-05"},{"lineNumber":82,"author":{"gitId":"-"},"content":" public static void assertCommandSuccess(Command command, Model actualModel, CommandResult expectedCommandResult,","lastModifiedDate":"2019-01-25"},{"lineNumber":83,"author":{"gitId":"-"},"content":" Model expectedModel) {","lastModifiedDate":"2019-01-25"},{"lineNumber":84,"author":{"gitId":"-"},"content":" try {","lastModifiedDate":"2017-08-15"},{"lineNumber":85,"author":{"gitId":"-"},"content":" CommandResult result \u003d command.execute(actualModel);","lastModifiedDate":"2019-01-25"},{"lineNumber":86,"author":{"gitId":"-"},"content":" assertEquals(expectedCommandResult, result);","lastModifiedDate":"2018-12-09"},{"lineNumber":87,"author":{"gitId":"-"},"content":" assertEquals(expectedModel, actualModel);","lastModifiedDate":"2017-06-05"},{"lineNumber":88,"author":{"gitId":"-"},"content":" } catch (CommandException ce) {","lastModifiedDate":"2017-08-15"},{"lineNumber":89,"author":{"gitId":"-"},"content":" throw new AssertionError(\"Execution of command should not fail.\", ce);","lastModifiedDate":"2017-08-15"},{"lineNumber":90,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-08-15"},{"lineNumber":91,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-05"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":93,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-12-09"},{"lineNumber":94,"author":{"gitId":"-"},"content":" * Convenience wrapper to {@link #assertCommandSuccess(Command, Model, CommandResult, Model)}","lastModifiedDate":"2019-01-25"},{"lineNumber":95,"author":{"gitId":"-"},"content":" * that takes a string {@code expectedMessage}.","lastModifiedDate":"2018-12-09"},{"lineNumber":96,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-12-09"},{"lineNumber":97,"author":{"gitId":"-"},"content":" public static void assertCommandSuccess(Command command, Model actualModel, String expectedMessage,","lastModifiedDate":"2019-01-25"},{"lineNumber":98,"author":{"gitId":"-"},"content":" Model expectedModel) {","lastModifiedDate":"2019-01-25"},{"lineNumber":99,"author":{"gitId":"-"},"content":" CommandResult expectedCommandResult \u003d new CommandResult(expectedMessage);","lastModifiedDate":"2018-12-09"},{"lineNumber":100,"author":{"gitId":"-"},"content":" assertCommandSuccess(command, actualModel, expectedCommandResult, expectedModel);","lastModifiedDate":"2019-01-25"},{"lineNumber":101,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":102,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":103,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-06-05"},{"lineNumber":104,"author":{"gitId":"-"},"content":" * Executes the given {@code command}, confirms that \u003cbr\u003e","lastModifiedDate":"2017-06-05"},{"lineNumber":105,"author":{"gitId":"-"},"content":" * - a {@code CommandException} is thrown \u003cbr\u003e","lastModifiedDate":"2017-06-05"},{"lineNumber":106,"author":{"gitId":"-"},"content":" * - the CommandException message matches {@code expectedMessage} \u003cbr\u003e","lastModifiedDate":"2017-06-05"},{"lineNumber":107,"author":{"gitId":"-"},"content":" * - the address book, filtered person list and selected person in {@code actualModel} remain unchanged","lastModifiedDate":"2019-01-25"},{"lineNumber":108,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-06-05"},{"lineNumber":109,"author":{"gitId":"-"},"content":" public static void assertCommandFailure(Command command, Model actualModel, String expectedMessage) {","lastModifiedDate":"2019-01-25"},{"lineNumber":110,"author":{"gitId":"-"},"content":" // we are unable to defensively copy the model for comparison later, so we can","lastModifiedDate":"2017-06-05"},{"lineNumber":111,"author":{"gitId":"-"},"content":" // only do so by copying its components.","lastModifiedDate":"2017-06-05"},{"lineNumber":112,"author":{"gitId":"-"},"content":" AddressBook expectedAddressBook \u003d new AddressBook(actualModel.getAddressBook());","lastModifiedDate":"2017-06-05"},{"lineNumber":113,"author":{"gitId":"-"},"content":" List\u003cPerson\u003e expectedFilteredList \u003d new ArrayList\u003c\u003e(actualModel.getFilteredPersonList());","lastModifiedDate":"2018-01-10"},{"lineNumber":114,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":115,"author":{"gitId":"-"},"content":" assertThrows(CommandException.class, expectedMessage, () -\u003e command.execute(actualModel));","lastModifiedDate":"2019-05-03"},{"lineNumber":116,"author":{"gitId":"-"},"content":" assertEquals(expectedAddressBook, actualModel.getAddressBook());","lastModifiedDate":"2017-06-05"},{"lineNumber":117,"author":{"gitId":"-"},"content":" assertEquals(expectedFilteredList, actualModel.getFilteredPersonList());","lastModifiedDate":"2017-06-05"},{"lineNumber":118,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-05"},{"lineNumber":119,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":120,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-20"},{"lineNumber":121,"author":{"gitId":"-"},"content":" * Updates {@code model}\u0027s filtered list to show only the person at the given {@code targetIndex} in the","lastModifiedDate":"2018-01-31"},{"lineNumber":122,"author":{"gitId":"-"},"content":" * {@code model}\u0027s address book.","lastModifiedDate":"2018-01-31"},{"lineNumber":123,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-20"},{"lineNumber":124,"author":{"gitId":"-"},"content":" public static void showPersonAtIndex(Model model, Index targetIndex) {","lastModifiedDate":"2018-01-31"},{"lineNumber":125,"author":{"gitId":"-"},"content":" assertTrue(targetIndex.getZeroBased() \u003c model.getFilteredPersonList().size());","lastModifiedDate":"2018-01-31"},{"lineNumber":126,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-01-31"},{"lineNumber":127,"author":{"gitId":"-"},"content":" Person person \u003d model.getFilteredPersonList().get(targetIndex.getZeroBased());","lastModifiedDate":"2018-01-31"},{"lineNumber":128,"author":{"gitId":"-"},"content":" final String[] splitName \u003d person.getName().fullName.split(\"\\\\s+\");","lastModifiedDate":"2017-07-20"},{"lineNumber":129,"author":{"gitId":"-"},"content":" model.updateFilteredPersonList(new NameContainsKeywordsPredicate(Arrays.asList(splitName[0])));","lastModifiedDate":"2017-07-20"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-20"},{"lineNumber":131,"author":{"gitId":"-"},"content":" assertEquals(1, model.getFilteredPersonList().size());","lastModifiedDate":"2018-02-08"},{"lineNumber":132,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-07-20"},{"lineNumber":133,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":134,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-06-05"}],"authorContributionMap":{"joenus":6,"-":128}},{"path":"src/test/java/seedu/address/logic/commands/EditCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.commands;","lastModifiedDate":"2017-05-08"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-02-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2019-03-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2019-03-15"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.DESC_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND;","lastModifiedDate":"2017-07-05"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.assertCommandFailure;","lastModifiedDate":"2017-07-05"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.assertCommandSuccess;","lastModifiedDate":"2017-07-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.showPersonAtIndex;","lastModifiedDate":"2018-01-31"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON;","lastModifiedDate":"2017-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalIndexes.INDEX_SECOND_PERSON;","lastModifiedDate":"2017-08-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook;","lastModifiedDate":"2017-07-19"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2017-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import seedu.address.logic.Messages;","lastModifiedDate":"2023-07-13"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand.EditPersonDescriptor;","lastModifiedDate":"2017-05-08"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import seedu.address.model.AddressBook;","lastModifiedDate":"2017-05-04"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import seedu.address.model.Model;","lastModifiedDate":"2017-05-04"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import seedu.address.model.ModelManager;","lastModifiedDate":"2017-05-04"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import seedu.address.model.UserPrefs;","lastModifiedDate":"2017-05-04"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2017-05-04"},{"lineNumber":28,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Note;","lastModifiedDate":"2024-03-01"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import seedu.address.testutil.EditPersonDescriptorBuilder;","lastModifiedDate":"2017-05-22"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import seedu.address.testutil.PersonBuilder;","lastModifiedDate":"2017-05-04"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":32,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-05-04"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * Contains integration tests (interaction with the Model) and unit tests for EditCommand.","lastModifiedDate":"2020-12-16"},{"lineNumber":34,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-04"},{"lineNumber":35,"author":{"gitId":"-"},"content":"public class EditCommandTest {","lastModifiedDate":"2017-05-08"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":37,"author":{"gitId":"-"},"content":" private Model model \u003d new ModelManager(getTypicalAddressBook(), new UserPrefs());","lastModifiedDate":"2017-07-19"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":39,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":40,"author":{"gitId":"-"},"content":" public void execute_allFieldsSpecifiedUnfilteredList_success() {","lastModifiedDate":"2018-08-07"},{"lineNumber":41,"author":{"gitId":"joenus"},"content":" PersonBuilder builder \u003d new PersonBuilder();","lastModifiedDate":"2024-03-01"},{"lineNumber":42,"author":{"gitId":"joenus"},"content":" // We must include notes, as notes can\u0027t be modified by the edit command.","lastModifiedDate":"2024-03-01"},{"lineNumber":43,"author":{"gitId":"joenus"},"content":" builder.withNotes(model.getFilteredPersonList().get(0).getNotes().toArray(new Note[0]));","lastModifiedDate":"2024-03-01"},{"lineNumber":44,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":45,"author":{"gitId":"joenus"},"content":" Person editedPerson \u003d builder.build();","lastModifiedDate":"2024-03-01"},{"lineNumber":46,"author":{"gitId":"-"},"content":" EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder(editedPerson).build();","lastModifiedDate":"2017-06-05"},{"lineNumber":47,"author":{"gitId":"-"},"content":" EditCommand editCommand \u003d new EditCommand(INDEX_FIRST_PERSON, descriptor);","lastModifiedDate":"2018-08-08"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":49,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(EditCommand.MESSAGE_EDIT_PERSON_SUCCESS, Messages.format(editedPerson));","lastModifiedDate":"2019-02-23"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":51,"author":{"gitId":"-"},"content":" Model expectedModel \u003d new ModelManager(new AddressBook(model.getAddressBook()), new UserPrefs());","lastModifiedDate":"2017-06-05"},{"lineNumber":52,"author":{"gitId":"-"},"content":" expectedModel.setPerson(model.getFilteredPersonList().get(0), editedPerson);","lastModifiedDate":"2018-08-17"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":54,"author":{"gitId":"-"},"content":" assertCommandSuccess(editCommand, model, expectedMessage, expectedModel);","lastModifiedDate":"2019-01-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":57,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":58,"author":{"gitId":"-"},"content":" public void execute_someFieldsSpecifiedUnfilteredList_success() {","lastModifiedDate":"2018-08-07"},{"lineNumber":59,"author":{"gitId":"-"},"content":" Index indexLastPerson \u003d Index.fromOneBased(model.getFilteredPersonList().size());","lastModifiedDate":"2017-05-18"},{"lineNumber":60,"author":{"gitId":"-"},"content":" Person lastPerson \u003d model.getFilteredPersonList().get(indexLastPerson.getZeroBased());","lastModifiedDate":"2018-01-10"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":62,"author":{"gitId":"-"},"content":" PersonBuilder personInList \u003d new PersonBuilder(lastPerson);","lastModifiedDate":"2017-05-18"},{"lineNumber":63,"author":{"gitId":"-"},"content":" Person editedPerson \u003d personInList.withName(VALID_NAME_BOB).withPhone(VALID_PHONE_BOB)","lastModifiedDate":"2017-05-18"},{"lineNumber":64,"author":{"gitId":"-"},"content":" .withTags(VALID_TAG_HUSBAND).build();","lastModifiedDate":"2017-05-18"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":66,"author":{"gitId":"-"},"content":" EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder().withName(VALID_NAME_BOB)","lastModifiedDate":"2017-05-18"},{"lineNumber":67,"author":{"gitId":"-"},"content":" .withPhone(VALID_PHONE_BOB).withTags(VALID_TAG_HUSBAND).build();","lastModifiedDate":"2017-05-18"},{"lineNumber":68,"author":{"gitId":"-"},"content":" EditCommand editCommand \u003d new EditCommand(indexLastPerson, descriptor);","lastModifiedDate":"2018-08-08"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":70,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(EditCommand.MESSAGE_EDIT_PERSON_SUCCESS, Messages.format(editedPerson));","lastModifiedDate":"2019-02-23"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":72,"author":{"gitId":"-"},"content":" Model expectedModel \u003d new ModelManager(new AddressBook(model.getAddressBook()), new UserPrefs());","lastModifiedDate":"2017-05-18"},{"lineNumber":73,"author":{"gitId":"-"},"content":" expectedModel.setPerson(lastPerson, editedPerson);","lastModifiedDate":"2018-08-17"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":75,"author":{"gitId":"-"},"content":" assertCommandSuccess(editCommand, model, expectedMessage, expectedModel);","lastModifiedDate":"2019-01-25"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-18"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":78,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-18"},{"lineNumber":79,"author":{"gitId":"-"},"content":" public void execute_noFieldSpecifiedUnfilteredList_success() {","lastModifiedDate":"2017-08-15"},{"lineNumber":80,"author":{"gitId":"-"},"content":" EditCommand editCommand \u003d new EditCommand(INDEX_FIRST_PERSON, new EditPersonDescriptor());","lastModifiedDate":"2018-08-08"},{"lineNumber":81,"author":{"gitId":"-"},"content":" Person editedPerson \u003d model.getFilteredPersonList().get(INDEX_FIRST_PERSON.getZeroBased());","lastModifiedDate":"2018-01-10"},{"lineNumber":82,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":83,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(EditCommand.MESSAGE_EDIT_PERSON_SUCCESS, Messages.format(editedPerson));","lastModifiedDate":"2019-02-23"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":85,"author":{"gitId":"-"},"content":" Model expectedModel \u003d new ModelManager(new AddressBook(model.getAddressBook()), new UserPrefs());","lastModifiedDate":"2017-05-18"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":87,"author":{"gitId":"-"},"content":" assertCommandSuccess(editCommand, model, expectedMessage, expectedModel);","lastModifiedDate":"2019-01-25"},{"lineNumber":88,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-18"},{"lineNumber":89,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":90,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-18"},{"lineNumber":91,"author":{"gitId":"-"},"content":" public void execute_filteredList_success() {","lastModifiedDate":"2018-08-07"},{"lineNumber":92,"author":{"gitId":"-"},"content":" showPersonAtIndex(model, INDEX_FIRST_PERSON);","lastModifiedDate":"2018-01-31"},{"lineNumber":93,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":94,"author":{"gitId":"-"},"content":" Person personInFilteredList \u003d model.getFilteredPersonList().get(INDEX_FIRST_PERSON.getZeroBased());","lastModifiedDate":"2018-01-10"},{"lineNumber":95,"author":{"gitId":"-"},"content":" Person editedPerson \u003d new PersonBuilder(personInFilteredList).withName(VALID_NAME_BOB).build();","lastModifiedDate":"2017-05-18"},{"lineNumber":96,"author":{"gitId":"-"},"content":" EditCommand editCommand \u003d new EditCommand(INDEX_FIRST_PERSON,","lastModifiedDate":"2018-08-08"},{"lineNumber":97,"author":{"gitId":"-"},"content":" new EditPersonDescriptorBuilder().withName(VALID_NAME_BOB).build());","lastModifiedDate":"2017-05-18"},{"lineNumber":98,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":99,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(EditCommand.MESSAGE_EDIT_PERSON_SUCCESS, Messages.format(editedPerson));","lastModifiedDate":"2019-02-23"},{"lineNumber":100,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":101,"author":{"gitId":"-"},"content":" Model expectedModel \u003d new ModelManager(new AddressBook(model.getAddressBook()), new UserPrefs());","lastModifiedDate":"2017-05-18"},{"lineNumber":102,"author":{"gitId":"-"},"content":" expectedModel.setPerson(model.getFilteredPersonList().get(0), editedPerson);","lastModifiedDate":"2018-08-17"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":104,"author":{"gitId":"-"},"content":" assertCommandSuccess(editCommand, model, expectedMessage, expectedModel);","lastModifiedDate":"2019-01-25"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-18"},{"lineNumber":106,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":107,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-18"},{"lineNumber":108,"author":{"gitId":"-"},"content":" public void execute_duplicatePersonUnfilteredList_failure() {","lastModifiedDate":"2017-08-15"},{"lineNumber":109,"author":{"gitId":"-"},"content":" Person firstPerson \u003d model.getFilteredPersonList().get(INDEX_FIRST_PERSON.getZeroBased());","lastModifiedDate":"2018-01-10"},{"lineNumber":110,"author":{"gitId":"-"},"content":" EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder(firstPerson).build();","lastModifiedDate":"2017-06-05"},{"lineNumber":111,"author":{"gitId":"-"},"content":" EditCommand editCommand \u003d new EditCommand(INDEX_SECOND_PERSON, descriptor);","lastModifiedDate":"2018-08-08"},{"lineNumber":112,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":113,"author":{"gitId":"-"},"content":" assertCommandFailure(editCommand, model, EditCommand.MESSAGE_DUPLICATE_PERSON);","lastModifiedDate":"2019-01-25"},{"lineNumber":114,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":115,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":116,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":117,"author":{"gitId":"-"},"content":" public void execute_duplicatePersonFilteredList_failure() {","lastModifiedDate":"2017-08-15"},{"lineNumber":118,"author":{"gitId":"-"},"content":" showPersonAtIndex(model, INDEX_FIRST_PERSON);","lastModifiedDate":"2018-01-31"},{"lineNumber":119,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":120,"author":{"gitId":"-"},"content":" // edit person in filtered list into a duplicate in address book","lastModifiedDate":"2017-05-18"},{"lineNumber":121,"author":{"gitId":"-"},"content":" Person personInList \u003d model.getAddressBook().getPersonList().get(INDEX_SECOND_PERSON.getZeroBased());","lastModifiedDate":"2018-01-10"},{"lineNumber":122,"author":{"gitId":"-"},"content":" EditCommand editCommand \u003d new EditCommand(INDEX_FIRST_PERSON,","lastModifiedDate":"2018-08-08"},{"lineNumber":123,"author":{"gitId":"-"},"content":" new EditPersonDescriptorBuilder(personInList).build());","lastModifiedDate":"2017-05-18"},{"lineNumber":124,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":125,"author":{"gitId":"-"},"content":" assertCommandFailure(editCommand, model, EditCommand.MESSAGE_DUPLICATE_PERSON);","lastModifiedDate":"2019-01-25"},{"lineNumber":126,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-18"},{"lineNumber":127,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":128,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-18"},{"lineNumber":129,"author":{"gitId":"-"},"content":" public void execute_invalidPersonIndexUnfilteredList_failure() {","lastModifiedDate":"2017-08-15"},{"lineNumber":130,"author":{"gitId":"-"},"content":" Index outOfBoundIndex \u003d Index.fromOneBased(model.getFilteredPersonList().size() + 1);","lastModifiedDate":"2017-05-18"},{"lineNumber":131,"author":{"gitId":"-"},"content":" EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder().withName(VALID_NAME_BOB).build();","lastModifiedDate":"2017-05-22"},{"lineNumber":132,"author":{"gitId":"-"},"content":" EditCommand editCommand \u003d new EditCommand(outOfBoundIndex, descriptor);","lastModifiedDate":"2018-08-08"},{"lineNumber":133,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":134,"author":{"gitId":"-"},"content":" assertCommandFailure(editCommand, model, Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX);","lastModifiedDate":"2019-01-25"},{"lineNumber":135,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":137,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-18"},{"lineNumber":138,"author":{"gitId":"-"},"content":" * Edit filtered list where index is larger than size of filtered list,","lastModifiedDate":"2017-05-18"},{"lineNumber":139,"author":{"gitId":"-"},"content":" * but smaller than size of address book","lastModifiedDate":"2017-05-18"},{"lineNumber":140,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-18"},{"lineNumber":141,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-18"},{"lineNumber":142,"author":{"gitId":"-"},"content":" public void execute_invalidPersonIndexFilteredList_failure() {","lastModifiedDate":"2017-08-15"},{"lineNumber":143,"author":{"gitId":"-"},"content":" showPersonAtIndex(model, INDEX_FIRST_PERSON);","lastModifiedDate":"2018-01-31"},{"lineNumber":144,"author":{"gitId":"-"},"content":" Index outOfBoundIndex \u003d INDEX_SECOND_PERSON;","lastModifiedDate":"2017-05-18"},{"lineNumber":145,"author":{"gitId":"-"},"content":" // ensures that outOfBoundIndex is still in bounds of address book list","lastModifiedDate":"2017-05-18"},{"lineNumber":146,"author":{"gitId":"-"},"content":" assertTrue(outOfBoundIndex.getZeroBased() \u003c model.getAddressBook().getPersonList().size());","lastModifiedDate":"2017-05-18"},{"lineNumber":147,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":148,"author":{"gitId":"-"},"content":" EditCommand editCommand \u003d new EditCommand(outOfBoundIndex,","lastModifiedDate":"2018-08-08"},{"lineNumber":149,"author":{"gitId":"-"},"content":" new EditPersonDescriptorBuilder().withName(VALID_NAME_BOB).build());","lastModifiedDate":"2017-05-18"},{"lineNumber":150,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":151,"author":{"gitId":"-"},"content":" assertCommandFailure(editCommand, model, Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX);","lastModifiedDate":"2019-01-25"},{"lineNumber":152,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-18"},{"lineNumber":153,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-18"},{"lineNumber":154,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-01-23"},{"lineNumber":155,"author":{"gitId":"-"},"content":" public void equals() {","lastModifiedDate":"2018-08-08"},{"lineNumber":156,"author":{"gitId":"-"},"content":" final EditCommand standardCommand \u003d new EditCommand(INDEX_FIRST_PERSON, DESC_AMY);","lastModifiedDate":"2018-08-08"},{"lineNumber":157,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":158,"author":{"gitId":"-"},"content":" // same values -\u003e returns true","lastModifiedDate":"2017-05-08"},{"lineNumber":159,"author":{"gitId":"-"},"content":" EditPersonDescriptor copyDescriptor \u003d new EditPersonDescriptor(DESC_AMY);","lastModifiedDate":"2017-05-08"},{"lineNumber":160,"author":{"gitId":"-"},"content":" EditCommand commandWithSameValues \u003d new EditCommand(INDEX_FIRST_PERSON, copyDescriptor);","lastModifiedDate":"2018-08-08"},{"lineNumber":161,"author":{"gitId":"-"},"content":" assertTrue(standardCommand.equals(commandWithSameValues));","lastModifiedDate":"2017-05-08"},{"lineNumber":162,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":163,"author":{"gitId":"-"},"content":" // same object -\u003e returns true","lastModifiedDate":"2017-05-08"},{"lineNumber":164,"author":{"gitId":"-"},"content":" assertTrue(standardCommand.equals(standardCommand));","lastModifiedDate":"2017-05-08"},{"lineNumber":165,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":166,"author":{"gitId":"-"},"content":" // null -\u003e returns false","lastModifiedDate":"2017-05-08"},{"lineNumber":167,"author":{"gitId":"-"},"content":" assertFalse(standardCommand.equals(null));","lastModifiedDate":"2017-05-08"},{"lineNumber":168,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":169,"author":{"gitId":"-"},"content":" // different types -\u003e returns false","lastModifiedDate":"2017-05-08"},{"lineNumber":170,"author":{"gitId":"-"},"content":" assertFalse(standardCommand.equals(new ClearCommand()));","lastModifiedDate":"2017-05-08"},{"lineNumber":171,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":172,"author":{"gitId":"-"},"content":" // different index -\u003e returns false","lastModifiedDate":"2017-05-08"},{"lineNumber":173,"author":{"gitId":"-"},"content":" assertFalse(standardCommand.equals(new EditCommand(INDEX_SECOND_PERSON, DESC_AMY)));","lastModifiedDate":"2017-05-25"},{"lineNumber":174,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":175,"author":{"gitId":"-"},"content":" // different descriptor -\u003e returns false","lastModifiedDate":"2017-05-08"},{"lineNumber":176,"author":{"gitId":"-"},"content":" assertFalse(standardCommand.equals(new EditCommand(INDEX_FIRST_PERSON, DESC_BOB)));","lastModifiedDate":"2017-05-25"},{"lineNumber":177,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-08"},{"lineNumber":178,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":179,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2019-02-23"},{"lineNumber":180,"author":{"gitId":"-"},"content":" public void toStringMethod() {","lastModifiedDate":"2019-02-23"},{"lineNumber":181,"author":{"gitId":"-"},"content":" Index index \u003d Index.fromOneBased(1);","lastModifiedDate":"2019-02-23"},{"lineNumber":182,"author":{"gitId":"-"},"content":" EditPersonDescriptor editPersonDescriptor \u003d new EditPersonDescriptor();","lastModifiedDate":"2019-02-23"},{"lineNumber":183,"author":{"gitId":"-"},"content":" EditCommand editCommand \u003d new EditCommand(index, editPersonDescriptor);","lastModifiedDate":"2019-02-23"},{"lineNumber":184,"author":{"gitId":"-"},"content":" String expected \u003d EditCommand.class.getCanonicalName() + \"{index\u003d\" + index + \", editPersonDescriptor\u003d\"","lastModifiedDate":"2019-02-23"},{"lineNumber":185,"author":{"gitId":"-"},"content":" + editPersonDescriptor + \"}\";","lastModifiedDate":"2019-02-23"},{"lineNumber":186,"author":{"gitId":"-"},"content":" assertEquals(expected, editCommand.toString());","lastModifiedDate":"2019-02-23"},{"lineNumber":187,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":188,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":189,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-05-08"}],"authorContributionMap":{"joenus":6,"-":183}},{"path":"src/test/java/seedu/address/logic/commands/EditPersonDescriptorTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.commands;","lastModifiedDate":"2017-05-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-02-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2019-03-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2019-03-15"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.DESC_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND;","lastModifiedDate":"2017-07-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand.EditPersonDescriptor;","lastModifiedDate":"2017-05-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.testutil.EditPersonDescriptorBuilder;","lastModifiedDate":"2017-05-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"public class EditPersonDescriptorTest {","lastModifiedDate":"2017-05-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":" public void equals() {","lastModifiedDate":"2017-08-15"},{"lineNumber":23,"author":{"gitId":"-"},"content":" // same values -\u003e returns true","lastModifiedDate":"2017-05-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":" EditPersonDescriptor descriptorWithSameValues \u003d new EditPersonDescriptor(DESC_AMY);","lastModifiedDate":"2017-05-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":" assertTrue(DESC_AMY.equals(descriptorWithSameValues));","lastModifiedDate":"2017-05-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":27,"author":{"gitId":"-"},"content":" // same object -\u003e returns true","lastModifiedDate":"2017-05-05"},{"lineNumber":28,"author":{"gitId":"-"},"content":" assertTrue(DESC_AMY.equals(DESC_AMY));","lastModifiedDate":"2017-05-05"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":30,"author":{"gitId":"-"},"content":" // null -\u003e returns false","lastModifiedDate":"2017-05-05"},{"lineNumber":31,"author":{"gitId":"-"},"content":" assertFalse(DESC_AMY.equals(null));","lastModifiedDate":"2017-05-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":" // different types -\u003e returns false","lastModifiedDate":"2017-05-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":" assertFalse(DESC_AMY.equals(5));","lastModifiedDate":"2017-05-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":36,"author":{"gitId":"-"},"content":" // different values -\u003e returns false","lastModifiedDate":"2017-05-05"},{"lineNumber":37,"author":{"gitId":"-"},"content":" assertFalse(DESC_AMY.equals(DESC_BOB));","lastModifiedDate":"2017-05-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":" // different name -\u003e returns false","lastModifiedDate":"2017-05-05"},{"lineNumber":40,"author":{"gitId":"-"},"content":" EditPersonDescriptor editedAmy \u003d new EditPersonDescriptorBuilder(DESC_AMY).withName(VALID_NAME_BOB).build();","lastModifiedDate":"2017-05-05"},{"lineNumber":41,"author":{"gitId":"-"},"content":" assertFalse(DESC_AMY.equals(editedAmy));","lastModifiedDate":"2017-05-05"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":" // different phone -\u003e returns false","lastModifiedDate":"2017-05-05"},{"lineNumber":44,"author":{"gitId":"-"},"content":" editedAmy \u003d new EditPersonDescriptorBuilder(DESC_AMY).withPhone(VALID_PHONE_BOB).build();","lastModifiedDate":"2017-05-05"},{"lineNumber":45,"author":{"gitId":"-"},"content":" assertFalse(DESC_AMY.equals(editedAmy));","lastModifiedDate":"2017-05-05"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":47,"author":{"gitId":"-"},"content":" // different email -\u003e returns false","lastModifiedDate":"2017-05-05"},{"lineNumber":48,"author":{"gitId":"-"},"content":" editedAmy \u003d new EditPersonDescriptorBuilder(DESC_AMY).withEmail(VALID_EMAIL_BOB).build();","lastModifiedDate":"2017-05-05"},{"lineNumber":49,"author":{"gitId":"-"},"content":" assertFalse(DESC_AMY.equals(editedAmy));","lastModifiedDate":"2017-05-05"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":51,"author":{"gitId":"-"},"content":" // different address -\u003e returns false","lastModifiedDate":"2017-05-05"},{"lineNumber":52,"author":{"gitId":"-"},"content":" editedAmy \u003d new EditPersonDescriptorBuilder(DESC_AMY).withAddress(VALID_ADDRESS_BOB).build();","lastModifiedDate":"2017-05-05"},{"lineNumber":53,"author":{"gitId":"-"},"content":" assertFalse(DESC_AMY.equals(editedAmy));","lastModifiedDate":"2017-05-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":55,"author":{"gitId":"-"},"content":" // different tags -\u003e returns false","lastModifiedDate":"2017-05-05"},{"lineNumber":56,"author":{"gitId":"-"},"content":" editedAmy \u003d new EditPersonDescriptorBuilder(DESC_AMY).withTags(VALID_TAG_HUSBAND).build();","lastModifiedDate":"2017-05-05"},{"lineNumber":57,"author":{"gitId":"-"},"content":" assertFalse(DESC_AMY.equals(editedAmy));","lastModifiedDate":"2017-05-05"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":60,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2019-02-23"},{"lineNumber":61,"author":{"gitId":"-"},"content":" public void toStringMethod() {","lastModifiedDate":"2019-02-23"},{"lineNumber":62,"author":{"gitId":"-"},"content":" EditPersonDescriptor editPersonDescriptor \u003d new EditPersonDescriptor();","lastModifiedDate":"2019-02-23"},{"lineNumber":63,"author":{"gitId":"-"},"content":" String expected \u003d EditPersonDescriptor.class.getCanonicalName() + \"{name\u003d\"","lastModifiedDate":"2019-02-23"},{"lineNumber":64,"author":{"gitId":"-"},"content":" + editPersonDescriptor.getName().orElse(null) + \", phone\u003d\"","lastModifiedDate":"2019-02-23"},{"lineNumber":65,"author":{"gitId":"-"},"content":" + editPersonDescriptor.getPhone().orElse(null) + \", email\u003d\"","lastModifiedDate":"2019-02-23"},{"lineNumber":66,"author":{"gitId":"-"},"content":" + editPersonDescriptor.getEmail().orElse(null) + \", address\u003d\"","lastModifiedDate":"2019-02-23"},{"lineNumber":67,"author":{"gitId":"-"},"content":" + editPersonDescriptor.getAddress().orElse(null) + \", tags\u003d\"","lastModifiedDate":"2019-02-23"},{"lineNumber":68,"author":{"gitId":"-"},"content":" + editPersonDescriptor.getTags().orElse(null) + \"}\";","lastModifiedDate":"2019-02-23"},{"lineNumber":69,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":70,"author":{"gitId":"-"},"content":" assertEquals(expected, editPersonDescriptor.toString());","lastModifiedDate":"2019-02-23"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":72,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-05-05"}],"authorContributionMap":{"joenus":1,"-":71}},{"path":"src/test/java/seedu/address/logic/parser/AddCommandParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-06-15"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-07-13"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.ADDRESS_DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.ADDRESS_DESC_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.EMAIL_DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.EMAIL_DESC_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_ADDRESS_DESC;","lastModifiedDate":"2017-07-05"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_EMAIL_DESC;","lastModifiedDate":"2017-07-05"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_NAME_DESC;","lastModifiedDate":"2017-07-05"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_PHONE_DESC;","lastModifiedDate":"2017-07-05"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_TAG_DESC;","lastModifiedDate":"2017-07-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.NAME_DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.NAME_DESC_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.PHONE_DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.PHONE_DESC_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.PREAMBLE_NON_EMPTY;","lastModifiedDate":"2017-12-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.PREAMBLE_WHITESPACE;","lastModifiedDate":"2017-12-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.TAG_DESC_FRIEND;","lastModifiedDate":"2017-07-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.TAG_DESC_HUSBAND;","lastModifiedDate":"2017-07-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_FRIEND;","lastModifiedDate":"2017-07-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND;","lastModifiedDate":"2017-07-05"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2023-07-14"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2023-07-14"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2023-07-14"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2023-07-14"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CommandParserTestUtil.assertParseFailure;","lastModifiedDate":"2017-07-06"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CommandParserTestUtil.assertParseSuccess;","lastModifiedDate":"2017-07-06"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.AMY;","lastModifiedDate":"2018-07-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.BOB;","lastModifiedDate":"2018-07-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":36,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":38,"author":{"gitId":"-"},"content":"import seedu.address.logic.Messages;","lastModifiedDate":"2023-07-14"},{"lineNumber":39,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.AddCommand;","lastModifiedDate":"2017-06-15"},{"lineNumber":40,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2017-06-15"},{"lineNumber":41,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2017-06-15"},{"lineNumber":42,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2017-06-15"},{"lineNumber":43,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2017-06-15"},{"lineNumber":44,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2017-06-15"},{"lineNumber":45,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.tag.Tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":46,"author":{"gitId":"-"},"content":"import seedu.address.testutil.PersonBuilder;","lastModifiedDate":"2017-06-15"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":48,"author":{"gitId":"-"},"content":"public class AddCommandParserTest {","lastModifiedDate":"2017-06-15"},{"lineNumber":49,"author":{"gitId":"-"},"content":" private AddCommandParser parser \u003d new AddCommandParser();","lastModifiedDate":"2017-06-15"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":51,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-15"},{"lineNumber":52,"author":{"gitId":"-"},"content":" public void parse_allFieldsPresent_success() {","lastModifiedDate":"2017-08-15"},{"lineNumber":53,"author":{"gitId":"-"},"content":" Person expectedPerson \u003d new PersonBuilder(BOB).withTags(VALID_TAG_FRIEND).build();","lastModifiedDate":"2018-07-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":55,"author":{"gitId":"-"},"content":" // whitespace only preamble","lastModifiedDate":"2017-12-23"},{"lineNumber":56,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, PREAMBLE_WHITESPACE + NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB","lastModifiedDate":"2017-12-23"},{"lineNumber":57,"author":{"gitId":"-"},"content":" + ADDRESS_DESC_BOB + TAG_DESC_FRIEND, new AddCommand(expectedPerson));","lastModifiedDate":"2017-12-23"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-23"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":60,"author":{"gitId":"-"},"content":" // multiple tags - all accepted","lastModifiedDate":"2017-06-15"},{"lineNumber":61,"author":{"gitId":"-"},"content":" Person expectedPersonMultipleTags \u003d new PersonBuilder(BOB).withTags(VALID_TAG_FRIEND, VALID_TAG_HUSBAND)","lastModifiedDate":"2018-07-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" .build();","lastModifiedDate":"2018-07-25"},{"lineNumber":63,"author":{"gitId":"-"},"content":" assertParseSuccess(parser,","lastModifiedDate":"2023-07-14"},{"lineNumber":64,"author":{"gitId":"-"},"content":" NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + ADDRESS_DESC_BOB + TAG_DESC_HUSBAND + TAG_DESC_FRIEND,","lastModifiedDate":"2023-07-14"},{"lineNumber":65,"author":{"gitId":"-"},"content":" new AddCommand(expectedPersonMultipleTags));","lastModifiedDate":"2023-07-14"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-14"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":68,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-07-14"},{"lineNumber":69,"author":{"gitId":"-"},"content":" public void parse_repeatedNonTagValue_failure() {","lastModifiedDate":"2023-07-14"},{"lineNumber":70,"author":{"gitId":"-"},"content":" String validExpectedPersonString \u003d NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB","lastModifiedDate":"2023-07-14"},{"lineNumber":71,"author":{"gitId":"-"},"content":" + ADDRESS_DESC_BOB + TAG_DESC_FRIEND;","lastModifiedDate":"2023-07-14"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":73,"author":{"gitId":"-"},"content":" // multiple names","lastModifiedDate":"2023-07-14"},{"lineNumber":74,"author":{"gitId":"-"},"content":" assertParseFailure(parser, NAME_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":75,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_NAME));","lastModifiedDate":"2023-07-14"},{"lineNumber":76,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":77,"author":{"gitId":"-"},"content":" // multiple phones","lastModifiedDate":"2023-07-14"},{"lineNumber":78,"author":{"gitId":"-"},"content":" assertParseFailure(parser, PHONE_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":79,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE));","lastModifiedDate":"2023-07-14"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":81,"author":{"gitId":"-"},"content":" // multiple emails","lastModifiedDate":"2023-07-14"},{"lineNumber":82,"author":{"gitId":"-"},"content":" assertParseFailure(parser, EMAIL_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":83,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_EMAIL));","lastModifiedDate":"2023-07-14"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":85,"author":{"gitId":"-"},"content":" // multiple addresses","lastModifiedDate":"2023-07-14"},{"lineNumber":86,"author":{"gitId":"-"},"content":" assertParseFailure(parser, ADDRESS_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":87,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_ADDRESS));","lastModifiedDate":"2023-07-14"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":89,"author":{"gitId":"-"},"content":" // multiple fields repeated","lastModifiedDate":"2023-07-14"},{"lineNumber":90,"author":{"gitId":"-"},"content":" assertParseFailure(parser,","lastModifiedDate":"2023-07-14"},{"lineNumber":91,"author":{"gitId":"-"},"content":" validExpectedPersonString + PHONE_DESC_AMY + EMAIL_DESC_AMY + NAME_DESC_AMY + ADDRESS_DESC_AMY","lastModifiedDate":"2023-07-14"},{"lineNumber":92,"author":{"gitId":"-"},"content":" + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":93,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_NAME, PREFIX_ADDRESS, PREFIX_EMAIL, PREFIX_PHONE));","lastModifiedDate":"2023-07-14"},{"lineNumber":94,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":95,"author":{"gitId":"-"},"content":" // invalid value followed by valid value","lastModifiedDate":"2023-07-14"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":97,"author":{"gitId":"-"},"content":" // invalid name","lastModifiedDate":"2023-07-14"},{"lineNumber":98,"author":{"gitId":"-"},"content":" assertParseFailure(parser, INVALID_NAME_DESC + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":99,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_NAME));","lastModifiedDate":"2023-07-14"},{"lineNumber":100,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":101,"author":{"gitId":"-"},"content":" // invalid email","lastModifiedDate":"2023-07-14"},{"lineNumber":102,"author":{"gitId":"-"},"content":" assertParseFailure(parser, INVALID_EMAIL_DESC + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":103,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_EMAIL));","lastModifiedDate":"2023-07-14"},{"lineNumber":104,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":105,"author":{"gitId":"-"},"content":" // invalid phone","lastModifiedDate":"2023-07-14"},{"lineNumber":106,"author":{"gitId":"-"},"content":" assertParseFailure(parser, INVALID_PHONE_DESC + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":107,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE));","lastModifiedDate":"2023-07-14"},{"lineNumber":108,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":109,"author":{"gitId":"-"},"content":" // invalid address","lastModifiedDate":"2023-07-14"},{"lineNumber":110,"author":{"gitId":"-"},"content":" assertParseFailure(parser, INVALID_ADDRESS_DESC + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":111,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_ADDRESS));","lastModifiedDate":"2023-07-14"},{"lineNumber":112,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":113,"author":{"gitId":"-"},"content":" // valid value followed by invalid value","lastModifiedDate":"2023-07-14"},{"lineNumber":114,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":115,"author":{"gitId":"-"},"content":" // invalid name","lastModifiedDate":"2023-07-14"},{"lineNumber":116,"author":{"gitId":"-"},"content":" assertParseFailure(parser, validExpectedPersonString + INVALID_NAME_DESC,","lastModifiedDate":"2023-07-14"},{"lineNumber":117,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_NAME));","lastModifiedDate":"2023-07-14"},{"lineNumber":118,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":119,"author":{"gitId":"-"},"content":" // invalid email","lastModifiedDate":"2023-07-14"},{"lineNumber":120,"author":{"gitId":"-"},"content":" assertParseFailure(parser, validExpectedPersonString + INVALID_EMAIL_DESC,","lastModifiedDate":"2023-07-14"},{"lineNumber":121,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_EMAIL));","lastModifiedDate":"2023-07-14"},{"lineNumber":122,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":123,"author":{"gitId":"-"},"content":" // invalid phone","lastModifiedDate":"2023-07-14"},{"lineNumber":124,"author":{"gitId":"-"},"content":" assertParseFailure(parser, validExpectedPersonString + INVALID_PHONE_DESC,","lastModifiedDate":"2023-07-14"},{"lineNumber":125,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE));","lastModifiedDate":"2023-07-14"},{"lineNumber":126,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":127,"author":{"gitId":"-"},"content":" // invalid address","lastModifiedDate":"2023-07-14"},{"lineNumber":128,"author":{"gitId":"-"},"content":" assertParseFailure(parser, validExpectedPersonString + INVALID_ADDRESS_DESC,","lastModifiedDate":"2023-07-14"},{"lineNumber":129,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_ADDRESS));","lastModifiedDate":"2023-07-14"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-15"},{"lineNumber":131,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":132,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-15"},{"lineNumber":133,"author":{"gitId":"-"},"content":" public void parse_optionalFieldsMissing_success() {","lastModifiedDate":"2017-08-15"},{"lineNumber":134,"author":{"gitId":"-"},"content":" // zero tags","lastModifiedDate":"2017-06-15"},{"lineNumber":135,"author":{"gitId":"-"},"content":" Person expectedPerson \u003d new PersonBuilder(AMY).withTags().build();","lastModifiedDate":"2018-07-25"},{"lineNumber":136,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, NAME_DESC_AMY + PHONE_DESC_AMY + EMAIL_DESC_AMY + ADDRESS_DESC_AMY,","lastModifiedDate":"2017-12-23"},{"lineNumber":137,"author":{"gitId":"-"},"content":" new AddCommand(expectedPerson));","lastModifiedDate":"2017-12-23"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-15"},{"lineNumber":139,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":140,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-15"},{"lineNumber":141,"author":{"gitId":"-"},"content":" public void parse_compulsoryFieldMissing_failure() {","lastModifiedDate":"2017-06-15"},{"lineNumber":142,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddCommand.MESSAGE_USAGE);","lastModifiedDate":"2017-06-15"},{"lineNumber":143,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":144,"author":{"gitId":"-"},"content":" // missing name prefix","lastModifiedDate":"2017-06-15"},{"lineNumber":145,"author":{"gitId":"-"},"content":" assertParseFailure(parser, VALID_NAME_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + ADDRESS_DESC_BOB,","lastModifiedDate":"2017-12-23"},{"lineNumber":146,"author":{"gitId":"-"},"content":" expectedMessage);","lastModifiedDate":"2017-12-23"},{"lineNumber":147,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":148,"author":{"gitId":"-"},"content":" // missing phone prefix","lastModifiedDate":"2017-06-15"},{"lineNumber":149,"author":{"gitId":"-"},"content":" assertParseFailure(parser, NAME_DESC_BOB + VALID_PHONE_BOB + EMAIL_DESC_BOB + ADDRESS_DESC_BOB,","lastModifiedDate":"2017-12-23"},{"lineNumber":150,"author":{"gitId":"-"},"content":" expectedMessage);","lastModifiedDate":"2017-12-23"},{"lineNumber":151,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":152,"author":{"gitId":"-"},"content":" // missing email prefix","lastModifiedDate":"2017-06-15"},{"lineNumber":153,"author":{"gitId":"-"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + VALID_EMAIL_BOB + ADDRESS_DESC_BOB,","lastModifiedDate":"2017-12-23"},{"lineNumber":154,"author":{"gitId":"-"},"content":" expectedMessage);","lastModifiedDate":"2017-12-23"},{"lineNumber":155,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":156,"author":{"gitId":"-"},"content":" // missing address prefix","lastModifiedDate":"2017-06-15"},{"lineNumber":157,"author":{"gitId":"-"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + VALID_ADDRESS_BOB,","lastModifiedDate":"2017-12-23"},{"lineNumber":158,"author":{"gitId":"-"},"content":" expectedMessage);","lastModifiedDate":"2017-12-23"},{"lineNumber":159,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":160,"author":{"gitId":"-"},"content":" // all prefixes missing","lastModifiedDate":"2017-06-15"},{"lineNumber":161,"author":{"gitId":"-"},"content":" assertParseFailure(parser, VALID_NAME_BOB + VALID_PHONE_BOB + VALID_EMAIL_BOB + VALID_ADDRESS_BOB,","lastModifiedDate":"2017-12-23"},{"lineNumber":162,"author":{"gitId":"-"},"content":" expectedMessage);","lastModifiedDate":"2017-12-23"},{"lineNumber":163,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-15"},{"lineNumber":164,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":165,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-15"},{"lineNumber":166,"author":{"gitId":"-"},"content":" public void parse_invalidValue_failure() {","lastModifiedDate":"2017-06-15"},{"lineNumber":167,"author":{"gitId":"-"},"content":" // invalid name","lastModifiedDate":"2017-06-15"},{"lineNumber":168,"author":{"gitId":"-"},"content":" assertParseFailure(parser, INVALID_NAME_DESC + PHONE_DESC_BOB + EMAIL_DESC_BOB + ADDRESS_DESC_BOB","lastModifiedDate":"2017-12-23"},{"lineNumber":169,"author":{"gitId":"-"},"content":" + TAG_DESC_HUSBAND + TAG_DESC_FRIEND, Name.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":170,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":171,"author":{"gitId":"-"},"content":" // invalid phone","lastModifiedDate":"2017-06-15"},{"lineNumber":172,"author":{"gitId":"-"},"content":" assertParseFailure(parser, NAME_DESC_BOB + INVALID_PHONE_DESC + EMAIL_DESC_BOB + ADDRESS_DESC_BOB","lastModifiedDate":"2017-12-23"},{"lineNumber":173,"author":{"gitId":"-"},"content":" + TAG_DESC_HUSBAND + TAG_DESC_FRIEND, Phone.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":174,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":175,"author":{"gitId":"-"},"content":" // invalid email","lastModifiedDate":"2017-06-15"},{"lineNumber":176,"author":{"gitId":"-"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + INVALID_EMAIL_DESC + ADDRESS_DESC_BOB","lastModifiedDate":"2017-12-23"},{"lineNumber":177,"author":{"gitId":"-"},"content":" + TAG_DESC_HUSBAND + TAG_DESC_FRIEND, Email.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":178,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":179,"author":{"gitId":"-"},"content":" // invalid address","lastModifiedDate":"2017-06-15"},{"lineNumber":180,"author":{"gitId":"-"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + INVALID_ADDRESS_DESC","lastModifiedDate":"2017-12-23"},{"lineNumber":181,"author":{"gitId":"-"},"content":" + TAG_DESC_HUSBAND + TAG_DESC_FRIEND, Address.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":182,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":183,"author":{"gitId":"-"},"content":" // invalid tag","lastModifiedDate":"2017-06-15"},{"lineNumber":184,"author":{"gitId":"-"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + ADDRESS_DESC_BOB","lastModifiedDate":"2017-12-23"},{"lineNumber":185,"author":{"gitId":"-"},"content":" + INVALID_TAG_DESC + VALID_TAG_FRIEND, Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":186,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":187,"author":{"gitId":"-"},"content":" // two invalid values, only first invalid value reported","lastModifiedDate":"2017-06-15"},{"lineNumber":188,"author":{"gitId":"-"},"content":" assertParseFailure(parser, INVALID_NAME_DESC + PHONE_DESC_BOB + EMAIL_DESC_BOB + INVALID_ADDRESS_DESC,","lastModifiedDate":"2017-12-23"},{"lineNumber":189,"author":{"gitId":"-"},"content":" Name.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":190,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-23"},{"lineNumber":191,"author":{"gitId":"-"},"content":" // non-empty preamble","lastModifiedDate":"2017-12-23"},{"lineNumber":192,"author":{"gitId":"-"},"content":" assertParseFailure(parser, PREAMBLE_NON_EMPTY + NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB","lastModifiedDate":"2017-12-23"},{"lineNumber":193,"author":{"gitId":"-"},"content":" + ADDRESS_DESC_BOB + TAG_DESC_HUSBAND + TAG_DESC_FRIEND,","lastModifiedDate":"2017-12-23"},{"lineNumber":194,"author":{"gitId":"-"},"content":" String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddCommand.MESSAGE_USAGE));","lastModifiedDate":"2017-12-23"},{"lineNumber":195,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-15"},{"lineNumber":196,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-06-15"}],"authorContributionMap":{"joenus":1,"-":195}},{"path":"src/test/java/seedu/address/logic/parser/EditCommandParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-05-04"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-07-13"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.ADDRESS_DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.ADDRESS_DESC_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.EMAIL_DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.EMAIL_DESC_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_ADDRESS_DESC;","lastModifiedDate":"2017-07-05"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_EMAIL_DESC;","lastModifiedDate":"2017-07-05"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_NAME_DESC;","lastModifiedDate":"2017-07-05"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_PHONE_DESC;","lastModifiedDate":"2017-07-05"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_TAG_DESC;","lastModifiedDate":"2017-07-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.NAME_DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.PHONE_DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.PHONE_DESC_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.TAG_DESC_FRIEND;","lastModifiedDate":"2017-07-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.TAG_DESC_HUSBAND;","lastModifiedDate":"2017-07-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_FRIEND;","lastModifiedDate":"2017-07-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND;","lastModifiedDate":"2017-07-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2023-07-14"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2023-07-14"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2023-07-14"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2017-05-04"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CommandParserTestUtil.assertParseFailure;","lastModifiedDate":"2017-07-06"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CommandParserTestUtil.assertParseSuccess;","lastModifiedDate":"2017-07-06"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON;","lastModifiedDate":"2017-08-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalIndexes.INDEX_SECOND_PERSON;","lastModifiedDate":"2017-08-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalIndexes.INDEX_THIRD_PERSON;","lastModifiedDate":"2017-08-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":35,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":37,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2017-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"import seedu.address.logic.Messages;","lastModifiedDate":"2023-07-14"},{"lineNumber":39,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand;","lastModifiedDate":"2017-05-04"},{"lineNumber":40,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand.EditPersonDescriptor;","lastModifiedDate":"2017-05-04"},{"lineNumber":41,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2017-05-04"},{"lineNumber":42,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2017-05-04"},{"lineNumber":43,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2017-05-04"},{"lineNumber":44,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2017-05-04"},{"lineNumber":45,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.tag.Tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":46,"author":{"gitId":"-"},"content":"import seedu.address.testutil.EditPersonDescriptorBuilder;","lastModifiedDate":"2017-05-04"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":48,"author":{"gitId":"-"},"content":"public class EditCommandParserTest {","lastModifiedDate":"2017-05-04"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":50,"author":{"gitId":"-"},"content":" private static final String TAG_EMPTY \u003d \" \" + PREFIX_TAG;","lastModifiedDate":"2017-05-04"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":52,"author":{"gitId":"-"},"content":" private static final String MESSAGE_INVALID_FORMAT \u003d","lastModifiedDate":"2017-05-04"},{"lineNumber":53,"author":{"gitId":"-"},"content":" String.format(MESSAGE_INVALID_COMMAND_FORMAT, EditCommand.MESSAGE_USAGE);","lastModifiedDate":"2017-05-04"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":55,"author":{"gitId":"-"},"content":" private EditCommandParser parser \u003d new EditCommandParser();","lastModifiedDate":"2017-05-04"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":57,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":58,"author":{"gitId":"-"},"content":" public void parse_missingParts_failure() {","lastModifiedDate":"2017-05-04"},{"lineNumber":59,"author":{"gitId":"-"},"content":" // no index specified","lastModifiedDate":"2017-05-04"},{"lineNumber":60,"author":{"gitId":"-"},"content":" assertParseFailure(parser, VALID_NAME_AMY, MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2017-07-06"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":62,"author":{"gitId":"-"},"content":" // no field specified","lastModifiedDate":"2017-05-04"},{"lineNumber":63,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"1\", EditCommand.MESSAGE_NOT_EDITED);","lastModifiedDate":"2017-07-06"},{"lineNumber":64,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":65,"author":{"gitId":"-"},"content":" // no index and no field specified","lastModifiedDate":"2017-05-04"},{"lineNumber":66,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"\", MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2017-07-06"},{"lineNumber":67,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":69,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":70,"author":{"gitId":"-"},"content":" public void parse_invalidPreamble_failure() {","lastModifiedDate":"2017-06-06"},{"lineNumber":71,"author":{"gitId":"-"},"content":" // negative index","lastModifiedDate":"2017-05-04"},{"lineNumber":72,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"-5\" + NAME_DESC_AMY, MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2017-07-06"},{"lineNumber":73,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":74,"author":{"gitId":"-"},"content":" // zero index","lastModifiedDate":"2017-06-06"},{"lineNumber":75,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"0\" + NAME_DESC_AMY, MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2017-07-06"},{"lineNumber":76,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-06"},{"lineNumber":77,"author":{"gitId":"-"},"content":" // invalid arguments being parsed as preamble","lastModifiedDate":"2017-06-06"},{"lineNumber":78,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"1 some random string\", MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2017-07-06"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-06"},{"lineNumber":80,"author":{"gitId":"-"},"content":" // invalid prefix being parsed as preamble","lastModifiedDate":"2017-06-06"},{"lineNumber":81,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"1 i/ string\", MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2017-07-06"},{"lineNumber":82,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":83,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":84,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":85,"author":{"gitId":"-"},"content":" public void parse_invalidValue_failure() {","lastModifiedDate":"2017-05-04"},{"lineNumber":86,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"1\" + INVALID_NAME_DESC, Name.MESSAGE_CONSTRAINTS); // invalid name","lastModifiedDate":"2018-09-22"},{"lineNumber":87,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"1\" + INVALID_PHONE_DESC, Phone.MESSAGE_CONSTRAINTS); // invalid phone","lastModifiedDate":"2018-09-22"},{"lineNumber":88,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"1\" + INVALID_EMAIL_DESC, Email.MESSAGE_CONSTRAINTS); // invalid email","lastModifiedDate":"2018-09-22"},{"lineNumber":89,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"1\" + INVALID_ADDRESS_DESC, Address.MESSAGE_CONSTRAINTS); // invalid address","lastModifiedDate":"2018-09-22"},{"lineNumber":90,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"1\" + INVALID_TAG_DESC, Tag.MESSAGE_CONSTRAINTS); // invalid tag","lastModifiedDate":"2018-09-22"},{"lineNumber":91,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":92,"author":{"gitId":"-"},"content":" // invalid phone followed by valid email","lastModifiedDate":"2017-05-04"},{"lineNumber":93,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"1\" + INVALID_PHONE_DESC + EMAIL_DESC_AMY, Phone.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":94,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":95,"author":{"gitId":"-"},"content":" // while parsing {@code PREFIX_TAG} alone will reset the tags of the {@code Person} being edited,","lastModifiedDate":"2017-05-04"},{"lineNumber":96,"author":{"gitId":"-"},"content":" // parsing it together with a valid tag results in error","lastModifiedDate":"2017-05-04"},{"lineNumber":97,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"1\" + TAG_DESC_FRIEND + TAG_DESC_HUSBAND + TAG_EMPTY, Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":98,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"1\" + TAG_DESC_FRIEND + TAG_EMPTY + TAG_DESC_HUSBAND, Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":99,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"1\" + TAG_EMPTY + TAG_DESC_FRIEND + TAG_DESC_HUSBAND, Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":100,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":101,"author":{"gitId":"-"},"content":" // multiple invalid values, but only the first invalid value is captured","lastModifiedDate":"2017-05-04"},{"lineNumber":102,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"1\" + INVALID_NAME_DESC + INVALID_EMAIL_DESC + VALID_ADDRESS_AMY + VALID_PHONE_AMY,","lastModifiedDate":"2017-07-06"},{"lineNumber":103,"author":{"gitId":"-"},"content":" Name.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":104,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":105,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":106,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":107,"author":{"gitId":"-"},"content":" public void parse_allFieldsSpecified_success() {","lastModifiedDate":"2017-08-15"},{"lineNumber":108,"author":{"gitId":"-"},"content":" Index targetIndex \u003d INDEX_SECOND_PERSON;","lastModifiedDate":"2017-05-25"},{"lineNumber":109,"author":{"gitId":"-"},"content":" String userInput \u003d targetIndex.getOneBased() + PHONE_DESC_BOB + TAG_DESC_HUSBAND","lastModifiedDate":"2017-06-06"},{"lineNumber":110,"author":{"gitId":"-"},"content":" + EMAIL_DESC_AMY + ADDRESS_DESC_AMY + NAME_DESC_AMY + TAG_DESC_FRIEND;","lastModifiedDate":"2017-06-06"},{"lineNumber":111,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":112,"author":{"gitId":"-"},"content":" EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder().withName(VALID_NAME_AMY)","lastModifiedDate":"2017-05-04"},{"lineNumber":113,"author":{"gitId":"-"},"content":" .withPhone(VALID_PHONE_BOB).withEmail(VALID_EMAIL_AMY).withAddress(VALID_ADDRESS_AMY)","lastModifiedDate":"2017-05-04"},{"lineNumber":114,"author":{"gitId":"-"},"content":" .withTags(VALID_TAG_HUSBAND, VALID_TAG_FRIEND).build();","lastModifiedDate":"2017-05-04"},{"lineNumber":115,"author":{"gitId":"-"},"content":" EditCommand expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2017-05-04"},{"lineNumber":116,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":117,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2017-07-06"},{"lineNumber":118,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":119,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":120,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":121,"author":{"gitId":"-"},"content":" public void parse_someFieldsSpecified_success() {","lastModifiedDate":"2017-08-15"},{"lineNumber":122,"author":{"gitId":"-"},"content":" Index targetIndex \u003d INDEX_FIRST_PERSON;","lastModifiedDate":"2017-05-25"},{"lineNumber":123,"author":{"gitId":"-"},"content":" String userInput \u003d targetIndex.getOneBased() + PHONE_DESC_BOB + EMAIL_DESC_AMY;","lastModifiedDate":"2017-05-25"},{"lineNumber":124,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":125,"author":{"gitId":"-"},"content":" EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder().withPhone(VALID_PHONE_BOB)","lastModifiedDate":"2017-05-04"},{"lineNumber":126,"author":{"gitId":"-"},"content":" .withEmail(VALID_EMAIL_AMY).build();","lastModifiedDate":"2017-05-04"},{"lineNumber":127,"author":{"gitId":"-"},"content":" EditCommand expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2017-05-04"},{"lineNumber":128,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":129,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2017-07-06"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":131,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":132,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":133,"author":{"gitId":"-"},"content":" public void parse_oneFieldSpecified_success() {","lastModifiedDate":"2017-08-15"},{"lineNumber":134,"author":{"gitId":"-"},"content":" // name","lastModifiedDate":"2017-05-04"},{"lineNumber":135,"author":{"gitId":"-"},"content":" Index targetIndex \u003d INDEX_THIRD_PERSON;","lastModifiedDate":"2017-05-25"},{"lineNumber":136,"author":{"gitId":"-"},"content":" String userInput \u003d targetIndex.getOneBased() + NAME_DESC_AMY;","lastModifiedDate":"2017-05-25"},{"lineNumber":137,"author":{"gitId":"-"},"content":" EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder().withName(VALID_NAME_AMY).build();","lastModifiedDate":"2017-05-04"},{"lineNumber":138,"author":{"gitId":"-"},"content":" EditCommand expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2017-05-04"},{"lineNumber":139,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2017-07-06"},{"lineNumber":140,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":141,"author":{"gitId":"-"},"content":" // phone","lastModifiedDate":"2017-05-04"},{"lineNumber":142,"author":{"gitId":"-"},"content":" userInput \u003d targetIndex.getOneBased() + PHONE_DESC_AMY;","lastModifiedDate":"2017-05-25"},{"lineNumber":143,"author":{"gitId":"-"},"content":" descriptor \u003d new EditPersonDescriptorBuilder().withPhone(VALID_PHONE_AMY).build();","lastModifiedDate":"2017-05-04"},{"lineNumber":144,"author":{"gitId":"-"},"content":" expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2017-05-04"},{"lineNumber":145,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2017-07-06"},{"lineNumber":146,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":147,"author":{"gitId":"-"},"content":" // email","lastModifiedDate":"2017-05-04"},{"lineNumber":148,"author":{"gitId":"-"},"content":" userInput \u003d targetIndex.getOneBased() + EMAIL_DESC_AMY;","lastModifiedDate":"2017-05-25"},{"lineNumber":149,"author":{"gitId":"-"},"content":" descriptor \u003d new EditPersonDescriptorBuilder().withEmail(VALID_EMAIL_AMY).build();","lastModifiedDate":"2017-05-04"},{"lineNumber":150,"author":{"gitId":"-"},"content":" expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2017-05-04"},{"lineNumber":151,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2017-07-06"},{"lineNumber":152,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":153,"author":{"gitId":"-"},"content":" // address","lastModifiedDate":"2017-05-04"},{"lineNumber":154,"author":{"gitId":"-"},"content":" userInput \u003d targetIndex.getOneBased() + ADDRESS_DESC_AMY;","lastModifiedDate":"2017-05-25"},{"lineNumber":155,"author":{"gitId":"-"},"content":" descriptor \u003d new EditPersonDescriptorBuilder().withAddress(VALID_ADDRESS_AMY).build();","lastModifiedDate":"2017-05-04"},{"lineNumber":156,"author":{"gitId":"-"},"content":" expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2017-05-04"},{"lineNumber":157,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2017-07-06"},{"lineNumber":158,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":159,"author":{"gitId":"-"},"content":" // tags","lastModifiedDate":"2017-05-04"},{"lineNumber":160,"author":{"gitId":"-"},"content":" userInput \u003d targetIndex.getOneBased() + TAG_DESC_FRIEND;","lastModifiedDate":"2017-05-25"},{"lineNumber":161,"author":{"gitId":"-"},"content":" descriptor \u003d new EditPersonDescriptorBuilder().withTags(VALID_TAG_FRIEND).build();","lastModifiedDate":"2017-05-04"},{"lineNumber":162,"author":{"gitId":"-"},"content":" expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2017-05-04"},{"lineNumber":163,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2017-07-06"},{"lineNumber":164,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":165,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":166,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":167,"author":{"gitId":"-"},"content":" public void parse_multipleRepeatedFields_failure() {","lastModifiedDate":"2023-07-14"},{"lineNumber":168,"author":{"gitId":"-"},"content":" // More extensive testing of duplicate parameter detections is done in","lastModifiedDate":"2023-07-14"},{"lineNumber":169,"author":{"gitId":"-"},"content":" // AddCommandParserTest#parse_repeatedNonTagValue_failure()","lastModifiedDate":"2023-07-14"},{"lineNumber":170,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":171,"author":{"gitId":"-"},"content":" // valid followed by invalid","lastModifiedDate":"2023-07-14"},{"lineNumber":172,"author":{"gitId":"-"},"content":" Index targetIndex \u003d INDEX_FIRST_PERSON;","lastModifiedDate":"2017-05-25"},{"lineNumber":173,"author":{"gitId":"-"},"content":" String userInput \u003d targetIndex.getOneBased() + INVALID_PHONE_DESC + PHONE_DESC_BOB;","lastModifiedDate":"2023-07-14"},{"lineNumber":174,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":175,"author":{"gitId":"-"},"content":" assertParseFailure(parser, userInput, Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE));","lastModifiedDate":"2023-07-14"},{"lineNumber":176,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":177,"author":{"gitId":"-"},"content":" // invalid followed by valid","lastModifiedDate":"2023-07-14"},{"lineNumber":178,"author":{"gitId":"-"},"content":" userInput \u003d targetIndex.getOneBased() + PHONE_DESC_BOB + INVALID_PHONE_DESC;","lastModifiedDate":"2023-07-14"},{"lineNumber":179,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":180,"author":{"gitId":"-"},"content":" assertParseFailure(parser, userInput, Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE));","lastModifiedDate":"2023-07-14"},{"lineNumber":181,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":182,"author":{"gitId":"-"},"content":" // mulltiple valid fields repeated","lastModifiedDate":"2023-07-14"},{"lineNumber":183,"author":{"gitId":"-"},"content":" userInput \u003d targetIndex.getOneBased() + PHONE_DESC_AMY + ADDRESS_DESC_AMY + EMAIL_DESC_AMY","lastModifiedDate":"2023-07-14"},{"lineNumber":184,"author":{"gitId":"-"},"content":" + TAG_DESC_FRIEND + PHONE_DESC_AMY + ADDRESS_DESC_AMY + EMAIL_DESC_AMY + TAG_DESC_FRIEND","lastModifiedDate":"2017-05-25"},{"lineNumber":185,"author":{"gitId":"-"},"content":" + PHONE_DESC_BOB + ADDRESS_DESC_BOB + EMAIL_DESC_BOB + TAG_DESC_HUSBAND;","lastModifiedDate":"2017-05-25"},{"lineNumber":186,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":187,"author":{"gitId":"-"},"content":" assertParseFailure(parser, userInput,","lastModifiedDate":"2023-07-14"},{"lineNumber":188,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS));","lastModifiedDate":"2023-07-14"},{"lineNumber":189,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":190,"author":{"gitId":"-"},"content":" // multiple invalid values","lastModifiedDate":"2023-07-14"},{"lineNumber":191,"author":{"gitId":"-"},"content":" userInput \u003d targetIndex.getOneBased() + INVALID_PHONE_DESC + INVALID_ADDRESS_DESC + INVALID_EMAIL_DESC","lastModifiedDate":"2023-07-14"},{"lineNumber":192,"author":{"gitId":"-"},"content":" + INVALID_PHONE_DESC + INVALID_ADDRESS_DESC + INVALID_EMAIL_DESC;","lastModifiedDate":"2023-07-14"},{"lineNumber":193,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":194,"author":{"gitId":"-"},"content":" assertParseFailure(parser, userInput,","lastModifiedDate":"2023-07-14"},{"lineNumber":195,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS));","lastModifiedDate":"2023-07-14"},{"lineNumber":196,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":197,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":198,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":199,"author":{"gitId":"-"},"content":" public void parse_resetTags_success() {","lastModifiedDate":"2017-08-15"},{"lineNumber":200,"author":{"gitId":"-"},"content":" Index targetIndex \u003d INDEX_THIRD_PERSON;","lastModifiedDate":"2017-05-25"},{"lineNumber":201,"author":{"gitId":"-"},"content":" String userInput \u003d targetIndex.getOneBased() + TAG_EMPTY;","lastModifiedDate":"2017-05-25"},{"lineNumber":202,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":203,"author":{"gitId":"-"},"content":" EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder().withTags().build();","lastModifiedDate":"2017-05-04"},{"lineNumber":204,"author":{"gitId":"-"},"content":" EditCommand expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2017-05-04"},{"lineNumber":205,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":206,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2017-07-06"},{"lineNumber":207,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":208,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-05-04"}],"authorContributionMap":{"joenus":1,"-":207}},{"path":"src/test/java/seedu/address/logic/parser/ParserUtilTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-05-22"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-03-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2019-03-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.ParserUtil.MESSAGE_INVALID_INDEX;","lastModifiedDate":"2017-06-02"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-14"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON;","lastModifiedDate":"2017-08-05"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.Arrays;","lastModifiedDate":"2017-05-22"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import java.util.Collections;","lastModifiedDate":"2017-05-22"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import java.util.HashSet;","lastModifiedDate":"2017-05-22"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-05-22"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2018-07-10"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2017-05-22"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2017-05-22"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2017-05-22"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2017-05-22"},{"lineNumber":21,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.tag.Tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":23,"author":{"gitId":"-"},"content":"public class ParserUtilTest {","lastModifiedDate":"2017-05-22"},{"lineNumber":24,"author":{"gitId":"-"},"content":" private static final String INVALID_NAME \u003d \"R@chel\";","lastModifiedDate":"2017-05-22"},{"lineNumber":25,"author":{"gitId":"-"},"content":" private static final String INVALID_PHONE \u003d \"+651234\";","lastModifiedDate":"2017-05-22"},{"lineNumber":26,"author":{"gitId":"-"},"content":" private static final String INVALID_ADDRESS \u003d \" \";","lastModifiedDate":"2017-05-22"},{"lineNumber":27,"author":{"gitId":"-"},"content":" private static final String INVALID_EMAIL \u003d \"example.com\";","lastModifiedDate":"2017-05-22"},{"lineNumber":28,"author":{"gitId":"-"},"content":" private static final String INVALID_TAG \u003d \"#friend\";","lastModifiedDate":"2017-05-22"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":30,"author":{"gitId":"-"},"content":" private static final String VALID_NAME \u003d \"Rachel Walker\";","lastModifiedDate":"2017-05-22"},{"lineNumber":31,"author":{"gitId":"-"},"content":" private static final String VALID_PHONE \u003d \"123456\";","lastModifiedDate":"2017-05-22"},{"lineNumber":32,"author":{"gitId":"-"},"content":" private static final String VALID_ADDRESS \u003d \"123 Main Street #0505\";","lastModifiedDate":"2017-05-22"},{"lineNumber":33,"author":{"gitId":"-"},"content":" private static final String VALID_EMAIL \u003d \"rachel@example.com\";","lastModifiedDate":"2017-05-22"},{"lineNumber":34,"author":{"gitId":"-"},"content":" private static final String VALID_TAG_1 \u003d \"friend\";","lastModifiedDate":"2017-05-22"},{"lineNumber":35,"author":{"gitId":"-"},"content":" private static final String VALID_TAG_2 \u003d \"neighbour\";","lastModifiedDate":"2017-05-22"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":37,"author":{"gitId":"-"},"content":" private static final String WHITESPACE \u003d \" \\t\\r\\n\";","lastModifiedDate":"2017-05-29"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-29"},{"lineNumber":39,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-26"},{"lineNumber":40,"author":{"gitId":"-"},"content":" public void parseIndex_invalidInput_throwsParseException() {","lastModifiedDate":"2019-03-23"},{"lineNumber":41,"author":{"gitId":"-"},"content":" assertThrows(ParseException.class, () -\u003e ParserUtil.parseIndex(\"10 a\"));","lastModifiedDate":"2019-03-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-26"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-26"},{"lineNumber":44,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-26"},{"lineNumber":45,"author":{"gitId":"-"},"content":" public void parseIndex_outOfRangeInput_throwsParseException() {","lastModifiedDate":"2019-03-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":" assertThrows(ParseException.class, MESSAGE_INVALID_INDEX, ()","lastModifiedDate":"2019-03-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":" -\u003e ParserUtil.parseIndex(Long.toString(Integer.MAX_VALUE + 1)));","lastModifiedDate":"2019-03-23"},{"lineNumber":48,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-26"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-26"},{"lineNumber":50,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-26"},{"lineNumber":51,"author":{"gitId":"-"},"content":" public void parseIndex_validInput_success() throws Exception {","lastModifiedDate":"2017-05-26"},{"lineNumber":52,"author":{"gitId":"-"},"content":" // No whitespaces","lastModifiedDate":"2017-05-26"},{"lineNumber":53,"author":{"gitId":"-"},"content":" assertEquals(INDEX_FIRST_PERSON, ParserUtil.parseIndex(\"1\"));","lastModifiedDate":"2017-05-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-26"},{"lineNumber":55,"author":{"gitId":"-"},"content":" // Leading and trailing whitespaces","lastModifiedDate":"2017-05-26"},{"lineNumber":56,"author":{"gitId":"-"},"content":" assertEquals(INDEX_FIRST_PERSON, ParserUtil.parseIndex(\" 1 \"));","lastModifiedDate":"2017-05-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-26"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-26"},{"lineNumber":59,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":60,"author":{"gitId":"-"},"content":" public void parseName_null_throwsNullPointerException() {","lastModifiedDate":"2017-05-29"},{"lineNumber":61,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e ParserUtil.parseName((String) null));","lastModifiedDate":"2019-03-14"},{"lineNumber":62,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":64,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":65,"author":{"gitId":"-"},"content":" public void parseName_invalidValue_throwsParseException() {","lastModifiedDate":"2018-07-10"},{"lineNumber":66,"author":{"gitId":"-"},"content":" assertThrows(ParseException.class, () -\u003e ParserUtil.parseName(INVALID_NAME));","lastModifiedDate":"2019-03-14"},{"lineNumber":67,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":69,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":70,"author":{"gitId":"-"},"content":" public void parseName_validValueWithoutWhitespace_returnsName() throws Exception {","lastModifiedDate":"2017-05-29"},{"lineNumber":71,"author":{"gitId":"-"},"content":" Name expectedName \u003d new Name(VALID_NAME);","lastModifiedDate":"2017-05-22"},{"lineNumber":72,"author":{"gitId":"-"},"content":" assertEquals(expectedName, ParserUtil.parseName(VALID_NAME));","lastModifiedDate":"2017-05-29"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-29"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":75,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-29"},{"lineNumber":76,"author":{"gitId":"-"},"content":" public void parseName_validValueWithWhitespace_returnsTrimmedName() throws Exception {","lastModifiedDate":"2017-05-29"},{"lineNumber":77,"author":{"gitId":"-"},"content":" String nameWithWhitespace \u003d WHITESPACE + VALID_NAME + WHITESPACE;","lastModifiedDate":"2017-05-29"},{"lineNumber":78,"author":{"gitId":"-"},"content":" Name expectedName \u003d new Name(VALID_NAME);","lastModifiedDate":"2017-05-29"},{"lineNumber":79,"author":{"gitId":"-"},"content":" assertEquals(expectedName, ParserUtil.parseName(nameWithWhitespace));","lastModifiedDate":"2017-05-29"},{"lineNumber":80,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":81,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":82,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":83,"author":{"gitId":"-"},"content":" public void parsePhone_null_throwsNullPointerException() {","lastModifiedDate":"2017-05-30"},{"lineNumber":84,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e ParserUtil.parsePhone((String) null));","lastModifiedDate":"2019-03-14"},{"lineNumber":85,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":87,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":88,"author":{"gitId":"-"},"content":" public void parsePhone_invalidValue_throwsParseException() {","lastModifiedDate":"2018-07-10"},{"lineNumber":89,"author":{"gitId":"-"},"content":" assertThrows(ParseException.class, () -\u003e ParserUtil.parsePhone(INVALID_PHONE));","lastModifiedDate":"2019-03-14"},{"lineNumber":90,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":91,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":92,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":93,"author":{"gitId":"-"},"content":" public void parsePhone_validValueWithoutWhitespace_returnsPhone() throws Exception {","lastModifiedDate":"2017-05-30"},{"lineNumber":94,"author":{"gitId":"-"},"content":" Phone expectedPhone \u003d new Phone(VALID_PHONE);","lastModifiedDate":"2017-05-22"},{"lineNumber":95,"author":{"gitId":"-"},"content":" assertEquals(expectedPhone, ParserUtil.parsePhone(VALID_PHONE));","lastModifiedDate":"2017-05-30"},{"lineNumber":96,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":97,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":98,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-30"},{"lineNumber":99,"author":{"gitId":"-"},"content":" public void parsePhone_validValueWithWhitespace_returnsTrimmedPhone() throws Exception {","lastModifiedDate":"2017-05-30"},{"lineNumber":100,"author":{"gitId":"-"},"content":" String phoneWithWhitespace \u003d WHITESPACE + VALID_PHONE + WHITESPACE;","lastModifiedDate":"2017-05-30"},{"lineNumber":101,"author":{"gitId":"-"},"content":" Phone expectedPhone \u003d new Phone(VALID_PHONE);","lastModifiedDate":"2017-05-30"},{"lineNumber":102,"author":{"gitId":"-"},"content":" assertEquals(expectedPhone, ParserUtil.parsePhone(phoneWithWhitespace));","lastModifiedDate":"2017-05-30"},{"lineNumber":103,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":104,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":105,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":106,"author":{"gitId":"-"},"content":" public void parseAddress_null_throwsNullPointerException() {","lastModifiedDate":"2017-05-30"},{"lineNumber":107,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e ParserUtil.parseAddress((String) null));","lastModifiedDate":"2019-03-14"},{"lineNumber":108,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":109,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":110,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":111,"author":{"gitId":"-"},"content":" public void parseAddress_invalidValue_throwsParseException() {","lastModifiedDate":"2018-07-10"},{"lineNumber":112,"author":{"gitId":"-"},"content":" assertThrows(ParseException.class, () -\u003e ParserUtil.parseAddress(INVALID_ADDRESS));","lastModifiedDate":"2019-03-14"},{"lineNumber":113,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":114,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":115,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":116,"author":{"gitId":"-"},"content":" public void parseAddress_validValueWithoutWhitespace_returnsAddress() throws Exception {","lastModifiedDate":"2017-05-30"},{"lineNumber":117,"author":{"gitId":"-"},"content":" Address expectedAddress \u003d new Address(VALID_ADDRESS);","lastModifiedDate":"2017-05-22"},{"lineNumber":118,"author":{"gitId":"-"},"content":" assertEquals(expectedAddress, ParserUtil.parseAddress(VALID_ADDRESS));","lastModifiedDate":"2017-05-30"},{"lineNumber":119,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":121,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-30"},{"lineNumber":122,"author":{"gitId":"-"},"content":" public void parseAddress_validValueWithWhitespace_returnsTrimmedAddress() throws Exception {","lastModifiedDate":"2017-05-30"},{"lineNumber":123,"author":{"gitId":"-"},"content":" String addressWithWhitespace \u003d WHITESPACE + VALID_ADDRESS + WHITESPACE;","lastModifiedDate":"2017-05-30"},{"lineNumber":124,"author":{"gitId":"-"},"content":" Address expectedAddress \u003d new Address(VALID_ADDRESS);","lastModifiedDate":"2017-05-30"},{"lineNumber":125,"author":{"gitId":"-"},"content":" assertEquals(expectedAddress, ParserUtil.parseAddress(addressWithWhitespace));","lastModifiedDate":"2017-05-30"},{"lineNumber":126,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":127,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":128,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":129,"author":{"gitId":"-"},"content":" public void parseEmail_null_throwsNullPointerException() {","lastModifiedDate":"2017-05-30"},{"lineNumber":130,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e ParserUtil.parseEmail((String) null));","lastModifiedDate":"2019-03-14"},{"lineNumber":131,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":132,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":133,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":134,"author":{"gitId":"-"},"content":" public void parseEmail_invalidValue_throwsParseException() {","lastModifiedDate":"2018-07-10"},{"lineNumber":135,"author":{"gitId":"-"},"content":" assertThrows(ParseException.class, () -\u003e ParserUtil.parseEmail(INVALID_EMAIL));","lastModifiedDate":"2019-03-14"},{"lineNumber":136,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":137,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":138,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":139,"author":{"gitId":"-"},"content":" public void parseEmail_validValueWithoutWhitespace_returnsEmail() throws Exception {","lastModifiedDate":"2017-05-30"},{"lineNumber":140,"author":{"gitId":"-"},"content":" Email expectedEmail \u003d new Email(VALID_EMAIL);","lastModifiedDate":"2017-05-22"},{"lineNumber":141,"author":{"gitId":"-"},"content":" assertEquals(expectedEmail, ParserUtil.parseEmail(VALID_EMAIL));","lastModifiedDate":"2017-05-30"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":143,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":144,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-30"},{"lineNumber":145,"author":{"gitId":"-"},"content":" public void parseEmail_validValueWithWhitespace_returnsTrimmedEmail() throws Exception {","lastModifiedDate":"2017-05-30"},{"lineNumber":146,"author":{"gitId":"-"},"content":" String emailWithWhitespace \u003d WHITESPACE + VALID_EMAIL + WHITESPACE;","lastModifiedDate":"2017-05-30"},{"lineNumber":147,"author":{"gitId":"-"},"content":" Email expectedEmail \u003d new Email(VALID_EMAIL);","lastModifiedDate":"2017-05-30"},{"lineNumber":148,"author":{"gitId":"-"},"content":" assertEquals(expectedEmail, ParserUtil.parseEmail(emailWithWhitespace));","lastModifiedDate":"2017-05-30"},{"lineNumber":149,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":150,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":151,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-30"},{"lineNumber":152,"author":{"gitId":"-"},"content":" public void parseTag_null_throwsNullPointerException() {","lastModifiedDate":"2019-03-23"},{"lineNumber":153,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e ParserUtil.parseTag(null));","lastModifiedDate":"2019-03-23"},{"lineNumber":154,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":155,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":156,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-30"},{"lineNumber":157,"author":{"gitId":"-"},"content":" public void parseTag_invalidValue_throwsParseException() {","lastModifiedDate":"2019-03-23"},{"lineNumber":158,"author":{"gitId":"-"},"content":" assertThrows(ParseException.class, () -\u003e ParserUtil.parseTag(INVALID_TAG));","lastModifiedDate":"2019-03-23"},{"lineNumber":159,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":160,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":161,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-30"},{"lineNumber":162,"author":{"gitId":"-"},"content":" public void parseTag_validValueWithoutWhitespace_returnsTag() throws Exception {","lastModifiedDate":"2017-05-30"},{"lineNumber":163,"author":{"gitId":"-"},"content":" Tag expectedTag \u003d new Tag(VALID_TAG_1);","lastModifiedDate":"2017-05-30"},{"lineNumber":164,"author":{"gitId":"-"},"content":" assertEquals(expectedTag, ParserUtil.parseTag(VALID_TAG_1));","lastModifiedDate":"2017-05-30"},{"lineNumber":165,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":166,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":167,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-30"},{"lineNumber":168,"author":{"gitId":"-"},"content":" public void parseTag_validValueWithWhitespace_returnsTrimmedTag() throws Exception {","lastModifiedDate":"2017-05-30"},{"lineNumber":169,"author":{"gitId":"-"},"content":" String tagWithWhitespace \u003d WHITESPACE + VALID_TAG_1 + WHITESPACE;","lastModifiedDate":"2017-05-30"},{"lineNumber":170,"author":{"gitId":"-"},"content":" Tag expectedTag \u003d new Tag(VALID_TAG_1);","lastModifiedDate":"2017-05-30"},{"lineNumber":171,"author":{"gitId":"-"},"content":" assertEquals(expectedTag, ParserUtil.parseTag(tagWithWhitespace));","lastModifiedDate":"2017-05-30"},{"lineNumber":172,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":173,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":174,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":175,"author":{"gitId":"-"},"content":" public void parseTags_null_throwsNullPointerException() {","lastModifiedDate":"2019-03-23"},{"lineNumber":176,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e ParserUtil.parseTags(null));","lastModifiedDate":"2019-03-23"},{"lineNumber":177,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":178,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":179,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":180,"author":{"gitId":"-"},"content":" public void parseTags_collectionWithInvalidTags_throwsParseException() {","lastModifiedDate":"2019-03-23"},{"lineNumber":181,"author":{"gitId":"-"},"content":" assertThrows(ParseException.class, () -\u003e ParserUtil.parseTags(Arrays.asList(VALID_TAG_1, INVALID_TAG)));","lastModifiedDate":"2019-03-23"},{"lineNumber":182,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":183,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":184,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":185,"author":{"gitId":"-"},"content":" public void parseTags_emptyCollection_returnsEmptySet() throws Exception {","lastModifiedDate":"2017-05-22"},{"lineNumber":186,"author":{"gitId":"-"},"content":" assertTrue(ParserUtil.parseTags(Collections.emptyList()).isEmpty());","lastModifiedDate":"2017-05-22"},{"lineNumber":187,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":188,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":189,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":190,"author":{"gitId":"-"},"content":" public void parseTags_collectionWithValidTags_returnsTagSet() throws Exception {","lastModifiedDate":"2017-05-22"},{"lineNumber":191,"author":{"gitId":"-"},"content":" Set\u003cTag\u003e actualTagSet \u003d ParserUtil.parseTags(Arrays.asList(VALID_TAG_1, VALID_TAG_2));","lastModifiedDate":"2017-05-22"},{"lineNumber":192,"author":{"gitId":"-"},"content":" Set\u003cTag\u003e expectedTagSet \u003d new HashSet\u003cTag\u003e(Arrays.asList(new Tag(VALID_TAG_1), new Tag(VALID_TAG_2)));","lastModifiedDate":"2017-05-22"},{"lineNumber":193,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":194,"author":{"gitId":"-"},"content":" assertEquals(expectedTagSet, actualTagSet);","lastModifiedDate":"2017-05-22"},{"lineNumber":195,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":196,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-05-22"}],"authorContributionMap":{"joenus":1,"-":195}},{"path":"src/test/java/seedu/address/model/person/PersonTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model.person;","lastModifiedDate":"2018-03-26"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-02-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2019-03-15"},{"lineNumber":5,"author":{"gitId":"joenus"},"content":"import static org.junit.jupiter.api.Assertions.assertNotEquals;","lastModifiedDate":"2024-03-01"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2019-03-15"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB;","lastModifiedDate":"2018-04-19"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_BOB;","lastModifiedDate":"2018-04-19"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB;","lastModifiedDate":"2018-04-19"},{"lineNumber":10,"author":{"gitId":"joenus"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_NOTE_FLU;","lastModifiedDate":"2024-02-29"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB;","lastModifiedDate":"2018-04-19"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND;","lastModifiedDate":"2018-04-19"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-23"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.ALICE;","lastModifiedDate":"2018-04-19"},{"lineNumber":15,"author":{"gitId":"joenus"},"content":"import static seedu.address.testutil.TypicalPersons.BENSON;","lastModifiedDate":"2024-03-01"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.BOB;","lastModifiedDate":"2018-04-19"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":18,"author":{"gitId":"joenus"},"content":"import org.junit.jupiter.api.Nested;","lastModifiedDate":"2024-03-01"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":21,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Note;","lastModifiedDate":"2024-02-29"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import seedu.address.testutil.PersonBuilder;","lastModifiedDate":"2018-03-26"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":24,"author":{"gitId":"-"},"content":"public class PersonTest {","lastModifiedDate":"2018-03-26"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":26,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-09-01"},{"lineNumber":27,"author":{"gitId":"-"},"content":" public void asObservableList_modifyList_throwsUnsupportedOperationException() {","lastModifiedDate":"2017-09-01"},{"lineNumber":28,"author":{"gitId":"-"},"content":" Person person \u003d new PersonBuilder().build();","lastModifiedDate":"2018-03-26"},{"lineNumber":29,"author":{"gitId":"-"},"content":" assertThrows(UnsupportedOperationException.class, () -\u003e person.getTags().remove(0));","lastModifiedDate":"2019-03-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-09-01"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":32,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-04-19"},{"lineNumber":33,"author":{"gitId":"-"},"content":" public void isSamePerson() {","lastModifiedDate":"2018-04-19"},{"lineNumber":34,"author":{"gitId":"-"},"content":" // same object -\u003e returns true","lastModifiedDate":"2018-04-19"},{"lineNumber":35,"author":{"gitId":"-"},"content":" assertTrue(ALICE.isSamePerson(ALICE));","lastModifiedDate":"2018-04-19"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":37,"author":{"gitId":"-"},"content":" // null -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":38,"author":{"gitId":"-"},"content":" assertFalse(ALICE.isSamePerson(null));","lastModifiedDate":"2018-04-19"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":40,"author":{"gitId":"-"},"content":" // same name, all other attributes different -\u003e returns true","lastModifiedDate":"2020-12-18"},{"lineNumber":41,"author":{"gitId":"-"},"content":" Person editedAlice \u003d new PersonBuilder(ALICE).withPhone(VALID_PHONE_BOB).withEmail(VALID_EMAIL_BOB)","lastModifiedDate":"2020-12-18"},{"lineNumber":42,"author":{"gitId":"-"},"content":" .withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_HUSBAND).build();","lastModifiedDate":"2020-12-18"},{"lineNumber":43,"author":{"gitId":"-"},"content":" assertTrue(ALICE.isSamePerson(editedAlice));","lastModifiedDate":"2020-12-18"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":45,"author":{"gitId":"-"},"content":" // different name, all other attributes same -\u003e returns false","lastModifiedDate":"2020-12-18"},{"lineNumber":46,"author":{"gitId":"-"},"content":" editedAlice \u003d new PersonBuilder(ALICE).withName(VALID_NAME_BOB).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":47,"author":{"gitId":"-"},"content":" assertFalse(ALICE.isSamePerson(editedAlice));","lastModifiedDate":"2018-04-19"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":49,"author":{"gitId":"-"},"content":" // name differs in case, all other attributes same -\u003e returns false","lastModifiedDate":"2020-12-18"},{"lineNumber":50,"author":{"gitId":"-"},"content":" Person editedBob \u003d new PersonBuilder(BOB).withName(VALID_NAME_BOB.toLowerCase()).build();","lastModifiedDate":"2020-12-18"},{"lineNumber":51,"author":{"gitId":"-"},"content":" assertFalse(BOB.isSamePerson(editedBob));","lastModifiedDate":"2020-12-18"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":53,"author":{"gitId":"-"},"content":" // name has trailing spaces, all other attributes same -\u003e returns false","lastModifiedDate":"2020-12-18"},{"lineNumber":54,"author":{"gitId":"-"},"content":" String nameWithTrailingSpaces \u003d VALID_NAME_BOB + \" \";","lastModifiedDate":"2020-12-18"},{"lineNumber":55,"author":{"gitId":"-"},"content":" editedBob \u003d new PersonBuilder(BOB).withName(nameWithTrailingSpaces).build();","lastModifiedDate":"2020-12-18"},{"lineNumber":56,"author":{"gitId":"-"},"content":" assertFalse(BOB.isSamePerson(editedBob));","lastModifiedDate":"2020-12-18"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-04-19"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":59,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-04-19"},{"lineNumber":60,"author":{"gitId":"-"},"content":" public void equals() {","lastModifiedDate":"2018-04-19"},{"lineNumber":61,"author":{"gitId":"-"},"content":" // same values -\u003e returns true","lastModifiedDate":"2018-04-19"},{"lineNumber":62,"author":{"gitId":"-"},"content":" Person aliceCopy \u003d new PersonBuilder(ALICE).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":63,"author":{"gitId":"joenus"},"content":" assertEquals(ALICE, aliceCopy);","lastModifiedDate":"2024-03-01"},{"lineNumber":64,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":65,"author":{"gitId":"-"},"content":" // same object -\u003e returns true","lastModifiedDate":"2018-04-19"},{"lineNumber":66,"author":{"gitId":"joenus"},"content":" assertEquals(ALICE, ALICE);","lastModifiedDate":"2024-03-01"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":68,"author":{"gitId":"-"},"content":" // null -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":69,"author":{"gitId":"joenus"},"content":" assertNotEquals(null, ALICE);","lastModifiedDate":"2024-03-01"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":71,"author":{"gitId":"-"},"content":" // different type -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":72,"author":{"gitId":"joenus"},"content":" assertNotEquals(5, ALICE);","lastModifiedDate":"2024-03-01"},{"lineNumber":73,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":74,"author":{"gitId":"-"},"content":" // different person -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":75,"author":{"gitId":"joenus"},"content":" assertNotEquals(ALICE, BOB);","lastModifiedDate":"2024-03-01"},{"lineNumber":76,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":77,"author":{"gitId":"-"},"content":" // different name -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":78,"author":{"gitId":"-"},"content":" Person editedAlice \u003d new PersonBuilder(ALICE).withName(VALID_NAME_BOB).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":79,"author":{"gitId":"joenus"},"content":" assertNotEquals(ALICE, editedAlice);","lastModifiedDate":"2024-03-01"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":81,"author":{"gitId":"-"},"content":" // different phone -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":82,"author":{"gitId":"-"},"content":" editedAlice \u003d new PersonBuilder(ALICE).withPhone(VALID_PHONE_BOB).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":83,"author":{"gitId":"joenus"},"content":" assertNotEquals(ALICE, editedAlice);","lastModifiedDate":"2024-03-01"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":85,"author":{"gitId":"-"},"content":" // different email -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":86,"author":{"gitId":"-"},"content":" editedAlice \u003d new PersonBuilder(ALICE).withEmail(VALID_EMAIL_BOB).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":87,"author":{"gitId":"joenus"},"content":" assertNotEquals(ALICE, editedAlice);","lastModifiedDate":"2024-03-01"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":89,"author":{"gitId":"-"},"content":" // different address -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":90,"author":{"gitId":"-"},"content":" editedAlice \u003d new PersonBuilder(ALICE).withAddress(VALID_ADDRESS_BOB).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":91,"author":{"gitId":"joenus"},"content":" assertNotEquals(ALICE, editedAlice);","lastModifiedDate":"2024-03-01"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-18"},{"lineNumber":93,"author":{"gitId":"-"},"content":" // different tags -\u003e returns false","lastModifiedDate":"2018-04-18"},{"lineNumber":94,"author":{"gitId":"-"},"content":" editedAlice \u003d new PersonBuilder(ALICE).withTags(VALID_TAG_HUSBAND).build();","lastModifiedDate":"2018-04-18"},{"lineNumber":95,"author":{"gitId":"joenus"},"content":" assertNotEquals(ALICE, editedAlice);","lastModifiedDate":"2024-03-01"},{"lineNumber":96,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":97,"author":{"gitId":"joenus"},"content":" // different notes -\u003e returns false","lastModifiedDate":"2024-02-29"},{"lineNumber":98,"author":{"gitId":"joenus"},"content":" editedAlice \u003d new PersonBuilder(ALICE).withNotes(new Note[] {VALID_NOTE_FLU}).build();","lastModifiedDate":"2024-02-29"},{"lineNumber":99,"author":{"gitId":"joenus"},"content":" assertNotEquals(ALICE, editedAlice);","lastModifiedDate":"2024-03-01"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-04-19"},{"lineNumber":101,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":102,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2019-02-23"},{"lineNumber":103,"author":{"gitId":"-"},"content":" public void toStringMethod() {","lastModifiedDate":"2019-02-23"},{"lineNumber":104,"author":{"gitId":"-"},"content":" String expected \u003d Person.class.getCanonicalName() + \"{name\u003d\" + ALICE.getName() + \", phone\u003d\" + ALICE.getPhone()","lastModifiedDate":"2019-02-23"},{"lineNumber":105,"author":{"gitId":"joenus"},"content":" + \", email\u003d\" + ALICE.getEmail() + \", address\u003d\" + ALICE.getAddress() + \", tags\u003d\" + ALICE.getTags()","lastModifiedDate":"2024-02-29"},{"lineNumber":106,"author":{"gitId":"joenus"},"content":" + \", notes\u003d\" + ALICE.getNotes() + \"}\";","lastModifiedDate":"2024-02-29"},{"lineNumber":107,"author":{"gitId":"-"},"content":" assertEquals(expected, ALICE.toString());","lastModifiedDate":"2019-02-23"},{"lineNumber":108,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":109,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":110,"author":{"gitId":"joenus"},"content":" @Nested","lastModifiedDate":"2024-03-01"},{"lineNumber":111,"author":{"gitId":"joenus"},"content":" class BuilderTests {","lastModifiedDate":"2024-03-01"},{"lineNumber":112,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":113,"author":{"gitId":"joenus"},"content":" public void build_default_returnsPerson() {","lastModifiedDate":"2024-03-01"},{"lineNumber":114,"author":{"gitId":"joenus"},"content":" var builder \u003d new Person.Builder(ALICE);","lastModifiedDate":"2024-03-01"},{"lineNumber":115,"author":{"gitId":"joenus"},"content":" assertEquals(ALICE, builder.build());","lastModifiedDate":"2024-03-01"},{"lineNumber":116,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":117,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":118,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":119,"author":{"gitId":"joenus"},"content":" public void build_updateValues_returnsPerson() {","lastModifiedDate":"2024-03-01"},{"lineNumber":120,"author":{"gitId":"joenus"},"content":" var builder \u003d new Person.Builder(ALICE)","lastModifiedDate":"2024-03-01"},{"lineNumber":121,"author":{"gitId":"joenus"},"content":" .setName(BENSON.getName())","lastModifiedDate":"2024-03-01"},{"lineNumber":122,"author":{"gitId":"joenus"},"content":" .setPhone(BENSON.getPhone())","lastModifiedDate":"2024-03-01"},{"lineNumber":123,"author":{"gitId":"joenus"},"content":" .setEmail(BENSON.getEmail())","lastModifiedDate":"2024-03-01"},{"lineNumber":124,"author":{"gitId":"joenus"},"content":" .setAddress(BENSON.getAddress())","lastModifiedDate":"2024-03-01"},{"lineNumber":125,"author":{"gitId":"joenus"},"content":" .setTags(BENSON.getTags())","lastModifiedDate":"2024-03-01"},{"lineNumber":126,"author":{"gitId":"joenus"},"content":" .setNotes(BENSON.getNotes());","lastModifiedDate":"2024-03-01"},{"lineNumber":127,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":128,"author":{"gitId":"joenus"},"content":" assertEquals(BENSON, builder.build());","lastModifiedDate":"2024-03-01"},{"lineNumber":129,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":130,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":131,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-09-01"}],"authorContributionMap":{"joenus":43,"-":88}},{"path":"src/test/java/seedu/address/model/person/note/DescriptionTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"joenus"},"content":"package seedu.address.model.person.note;","lastModifiedDate":"2024-02-29"},{"lineNumber":2,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":3,"author":{"gitId":"joenus"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2024-03-01"},{"lineNumber":4,"author":{"gitId":"joenus"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2024-02-29"},{"lineNumber":5,"author":{"gitId":"joenus"},"content":"import static org.junit.jupiter.api.Assertions.assertNotEquals;","lastModifiedDate":"2024-03-01"},{"lineNumber":6,"author":{"gitId":"joenus"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2024-02-29"},{"lineNumber":7,"author":{"gitId":"joenus"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2024-02-29"},{"lineNumber":8,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":9,"author":{"gitId":"joenus"},"content":"import org.junit.jupiter.api.Nested;","lastModifiedDate":"2024-02-29"},{"lineNumber":10,"author":{"gitId":"joenus"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2024-02-29"},{"lineNumber":11,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":12,"author":{"gitId":"joenus"},"content":"public class DescriptionTest {","lastModifiedDate":"2024-02-29"},{"lineNumber":13,"author":{"gitId":"joenus"},"content":" @Nested","lastModifiedDate":"2024-02-29"},{"lineNumber":14,"author":{"gitId":"joenus"},"content":" class ConstructorTests {","lastModifiedDate":"2024-02-29"},{"lineNumber":15,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-02-29"},{"lineNumber":16,"author":{"gitId":"joenus"},"content":" public void constructor_null_throwsNullPointerException() {","lastModifiedDate":"2024-02-29"},{"lineNumber":17,"author":{"gitId":"joenus"},"content":" assertThrows(NullPointerException.class, () -\u003e new Description(null));","lastModifiedDate":"2024-02-29"},{"lineNumber":18,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":19,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":20,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-02-29"},{"lineNumber":21,"author":{"gitId":"joenus"},"content":" public void constructor_invalidAddress_throwsIllegalArgumentException() {","lastModifiedDate":"2024-02-29"},{"lineNumber":22,"author":{"gitId":"joenus"},"content":" String invalid \u003d \"\";","lastModifiedDate":"2024-02-29"},{"lineNumber":23,"author":{"gitId":"joenus"},"content":" assertThrows(IllegalArgumentException.class, () -\u003e new Description(invalid));","lastModifiedDate":"2024-02-29"},{"lineNumber":24,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":25,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":26,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":27,"author":{"gitId":"joenus"},"content":" @Nested","lastModifiedDate":"2024-02-29"},{"lineNumber":28,"author":{"gitId":"joenus"},"content":" class IsValidTests {","lastModifiedDate":"2024-02-29"},{"lineNumber":29,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-02-29"},{"lineNumber":30,"author":{"gitId":"joenus"},"content":" public void isValid_null_throwsNullPointerException() {","lastModifiedDate":"2024-02-29"},{"lineNumber":31,"author":{"gitId":"joenus"},"content":" assertThrows(NullPointerException.class, () -\u003e Description.isValid(null));","lastModifiedDate":"2024-02-29"},{"lineNumber":32,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":33,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":34,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-02-29"},{"lineNumber":35,"author":{"gitId":"joenus"},"content":" public void isValid_invalid() {","lastModifiedDate":"2024-02-29"},{"lineNumber":36,"author":{"gitId":"joenus"},"content":" assertFalse(Description.isValid(\"\"));","lastModifiedDate":"2024-02-29"},{"lineNumber":37,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":38,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":39,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-02-29"},{"lineNumber":40,"author":{"gitId":"joenus"},"content":" public void isValid_valid() {","lastModifiedDate":"2024-02-29"},{"lineNumber":41,"author":{"gitId":"joenus"},"content":" assertTrue(Description.isValid(\"Blk 456, Den Road, #01-355\"));","lastModifiedDate":"2024-02-29"},{"lineNumber":42,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":43,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":44,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":45,"author":{"gitId":"joenus"},"content":" @Nested","lastModifiedDate":"2024-03-01"},{"lineNumber":46,"author":{"gitId":"joenus"},"content":" class EqualsTests {","lastModifiedDate":"2024-03-01"},{"lineNumber":47,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":48,"author":{"gitId":"joenus"},"content":" public void equals_sameValues() {","lastModifiedDate":"2024-03-01"},{"lineNumber":49,"author":{"gitId":"joenus"},"content":" Description description1 \u003d new Description(\"Test\");","lastModifiedDate":"2024-03-01"},{"lineNumber":50,"author":{"gitId":"joenus"},"content":" Description description2 \u003d new Description(\"Test\");","lastModifiedDate":"2024-03-01"},{"lineNumber":51,"author":{"gitId":"joenus"},"content":" assertEquals(description1, description2);","lastModifiedDate":"2024-03-01"},{"lineNumber":52,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":53,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":54,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":55,"author":{"gitId":"joenus"},"content":" public void equals_differentValues() {","lastModifiedDate":"2024-03-01"},{"lineNumber":56,"author":{"gitId":"joenus"},"content":" Description description1 \u003d new Description(\"Test1\");","lastModifiedDate":"2024-03-01"},{"lineNumber":57,"author":{"gitId":"joenus"},"content":" Description description2 \u003d new Description(\"Test2\");","lastModifiedDate":"2024-03-01"},{"lineNumber":58,"author":{"gitId":"joenus"},"content":" assertNotEquals(description1, description2);","lastModifiedDate":"2024-03-01"},{"lineNumber":59,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":60,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":61,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":62,"author":{"gitId":"joenus"},"content":" public void equals_null() {","lastModifiedDate":"2024-03-01"},{"lineNumber":63,"author":{"gitId":"joenus"},"content":" Description description \u003d new Description(\"Test\");","lastModifiedDate":"2024-03-01"},{"lineNumber":64,"author":{"gitId":"joenus"},"content":" assertNotEquals(description, null);","lastModifiedDate":"2024-03-01"},{"lineNumber":65,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":66,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":67,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":68,"author":{"gitId":"joenus"},"content":" public void equals_differentClass() {","lastModifiedDate":"2024-03-01"},{"lineNumber":69,"author":{"gitId":"joenus"},"content":" Description description \u003d new Description(\"Test\");","lastModifiedDate":"2024-03-01"},{"lineNumber":70,"author":{"gitId":"joenus"},"content":" Object other \u003d new Object();","lastModifiedDate":"2024-03-01"},{"lineNumber":71,"author":{"gitId":"joenus"},"content":" assertNotEquals(description, other);","lastModifiedDate":"2024-03-01"},{"lineNumber":72,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":73,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":74,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":75,"author":{"gitId":"joenus"},"content":" @Nested","lastModifiedDate":"2024-03-01"},{"lineNumber":76,"author":{"gitId":"joenus"},"content":" class HashCodeTests {","lastModifiedDate":"2024-03-01"},{"lineNumber":77,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":78,"author":{"gitId":"joenus"},"content":" public void hashCode_same() {","lastModifiedDate":"2024-03-01"},{"lineNumber":79,"author":{"gitId":"joenus"},"content":" Description description1 \u003d new Description(\"Test\");","lastModifiedDate":"2024-03-01"},{"lineNumber":80,"author":{"gitId":"joenus"},"content":" Description description2 \u003d new Description(\"Test\");","lastModifiedDate":"2024-03-01"},{"lineNumber":81,"author":{"gitId":"joenus"},"content":" assertEquals(description1.hashCode(), description2.hashCode());","lastModifiedDate":"2024-03-01"},{"lineNumber":82,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":83,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":84,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":85,"author":{"gitId":"joenus"},"content":" public void hashCode_different() {","lastModifiedDate":"2024-03-01"},{"lineNumber":86,"author":{"gitId":"joenus"},"content":" Description description1 \u003d new Description(\"Test1\");","lastModifiedDate":"2024-03-01"},{"lineNumber":87,"author":{"gitId":"joenus"},"content":" Description description2 \u003d new Description(\"Test2\");","lastModifiedDate":"2024-03-01"},{"lineNumber":88,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":89,"author":{"gitId":"joenus"},"content":" assertNotEquals(description1.hashCode(), description2.hashCode());","lastModifiedDate":"2024-03-01"},{"lineNumber":90,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":91,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":92,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":93,"author":{"gitId":"joenus"},"content":" @Nested","lastModifiedDate":"2024-03-01"},{"lineNumber":94,"author":{"gitId":"joenus"},"content":" class ToStringTests {","lastModifiedDate":"2024-03-01"},{"lineNumber":95,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":96,"author":{"gitId":"joenus"},"content":" public void toString_sucess() {","lastModifiedDate":"2024-03-01"},{"lineNumber":97,"author":{"gitId":"joenus"},"content":" String validDescription \u003d \"Some valid description\";","lastModifiedDate":"2024-03-01"},{"lineNumber":98,"author":{"gitId":"joenus"},"content":" Description description \u003d new Description(validDescription);","lastModifiedDate":"2024-03-01"},{"lineNumber":99,"author":{"gitId":"joenus"},"content":" assertEquals(validDescription, description.toString());","lastModifiedDate":"2024-03-01"},{"lineNumber":100,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":101,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":102,"author":{"gitId":"joenus"},"content":"}","lastModifiedDate":"2024-02-29"}],"authorContributionMap":{"joenus":102}},{"path":"src/test/java/seedu/address/model/person/note/NoteTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"joenus"},"content":"package seedu.address.model.person.note;","lastModifiedDate":"2024-02-29"},{"lineNumber":2,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":3,"author":{"gitId":"joenus"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2024-03-01"},{"lineNumber":4,"author":{"gitId":"joenus"},"content":"import static org.junit.jupiter.api.Assertions.assertNotEquals;","lastModifiedDate":"2024-03-01"},{"lineNumber":5,"author":{"gitId":"joenus"},"content":"import static org.junit.jupiter.api.Assertions.assertNotNull;","lastModifiedDate":"2024-03-01"},{"lineNumber":6,"author":{"gitId":"joenus"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2024-02-29"},{"lineNumber":7,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":8,"author":{"gitId":"joenus"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-03-01"},{"lineNumber":9,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":10,"author":{"gitId":"joenus"},"content":"import org.junit.jupiter.api.Nested;","lastModifiedDate":"2024-02-29"},{"lineNumber":11,"author":{"gitId":"joenus"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2024-02-29"},{"lineNumber":12,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":13,"author":{"gitId":"joenus"},"content":"public class NoteTest {","lastModifiedDate":"2024-02-29"},{"lineNumber":14,"author":{"gitId":"joenus"},"content":" @Nested","lastModifiedDate":"2024-02-29"},{"lineNumber":15,"author":{"gitId":"joenus"},"content":" class ConstructorTests {","lastModifiedDate":"2024-02-29"},{"lineNumber":16,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-02-29"},{"lineNumber":17,"author":{"gitId":"joenus"},"content":" public void constructor_null_throwsNullPointerException() {","lastModifiedDate":"2024-02-29"},{"lineNumber":18,"author":{"gitId":"joenus"},"content":" assertThrows(NullPointerException.class, () -\u003e new Note(null, null));","lastModifiedDate":"2024-02-29"},{"lineNumber":19,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":20,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":21,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":22,"author":{"gitId":"joenus"},"content":" public void constructor_success_createsInstance() {","lastModifiedDate":"2024-03-01"},{"lineNumber":23,"author":{"gitId":"joenus"},"content":" LocalDateTime dateTime \u003d LocalDateTime.now();","lastModifiedDate":"2024-03-01"},{"lineNumber":24,"author":{"gitId":"joenus"},"content":" Description description \u003d new Description(\"Some description\");","lastModifiedDate":"2024-03-01"},{"lineNumber":25,"author":{"gitId":"joenus"},"content":" Note note \u003d new Note(dateTime, description);","lastModifiedDate":"2024-03-01"},{"lineNumber":26,"author":{"gitId":"joenus"},"content":" assertNotNull(note);","lastModifiedDate":"2024-03-01"},{"lineNumber":27,"author":{"gitId":"joenus"},"content":" assertEquals(dateTime, note.getDateTime());","lastModifiedDate":"2024-03-01"},{"lineNumber":28,"author":{"gitId":"joenus"},"content":" assertEquals(description, note.getDescription());","lastModifiedDate":"2024-03-01"},{"lineNumber":29,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":30,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":31,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":32,"author":{"gitId":"joenus"},"content":" @Nested","lastModifiedDate":"2024-03-01"},{"lineNumber":33,"author":{"gitId":"joenus"},"content":" class EqualsTests {","lastModifiedDate":"2024-03-01"},{"lineNumber":34,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":35,"author":{"gitId":"joenus"},"content":" public void equals_same() {","lastModifiedDate":"2024-03-01"},{"lineNumber":36,"author":{"gitId":"joenus"},"content":" LocalDateTime dateTime \u003d LocalDateTime.now();","lastModifiedDate":"2024-03-01"},{"lineNumber":37,"author":{"gitId":"joenus"},"content":" Description description \u003d new Description(\"Test description\");","lastModifiedDate":"2024-03-01"},{"lineNumber":38,"author":{"gitId":"joenus"},"content":" Note note1 \u003d new Note(dateTime, description);","lastModifiedDate":"2024-03-01"},{"lineNumber":39,"author":{"gitId":"joenus"},"content":" Note note2 \u003d new Note(dateTime, description);","lastModifiedDate":"2024-03-01"},{"lineNumber":40,"author":{"gitId":"joenus"},"content":" assertEquals(note1, note2);","lastModifiedDate":"2024-03-01"},{"lineNumber":41,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":42,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":43,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":44,"author":{"gitId":"joenus"},"content":" public void equals_differentDateTime() {","lastModifiedDate":"2024-03-01"},{"lineNumber":45,"author":{"gitId":"joenus"},"content":" Description description \u003d new Description(\"Test description\");","lastModifiedDate":"2024-03-01"},{"lineNumber":46,"author":{"gitId":"joenus"},"content":" Note note1 \u003d new Note(LocalDateTime.now(), description);","lastModifiedDate":"2024-03-01"},{"lineNumber":47,"author":{"gitId":"joenus"},"content":" Note note2 \u003d new Note(LocalDateTime.now().plusDays(1), description);","lastModifiedDate":"2024-03-01"},{"lineNumber":48,"author":{"gitId":"joenus"},"content":" assertNotEquals(note1, note2);","lastModifiedDate":"2024-03-01"},{"lineNumber":49,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":50,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":51,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":52,"author":{"gitId":"joenus"},"content":" public void equals_differentDescription() {","lastModifiedDate":"2024-03-01"},{"lineNumber":53,"author":{"gitId":"joenus"},"content":" LocalDateTime dateTime \u003d LocalDateTime.now();","lastModifiedDate":"2024-03-01"},{"lineNumber":54,"author":{"gitId":"joenus"},"content":" Note note1 \u003d new Note(dateTime, new Description(\"Description 1\"));","lastModifiedDate":"2024-03-01"},{"lineNumber":55,"author":{"gitId":"joenus"},"content":" Note note2 \u003d new Note(dateTime, new Description(\"Description 2\"));","lastModifiedDate":"2024-03-01"},{"lineNumber":56,"author":{"gitId":"joenus"},"content":" assertNotEquals(note1, note2);","lastModifiedDate":"2024-03-01"},{"lineNumber":57,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":58,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":59,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":60,"author":{"gitId":"joenus"},"content":" @Nested","lastModifiedDate":"2024-03-01"},{"lineNumber":61,"author":{"gitId":"joenus"},"content":" class HashCodeTests {","lastModifiedDate":"2024-03-01"},{"lineNumber":62,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":63,"author":{"gitId":"joenus"},"content":" public void hashCode_same() {","lastModifiedDate":"2024-03-01"},{"lineNumber":64,"author":{"gitId":"joenus"},"content":" LocalDateTime dateTime \u003d LocalDateTime.now();","lastModifiedDate":"2024-03-01"},{"lineNumber":65,"author":{"gitId":"joenus"},"content":" Description description \u003d new Description(\"Test description\");","lastModifiedDate":"2024-03-01"},{"lineNumber":66,"author":{"gitId":"joenus"},"content":" Note note1 \u003d new Note(dateTime, description);","lastModifiedDate":"2024-03-01"},{"lineNumber":67,"author":{"gitId":"joenus"},"content":" Note note2 \u003d new Note(dateTime, description);","lastModifiedDate":"2024-03-01"},{"lineNumber":68,"author":{"gitId":"joenus"},"content":" assertEquals(note1.hashCode(), note2.hashCode());","lastModifiedDate":"2024-03-01"},{"lineNumber":69,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":70,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":71,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":72,"author":{"gitId":"joenus"},"content":" public void hashCode_different() {","lastModifiedDate":"2024-03-01"},{"lineNumber":73,"author":{"gitId":"joenus"},"content":" LocalDateTime dateTime \u003d LocalDateTime.now();","lastModifiedDate":"2024-03-01"},{"lineNumber":74,"author":{"gitId":"joenus"},"content":" Description description \u003d new Description(\"Test description\");","lastModifiedDate":"2024-03-01"},{"lineNumber":75,"author":{"gitId":"joenus"},"content":" Note note1 \u003d new Note(dateTime, description);","lastModifiedDate":"2024-03-01"},{"lineNumber":76,"author":{"gitId":"joenus"},"content":" Note note2 \u003d new Note(dateTime, description);","lastModifiedDate":"2024-03-01"},{"lineNumber":77,"author":{"gitId":"joenus"},"content":" assertEquals(note1.hashCode(), note2.hashCode());","lastModifiedDate":"2024-03-01"},{"lineNumber":78,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":79,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":80,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":81,"author":{"gitId":"joenus"},"content":" @Nested","lastModifiedDate":"2024-03-01"},{"lineNumber":82,"author":{"gitId":"joenus"},"content":" class ToStringTests {","lastModifiedDate":"2024-03-01"},{"lineNumber":83,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":84,"author":{"gitId":"joenus"},"content":" public void toString_success() {","lastModifiedDate":"2024-03-01"},{"lineNumber":85,"author":{"gitId":"joenus"},"content":" LocalDateTime dateTime \u003d LocalDateTime.of(2023, 4, 20, 15, 30);","lastModifiedDate":"2024-03-01"},{"lineNumber":86,"author":{"gitId":"joenus"},"content":" Description description \u003d new Description(\"Appointment at clinic\");","lastModifiedDate":"2024-03-01"},{"lineNumber":87,"author":{"gitId":"joenus"},"content":" Note note \u003d new Note(dateTime, description);","lastModifiedDate":"2024-03-01"},{"lineNumber":88,"author":{"gitId":"joenus"},"content":" String expected \u003d","lastModifiedDate":"2024-03-01"},{"lineNumber":89,"author":{"gitId":"joenus"},"content":" String.format(\"seedu.address.model.person.note.Note{dateTime\u003d%s, description\u003d%s}\", dateTime,","lastModifiedDate":"2024-03-01"},{"lineNumber":90,"author":{"gitId":"joenus"},"content":" description);","lastModifiedDate":"2024-03-01"},{"lineNumber":91,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":92,"author":{"gitId":"joenus"},"content":" assertEquals(expected, note.toString());","lastModifiedDate":"2024-03-01"},{"lineNumber":93,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":94,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":95,"author":{"gitId":"joenus"},"content":"}","lastModifiedDate":"2024-02-29"}],"authorContributionMap":{"joenus":95}},{"path":"src/test/java/seedu/address/model/person/tag/TagTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"joenus"},"content":"package seedu.address.model.person.tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-04"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-14"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-03-14"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-04"},{"lineNumber":7,"author":{"gitId":"-"},"content":"public class TagTest {","lastModifiedDate":"2017-12-04"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-04"},{"lineNumber":9,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-12-04"},{"lineNumber":10,"author":{"gitId":"-"},"content":" public void constructor_null_throwsNullPointerException() {","lastModifiedDate":"2017-12-04"},{"lineNumber":11,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e new Tag(null));","lastModifiedDate":"2019-03-14"},{"lineNumber":12,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-12-04"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-04"},{"lineNumber":14,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-30"},{"lineNumber":15,"author":{"gitId":"-"},"content":" public void constructor_invalidTagName_throwsIllegalArgumentException() {","lastModifiedDate":"2017-05-30"},{"lineNumber":16,"author":{"gitId":"-"},"content":" String invalidTagName \u003d \"\";","lastModifiedDate":"2017-05-30"},{"lineNumber":17,"author":{"gitId":"-"},"content":" assertThrows(IllegalArgumentException.class, () -\u003e new Tag(invalidTagName));","lastModifiedDate":"2019-03-14"},{"lineNumber":18,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":20,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-12-04"},{"lineNumber":21,"author":{"gitId":"-"},"content":" public void isValidTagName() {","lastModifiedDate":"2017-12-04"},{"lineNumber":22,"author":{"gitId":"-"},"content":" // null tag name","lastModifiedDate":"2017-12-04"},{"lineNumber":23,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e Tag.isValidTagName(null));","lastModifiedDate":"2019-03-14"},{"lineNumber":24,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-12-04"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-04"},{"lineNumber":26,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-12-04"}],"authorContributionMap":{"joenus":1,"-":25}},{"path":"src/test/java/seedu/address/model/util/SampleDataUtilTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"joenus"},"content":"package seedu.address.model.util;","lastModifiedDate":"2024-03-01"},{"lineNumber":2,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":3,"author":{"gitId":"joenus"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2024-03-01"},{"lineNumber":4,"author":{"gitId":"joenus"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2024-03-01"},{"lineNumber":5,"author":{"gitId":"joenus"},"content":"import static org.junit.jupiter.api.Assertions.assertNotNull;","lastModifiedDate":"2024-03-01"},{"lineNumber":6,"author":{"gitId":"joenus"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2024-03-01"},{"lineNumber":7,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":8,"author":{"gitId":"joenus"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-03-01"},{"lineNumber":9,"author":{"gitId":"joenus"},"content":"import java.util.Set;","lastModifiedDate":"2024-03-01"},{"lineNumber":10,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":11,"author":{"gitId":"joenus"},"content":"import org.junit.jupiter.api.Nested;","lastModifiedDate":"2024-03-01"},{"lineNumber":12,"author":{"gitId":"joenus"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2024-03-01"},{"lineNumber":13,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":14,"author":{"gitId":"joenus"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2024-03-01"},{"lineNumber":15,"author":{"gitId":"joenus"},"content":"import seedu.address.model.ReadOnlyAddressBook;","lastModifiedDate":"2024-03-01"},{"lineNumber":16,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Description;","lastModifiedDate":"2024-03-01"},{"lineNumber":17,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Note;","lastModifiedDate":"2024-03-01"},{"lineNumber":18,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.tag.Tag;","lastModifiedDate":"2024-03-01"},{"lineNumber":19,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":20,"author":{"gitId":"joenus"},"content":"public class SampleDataUtilTest {","lastModifiedDate":"2024-03-01"},{"lineNumber":21,"author":{"gitId":"joenus"},"content":" private static final LocalDateTime TEST_DATE_TIME \u003d LocalDateTime.of(2024, 1, 1, 12, 30);","lastModifiedDate":"2024-03-01"},{"lineNumber":22,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":23,"author":{"gitId":"joenus"},"content":" @Nested","lastModifiedDate":"2024-03-01"},{"lineNumber":24,"author":{"gitId":"joenus"},"content":" class GetSampleAddressBookTests {","lastModifiedDate":"2024-03-01"},{"lineNumber":25,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":26,"author":{"gitId":"joenus"},"content":" public void getSampleAddressBook_success_returnsAddressBook() {","lastModifiedDate":"2024-03-01"},{"lineNumber":27,"author":{"gitId":"joenus"},"content":" ReadOnlyAddressBook result \u003d SampleDataUtil.getSampleAddressBook();","lastModifiedDate":"2024-03-01"},{"lineNumber":28,"author":{"gitId":"joenus"},"content":" assertNotNull(result);","lastModifiedDate":"2024-03-01"},{"lineNumber":29,"author":{"gitId":"joenus"},"content":" assertFalse(result.getPersonList().isEmpty());","lastModifiedDate":"2024-03-01"},{"lineNumber":30,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":31,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":32,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":33,"author":{"gitId":"joenus"},"content":" @Nested","lastModifiedDate":"2024-03-01"},{"lineNumber":34,"author":{"gitId":"joenus"},"content":" class GetTagsTests {","lastModifiedDate":"2024-03-01"},{"lineNumber":35,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":36,"author":{"gitId":"joenus"},"content":" void getTags_success_returnsEmptySet() {","lastModifiedDate":"2024-03-01"},{"lineNumber":37,"author":{"gitId":"joenus"},"content":" Set\u003cTag\u003e tags \u003d SampleDataUtil.getTags();","lastModifiedDate":"2024-03-01"},{"lineNumber":38,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":39,"author":{"gitId":"joenus"},"content":" assertTrue(tags.isEmpty());","lastModifiedDate":"2024-03-01"},{"lineNumber":40,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":41,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":42,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":43,"author":{"gitId":"joenus"},"content":" public void getTags_success_returnsPopulatedSet() {","lastModifiedDate":"2024-03-01"},{"lineNumber":44,"author":{"gitId":"joenus"},"content":" String[] tags \u003d {\"friend\", \"colleague\"};","lastModifiedDate":"2024-03-01"},{"lineNumber":45,"author":{"gitId":"joenus"},"content":" Set\u003cTag\u003e result \u003d SampleDataUtil.getTags(tags);","lastModifiedDate":"2024-03-01"},{"lineNumber":46,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":47,"author":{"gitId":"joenus"},"content":" assertEquals(2, result.size());","lastModifiedDate":"2024-03-01"},{"lineNumber":48,"author":{"gitId":"joenus"},"content":" assertTrue(result.contains(new Tag(tags[0])));","lastModifiedDate":"2024-03-01"},{"lineNumber":49,"author":{"gitId":"joenus"},"content":" assertTrue(result.contains(new Tag(tags[1])));","lastModifiedDate":"2024-03-01"},{"lineNumber":50,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":51,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":52,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":53,"author":{"gitId":"joenus"},"content":" @Nested","lastModifiedDate":"2024-03-01"},{"lineNumber":54,"author":{"gitId":"joenus"},"content":" class GetNotesTests {","lastModifiedDate":"2024-03-01"},{"lineNumber":55,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":56,"author":{"gitId":"joenus"},"content":" public void getNotes_success_returnsEmptyList() {","lastModifiedDate":"2024-03-01"},{"lineNumber":57,"author":{"gitId":"joenus"},"content":" Note[] notes \u003d {};","lastModifiedDate":"2024-03-01"},{"lineNumber":58,"author":{"gitId":"joenus"},"content":" ObservableList\u003cNote\u003e result \u003d SampleDataUtil.getNotes(notes);","lastModifiedDate":"2024-03-01"},{"lineNumber":59,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":60,"author":{"gitId":"joenus"},"content":" assertTrue(result.isEmpty());","lastModifiedDate":"2024-03-01"},{"lineNumber":61,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":62,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":63,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":64,"author":{"gitId":"joenus"},"content":" public void getNotes_success_returnsPopulatedList() {","lastModifiedDate":"2024-03-01"},{"lineNumber":65,"author":{"gitId":"joenus"},"content":" var note1 \u003d new Note(TEST_DATE_TIME, new Description(\"Sample note 1\"));","lastModifiedDate":"2024-03-01"},{"lineNumber":66,"author":{"gitId":"joenus"},"content":" var note2 \u003d new Note(TEST_DATE_TIME, new Description(\"Sample note 2\"));","lastModifiedDate":"2024-03-01"},{"lineNumber":67,"author":{"gitId":"joenus"},"content":" Note[] notes \u003d {note1, note2};","lastModifiedDate":"2024-03-01"},{"lineNumber":68,"author":{"gitId":"joenus"},"content":" ObservableList\u003cNote\u003e result \u003d SampleDataUtil.getNotes(notes);","lastModifiedDate":"2024-03-01"},{"lineNumber":69,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":70,"author":{"gitId":"joenus"},"content":" assertEquals(2, result.size());","lastModifiedDate":"2024-03-01"},{"lineNumber":71,"author":{"gitId":"joenus"},"content":" assertEquals(note1, result.get(0));","lastModifiedDate":"2024-03-01"},{"lineNumber":72,"author":{"gitId":"joenus"},"content":" assertEquals(note2, result.get(1));","lastModifiedDate":"2024-03-01"},{"lineNumber":73,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":74,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":75,"author":{"gitId":"joenus"},"content":"}","lastModifiedDate":"2024-03-01"}],"authorContributionMap":{"joenus":75}},{"path":"src/test/java/seedu/address/storage/JsonAdapatedNoteTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"joenus"},"content":"package seedu.address.storage;","lastModifiedDate":"2024-03-01"},{"lineNumber":2,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":3,"author":{"gitId":"joenus"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2024-03-01"},{"lineNumber":4,"author":{"gitId":"joenus"},"content":"import static org.junit.jupiter.api.Assertions.assertNotNull;","lastModifiedDate":"2024-03-01"},{"lineNumber":5,"author":{"gitId":"joenus"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2024-03-01"},{"lineNumber":6,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":7,"author":{"gitId":"joenus"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-03-01"},{"lineNumber":8,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":9,"author":{"gitId":"joenus"},"content":"import org.junit.jupiter.api.Nested;","lastModifiedDate":"2024-03-01"},{"lineNumber":10,"author":{"gitId":"joenus"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2024-03-01"},{"lineNumber":11,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":12,"author":{"gitId":"joenus"},"content":"import seedu.address.commons.exceptions.IllegalValueException;","lastModifiedDate":"2024-03-01"},{"lineNumber":13,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Description;","lastModifiedDate":"2024-03-01"},{"lineNumber":14,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Note;","lastModifiedDate":"2024-03-01"},{"lineNumber":15,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":16,"author":{"gitId":"joenus"},"content":"public class JsonAdapatedNoteTest {","lastModifiedDate":"2024-03-01"},{"lineNumber":17,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":18,"author":{"gitId":"joenus"},"content":" private static final LocalDateTime TEST_DATE_TIME \u003d LocalDateTime.of(2024, 1, 1, 12, 30);","lastModifiedDate":"2024-03-01"},{"lineNumber":19,"author":{"gitId":"joenus"},"content":" private static final String VALID_DESCRIPTION \u003d \"General Flu\";","lastModifiedDate":"2024-03-01"},{"lineNumber":20,"author":{"gitId":"joenus"},"content":" private static final String INVALID_DESCRIPTION \u003d \"\";","lastModifiedDate":"2024-03-01"},{"lineNumber":21,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":22,"author":{"gitId":"joenus"},"content":" @Nested","lastModifiedDate":"2024-03-01"},{"lineNumber":23,"author":{"gitId":"joenus"},"content":" class ConstructorTests {","lastModifiedDate":"2024-03-01"},{"lineNumber":24,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":25,"author":{"gitId":"joenus"},"content":" public void constructor_jsonProperty_returnsNote() {","lastModifiedDate":"2024-03-01"},{"lineNumber":26,"author":{"gitId":"joenus"},"content":" JsonAdapatedNote jsonAdapatedNote \u003d new JsonAdapatedNote(TEST_DATE_TIME, VALID_DESCRIPTION);","lastModifiedDate":"2024-03-01"},{"lineNumber":27,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":28,"author":{"gitId":"joenus"},"content":" assertNotNull(jsonAdapatedNote);","lastModifiedDate":"2024-03-01"},{"lineNumber":29,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":30,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":31,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":32,"author":{"gitId":"joenus"},"content":" public void constructor_note_returnsNote() {","lastModifiedDate":"2024-03-01"},{"lineNumber":33,"author":{"gitId":"joenus"},"content":" JsonAdapatedNote jsonAdapatedNote \u003d","lastModifiedDate":"2024-03-01"},{"lineNumber":34,"author":{"gitId":"joenus"},"content":" new JsonAdapatedNote(new Note(TEST_DATE_TIME, new Description(VALID_DESCRIPTION)));","lastModifiedDate":"2024-03-01"},{"lineNumber":35,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":36,"author":{"gitId":"joenus"},"content":" assertNotNull(jsonAdapatedNote);","lastModifiedDate":"2024-03-01"},{"lineNumber":37,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":38,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":39,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":40,"author":{"gitId":"joenus"},"content":" @Nested","lastModifiedDate":"2024-03-01"},{"lineNumber":41,"author":{"gitId":"joenus"},"content":" class ToModelTypeTests {","lastModifiedDate":"2024-03-01"},{"lineNumber":42,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":43,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":44,"author":{"gitId":"joenus"},"content":" public void toModelType_success_returnsNote() throws Exception {","lastModifiedDate":"2024-03-01"},{"lineNumber":45,"author":{"gitId":"joenus"},"content":" Note original \u003d new Note(TEST_DATE_TIME, new Description(VALID_DESCRIPTION));","lastModifiedDate":"2024-03-01"},{"lineNumber":46,"author":{"gitId":"joenus"},"content":" JsonAdapatedNote jsonAdapatedNote \u003d new JsonAdapatedNote(original);","lastModifiedDate":"2024-03-01"},{"lineNumber":47,"author":{"gitId":"joenus"},"content":" Note modelNote \u003d jsonAdapatedNote.toModelType();","lastModifiedDate":"2024-03-01"},{"lineNumber":48,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":49,"author":{"gitId":"joenus"},"content":" assertEquals(original, modelNote);","lastModifiedDate":"2024-03-01"},{"lineNumber":50,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":51,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":52,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":53,"author":{"gitId":"joenus"},"content":" public void toModelType_invalidDescription_throwsIllegalValueException() {","lastModifiedDate":"2024-03-01"},{"lineNumber":54,"author":{"gitId":"joenus"},"content":" JsonAdapatedNote jsonAdapatedNote \u003d new JsonAdapatedNote(TEST_DATE_TIME, INVALID_DESCRIPTION);","lastModifiedDate":"2024-03-01"},{"lineNumber":55,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":56,"author":{"gitId":"joenus"},"content":" assertThrows(IllegalValueException.class, jsonAdapatedNote::toModelType);","lastModifiedDate":"2024-03-01"},{"lineNumber":57,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":58,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":59,"author":{"gitId":"joenus"},"content":" @Test","lastModifiedDate":"2024-03-01"},{"lineNumber":60,"author":{"gitId":"joenus"},"content":" public void toModelType_nullDescription_throwsIllegalValueException() {","lastModifiedDate":"2024-03-01"},{"lineNumber":61,"author":{"gitId":"joenus"},"content":" JsonAdapatedNote jsonAdapatedNote \u003d new JsonAdapatedNote(TEST_DATE_TIME, null);","lastModifiedDate":"2024-03-01"},{"lineNumber":62,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":63,"author":{"gitId":"joenus"},"content":" assertThrows(IllegalValueException.class, jsonAdapatedNote::toModelType);","lastModifiedDate":"2024-03-01"},{"lineNumber":64,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":65,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":66,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":67,"author":{"gitId":"joenus"},"content":"}","lastModifiedDate":"2024-03-01"}],"authorContributionMap":{"joenus":67}},{"path":"src/test/java/seedu/address/storage/JsonAdaptedPersonTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.storage;","lastModifiedDate":"2018-08-13"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-03-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.storage.JsonAdaptedPerson.MISSING_FIELD_MESSAGE_FORMAT;","lastModifiedDate":"2018-08-13"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-14"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.BENSON;","lastModifiedDate":"2018-08-13"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.ArrayList;","lastModifiedDate":"2018-08-13"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2018-08-13"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2018-08-13"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":14,"author":{"gitId":"joenus"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2024-02-29"},{"lineNumber":15,"author":{"gitId":"joenus"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2024-02-29"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.commons.exceptions.IllegalValueException;","lastModifiedDate":"2018-08-13"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2018-08-13"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2018-08-13"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2018-08-13"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2018-08-13"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":22,"author":{"gitId":"-"},"content":"public class JsonAdaptedPersonTest {","lastModifiedDate":"2018-08-13"},{"lineNumber":23,"author":{"gitId":"-"},"content":" private static final String INVALID_NAME \u003d \"R@chel\";","lastModifiedDate":"2018-08-13"},{"lineNumber":24,"author":{"gitId":"-"},"content":" private static final String INVALID_PHONE \u003d \"+651234\";","lastModifiedDate":"2018-08-13"},{"lineNumber":25,"author":{"gitId":"-"},"content":" private static final String INVALID_ADDRESS \u003d \" \";","lastModifiedDate":"2018-08-13"},{"lineNumber":26,"author":{"gitId":"-"},"content":" private static final String INVALID_EMAIL \u003d \"example.com\";","lastModifiedDate":"2018-08-13"},{"lineNumber":27,"author":{"gitId":"-"},"content":" private static final String INVALID_TAG \u003d \"#friend\";","lastModifiedDate":"2018-08-13"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":29,"author":{"gitId":"-"},"content":" private static final String VALID_NAME \u003d BENSON.getName().toString();","lastModifiedDate":"2018-08-13"},{"lineNumber":30,"author":{"gitId":"-"},"content":" private static final String VALID_PHONE \u003d BENSON.getPhone().toString();","lastModifiedDate":"2018-08-13"},{"lineNumber":31,"author":{"gitId":"-"},"content":" private static final String VALID_EMAIL \u003d BENSON.getEmail().toString();","lastModifiedDate":"2018-08-13"},{"lineNumber":32,"author":{"gitId":"-"},"content":" private static final String VALID_ADDRESS \u003d BENSON.getAddress().toString();","lastModifiedDate":"2018-08-13"},{"lineNumber":33,"author":{"gitId":"-"},"content":" private static final List\u003cJsonAdaptedTag\u003e VALID_TAGS \u003d BENSON.getTags().stream()","lastModifiedDate":"2018-08-13"},{"lineNumber":34,"author":{"gitId":"-"},"content":" .map(JsonAdaptedTag::new)","lastModifiedDate":"2018-08-13"},{"lineNumber":35,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2018-08-13"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":37,"author":{"gitId":"joenus"},"content":" private static final ObservableList\u003cJsonAdapatedNote\u003e VALID_NOTES \u003d BENSON.getNotes().stream()","lastModifiedDate":"2024-02-29"},{"lineNumber":38,"author":{"gitId":"joenus"},"content":" .map(JsonAdapatedNote::new)","lastModifiedDate":"2024-02-29"},{"lineNumber":39,"author":{"gitId":"joenus"},"content":" .collect(Collectors.toCollection(FXCollections::observableArrayList));","lastModifiedDate":"2024-02-29"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":41,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":42,"author":{"gitId":"-"},"content":" public void toModelType_validPersonDetails_returnsPerson() throws Exception {","lastModifiedDate":"2018-08-13"},{"lineNumber":43,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d new JsonAdaptedPerson(BENSON);","lastModifiedDate":"2018-08-13"},{"lineNumber":44,"author":{"gitId":"-"},"content":" assertEquals(BENSON, person.toModelType());","lastModifiedDate":"2018-08-13"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":47,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":48,"author":{"gitId":"-"},"content":" public void toModelType_invalidName_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":49,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2018-08-13"},{"lineNumber":50,"author":{"gitId":"joenus"},"content":" new JsonAdaptedPerson(INVALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS, VALID_NOTES);","lastModifiedDate":"2024-02-29"},{"lineNumber":51,"author":{"gitId":"-"},"content":" String expectedMessage \u003d Name.MESSAGE_CONSTRAINTS;","lastModifiedDate":"2018-08-13"},{"lineNumber":52,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":55,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":56,"author":{"gitId":"-"},"content":" public void toModelType_nullName_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":57,"author":{"gitId":"joenus"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2024-02-29"},{"lineNumber":58,"author":{"gitId":"joenus"},"content":" new JsonAdaptedPerson(null, VALID_PHONE, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS, VALID_NOTES);","lastModifiedDate":"2024-02-29"},{"lineNumber":59,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(MISSING_FIELD_MESSAGE_FORMAT, Name.class.getSimpleName());","lastModifiedDate":"2018-08-13"},{"lineNumber":60,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":63,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":64,"author":{"gitId":"-"},"content":" public void toModelType_invalidPhone_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":65,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2018-08-13"},{"lineNumber":66,"author":{"gitId":"joenus"},"content":" new JsonAdaptedPerson(VALID_NAME, INVALID_PHONE, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS, VALID_NOTES);","lastModifiedDate":"2024-02-29"},{"lineNumber":67,"author":{"gitId":"-"},"content":" String expectedMessage \u003d Phone.MESSAGE_CONSTRAINTS;","lastModifiedDate":"2018-08-13"},{"lineNumber":68,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":69,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":71,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":72,"author":{"gitId":"-"},"content":" public void toModelType_nullPhone_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":73,"author":{"gitId":"joenus"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2024-02-29"},{"lineNumber":74,"author":{"gitId":"joenus"},"content":" new JsonAdaptedPerson(VALID_NAME, null, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS, VALID_NOTES);","lastModifiedDate":"2024-02-29"},{"lineNumber":75,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(MISSING_FIELD_MESSAGE_FORMAT, Phone.class.getSimpleName());","lastModifiedDate":"2018-08-13"},{"lineNumber":76,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":77,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":78,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":79,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":80,"author":{"gitId":"-"},"content":" public void toModelType_invalidEmail_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":81,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2018-08-13"},{"lineNumber":82,"author":{"gitId":"joenus"},"content":" new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, INVALID_EMAIL, VALID_ADDRESS, VALID_TAGS, VALID_NOTES);","lastModifiedDate":"2024-02-29"},{"lineNumber":83,"author":{"gitId":"-"},"content":" String expectedMessage \u003d Email.MESSAGE_CONSTRAINTS;","lastModifiedDate":"2018-08-13"},{"lineNumber":84,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":85,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":87,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":88,"author":{"gitId":"-"},"content":" public void toModelType_nullEmail_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":89,"author":{"gitId":"joenus"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2024-02-29"},{"lineNumber":90,"author":{"gitId":"joenus"},"content":" new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, null, VALID_ADDRESS, VALID_TAGS, VALID_NOTES);","lastModifiedDate":"2024-02-29"},{"lineNumber":91,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(MISSING_FIELD_MESSAGE_FORMAT, Email.class.getSimpleName());","lastModifiedDate":"2018-08-13"},{"lineNumber":92,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":93,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":94,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":95,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":96,"author":{"gitId":"-"},"content":" public void toModelType_invalidAddress_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":97,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2018-08-13"},{"lineNumber":98,"author":{"gitId":"joenus"},"content":" new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, INVALID_ADDRESS, VALID_TAGS, VALID_NOTES);","lastModifiedDate":"2024-02-29"},{"lineNumber":99,"author":{"gitId":"-"},"content":" String expectedMessage \u003d Address.MESSAGE_CONSTRAINTS;","lastModifiedDate":"2018-08-13"},{"lineNumber":100,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":101,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":102,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":103,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":104,"author":{"gitId":"-"},"content":" public void toModelType_nullAddress_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":105,"author":{"gitId":"joenus"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2024-02-29"},{"lineNumber":106,"author":{"gitId":"joenus"},"content":" new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, null, VALID_TAGS, VALID_NOTES);","lastModifiedDate":"2024-02-29"},{"lineNumber":107,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(MISSING_FIELD_MESSAGE_FORMAT, Address.class.getSimpleName());","lastModifiedDate":"2018-08-13"},{"lineNumber":108,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":109,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":110,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":111,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":112,"author":{"gitId":"-"},"content":" public void toModelType_invalidTags_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":113,"author":{"gitId":"-"},"content":" List\u003cJsonAdaptedTag\u003e invalidTags \u003d new ArrayList\u003c\u003e(VALID_TAGS);","lastModifiedDate":"2018-08-13"},{"lineNumber":114,"author":{"gitId":"-"},"content":" invalidTags.add(new JsonAdaptedTag(INVALID_TAG));","lastModifiedDate":"2018-08-13"},{"lineNumber":115,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2018-08-13"},{"lineNumber":116,"author":{"gitId":"joenus"},"content":" new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_ADDRESS, invalidTags, VALID_NOTES);","lastModifiedDate":"2024-02-29"},{"lineNumber":117,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":118,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":119,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2018-08-13"}],"authorContributionMap":{"joenus":18,"-":101}},{"path":"src/test/java/seedu/address/storage/JsonSerializableAddressBookTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.storage;","lastModifiedDate":"2018-08-13"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-03-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.nio.file.Path;","lastModifiedDate":"2018-08-13"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2018-08-13"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.commons.exceptions.IllegalValueException;","lastModifiedDate":"2018-08-13"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.JsonUtil;","lastModifiedDate":"2018-08-13"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.model.AddressBook;","lastModifiedDate":"2018-08-13"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.testutil.TypicalPersons;","lastModifiedDate":"2018-08-13"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":16,"author":{"gitId":"-"},"content":"public class JsonSerializableAddressBookTest {","lastModifiedDate":"2018-08-13"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":18,"author":{"gitId":"-"},"content":" private static final Path TEST_DATA_FOLDER \u003d Paths.get(\"src\", \"test\", \"data\", \"JsonSerializableAddressBookTest\");","lastModifiedDate":"2018-08-13"},{"lineNumber":19,"author":{"gitId":"-"},"content":" private static final Path TYPICAL_PERSONS_FILE \u003d TEST_DATA_FOLDER.resolve(\"typicalPersonsAddressBook.json\");","lastModifiedDate":"2018-08-13"},{"lineNumber":20,"author":{"gitId":"-"},"content":" private static final Path INVALID_PERSON_FILE \u003d TEST_DATA_FOLDER.resolve(\"invalidPersonAddressBook.json\");","lastModifiedDate":"2018-08-13"},{"lineNumber":21,"author":{"gitId":"-"},"content":" private static final Path DUPLICATE_PERSON_FILE \u003d TEST_DATA_FOLDER.resolve(\"duplicatePersonAddressBook.json\");","lastModifiedDate":"2018-08-13"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":23,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":24,"author":{"gitId":"-"},"content":" public void toModelType_typicalPersonsFile_success() throws Exception {","lastModifiedDate":"2018-08-13"},{"lineNumber":25,"author":{"gitId":"-"},"content":" JsonSerializableAddressBook dataFromFile \u003d JsonUtil.readJsonFile(TYPICAL_PERSONS_FILE,","lastModifiedDate":"2018-08-13"},{"lineNumber":26,"author":{"gitId":"-"},"content":" JsonSerializableAddressBook.class).get();","lastModifiedDate":"2018-08-13"},{"lineNumber":27,"author":{"gitId":"-"},"content":" AddressBook addressBookFromFile \u003d dataFromFile.toModelType();","lastModifiedDate":"2018-08-13"},{"lineNumber":28,"author":{"gitId":"-"},"content":" AddressBook typicalPersonsAddressBook \u003d TypicalPersons.getTypicalAddressBook();","lastModifiedDate":"2018-08-13"},{"lineNumber":29,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":30,"author":{"gitId":"-"},"content":" assertEquals(addressBookFromFile, typicalPersonsAddressBook);","lastModifiedDate":"2018-08-13"},{"lineNumber":31,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":33,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":34,"author":{"gitId":"-"},"content":" public void toModelType_invalidPersonFile_throwsIllegalValueException() throws Exception {","lastModifiedDate":"2018-08-13"},{"lineNumber":35,"author":{"gitId":"-"},"content":" JsonSerializableAddressBook dataFromFile \u003d JsonUtil.readJsonFile(INVALID_PERSON_FILE,","lastModifiedDate":"2018-08-13"},{"lineNumber":36,"author":{"gitId":"-"},"content":" JsonSerializableAddressBook.class).get();","lastModifiedDate":"2018-08-13"},{"lineNumber":37,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, dataFromFile::toModelType);","lastModifiedDate":"2019-03-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":40,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":41,"author":{"gitId":"-"},"content":" public void toModelType_duplicatePersons_throwsIllegalValueException() throws Exception {","lastModifiedDate":"2018-08-13"},{"lineNumber":42,"author":{"gitId":"-"},"content":" JsonSerializableAddressBook dataFromFile \u003d JsonUtil.readJsonFile(DUPLICATE_PERSON_FILE,","lastModifiedDate":"2018-08-13"},{"lineNumber":43,"author":{"gitId":"-"},"content":" JsonSerializableAddressBook.class).get();","lastModifiedDate":"2018-08-13"},{"lineNumber":44,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, JsonSerializableAddressBook.MESSAGE_DUPLICATE_PERSON,","lastModifiedDate":"2019-03-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":" dataFromFile::toModelType);","lastModifiedDate":"2019-03-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":48,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2018-08-13"}],"authorContributionMap":{"joenus":1,"-":47}},{"path":"src/test/java/seedu/address/testutil/EditPersonDescriptorBuilder.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.testutil;","lastModifiedDate":"2017-05-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-12-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2017-12-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.stream.Stream;","lastModifiedDate":"2017-12-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand.EditPersonDescriptor;","lastModifiedDate":"2017-05-05"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2017-12-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2017-12-23"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2017-12-23"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-01-10"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2017-12-23"},{"lineNumber":13,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.tag.Tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-05-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":" * A utility class to help with building EditPersonDescriptor objects.","lastModifiedDate":"2017-05-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":"public class EditPersonDescriptorBuilder {","lastModifiedDate":"2017-05-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":" private EditPersonDescriptor descriptor;","lastModifiedDate":"2017-05-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":" public EditPersonDescriptorBuilder() {","lastModifiedDate":"2017-05-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":" descriptor \u003d new EditPersonDescriptor();","lastModifiedDate":"2017-05-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":" public EditPersonDescriptorBuilder(EditPersonDescriptor descriptor) {","lastModifiedDate":"2017-05-05"},{"lineNumber":27,"author":{"gitId":"-"},"content":" this.descriptor \u003d new EditPersonDescriptor(descriptor);","lastModifiedDate":"2017-05-05"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":30,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-06-05"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * Returns an {@code EditPersonDescriptor} with fields containing {@code person}\u0027s details","lastModifiedDate":"2017-06-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-06-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":" public EditPersonDescriptorBuilder(Person person) {","lastModifiedDate":"2018-01-10"},{"lineNumber":34,"author":{"gitId":"-"},"content":" descriptor \u003d new EditPersonDescriptor();","lastModifiedDate":"2017-06-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":" descriptor.setName(person.getName());","lastModifiedDate":"2017-06-21"},{"lineNumber":36,"author":{"gitId":"-"},"content":" descriptor.setPhone(person.getPhone());","lastModifiedDate":"2017-06-21"},{"lineNumber":37,"author":{"gitId":"-"},"content":" descriptor.setEmail(person.getEmail());","lastModifiedDate":"2017-06-21"},{"lineNumber":38,"author":{"gitId":"-"},"content":" descriptor.setAddress(person.getAddress());","lastModifiedDate":"2017-06-21"},{"lineNumber":39,"author":{"gitId":"-"},"content":" descriptor.setTags(person.getTags());","lastModifiedDate":"2017-06-21"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-05"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":42,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":43,"author":{"gitId":"-"},"content":" * Sets the {@code Name} of the {@code EditPersonDescriptor} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":44,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":45,"author":{"gitId":"-"},"content":" public EditPersonDescriptorBuilder withName(String name) {","lastModifiedDate":"2017-08-15"},{"lineNumber":46,"author":{"gitId":"-"},"content":" descriptor.setName(new Name(name));","lastModifiedDate":"2017-12-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2017-05-05"},{"lineNumber":48,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":50,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":51,"author":{"gitId":"-"},"content":" * Sets the {@code Phone} of the {@code EditPersonDescriptor} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":52,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":53,"author":{"gitId":"-"},"content":" public EditPersonDescriptorBuilder withPhone(String phone) {","lastModifiedDate":"2017-08-15"},{"lineNumber":54,"author":{"gitId":"-"},"content":" descriptor.setPhone(new Phone(phone));","lastModifiedDate":"2017-12-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2017-05-05"},{"lineNumber":56,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":58,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":59,"author":{"gitId":"-"},"content":" * Sets the {@code Email} of the {@code EditPersonDescriptor} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":60,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":61,"author":{"gitId":"-"},"content":" public EditPersonDescriptorBuilder withEmail(String email) {","lastModifiedDate":"2017-08-15"},{"lineNumber":62,"author":{"gitId":"-"},"content":" descriptor.setEmail(new Email(email));","lastModifiedDate":"2017-12-23"},{"lineNumber":63,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2017-05-05"},{"lineNumber":64,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":66,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":67,"author":{"gitId":"-"},"content":" * Sets the {@code Address} of the {@code EditPersonDescriptor} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":68,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":69,"author":{"gitId":"-"},"content":" public EditPersonDescriptorBuilder withAddress(String address) {","lastModifiedDate":"2017-08-15"},{"lineNumber":70,"author":{"gitId":"-"},"content":" descriptor.setAddress(new Address(address));","lastModifiedDate":"2017-12-23"},{"lineNumber":71,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2017-05-05"},{"lineNumber":72,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":73,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":74,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":75,"author":{"gitId":"-"},"content":" * Parses the {@code tags} into a {@code Set\u003cTag\u003e} and set it to the {@code EditPersonDescriptor}","lastModifiedDate":"2017-07-26"},{"lineNumber":76,"author":{"gitId":"-"},"content":" * that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":77,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":78,"author":{"gitId":"-"},"content":" public EditPersonDescriptorBuilder withTags(String... tags) {","lastModifiedDate":"2017-08-15"},{"lineNumber":79,"author":{"gitId":"-"},"content":" Set\u003cTag\u003e tagSet \u003d Stream.of(tags).map(Tag::new).collect(Collectors.toSet());","lastModifiedDate":"2017-12-23"},{"lineNumber":80,"author":{"gitId":"-"},"content":" descriptor.setTags(tagSet);","lastModifiedDate":"2017-12-23"},{"lineNumber":81,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2017-05-05"},{"lineNumber":82,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":83,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":84,"author":{"gitId":"-"},"content":" public EditPersonDescriptor build() {","lastModifiedDate":"2017-05-05"},{"lineNumber":85,"author":{"gitId":"-"},"content":" return descriptor;","lastModifiedDate":"2017-05-05"},{"lineNumber":86,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":87,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-05-05"}],"authorContributionMap":{"joenus":1,"-":86}},{"path":"src/test/java/seedu/address/testutil/PersonBuilder.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.testutil;","lastModifiedDate":"2016-09-03"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.HashSet;","lastModifiedDate":"2017-12-20"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-04-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-05"},{"lineNumber":6,"author":{"gitId":"joenus"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2024-02-29"},{"lineNumber":7,"author":{"gitId":"joenus"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2024-02-29"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2017-01-18"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2017-01-18"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2017-01-18"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2017-04-05"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2017-01-18"},{"lineNumber":13,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Note;","lastModifiedDate":"2024-02-29"},{"lineNumber":14,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.tag.Tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.model.util.SampleDataUtil;","lastModifiedDate":"2017-04-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":17,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-09-03"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * A utility class to help with building Person objects.","lastModifiedDate":"2017-04-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-09-03"},{"lineNumber":20,"author":{"gitId":"-"},"content":"public class PersonBuilder {","lastModifiedDate":"2016-09-03"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":22,"author":{"gitId":"-"},"content":" public static final String DEFAULT_NAME \u003d \"Amy Bee\";","lastModifiedDate":"2020-12-18"},{"lineNumber":23,"author":{"gitId":"-"},"content":" public static final String DEFAULT_PHONE \u003d \"85355255\";","lastModifiedDate":"2017-04-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":" public static final String DEFAULT_EMAIL \u003d \"amy@gmail.com\";","lastModifiedDate":"2020-12-18"},{"lineNumber":25,"author":{"gitId":"-"},"content":" public static final String DEFAULT_ADDRESS \u003d \"123, Jurong West Ave 6, #08-111\";","lastModifiedDate":"2017-04-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-05"},{"lineNumber":27,"author":{"gitId":"-"},"content":" private Name name;","lastModifiedDate":"2017-12-20"},{"lineNumber":28,"author":{"gitId":"-"},"content":" private Phone phone;","lastModifiedDate":"2017-12-20"},{"lineNumber":29,"author":{"gitId":"-"},"content":" private Email email;","lastModifiedDate":"2017-12-20"},{"lineNumber":30,"author":{"gitId":"-"},"content":" private Address address;","lastModifiedDate":"2017-12-20"},{"lineNumber":31,"author":{"gitId":"joenus"},"content":" private Set\u003cTag\u003e tags \u003d new HashSet\u003c\u003e();","lastModifiedDate":"2024-02-29"},{"lineNumber":32,"author":{"gitId":"joenus"},"content":" private ObservableList\u003cNote\u003e notes \u003d FXCollections.observableArrayList();","lastModifiedDate":"2024-02-29"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":34,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2020-05-27"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * Creates a {@code PersonBuilder} with the default details.","lastModifiedDate":"2020-05-27"},{"lineNumber":36,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2020-05-27"},{"lineNumber":37,"author":{"gitId":"-"},"content":" public PersonBuilder() {","lastModifiedDate":"2017-08-15"},{"lineNumber":38,"author":{"gitId":"-"},"content":" name \u003d new Name(DEFAULT_NAME);","lastModifiedDate":"2017-12-20"},{"lineNumber":39,"author":{"gitId":"-"},"content":" phone \u003d new Phone(DEFAULT_PHONE);","lastModifiedDate":"2017-12-20"},{"lineNumber":40,"author":{"gitId":"-"},"content":" email \u003d new Email(DEFAULT_EMAIL);","lastModifiedDate":"2017-12-20"},{"lineNumber":41,"author":{"gitId":"-"},"content":" address \u003d new Address(DEFAULT_ADDRESS);","lastModifiedDate":"2017-12-20"},{"lineNumber":42,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":44,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-12-11"},{"lineNumber":45,"author":{"gitId":"-"},"content":" * Initializes the PersonBuilder with the data of {@code personToCopy}.","lastModifiedDate":"2016-12-11"},{"lineNumber":46,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-11"},{"lineNumber":47,"author":{"gitId":"-"},"content":" public PersonBuilder(Person personToCopy) {","lastModifiedDate":"2018-01-10"},{"lineNumber":48,"author":{"gitId":"-"},"content":" name \u003d personToCopy.getName();","lastModifiedDate":"2017-12-20"},{"lineNumber":49,"author":{"gitId":"-"},"content":" phone \u003d personToCopy.getPhone();","lastModifiedDate":"2017-12-20"},{"lineNumber":50,"author":{"gitId":"-"},"content":" email \u003d personToCopy.getEmail();","lastModifiedDate":"2017-12-20"},{"lineNumber":51,"author":{"gitId":"-"},"content":" address \u003d personToCopy.getAddress();","lastModifiedDate":"2017-12-20"},{"lineNumber":52,"author":{"gitId":"joenus"},"content":" this.tags.addAll(personToCopy.getTags());","lastModifiedDate":"2024-02-29"},{"lineNumber":53,"author":{"gitId":"joenus"},"content":" this.notes.addAll(personToCopy.getNotes());","lastModifiedDate":"2024-02-29"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-11"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-11"},{"lineNumber":56,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":57,"author":{"gitId":"-"},"content":" * Sets the {@code Name} of the {@code Person} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":58,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":59,"author":{"gitId":"-"},"content":" public PersonBuilder withName(String name) {","lastModifiedDate":"2017-08-15"},{"lineNumber":60,"author":{"gitId":"-"},"content":" this.name \u003d new Name(name);","lastModifiedDate":"2017-12-20"},{"lineNumber":61,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2016-09-03"},{"lineNumber":62,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":64,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":65,"author":{"gitId":"-"},"content":" * Parses the {@code tags} into a {@code Set\u003cTag\u003e} and set it to the {@code Person} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":66,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":67,"author":{"gitId":"-"},"content":" public PersonBuilder withTags(String ... tags) {","lastModifiedDate":"2017-08-15"},{"lineNumber":68,"author":{"gitId":"joenus"},"content":" this.tags \u003d SampleDataUtil.getTags(tags);","lastModifiedDate":"2024-02-29"},{"lineNumber":69,"author":{"gitId":"joenus"},"content":" return this;","lastModifiedDate":"2024-02-29"},{"lineNumber":70,"author":{"gitId":"joenus"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":71,"author":{"gitId":"joenus"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":72,"author":{"gitId":"joenus"},"content":" /**","lastModifiedDate":"2024-02-29"},{"lineNumber":73,"author":{"gitId":"joenus"},"content":" * Parses the {@code notes} into a {@code ObservableList\u003cNote\u003e} and set it to the {@code Person} that we are","lastModifiedDate":"2024-02-29"},{"lineNumber":74,"author":{"gitId":"joenus"},"content":" * building.","lastModifiedDate":"2024-02-29"},{"lineNumber":75,"author":{"gitId":"joenus"},"content":" */","lastModifiedDate":"2024-02-29"},{"lineNumber":76,"author":{"gitId":"joenus"},"content":" public PersonBuilder withNotes(Note[] notes) {","lastModifiedDate":"2024-02-29"},{"lineNumber":77,"author":{"gitId":"joenus"},"content":" this.notes \u003d SampleDataUtil.getNotes(notes);","lastModifiedDate":"2024-02-29"},{"lineNumber":78,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2016-09-03"},{"lineNumber":79,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":81,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":82,"author":{"gitId":"-"},"content":" * Sets the {@code Address} of the {@code Person} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":83,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":84,"author":{"gitId":"-"},"content":" public PersonBuilder withAddress(String address) {","lastModifiedDate":"2017-08-15"},{"lineNumber":85,"author":{"gitId":"-"},"content":" this.address \u003d new Address(address);","lastModifiedDate":"2017-12-20"},{"lineNumber":86,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2016-09-03"},{"lineNumber":87,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":89,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":90,"author":{"gitId":"-"},"content":" * Sets the {@code Phone} of the {@code Person} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":91,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":92,"author":{"gitId":"-"},"content":" public PersonBuilder withPhone(String phone) {","lastModifiedDate":"2017-08-15"},{"lineNumber":93,"author":{"gitId":"-"},"content":" this.phone \u003d new Phone(phone);","lastModifiedDate":"2017-12-20"},{"lineNumber":94,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2016-09-03"},{"lineNumber":95,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":97,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":98,"author":{"gitId":"-"},"content":" * Sets the {@code Email} of the {@code Person} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":99,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":100,"author":{"gitId":"-"},"content":" public PersonBuilder withEmail(String email) {","lastModifiedDate":"2017-08-15"},{"lineNumber":101,"author":{"gitId":"-"},"content":" this.email \u003d new Email(email);","lastModifiedDate":"2017-12-20"},{"lineNumber":102,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2016-09-03"},{"lineNumber":103,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":104,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":105,"author":{"gitId":"-"},"content":" public Person build() {","lastModifiedDate":"2017-04-05"},{"lineNumber":106,"author":{"gitId":"joenus"},"content":" return new Person(name, phone, email, address, tags, notes);","lastModifiedDate":"2024-02-29"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":108,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":109,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-09-03"}],"authorContributionMap":{"joenus":19,"-":90}},{"path":"src/test/java/seedu/address/testutil/PersonUtil.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.testutil;","lastModifiedDate":"2017-04-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2017-05-09"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2017-05-09"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2017-06-06"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2017-05-09"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2017-05-09"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-09"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2018-03-26"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-03-26"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.AddCommand;","lastModifiedDate":"2017-03-29"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand.EditPersonDescriptor;","lastModifiedDate":"2018-03-26"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-01-10"},{"lineNumber":14,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.tag.Tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-04-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * A utility class for Person.","lastModifiedDate":"2017-04-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-04-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"public class PersonUtil {","lastModifiedDate":"2017-04-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-04-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * Returns an add command string for adding the {@code person}.","lastModifiedDate":"2017-04-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-04-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":" public static String getAddCommand(Person person) {","lastModifiedDate":"2018-01-10"},{"lineNumber":25,"author":{"gitId":"-"},"content":" return AddCommand.COMMAND_WORD + \" \" + getPersonDetails(person);","lastModifiedDate":"2017-03-29"},{"lineNumber":26,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-04-06"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-06"},{"lineNumber":28,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-04-06"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * Returns the part of command string for the given {@code person}\u0027s details.","lastModifiedDate":"2017-04-06"},{"lineNumber":30,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-04-06"},{"lineNumber":31,"author":{"gitId":"-"},"content":" public static String getPersonDetails(Person person) {","lastModifiedDate":"2018-01-10"},{"lineNumber":32,"author":{"gitId":"-"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2017-04-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":" sb.append(PREFIX_NAME + person.getName().fullName + \" \");","lastModifiedDate":"2017-06-06"},{"lineNumber":34,"author":{"gitId":"-"},"content":" sb.append(PREFIX_PHONE + person.getPhone().value + \" \");","lastModifiedDate":"2017-05-09"},{"lineNumber":35,"author":{"gitId":"-"},"content":" sb.append(PREFIX_EMAIL + person.getEmail().value + \" \");","lastModifiedDate":"2017-05-09"},{"lineNumber":36,"author":{"gitId":"-"},"content":" sb.append(PREFIX_ADDRESS + person.getAddress().value + \" \");","lastModifiedDate":"2017-05-09"},{"lineNumber":37,"author":{"gitId":"-"},"content":" person.getTags().stream().forEach(","lastModifiedDate":"2017-05-09"},{"lineNumber":38,"author":{"gitId":"-"},"content":" s -\u003e sb.append(PREFIX_TAG + s.tagName + \" \")","lastModifiedDate":"2017-05-09"},{"lineNumber":39,"author":{"gitId":"-"},"content":" );","lastModifiedDate":"2017-05-09"},{"lineNumber":40,"author":{"gitId":"-"},"content":" return sb.toString();","lastModifiedDate":"2017-04-05"},{"lineNumber":41,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-04-05"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-03-26"},{"lineNumber":43,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-03-26"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * Returns the part of command string for the given {@code EditPersonDescriptor}\u0027s details.","lastModifiedDate":"2018-03-26"},{"lineNumber":45,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-03-26"},{"lineNumber":46,"author":{"gitId":"-"},"content":" public static String getEditPersonDescriptorDetails(EditPersonDescriptor descriptor) {","lastModifiedDate":"2018-03-26"},{"lineNumber":47,"author":{"gitId":"-"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2018-03-26"},{"lineNumber":48,"author":{"gitId":"-"},"content":" descriptor.getName().ifPresent(name -\u003e sb.append(PREFIX_NAME).append(name.fullName).append(\" \"));","lastModifiedDate":"2018-03-26"},{"lineNumber":49,"author":{"gitId":"-"},"content":" descriptor.getPhone().ifPresent(phone -\u003e sb.append(PREFIX_PHONE).append(phone.value).append(\" \"));","lastModifiedDate":"2018-03-26"},{"lineNumber":50,"author":{"gitId":"-"},"content":" descriptor.getEmail().ifPresent(email -\u003e sb.append(PREFIX_EMAIL).append(email.value).append(\" \"));","lastModifiedDate":"2018-03-26"},{"lineNumber":51,"author":{"gitId":"-"},"content":" descriptor.getAddress().ifPresent(address -\u003e sb.append(PREFIX_ADDRESS).append(address.value).append(\" \"));","lastModifiedDate":"2018-03-26"},{"lineNumber":52,"author":{"gitId":"-"},"content":" if (descriptor.getTags().isPresent()) {","lastModifiedDate":"2018-03-26"},{"lineNumber":53,"author":{"gitId":"-"},"content":" Set\u003cTag\u003e tags \u003d descriptor.getTags().get();","lastModifiedDate":"2018-03-26"},{"lineNumber":54,"author":{"gitId":"-"},"content":" if (tags.isEmpty()) {","lastModifiedDate":"2018-03-26"},{"lineNumber":55,"author":{"gitId":"-"},"content":" sb.append(PREFIX_TAG);","lastModifiedDate":"2018-03-26"},{"lineNumber":56,"author":{"gitId":"-"},"content":" } else {","lastModifiedDate":"2018-03-26"},{"lineNumber":57,"author":{"gitId":"-"},"content":" tags.forEach(s -\u003e sb.append(PREFIX_TAG).append(s.tagName).append(\" \"));","lastModifiedDate":"2018-03-26"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-03-26"},{"lineNumber":59,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-03-26"},{"lineNumber":60,"author":{"gitId":"-"},"content":" return sb.toString();","lastModifiedDate":"2018-03-26"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-03-26"},{"lineNumber":62,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-04-05"}],"authorContributionMap":{"joenus":1,"-":61}},{"path":"src/test/java/seedu/address/testutil/TypicalPersons.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.testutil;","lastModifiedDate":"2016-09-13"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-13"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_AMY;","lastModifiedDate":"2017-08-22"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB;","lastModifiedDate":"2017-08-22"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_AMY;","lastModifiedDate":"2017-08-22"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_BOB;","lastModifiedDate":"2017-08-22"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_AMY;","lastModifiedDate":"2017-08-22"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB;","lastModifiedDate":"2017-08-22"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_AMY;","lastModifiedDate":"2017-08-22"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB;","lastModifiedDate":"2017-08-22"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_FRIEND;","lastModifiedDate":"2017-08-22"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND;","lastModifiedDate":"2017-08-22"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-08-22"},{"lineNumber":14,"author":{"gitId":"joenus"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-03-01"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import java.util.ArrayList;","lastModifiedDate":"2017-08-07"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import java.util.Arrays;","lastModifiedDate":"2017-08-07"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2017-08-07"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-08-07"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.model.AddressBook;","lastModifiedDate":"2016-09-21"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-01-10"},{"lineNumber":21,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Description;","lastModifiedDate":"2024-03-01"},{"lineNumber":22,"author":{"gitId":"joenus"},"content":"import seedu.address.model.person.note.Note;","lastModifiedDate":"2024-03-01"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-13"},{"lineNumber":24,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-09-13"},{"lineNumber":25,"author":{"gitId":"-"},"content":" * A utility class containing a list of {@code Person} objects to be used in tests.","lastModifiedDate":"2017-08-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-09-13"},{"lineNumber":27,"author":{"gitId":"-"},"content":"public class TypicalPersons {","lastModifiedDate":"2017-04-05"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-13"},{"lineNumber":29,"author":{"gitId":"-"},"content":" public static final Person ALICE \u003d new PersonBuilder().withName(\"Alice Pauline\")","lastModifiedDate":"2018-01-10"},{"lineNumber":30,"author":{"gitId":"-"},"content":" .withAddress(\"123, Jurong West Ave 6, #08-111\").withEmail(\"alice@example.com\")","lastModifiedDate":"2017-04-05"},{"lineNumber":31,"author":{"gitId":"-"},"content":" .withPhone(\"94351253\")","lastModifiedDate":"2018-04-19"},{"lineNumber":32,"author":{"gitId":"joenus"},"content":" .withTags(\"friends\").withNotes(new Note[] {","lastModifiedDate":"2024-03-01"},{"lineNumber":33,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 2, 19, 21, 30), new Description(\"General Flu\")),","lastModifiedDate":"2024-03-01"},{"lineNumber":34,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 2, 28, 8, 30), new Description(\"Headache\")),","lastModifiedDate":"2024-03-01"},{"lineNumber":35,"author":{"gitId":"joenus"},"content":" }).build();","lastModifiedDate":"2024-03-01"},{"lineNumber":36,"author":{"gitId":"-"},"content":" public static final Person BENSON \u003d new PersonBuilder().withName(\"Benson Meier\")","lastModifiedDate":"2018-01-10"},{"lineNumber":37,"author":{"gitId":"-"},"content":" .withAddress(\"311, Clementi Ave 2, #02-25\")","lastModifiedDate":"2017-09-21"},{"lineNumber":38,"author":{"gitId":"-"},"content":" .withEmail(\"johnd@example.com\").withPhone(\"98765432\")","lastModifiedDate":"2017-04-05"},{"lineNumber":39,"author":{"gitId":"joenus"},"content":" .withTags(\"owesMoney\", \"friends\").withNotes(new Note[] {","lastModifiedDate":"2024-03-01"},{"lineNumber":40,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 2, 20, 15, 30), new Description(\"Joint pain assessment\")),","lastModifiedDate":"2024-03-01"},{"lineNumber":41,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 4, 4, 10, 30), new Description(\"Post-surgery checkup\")),","lastModifiedDate":"2024-03-01"},{"lineNumber":42,"author":{"gitId":"joenus"},"content":" new Note(LocalDateTime.of(2024, 5, 19, 17, 0), new Description(\"Sports injury follow-up\")),","lastModifiedDate":"2024-03-01"},{"lineNumber":43,"author":{"gitId":"joenus"},"content":" }).build();","lastModifiedDate":"2024-03-01"},{"lineNumber":44,"author":{"gitId":"-"},"content":" public static final Person CARL \u003d new PersonBuilder().withName(\"Carl Kurz\").withPhone(\"95352563\")","lastModifiedDate":"2018-01-10"},{"lineNumber":45,"author":{"gitId":"-"},"content":" .withEmail(\"heinz@example.com\").withAddress(\"wall street\").build();","lastModifiedDate":"2017-04-05"},{"lineNumber":46,"author":{"gitId":"-"},"content":" public static final Person DANIEL \u003d new PersonBuilder().withName(\"Daniel Meier\").withPhone(\"87652533\")","lastModifiedDate":"2018-01-10"},{"lineNumber":47,"author":{"gitId":"-"},"content":" .withEmail(\"cornelia@example.com\").withAddress(\"10th street\").withTags(\"friends\").build();","lastModifiedDate":"2018-03-26"},{"lineNumber":48,"author":{"gitId":"-"},"content":" public static final Person ELLE \u003d new PersonBuilder().withName(\"Elle Meyer\").withPhone(\"9482224\")","lastModifiedDate":"2018-01-10"},{"lineNumber":49,"author":{"gitId":"-"},"content":" .withEmail(\"werner@example.com\").withAddress(\"michegan ave\").build();","lastModifiedDate":"2017-04-05"},{"lineNumber":50,"author":{"gitId":"-"},"content":" public static final Person FIONA \u003d new PersonBuilder().withName(\"Fiona Kunz\").withPhone(\"9482427\")","lastModifiedDate":"2018-01-10"},{"lineNumber":51,"author":{"gitId":"-"},"content":" .withEmail(\"lydia@example.com\").withAddress(\"little tokyo\").build();","lastModifiedDate":"2017-04-05"},{"lineNumber":52,"author":{"gitId":"-"},"content":" public static final Person GEORGE \u003d new PersonBuilder().withName(\"George Best\").withPhone(\"9482442\")","lastModifiedDate":"2018-01-10"},{"lineNumber":53,"author":{"gitId":"-"},"content":" .withEmail(\"anna@example.com\").withAddress(\"4th street\").build();","lastModifiedDate":"2017-04-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-13"},{"lineNumber":55,"author":{"gitId":"-"},"content":" // Manually added","lastModifiedDate":"2016-09-13"},{"lineNumber":56,"author":{"gitId":"-"},"content":" public static final Person HOON \u003d new PersonBuilder().withName(\"Hoon Meier\").withPhone(\"8482424\")","lastModifiedDate":"2018-01-10"},{"lineNumber":57,"author":{"gitId":"-"},"content":" .withEmail(\"stefan@example.com\").withAddress(\"little india\").build();","lastModifiedDate":"2017-04-05"},{"lineNumber":58,"author":{"gitId":"-"},"content":" public static final Person IDA \u003d new PersonBuilder().withName(\"Ida Mueller\").withPhone(\"8482131\")","lastModifiedDate":"2018-01-10"},{"lineNumber":59,"author":{"gitId":"-"},"content":" .withEmail(\"hans@example.com\").withAddress(\"chicago ave\").build();","lastModifiedDate":"2017-04-05"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-08-22"},{"lineNumber":61,"author":{"gitId":"-"},"content":" // Manually added - Person\u0027s details found in {@code CommandTestUtil}","lastModifiedDate":"2017-08-22"},{"lineNumber":62,"author":{"gitId":"-"},"content":" public static final Person AMY \u003d new PersonBuilder().withName(VALID_NAME_AMY).withPhone(VALID_PHONE_AMY)","lastModifiedDate":"2018-01-10"},{"lineNumber":63,"author":{"gitId":"-"},"content":" .withEmail(VALID_EMAIL_AMY).withAddress(VALID_ADDRESS_AMY).withTags(VALID_TAG_FRIEND).build();","lastModifiedDate":"2017-09-21"},{"lineNumber":64,"author":{"gitId":"-"},"content":" public static final Person BOB \u003d new PersonBuilder().withName(VALID_NAME_BOB).withPhone(VALID_PHONE_BOB)","lastModifiedDate":"2018-01-10"},{"lineNumber":65,"author":{"gitId":"-"},"content":" .withEmail(VALID_EMAIL_BOB).withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_HUSBAND, VALID_TAG_FRIEND)","lastModifiedDate":"2017-09-21"},{"lineNumber":66,"author":{"gitId":"-"},"content":" .build();","lastModifiedDate":"2017-09-21"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-21"},{"lineNumber":68,"author":{"gitId":"-"},"content":" public static final String KEYWORD_MATCHING_MEIER \u003d \"Meier\"; // A keyword that matches MEIER","lastModifiedDate":"2017-09-21"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-13"},{"lineNumber":70,"author":{"gitId":"joenus"},"content":" private TypicalPersons() {","lastModifiedDate":"2024-03-01"},{"lineNumber":71,"author":{"gitId":"joenus"},"content":" } // prevents instantiation","lastModifiedDate":"2024-03-01"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-20"},{"lineNumber":73,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":74,"author":{"gitId":"-"},"content":" * Returns an {@code AddressBook} with all the typical persons.","lastModifiedDate":"2017-08-05"},{"lineNumber":75,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":76,"author":{"gitId":"-"},"content":" public static AddressBook getTypicalAddressBook() {","lastModifiedDate":"2017-08-05"},{"lineNumber":77,"author":{"gitId":"-"},"content":" AddressBook ab \u003d new AddressBook();","lastModifiedDate":"2017-08-05"},{"lineNumber":78,"author":{"gitId":"-"},"content":" for (Person person : getTypicalPersons()) {","lastModifiedDate":"2018-01-10"},{"lineNumber":79,"author":{"gitId":"-"},"content":" ab.addPerson(person);","lastModifiedDate":"2017-08-05"},{"lineNumber":80,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-13"},{"lineNumber":81,"author":{"gitId":"-"},"content":" return ab;","lastModifiedDate":"2016-09-24"},{"lineNumber":82,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-24"},{"lineNumber":83,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-08-04"},{"lineNumber":84,"author":{"gitId":"-"},"content":" public static List\u003cPerson\u003e getTypicalPersons() {","lastModifiedDate":"2018-01-10"},{"lineNumber":85,"author":{"gitId":"-"},"content":" return new ArrayList\u003c\u003e(Arrays.asList(ALICE, BENSON, CARL, DANIEL, ELLE, FIONA, GEORGE));","lastModifiedDate":"2017-08-07"},{"lineNumber":86,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-08-04"},{"lineNumber":87,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-09-13"}],"authorContributionMap":{"joenus":14,"-":73}}] diff --git a/AY2324S2-CS2103-F09-4_tp_master/commits.json b/AY2324S2-CS2103-F09-4_tp_master/commits.json index 0b40e18b..3a47e781 100644 --- a/AY2324S2-CS2103-F09-4_tp_master/commits.json +++ b/AY2324S2-CS2103-F09-4_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"joenus":[{"date":"2024-02-28","commitResults":[{"hash":"f2f6e184f13bc29f533deb105738d4a7a92d9372","isMergeCommit":false,"messageTitle":"Complete docs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":131,"deletions":80}}}]},{"date":"2024-02-29","commitResults":[{"hash":"9a11c2168e1c0148afbcfc111ccf44a53d286541","isMergeCommit":false,"messageTitle":"Implement groundwork for note","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":355,"deletions":36},"other":{"insertions":4,"deletions":2},"test-code":{"insertions":112,"deletions":23}}},{"hash":"addc1090bf63a9da682483a619f1ecaa94326a09","isMergeCommit":false,"messageTitle":"Fix lint issues","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":98,"deletions":55}}},{"hash":"9019f3cf7f2392abbf2b1eef94852f8877f4c36f","isMergeCommit":false,"messageTitle":"Fix lint issues on test files","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":30,"deletions":27}}}]},{"date":"2024-03-01","commitResults":[{"hash":"ab1595dfa3cba79b6164fc7c088e4f36edd5dc35","isMergeCommit":false,"messageTitle":"Improve test coverage","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":7},"test-code":{"insertions":358,"deletions":34}}}]}],"jmsandiegoo":[{"date":"2024-02-24","commitResults":[{"hash":"2e52851cc0cf1fed796ad91525fb37f02530e3ac","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":0}}}]},{"date":"2024-02-29","commitResults":[{"hash":"e403439c93e4f68d35b66121033edf7f0cff96f8","isMergeCommit":false,"messageTitle":"Update about us docs page","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":5}}}]},{"date":"2024-03-01","commitResults":[{"hash":"0c21e72f884024efaaf6db454ee0c439fb625a5d","isMergeCommit":false,"messageTitle":"Update UG docs with list, add, edit medical record commands","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":66,"deletions":34}}},{"hash":"36b85ed2957806f8cf9ecb19f65c78ce179d3c62","isMergeCommit":false,"messageTitle":"Update UG summary command section","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":2}}},{"hash":"0517468067c6cdd9cd984e408ffba9b1a9fc7d9d","isMergeCommit":false,"messageTitle":"Update DG docs with target profile \u0026 more commands","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":15,"deletions":10}}},{"hash":"7b807cf8a46d1e0169d013330532fc24b61df20f","isMergeCommit":true,"messageTitle":"Merge pull request #25 from jmsandiegoo/branch-jmsandiegoo-docs","messageBody":"Documentation for list/add/edit patient medical records","fileTypesAndContributionMap":{}}]},{"date":"2024-03-04","commitResults":[{"hash":"fd5c66b09401664872be058b4fb042fe8a1e0f23","isMergeCommit":true,"messageTitle":"Merge pull request #24 from joenus/feature/note-core","messageBody":"Groundwork for appointment notes","fileTypesAndContributionMap":{}}]}],"raysonchia":[{"date":"2024-03-01","commitResults":[{"hash":"ee035869ce237e421c5ec970557cb188acde7a19","isMergeCommit":false,"messageTitle":"Add personal details to AboutUs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":6}}},{"hash":"c235525d2e7bf3f088afe546bbd44d8c23ee2574","isMergeCommit":false,"messageTitle":"Update DeveloperGuide with user story and glossary","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":1}}},{"hash":"58bb24d79b407f1ca0ac4299f55d6678879b3d3d","isMergeCommit":false,"messageTitle":"Update UserGuide with delete command","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":23,"deletions":8}}},{"hash":"c7a06fa57ed1e4bfc1a28c79d443552925d9ee7b","isMergeCommit":false,"messageTitle":"Update command heading","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}}]},{"date":"2024-03-04","commitResults":[{"hash":"4b5bc50ea20e19daec40a76773e1a4a70898444f","isMergeCommit":true,"messageTitle":"Merge pull request #26 from rickkoh/master","messageBody":"Documentation for help command","fileTypesAndContributionMap":{}},{"hash":"657cbd87064e536cae04246851fb0656cd3d311a","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2cd76609e035541cdaef56f239dbfe14573c8ebc","isMergeCommit":true,"messageTitle":"Merge pull request #27 from raysonchia/master","messageBody":"Documentation for delete command","fileTypesAndContributionMap":{}}]}],"sebin0817":[{"date":"2024-02-29","commitResults":[{"hash":"65f0263504a26e45720b8f6943c54c067c47a91f","isMergeCommit":true,"messageTitle":"Merge pull request #22 from joenus/docs","messageBody":"Documentation for add/delete appointment note","fileTypesAndContributionMap":{}},{"hash":"d2626dc58d47754088dbe49d029f898039318331","isMergeCommit":false,"messageTitle":"Edit AboutUs and UserGuide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":29,"deletions":10}}},{"hash":"3dc0ee1d2042da079dff08dbf2cc62e523a31ce6","isMergeCommit":false,"messageTitle":"Edit UserGuide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"e633c54224443f91f2b01d84d922e95a5dbd307a","isMergeCommit":false,"messageTitle":"Edit UserGuide Commands","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":9,"deletions":6}}}]},{"date":"2024-03-01","commitResults":[{"hash":"b726ca273ef738884c5e574a00ecf63807afc02c","isMergeCommit":false,"messageTitle":"Update DeveloperGuide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":50,"deletions":4}}},{"hash":"5b0e67623a7fdc3eb44f6f670349ab66d772557b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into add-sebinAum-info","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2024-03-04","commitResults":[{"hash":"66b0b4e65a76734238c7920c372f1368d2f7a466","isMergeCommit":true,"messageTitle":"Merge pull request #23 from sebin0817/add-sebinAum-info","messageBody":"Documentation for edit/listing appointment note","fileTypesAndContributionMap":{}}]}],"rickkoh":[{"date":"2024-03-01","commitResults":[{"hash":"d1f769cdd713bb71a9b110937061e75d0b38b8d0","isMergeCommit":false,"messageTitle":"Update UserGuide.md with help command details","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":3}}},{"hash":"9f0a8b15e733e562e21fcb0bf58aed72a25ac655","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S2-CS2103-F09-4/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"36afd6ebe6e04fdf71975d17d25726393060d8d3","isMergeCommit":false,"messageTitle":"Update team member details for Rick Koh in AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":5}}}]},{"date":"2024-03-02","commitResults":[{"hash":"0ee56d3430096d0ce367f9ba9898e8525c4206e6","isMergeCommit":false,"messageTitle":"Add user story for help","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"joenus":{"docs":115,"functional-code":400,"test-code":453,"other":1},"jmsandiegoo":{"docs":83,"functional-code":0,"test-code":0},"raysonchia":{"docs":34,"functional-code":0,"test-code":0},"sebin0817":{"docs":68,"functional-code":0,"test-code":0},"rickkoh":{"docs":13,"functional-code":0,"test-code":0}},"authorContributionVariance":{"joenus":54183.785,"jmsandiegoo":1402.628,"raysonchia":223.4711,"sebin0817":450.18182,"rickkoh":32.80992},"authorDisplayNameMap":{"joenus":"CS2103-F09-4 JOE ..AWAI","jmsandiegoo":"CS2103-F09-4 SAN ..ISTA","raysonchia":"CS2103-F09-4 RAYS.. ZHE","sebin0817":"CS2103-F09-4 AUM ..EBIN","rickkoh":"CS2103-F09-4 KOH ..RICK"}} +{"authorDailyContributionsMap":{"joenus":[{"date":"2024-02-28","commitResults":[{"hash":"f2f6e184f13bc29f533deb105738d4a7a92d9372","isMergeCommit":false,"messageTitle":"Complete docs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":131,"deletions":80}}}]},{"date":"2024-02-29","commitResults":[{"hash":"9a11c2168e1c0148afbcfc111ccf44a53d286541","isMergeCommit":false,"messageTitle":"Implement groundwork for note","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":355,"deletions":36},"other":{"insertions":4,"deletions":2},"test-code":{"insertions":112,"deletions":23}}},{"hash":"addc1090bf63a9da682483a619f1ecaa94326a09","isMergeCommit":false,"messageTitle":"Fix lint issues","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":98,"deletions":55}}},{"hash":"9019f3cf7f2392abbf2b1eef94852f8877f4c36f","isMergeCommit":false,"messageTitle":"Fix lint issues on test files","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":30,"deletions":27}}}]},{"date":"2024-03-01","commitResults":[{"hash":"ab1595dfa3cba79b6164fc7c088e4f36edd5dc35","isMergeCommit":false,"messageTitle":"Improve test coverage","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":7},"test-code":{"insertions":358,"deletions":34}}}]}],"jmsandiegoo":[{"date":"2024-02-24","commitResults":[{"hash":"2e52851cc0cf1fed796ad91525fb37f02530e3ac","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":0}}}]},{"date":"2024-02-29","commitResults":[{"hash":"e403439c93e4f68d35b66121033edf7f0cff96f8","isMergeCommit":false,"messageTitle":"Update about us docs page","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":5}}}]},{"date":"2024-03-01","commitResults":[{"hash":"0c21e72f884024efaaf6db454ee0c439fb625a5d","isMergeCommit":false,"messageTitle":"Update UG docs with list, add, edit medical record commands","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":66,"deletions":34}}},{"hash":"36b85ed2957806f8cf9ecb19f65c78ce179d3c62","isMergeCommit":false,"messageTitle":"Update UG summary command section","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":2}}},{"hash":"0517468067c6cdd9cd984e408ffba9b1a9fc7d9d","isMergeCommit":false,"messageTitle":"Update DG docs with target profile \u0026 more commands","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":15,"deletions":10}}},{"hash":"7b807cf8a46d1e0169d013330532fc24b61df20f","isMergeCommit":true,"messageTitle":"Merge pull request #25 from jmsandiegoo/branch-jmsandiegoo-docs","messageBody":"Documentation for list/add/edit patient medical records","fileTypesAndContributionMap":{}}]},{"date":"2024-03-04","commitResults":[{"hash":"fd5c66b09401664872be058b4fb042fe8a1e0f23","isMergeCommit":true,"messageTitle":"Merge pull request #24 from joenus/feature/note-core","messageBody":"Groundwork for appointment notes","fileTypesAndContributionMap":{}}]}],"raysonchia":[{"date":"2024-03-01","commitResults":[{"hash":"ee035869ce237e421c5ec970557cb188acde7a19","isMergeCommit":false,"messageTitle":"Add personal details to AboutUs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":6}}},{"hash":"c235525d2e7bf3f088afe546bbd44d8c23ee2574","isMergeCommit":false,"messageTitle":"Update DeveloperGuide with user story and glossary","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":1}}},{"hash":"58bb24d79b407f1ca0ac4299f55d6678879b3d3d","isMergeCommit":false,"messageTitle":"Update UserGuide with delete command","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":23,"deletions":8}}},{"hash":"c7a06fa57ed1e4bfc1a28c79d443552925d9ee7b","isMergeCommit":false,"messageTitle":"Update command heading","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}}]},{"date":"2024-03-04","commitResults":[{"hash":"4b5bc50ea20e19daec40a76773e1a4a70898444f","isMergeCommit":true,"messageTitle":"Merge pull request #26 from rickkoh/master","messageBody":"Documentation for help command","fileTypesAndContributionMap":{}},{"hash":"657cbd87064e536cae04246851fb0656cd3d311a","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2cd76609e035541cdaef56f239dbfe14573c8ebc","isMergeCommit":true,"messageTitle":"Merge pull request #27 from raysonchia/master","messageBody":"Documentation for delete command","fileTypesAndContributionMap":{}}]}],"sebin0817":[{"date":"2024-02-29","commitResults":[{"hash":"65f0263504a26e45720b8f6943c54c067c47a91f","isMergeCommit":true,"messageTitle":"Merge pull request #22 from joenus/docs","messageBody":"Documentation for add/delete appointment note","fileTypesAndContributionMap":{}},{"hash":"d2626dc58d47754088dbe49d029f898039318331","isMergeCommit":false,"messageTitle":"Edit AboutUs and UserGuide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":29,"deletions":10}}},{"hash":"3dc0ee1d2042da079dff08dbf2cc62e523a31ce6","isMergeCommit":false,"messageTitle":"Edit UserGuide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"e633c54224443f91f2b01d84d922e95a5dbd307a","isMergeCommit":false,"messageTitle":"Edit UserGuide Commands","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":9,"deletions":6}}}]},{"date":"2024-03-01","commitResults":[{"hash":"b726ca273ef738884c5e574a00ecf63807afc02c","isMergeCommit":false,"messageTitle":"Update DeveloperGuide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":50,"deletions":4}}},{"hash":"5b0e67623a7fdc3eb44f6f670349ab66d772557b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into add-sebinAum-info","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2024-03-04","commitResults":[{"hash":"66b0b4e65a76734238c7920c372f1368d2f7a466","isMergeCommit":true,"messageTitle":"Merge pull request #23 from sebin0817/add-sebinAum-info","messageBody":"Documentation for edit/listing appointment note","fileTypesAndContributionMap":{}}]},{"date":"2024-03-08","commitResults":[{"hash":"aefe4bc182a57812bad6ffc3a2fdac69faf1b1e5","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":11}}},{"hash":"bc856e063314528afd5ca7aaf7b6f8cb570c340e","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":0}}}]}],"rickkoh":[{"date":"2024-03-01","commitResults":[{"hash":"d1f769cdd713bb71a9b110937061e75d0b38b8d0","isMergeCommit":false,"messageTitle":"Update UserGuide.md with help command details","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":3}}},{"hash":"9f0a8b15e733e562e21fcb0bf58aed72a25ac655","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S2-CS2103-F09-4/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"36afd6ebe6e04fdf71975d17d25726393060d8d3","isMergeCommit":false,"messageTitle":"Update team member details for Rick Koh in AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":5}}}]},{"date":"2024-03-02","commitResults":[{"hash":"0ee56d3430096d0ce367f9ba9898e8525c4206e6","isMergeCommit":false,"messageTitle":"Add user story for help","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"joenus":{"docs":115,"functional-code":400,"test-code":453,"other":1},"jmsandiegoo":{"docs":83,"functional-code":0,"test-code":0},"raysonchia":{"docs":34,"functional-code":0,"test-code":0},"sebin0817":{"docs":69,"functional-code":0,"test-code":0},"rickkoh":{"docs":13,"functional-code":0,"test-code":0}},"authorContributionVariance":{"joenus":42750.457,"jmsandiegoo":1061.1824,"raysonchia":168.24892,"sebin0817":349.02216,"rickkoh":24.773333},"authorDisplayNameMap":{"joenus":"CS2103-F09-4 JOE ..AWAI","jmsandiegoo":"CS2103-F09-4 SAN ..ISTA","raysonchia":"CS2103-F09-4 RAYS.. ZHE","sebin0817":"CS2103-F09-4 AUM ..EBIN","rickkoh":"CS2103-F09-4 KOH ..RICK"}} diff --git a/AY2324S2-CS2103T-F10-2_tp_master/authorship.json b/AY2324S2-CS2103T-F10-2_tp_master/authorship.json index 1ca41c9e..71a2887d 100644 --- a/AY2324S2-CS2103T-F10-2_tp_master/authorship.json +++ b/AY2324S2-CS2103T-F10-2_tp_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"[![CI Status](https://github.com/se-edu/addressbook-level3/workflows/Java%20CI/badge.svg)](https://github.com/se-edu/addressbook-level3/actions)","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":3,"author":{"gitId":"-"},"content":"![Ui](docs/images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"KinTatHo"},"content":"# Target Proposition","lastModifiedDate":"2024-03-01"},{"lineNumber":6,"author":{"gitId":"KinTatHo"},"content":"This app is targeted towards student tutors who are more tech savvy, tapping into their proficiency in tech to streamline the management of student contact, needs, and administrative information. The app will provide structure to organization and information retrieval, simplifying the otherwise complicated and stressful process.","lastModifiedDate":"2024-03-01"},{"lineNumber":7,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":8,"author":{"gitId":"KinTatHo"},"content":"# User Feature List","lastModifiedDate":"2024-03-01"},{"lineNumber":9,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":10,"author":{"gitId":"KinTatHo"},"content":"## Features Overview","lastModifiedDate":"2024-03-01"},{"lineNumber":11,"author":{"gitId":"KinTatHo"},"content":"- **Case Insensitive Inputs**: All inputs are processed in a case-insensitive manner.","lastModifiedDate":"2024-03-01"},{"lineNumber":12,"author":{"gitId":"KinTatHo"},"content":"- **Add Student**: `add -name {name} -address {S[PostalCode] #{UnitNumber}} -number {number} -subject {subject} -level {level}`","lastModifiedDate":"2024-03-01"},{"lineNumber":13,"author":{"gitId":"KinTatHo"},"content":"- **View Student Details**:","lastModifiedDate":"2024-03-01"},{"lineNumber":14,"author":{"gitId":"KinTatHo"},"content":" - Summary: `View -all`","lastModifiedDate":"2024-03-01"},{"lineNumber":15,"author":{"gitId":"KinTatHo"},"content":" - Detailed: `View -name {name}` or `View -id {id}`","lastModifiedDate":"2024-03-01"},{"lineNumber":16,"author":{"gitId":"KinTatHo"},"content":"- **View Summary Statistics**: `View -statistics`","lastModifiedDate":"2024-03-01"},{"lineNumber":17,"author":{"gitId":"KinTatHo"},"content":"- **Delete Student**: `Delete -id {id}`","lastModifiedDate":"2024-03-01"},{"lineNumber":18,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":19,"author":{"gitId":"KinTatHo"},"content":"## Detailed Commands","lastModifiedDate":"2024-03-01"},{"lineNumber":20,"author":{"gitId":"KinTatHo"},"content":"### Add a Student","lastModifiedDate":"2024-03-01"},{"lineNumber":21,"author":{"gitId":"KinTatHo"},"content":"- **Example**: `add -name Xiao Ming -address S000000 #01-01 -number 88888888 -subject Math -level P1`","lastModifiedDate":"2024-03-01"},{"lineNumber":22,"author":{"gitId":"KinTatHo"},"content":"- **Success**: New student appears at the top of the list.","lastModifiedDate":"2024-03-01"},{"lineNumber":23,"author":{"gitId":"KinTatHo"},"content":"- **Failure**: Terminal shows an error in red.","lastModifiedDate":"2024-03-01"},{"lineNumber":24,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":25,"author":{"gitId":"KinTatHo"},"content":"### Viewing Student Details","lastModifiedDate":"2024-03-01"},{"lineNumber":26,"author":{"gitId":"KinTatHo"},"content":"- **Summary**: Use `View -all` to see all students.","lastModifiedDate":"2024-03-01"},{"lineNumber":27,"author":{"gitId":"KinTatHo"},"content":"- **Details**: Use `View -name {name}` or `View -id {id}` for specific students.","lastModifiedDate":"2024-03-01"},{"lineNumber":28,"author":{"gitId":"KinTatHo"},"content":"- **Success**: Appropriate student details page is shown.","lastModifiedDate":"2024-03-01"},{"lineNumber":29,"author":{"gitId":"KinTatHo"},"content":"- **Failure**: \"No such student exists\" message is displayed.","lastModifiedDate":"2024-03-01"},{"lineNumber":30,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":31,"author":{"gitId":"KinTatHo"},"content":"### Summary Statistics","lastModifiedDate":"2024-03-01"},{"lineNumber":32,"author":{"gitId":"KinTatHo"},"content":"- **Usage**: `View -statistics`","lastModifiedDate":"2024-03-01"},{"lineNumber":33,"author":{"gitId":"KinTatHo"},"content":"- **Success**: Displays total number of students.","lastModifiedDate":"2024-03-01"},{"lineNumber":34,"author":{"gitId":"KinTatHo"},"content":"- **Failure**: Error shown in red.","lastModifiedDate":"2024-03-01"},{"lineNumber":35,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":36,"author":{"gitId":"KinTatHo"},"content":"### Delete Student Entry","lastModifiedDate":"2024-03-01"},{"lineNumber":37,"author":{"gitId":"KinTatHo"},"content":"- **Usage**: `Delete -id {id}`","lastModifiedDate":"2024-03-01"},{"lineNumber":38,"author":{"gitId":"KinTatHo"},"content":"- **Success**: Student is removed after confirmation.","lastModifiedDate":"2024-03-01"},{"lineNumber":39,"author":{"gitId":"KinTatHo"},"content":"- **Failure**: \"No such student exists\" error if ID is not found.","lastModifiedDate":"2024-03-01"},{"lineNumber":40,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":41,"author":{"gitId":"KinTatHo"},"content":"## Parameters","lastModifiedDate":"2024-03-01"},{"lineNumber":42,"author":{"gitId":"KinTatHo"},"content":"- **Name**: Full name required, auto-incremented ID for duplicates.","lastModifiedDate":"2024-03-01"},{"lineNumber":43,"author":{"gitId":"KinTatHo"},"content":"- **Contact Number**: Must be 8 digits.","lastModifiedDate":"2024-03-01"},{"lineNumber":44,"author":{"gitId":"KinTatHo"},"content":"- **Address**: Format `S[PostalCode] #[UnitNumber]`.","lastModifiedDate":"2024-03-01"},{"lineNumber":45,"author":{"gitId":"KinTatHo"},"content":"- **Subject**: Consistent subject naming.","lastModifiedDate":"2024-03-01"},{"lineNumber":46,"author":{"gitId":"KinTatHo"},"content":"- **Level**: Format `P1-6`, `S1-5`, `J1-3`.","lastModifiedDate":"2024-03-01"},{"lineNumber":47,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":48,"author":{"gitId":"KinTatHo"},"content":"---","lastModifiedDate":"2024-03-01"},{"lineNumber":49,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":50,"author":{"gitId":"KinTatHo"},"content":"_Commands are designed with user ease and intuitive process flows in mind._","lastModifiedDate":"2024-03-01"},{"lineNumber":51,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":52,"author":{"gitId":"KinTatHo"},"content":"* For the detailed documentation of this project, see the **[TuteeTally Product Website](https://ay2324s2-cs2103t-f10-1.github.io/tp/)**.","lastModifiedDate":"2024-03-01"},{"lineNumber":53,"author":{"gitId":"KinTatHo"},"content":"* This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-03-01"}],"authorContributionMap":{"-":4,"KinTatHo":49}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"About Us\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"# About Us","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"-"},"content":"We are a team based in the [School of Computing, National University of Singapore](http://www.comp.nus.edu.sg).","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":10,"author":{"gitId":"-"},"content":"You can reach us at the email `seer[at]comp.nus.edu.sg`","lastModifiedDate":"2020-06-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-06-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":"## Project team","lastModifiedDate":"2020-06-07"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":14,"author":{"gitId":"MarcusGitty"},"content":"### Baizhou","lastModifiedDate":"2024-02-28"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"Windofbitter"},"content":"\u003cimg src\u003d\"images/windofbitter.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-28"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"MarcusGitty"},"content":"[[github](https://github.com/windofbitter)]","lastModifiedDate":"2024-03-05"},{"lineNumber":19,"author":{"gitId":"MarcusGitty"},"content":"[[portfolio](team/baizhou.md)]","lastModifiedDate":"2024-03-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"* Role: Project Advisor","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"jessicawyz"},"content":"### Ho Kin Tat","lastModifiedDate":"2024-03-04"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"KinTatHo"},"content":"\u003cimg src\u003d\"images/kintatho.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-01"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"KinTatHo"},"content":"[[github](http://github.com/kintatho)]","lastModifiedDate":"2024-02-28"},{"lineNumber":29,"author":{"gitId":"KinTatHo"},"content":"[[portfolio](team/kintat.md)]","lastModifiedDate":"2024-02-28"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"KinTatHo"},"content":"* Role: Developer","lastModifiedDate":"2024-03-01"},{"lineNumber":32,"author":{"gitId":"KinTatHo"},"content":"* Responsibilities: Integration","lastModifiedDate":"2024-03-01"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":35,"author":{"gitId":"0nesheep"},"content":"### Liu Yiyang","lastModifiedDate":"2024-02-28"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":37,"author":{"gitId":"0nesheep"},"content":"\u003cimg src\u003d\"images/0nesheep.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-28"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"MarcusGitty"},"content":"[[github](https://github.com/0nesheep/)]","lastModifiedDate":"2024-03-05"},{"lineNumber":40,"author":{"gitId":"MarcusGitty"},"content":"[[portfolio](team/yiyang.md)]","lastModifiedDate":"2024-03-05"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"0nesheep"},"content":"* Responsibilities: UI","lastModifiedDate":"2024-02-28"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"MarcusGitty"},"content":"### Marcus","lastModifiedDate":"2024-02-28"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"MarcusGitty"},"content":"\u003cimg src\u003d\"images/marcusgitty.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-28"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":50,"author":{"gitId":"MarcusGitty"},"content":"[[github](http://github.com/marcusgitty)]","lastModifiedDate":"2024-03-05"},{"lineNumber":51,"author":{"gitId":"MarcusGitty"},"content":"[[portfolio](team/marcus.md)]","lastModifiedDate":"2024-03-05"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"MarcusGitty"},"content":"* Responsibilities: Data","lastModifiedDate":"2024-02-28"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":58,"author":{"gitId":"jessicawyz"},"content":"### Wu Yizheng","lastModifiedDate":"2024-02-28"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":61,"author":{"gitId":"KinTatHo"},"content":"\u003cimg src\u003d\"images/jessicawyz.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-01"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":63,"author":{"gitId":"jessicawyz"},"content":"[[github](http://github.com/jessicawyz)]","lastModifiedDate":"2024-02-28"},{"lineNumber":64,"author":{"gitId":"MarcusGitty"},"content":"[[portfolio](team/jessica.md)]","lastModifiedDate":"2024-03-05"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":66,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":67,"author":{"gitId":"jessicawyz"},"content":"* Responsibilities: Deliverables","lastModifiedDate":"2024-02-28"}],"authorContributionMap":{"0nesheep":3,"MarcusGitty":11,"Windofbitter":1,"jessicawyz":4,"-":42,"KinTatHo":6}},{"path":"docs/DeveloperGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"Developer Guide\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":" pageNav: 3","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"-"},"content":"# AB-3 Developer Guide","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c!-- * Table of Contents --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003cpage-nav-print /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":14,"author":{"gitId":"-"},"content":"## **Acknowledgements**","lastModifiedDate":"2021-07-30"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":16,"author":{"gitId":"-"},"content":"_{ list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the original source as well }_","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":18,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2021-07-30"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"-"},"content":"## **Setting up, getting started**","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"Refer to the guide [_Setting up and getting started_](SettingUp.md).","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"-"},"content":"## **Design**","lastModifiedDate":"2020-05-23"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":"### Architecture","lastModifiedDate":"2021-07-31"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ArchitectureDiagram.puml\" width\u003d\"280\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"-"},"content":"The ***Architecture Diagram*** given above explains the high-level design of the App.","lastModifiedDate":"2021-07-31"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"-"},"content":"Given below is a quick overview of main components and how they interact with each other.","lastModifiedDate":"2021-07-31"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":36,"author":{"gitId":"-"},"content":"**Main components of the architecture**","lastModifiedDate":"2021-07-31"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":"**`Main`** (consisting of classes [`Main`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/Main.java) and [`MainApp`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/MainApp.java)) is in charge of the app launch and shut down.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"-"},"content":"* At app launch, it initializes the other components in the correct sequence, and connects them up with each other.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"-"},"content":"* At shut down, it shuts down the other components and invokes cleanup methods where necessary.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":"The bulk of the app\u0027s work is done by the following four components:","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"-"},"content":"* [**`UI`**](#ui-component): The UI of the App.","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":"* [**`Logic`**](#logic-component): The command executor.","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":"* [**`Model`**](#model-component): Holds the data of the App in memory.","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* [**`Storage`**](#storage-component): Reads data from, and writes data to, the hard disk.","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"-"},"content":"[**`Commons`**](#common-classes) represents a collection of classes used by multiple other components.","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"-"},"content":"**How the architecture components interact with each other**","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":"The *Sequence Diagram* below shows how the components interact with each other for the scenario where the user issues the command `delete 1`.","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ArchitectureSequenceDiagram.puml\" width\u003d\"574\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":57,"author":{"gitId":"-"},"content":"Each of the four main components (also shown in the diagram above),","lastModifiedDate":"2021-07-31"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":59,"author":{"gitId":"-"},"content":"* defines its *API* in an `interface` with the same name as the Component.","lastModifiedDate":"2021-07-31"},{"lineNumber":60,"author":{"gitId":"-"},"content":"* implements its functionality using a concrete `{Component Name}Manager` class (which follows the corresponding API `interface` mentioned in the previous point.","lastModifiedDate":"2021-07-31"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":62,"author":{"gitId":"-"},"content":"For example, the `Logic` component defines its API in the `Logic.java` interface and implements its functionality using the `LogicManager.java` class which follows the `Logic` interface. Other components interact with a given component through its interface rather than the concrete class (reason: to prevent outside component\u0027s being coupled to the implementation of a component), as illustrated in the (partial) class diagram below.","lastModifiedDate":"2021-07-31"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":64,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ComponentManagers.puml\" width\u003d\"300\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":66,"author":{"gitId":"-"},"content":"The sections below give more details of each component.","lastModifiedDate":"2020-05-23"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":68,"author":{"gitId":"-"},"content":"### UI component","lastModifiedDate":"2020-05-23"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":70,"author":{"gitId":"-"},"content":"The **API** of this component is specified in [`Ui.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/Ui.java)","lastModifiedDate":"2021-07-31"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":72,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UiClassDiagram.puml\" alt\u003d\"Structure of the UI Component\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":74,"author":{"gitId":"-"},"content":"The UI consists of a `MainWindow` that is made up of parts e.g.`CommandBox`, `ResultDisplay`, `PersonListPanel`, `StatusBarFooter` etc. All these, including the `MainWindow`, inherit from the abstract `UiPart` class which captures the commonalities between classes that represent parts of the visible GUI.","lastModifiedDate":"2021-07-31"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":76,"author":{"gitId":"-"},"content":"The `UI` component uses the JavaFx UI framework. The layout of these UI parts are defined in matching `.fxml` files that are in the `src/main/resources/view` folder. For example, the layout of the [`MainWindow`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/MainWindow.java) is specified in [`MainWindow.fxml`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/resources/view/MainWindow.fxml)","lastModifiedDate":"2021-07-31"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":78,"author":{"gitId":"-"},"content":"The `UI` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":80,"author":{"gitId":"-"},"content":"* executes user commands using the `Logic` component.","lastModifiedDate":"2021-07-31"},{"lineNumber":81,"author":{"gitId":"-"},"content":"* listens for changes to `Model` data so that the UI can be updated with the modified data.","lastModifiedDate":"2021-07-31"},{"lineNumber":82,"author":{"gitId":"-"},"content":"* keeps a reference to the `Logic` component, because the `UI` relies on the `Logic` to execute commands.","lastModifiedDate":"2021-07-31"},{"lineNumber":83,"author":{"gitId":"-"},"content":"* depends on some classes in the `Model` component, as it displays `Person` object residing in the `Model`.","lastModifiedDate":"2021-07-31"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":85,"author":{"gitId":"-"},"content":"### Logic component","lastModifiedDate":"2020-05-23"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":87,"author":{"gitId":"-"},"content":"**API** : [`Logic.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/logic/Logic.java)","lastModifiedDate":"2021-07-31"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":89,"author":{"gitId":"-"},"content":"Here\u0027s a (partial) class diagram of the `Logic` component:","lastModifiedDate":"2021-07-31"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":91,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/LogicClassDiagram.puml\" width\u003d\"550\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":93,"author":{"gitId":"-"},"content":"The sequence diagram below illustrates the interactions within the `Logic` component, taking `execute(\"delete 1\")` API call as an example.","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":95,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/DeleteSequenceDiagram.puml\" alt\u003d\"Interactions Inside the Logic Component for the `delete 1` Command\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":97,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":98,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":99,"author":{"gitId":"-"},"content":"**Note:** The lifeline for `DeleteCommandParser` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline continues till the end of diagram.","lastModifiedDate":"2023-09-12"},{"lineNumber":100,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":101,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":102,"author":{"gitId":"-"},"content":"How the `Logic` component works:","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"-"},"content":"1. When `Logic` is called upon to execute a command, it is passed to an `AddressBookParser` object which in turn creates a parser that matches the command (e.g., `DeleteCommandParser`) and uses it to parse the command.","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"-"},"content":"1. This results in a `Command` object (more precisely, an object of one of its subclasses e.g., `DeleteCommand`) which is executed by the `LogicManager`.","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"-"},"content":"1. The command can communicate with the `Model` when it is executed (e.g. to delete a person).\u003cbr\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":107,"author":{"gitId":"-"},"content":" Note that although this is shown as a single step in the diagram above (for simplicity), in the code it can take several interactions (between the command object and the `Model`) to achieve.","lastModifiedDate":"2024-02-09"},{"lineNumber":108,"author":{"gitId":"-"},"content":"1. The result of the command execution is encapsulated as a `CommandResult` object which is returned back from `Logic`.","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"-"},"content":"Here are the other classes in `Logic` (omitted from the class diagram above) that are used for parsing a user command:","lastModifiedDate":"2021-07-31"},{"lineNumber":111,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":112,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ParserClasses.puml\" width\u003d\"600\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":114,"author":{"gitId":"-"},"content":"How the parsing works:","lastModifiedDate":"2021-07-31"},{"lineNumber":115,"author":{"gitId":"-"},"content":"* When called upon to parse a user command, the `AddressBookParser` class creates an `XYZCommandParser` (`XYZ` is a placeholder for the specific command name e.g., `AddCommandParser`) which uses the other classes shown above to parse the user command and create a `XYZCommand` object (e.g., `AddCommand`) which the `AddressBookParser` returns back as a `Command` object.","lastModifiedDate":"2021-07-31"},{"lineNumber":116,"author":{"gitId":"-"},"content":"* All `XYZCommandParser` classes (e.g., `AddCommandParser`, `DeleteCommandParser`, ...) inherit from the `Parser` interface so that they can be treated similarly where possible e.g, during testing.","lastModifiedDate":"2021-07-31"},{"lineNumber":117,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":118,"author":{"gitId":"-"},"content":"### Model component","lastModifiedDate":"2021-07-31"},{"lineNumber":119,"author":{"gitId":"-"},"content":"**API** : [`Model.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/model/Model.java)","lastModifiedDate":"2020-05-23"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":121,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ModelClassDiagram.puml\" width\u003d\"450\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":122,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":123,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":124,"author":{"gitId":"-"},"content":"The `Model` component,","lastModifiedDate":"2021-07-31"},{"lineNumber":125,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":126,"author":{"gitId":"-"},"content":"* stores the address book data i.e., all `Person` objects (which are contained in a `UniquePersonList` object).","lastModifiedDate":"2021-07-31"},{"lineNumber":127,"author":{"gitId":"-"},"content":"* stores the currently \u0027selected\u0027 `Person` objects (e.g., results of a search query) as a separate _filtered_ list which is exposed to outsiders as an unmodifiable `ObservableList\u003cPerson\u003e` that can be \u0027observed\u0027 e.g. the UI can be bound to this list so that the UI automatically updates when the data in the list change.","lastModifiedDate":"2021-07-31"},{"lineNumber":128,"author":{"gitId":"-"},"content":"* stores a `UserPref` object that represents the user’s preferences. This is exposed to the outside as a `ReadOnlyUserPref` objects.","lastModifiedDate":"2021-07-31"},{"lineNumber":129,"author":{"gitId":"-"},"content":"* does not depend on any of the other three components (as the `Model` represents data entities of the domain, they should make sense on their own without depending on other components)","lastModifiedDate":"2021-07-31"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":131,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":132,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":133,"author":{"gitId":"-"},"content":"**Note:** An alternative (arguably, a more OOP) model is given below. It has a `Tag` list in the `AddressBook`, which `Person` references. This allows `AddressBook` to only require one `Tag` object per unique tag, instead of each `Person` needing their own `Tag` objects.\u003cbr\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":134,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":135,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/BetterModelClassDiagram.puml\" width\u003d\"450\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":137,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":138,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":139,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":140,"author":{"gitId":"-"},"content":"### Storage component","lastModifiedDate":"2020-05-23"},{"lineNumber":141,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":142,"author":{"gitId":"-"},"content":"**API** : [`Storage.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/storage/Storage.java)","lastModifiedDate":"2020-05-23"},{"lineNumber":143,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":144,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/StorageClassDiagram.puml\" width\u003d\"550\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":145,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":146,"author":{"gitId":"-"},"content":"The `Storage` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":147,"author":{"gitId":"-"},"content":"* can save both address book data and user preference data in JSON format, and read them back into corresponding objects.","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"-"},"content":"* inherits from both `AddressBookStorage` and `UserPrefStorage`, which means it can be treated as either one (if only the functionality of only one is needed).","lastModifiedDate":"2021-07-31"},{"lineNumber":149,"author":{"gitId":"-"},"content":"* depends on some classes in the `Model` component (because the `Storage` component\u0027s job is to save/retrieve objects that belong to the `Model`)","lastModifiedDate":"2021-07-21"},{"lineNumber":150,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":151,"author":{"gitId":"-"},"content":"### Common classes","lastModifiedDate":"2020-05-23"},{"lineNumber":152,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":153,"author":{"gitId":"-"},"content":"Classes used by multiple components are in the `seedu.addressbook.commons` package.","lastModifiedDate":"2020-05-23"},{"lineNumber":154,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":155,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":156,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":157,"author":{"gitId":"-"},"content":"## **Implementation**","lastModifiedDate":"2020-05-23"},{"lineNumber":158,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":159,"author":{"gitId":"-"},"content":"This section describes some noteworthy details on how certain features are implemented.","lastModifiedDate":"2020-05-23"},{"lineNumber":160,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":161,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Undo/redo feature","lastModifiedDate":"2020-06-07"},{"lineNumber":162,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":163,"author":{"gitId":"-"},"content":"#### Proposed Implementation","lastModifiedDate":"2020-05-23"},{"lineNumber":164,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":165,"author":{"gitId":"-"},"content":"The proposed undo/redo mechanism is facilitated by `VersionedAddressBook`. It extends `AddressBook` with an undo/redo history, stored internally as an `addressBookStateList` and `currentStatePointer`. Additionally, it implements the following operations:","lastModifiedDate":"2020-05-23"},{"lineNumber":166,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":167,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#commit()` — Saves the current address book state in its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":168,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#undo()` — Restores the previous address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":169,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#redo()` — Restores a previously undone address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":170,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":171,"author":{"gitId":"-"},"content":"These operations are exposed in the `Model` interface as `Model#commitAddressBook()`, `Model#undoAddressBook()` and `Model#redoAddressBook()` respectively.","lastModifiedDate":"2020-05-23"},{"lineNumber":172,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":173,"author":{"gitId":"-"},"content":"Given below is an example usage scenario and how the undo/redo mechanism behaves at each step.","lastModifiedDate":"2020-05-23"},{"lineNumber":174,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":175,"author":{"gitId":"-"},"content":"Step 1. The user launches the application for the first time. The `VersionedAddressBook` will be initialized with the initial address book state, and the `currentStatePointer` pointing to that single address book state.","lastModifiedDate":"2020-05-23"},{"lineNumber":176,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":177,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState0.puml\" alt\u003d\"UndoRedoState0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":178,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":179,"author":{"gitId":"-"},"content":"Step 2. The user executes `delete 5` command to delete the 5th person in the address book. The `delete` command calls `Model#commitAddressBook()`, causing the modified state of the address book after the `delete 5` command executes to be saved in the `addressBookStateList`, and the `currentStatePointer` is shifted to the newly inserted address book state.","lastModifiedDate":"2020-05-23"},{"lineNumber":180,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":181,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState1.puml\" alt\u003d\"UndoRedoState1\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":182,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":183,"author":{"gitId":"-"},"content":"Step 3. The user executes `add n/David …​` to add a new person. The `add` command also calls `Model#commitAddressBook()`, causing another modified address book state to be saved into the `addressBookStateList`.","lastModifiedDate":"2020-05-23"},{"lineNumber":184,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":185,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState2.puml\" alt\u003d\"UndoRedoState2\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":186,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":187,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":188,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":189,"author":{"gitId":"-"},"content":"**Note:** If a command fails its execution, it will not call `Model#commitAddressBook()`, so the address book state will not be saved into the `addressBookStateList`.","lastModifiedDate":"2023-09-12"},{"lineNumber":190,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":191,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":192,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":193,"author":{"gitId":"-"},"content":"Step 4. The user now decides that adding the person was a mistake, and decides to undo that action by executing the `undo` command. The `undo` command will call `Model#undoAddressBook()`, which will shift the `currentStatePointer` once to the left, pointing it to the previous address book state, and restores the address book to that state.","lastModifiedDate":"2020-05-23"},{"lineNumber":194,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":195,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState3.puml\" alt\u003d\"UndoRedoState3\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":196,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":197,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":198,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":199,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":200,"author":{"gitId":"-"},"content":"**Note:** If the `currentStatePointer` is at index 0, pointing to the initial AddressBook state, then there are no previous AddressBook states to restore. The `undo` command uses `Model#canUndoAddressBook()` to check if this is the case. If so, it will return an error to the user rather","lastModifiedDate":"2023-09-12"},{"lineNumber":201,"author":{"gitId":"-"},"content":"than attempting to perform the undo.","lastModifiedDate":"2020-05-23"},{"lineNumber":202,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":203,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":204,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":205,"author":{"gitId":"-"},"content":"The following sequence diagram shows how an undo operation goes through the `Logic` component:","lastModifiedDate":"2024-02-09"},{"lineNumber":206,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":207,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoSequenceDiagram-Logic.puml\" alt\u003d\"UndoSequenceDiagram-Logic\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":208,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":209,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":210,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":211,"author":{"gitId":"-"},"content":"**Note:** The lifeline for `UndoCommand` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram.","lastModifiedDate":"2023-09-12"},{"lineNumber":212,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":213,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":214,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":215,"author":{"gitId":"-"},"content":"Similarly, how an undo operation goes through the `Model` component is shown below:","lastModifiedDate":"2024-02-09"},{"lineNumber":216,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":217,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoSequenceDiagram-Model.puml\" alt\u003d\"UndoSequenceDiagram-Model\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":218,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":219,"author":{"gitId":"-"},"content":"The `redo` command does the opposite — it calls `Model#redoAddressBook()`, which shifts the `currentStatePointer` once to the right, pointing to the previously undone state, and restores the address book to that state.","lastModifiedDate":"2020-05-23"},{"lineNumber":220,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":221,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":222,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":223,"author":{"gitId":"-"},"content":"**Note:** If the `currentStatePointer` is at index `addressBookStateList.size() - 1`, pointing to the latest address book state, then there are no undone AddressBook states to restore. The `redo` command uses `Model#canRedoAddressBook()` to check if this is the case. If so, it will return an error to the user rather than attempting to perform the redo.","lastModifiedDate":"2023-09-12"},{"lineNumber":224,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":225,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":226,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":227,"author":{"gitId":"-"},"content":"Step 5. The user then decides to execute the command `list`. Commands that do not modify the address book, such as `list`, will usually not call `Model#commitAddressBook()`, `Model#undoAddressBook()` or `Model#redoAddressBook()`. Thus, the `addressBookStateList` remains unchanged.","lastModifiedDate":"2020-05-23"},{"lineNumber":228,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":229,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState4.puml\" alt\u003d\"UndoRedoState4\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":230,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":231,"author":{"gitId":"-"},"content":"Step 6. The user executes `clear`, which calls `Model#commitAddressBook()`. Since the `currentStatePointer` is not pointing at the end of the `addressBookStateList`, all address book states after the `currentStatePointer` will be purged. Reason: It no longer makes sense to redo the `add n/David …​` command. This is the behavior that most modern desktop applications follow.","lastModifiedDate":"2020-05-23"},{"lineNumber":232,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":233,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState5.puml\" alt\u003d\"UndoRedoState5\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":234,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":235,"author":{"gitId":"-"},"content":"The following activity diagram summarizes what happens when a user executes a new command:","lastModifiedDate":"2020-05-23"},{"lineNumber":236,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":237,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/CommitActivityDiagram.puml\" width\u003d\"250\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":238,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":239,"author":{"gitId":"-"},"content":"#### Design considerations:","lastModifiedDate":"2021-07-31"},{"lineNumber":240,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":241,"author":{"gitId":"-"},"content":"**Aspect: How undo \u0026 redo executes:**","lastModifiedDate":"2021-07-31"},{"lineNumber":242,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":243,"author":{"gitId":"-"},"content":"* **Alternative 1 (current choice):** Saves the entire address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":244,"author":{"gitId":"-"},"content":" * Pros: Easy to implement.","lastModifiedDate":"2020-05-23"},{"lineNumber":245,"author":{"gitId":"-"},"content":" * Cons: May have performance issues in terms of memory usage.","lastModifiedDate":"2020-05-23"},{"lineNumber":246,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":247,"author":{"gitId":"-"},"content":"* **Alternative 2:** Individual command knows how to undo/redo by","lastModifiedDate":"2020-05-23"},{"lineNumber":248,"author":{"gitId":"-"},"content":" itself.","lastModifiedDate":"2020-05-23"},{"lineNumber":249,"author":{"gitId":"-"},"content":" * Pros: Will use less memory (e.g. for `delete`, just save the person being deleted).","lastModifiedDate":"2020-05-23"},{"lineNumber":250,"author":{"gitId":"-"},"content":" * Cons: We must ensure that the implementation of each individual command are correct.","lastModifiedDate":"2020-05-23"},{"lineNumber":251,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":252,"author":{"gitId":"-"},"content":"_{more aspects and alternatives to be added}_","lastModifiedDate":"2020-05-23"},{"lineNumber":253,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":254,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Data archiving","lastModifiedDate":"2020-05-23"},{"lineNumber":255,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":256,"author":{"gitId":"-"},"content":"_{Explain here how the data archiving feature will be implemented}_","lastModifiedDate":"2020-05-23"},{"lineNumber":257,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":258,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":259,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":260,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":261,"author":{"gitId":"-"},"content":"## **Documentation, logging, testing, configuration, dev-ops**","lastModifiedDate":"2020-06-07"},{"lineNumber":262,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":263,"author":{"gitId":"-"},"content":"* [Documentation guide](Documentation.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":264,"author":{"gitId":"-"},"content":"* [Testing guide](Testing.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":265,"author":{"gitId":"-"},"content":"* [Logging guide](Logging.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":266,"author":{"gitId":"-"},"content":"* [Configuration guide](Configuration.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":267,"author":{"gitId":"-"},"content":"* [DevOps guide](DevOps.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":268,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":269,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":270,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":271,"author":{"gitId":"-"},"content":"## **Appendix: Requirements**","lastModifiedDate":"2020-05-23"},{"lineNumber":272,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":273,"author":{"gitId":"-"},"content":"### Product scope","lastModifiedDate":"2020-05-23"},{"lineNumber":274,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":275,"author":{"gitId":"-"},"content":"**Target user profile**:","lastModifiedDate":"2020-05-23"},{"lineNumber":276,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":277,"author":{"gitId":"jessicawyz"},"content":"* a tutor that has a need to manage a significant number of contacts of students","lastModifiedDate":"2024-02-28"},{"lineNumber":278,"author":{"gitId":"-"},"content":"* prefer desktop apps over other types","lastModifiedDate":"2020-05-23"},{"lineNumber":279,"author":{"gitId":"-"},"content":"* can type fast","lastModifiedDate":"2020-05-23"},{"lineNumber":280,"author":{"gitId":"-"},"content":"* prefers typing to mouse interactions","lastModifiedDate":"2020-05-26"},{"lineNumber":281,"author":{"gitId":"-"},"content":"* is reasonably comfortable using CLI apps","lastModifiedDate":"2020-05-23"},{"lineNumber":282,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":283,"author":{"gitId":"jessicawyz"},"content":"**Value proposition**:","lastModifiedDate":"2024-02-28"},{"lineNumber":284,"author":{"gitId":"jessicawyz"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":285,"author":{"gitId":"jessicawyz"},"content":"* Easier time managing their contacts (fast retrieval of relevant info)","lastModifiedDate":"2024-02-28"},{"lineNumber":286,"author":{"gitId":"jessicawyz"},"content":"* More organization \u0026 personalisation","lastModifiedDate":"2024-02-28"},{"lineNumber":287,"author":{"gitId":"jessicawyz"},"content":"* Easier time to track Student’s grades and weaknesses","lastModifiedDate":"2024-02-28"},{"lineNumber":288,"author":{"gitId":"jessicawyz"},"content":"* Manage parent’s expectations","lastModifiedDate":"2024-02-28"},{"lineNumber":289,"author":{"gitId":"jessicawyz"},"content":"* Easy tracking of payment","lastModifiedDate":"2024-02-28"},{"lineNumber":290,"author":{"gitId":"jessicawyz"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":291,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":292,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":293,"author":{"gitId":"-"},"content":"### User stories","lastModifiedDate":"2020-06-07"},{"lineNumber":294,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":295,"author":{"gitId":"-"},"content":"Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unlikely to have) - `*`","lastModifiedDate":"2020-05-23"},{"lineNumber":296,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":297,"author":{"gitId":"-"},"content":"| Priority | As a …​ | I want to …​ | So that I can…​ |","lastModifiedDate":"2020-05-23"},{"lineNumber":298,"author":{"gitId":"jessicawyz"},"content":"|----------|---------|-------------------------------------------|-----------------------------------------------------------|","lastModifiedDate":"2024-02-28"},{"lineNumber":299,"author":{"gitId":"jessicawyz"},"content":"| `* * *` | Tutor | add a student | track the details of the student |","lastModifiedDate":"2024-02-28"},{"lineNumber":300,"author":{"gitId":"jessicawyz"},"content":"| `* * *` | Tutor | view student details summary on main page | get a brief idea of the student while navigating the list |","lastModifiedDate":"2024-02-28"},{"lineNumber":301,"author":{"gitId":"jessicawyz"},"content":"| `* * *` | Tutor | delete a person | remove entries that I no longer need |","lastModifiedDate":"2024-02-28"},{"lineNumber":302,"author":{"gitId":"jessicawyz"},"content":"| `* * *` | Tutor | view single students detail | see the individual detail for a single student |","lastModifiedDate":"2024-02-28"},{"lineNumber":303,"author":{"gitId":"jessicawyz"},"content":"| `* * *` | Tutor | view total number of students | check if I have space for more students |","lastModifiedDate":"2024-02-28"},{"lineNumber":304,"author":{"gitId":"jessicawyz"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":305,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":306,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":307,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":308,"author":{"gitId":"-"},"content":"### Use cases","lastModifiedDate":"2020-06-07"},{"lineNumber":309,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":310,"author":{"gitId":"-"},"content":"(For all use cases below, the **System** is the `AddressBook` and the **Actor** is the `user`, unless specified otherwise)","lastModifiedDate":"2020-05-23"},{"lineNumber":311,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":312,"author":{"gitId":"MarcusGitty"},"content":"**Use case: Add a Student**","lastModifiedDate":"2024-02-28"},{"lineNumber":313,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":314,"author":{"gitId":"MarcusGitty"},"content":"**MSS** (Main Success Story)","lastModifiedDate":"2024-02-28"},{"lineNumber":315,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":316,"author":{"gitId":"MarcusGitty"},"content":"1. User initiates the command to add a student by providing the student\u0027s name, address, contact number, subject, and level.","lastModifiedDate":"2024-02-28"},{"lineNumber":317,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":318,"author":{"gitId":"MarcusGitty"},"content":"2. The AddressBook processes the provided information, adds the student particulars into the system, and assigns a unique ID to the student.","lastModifiedDate":"2024-02-28"},{"lineNumber":319,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":320,"author":{"gitId":"MarcusGitty"},"content":"3. AddressBook displays a confirmation message along with the details of the newly added student at the top of the list.","lastModifiedDate":"2024-02-28"},{"lineNumber":321,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":322,"author":{"gitId":"MarcusGitty"},"content":" Use case ends.","lastModifiedDate":"2024-02-28"},{"lineNumber":323,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":324,"author":{"gitId":"MarcusGitty"},"content":"**Extensions**","lastModifiedDate":"2024-02-28"},{"lineNumber":325,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":326,"author":{"gitId":"MarcusGitty"},"content":"* 1a. User inputs the command in an incorrect format.","lastModifiedDate":"2024-02-28"},{"lineNumber":327,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":328,"author":{"gitId":"MarcusGitty"},"content":" * 1a1. AddressBook shows an error message and the correct command format.","lastModifiedDate":"2024-02-28"},{"lineNumber":329,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":330,"author":{"gitId":"MarcusGitty"},"content":" Use case ends.","lastModifiedDate":"2024-02-28"},{"lineNumber":331,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":332,"author":{"gitId":"MarcusGitty"},"content":"* 1b. User enters a name that already exists in the AddressBook.","lastModifiedDate":"2024-02-28"},{"lineNumber":333,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":334,"author":{"gitId":"MarcusGitty"},"content":" * 1b1. AddressBook generates and assigns a unique ID to the new student to avoid duplication.","lastModifiedDate":"2024-02-28"},{"lineNumber":335,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":336,"author":{"gitId":"MarcusGitty"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-02-28"},{"lineNumber":337,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":338,"author":{"gitId":"MarcusGitty"},"content":"* 1c. User omits a required field in the command.","lastModifiedDate":"2024-02-28"},{"lineNumber":339,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":340,"author":{"gitId":"MarcusGitty"},"content":" * 1c1. AddressBook shows an error message indicating the missing field.","lastModifiedDate":"2024-02-28"},{"lineNumber":341,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":342,"author":{"gitId":"MarcusGitty"},"content":" Use case ends.","lastModifiedDate":"2024-02-28"},{"lineNumber":343,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":344,"author":{"gitId":"MarcusGitty"},"content":"**Use case: View Student Detail**","lastModifiedDate":"2024-02-28"},{"lineNumber":345,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":346,"author":{"gitId":"MarcusGitty"},"content":"**MSS**","lastModifiedDate":"2024-02-28"},{"lineNumber":347,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":348,"author":{"gitId":"MarcusGitty"},"content":"1. User requests to view details of students either by listing all or searching by name or ID.","lastModifiedDate":"2024-02-28"},{"lineNumber":349,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":350,"author":{"gitId":"MarcusGitty"},"content":"2. AddressBook retrieves and shows the relevant student details based on the request.","lastModifiedDate":"2024-02-28"},{"lineNumber":351,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":352,"author":{"gitId":"MarcusGitty"},"content":" Use case ends.","lastModifiedDate":"2024-02-28"},{"lineNumber":353,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":354,"author":{"gitId":"MarcusGitty"},"content":"**Extensions**","lastModifiedDate":"2024-02-28"},{"lineNumber":355,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":356,"author":{"gitId":"MarcusGitty"},"content":"* 2a. The requested student does not exist or the list is empty.","lastModifiedDate":"2024-02-28"},{"lineNumber":357,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":358,"author":{"gitId":"MarcusGitty"},"content":" * 2a1. AddressBook displays a message indicating no such student exists or the list is empty.","lastModifiedDate":"2024-02-28"},{"lineNumber":359,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":360,"author":{"gitId":"MarcusGitty"},"content":" Use case ends.","lastModifiedDate":"2024-02-28"},{"lineNumber":361,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":362,"author":{"gitId":"MarcusGitty"},"content":"* 2b. User inputs an incorrect command format for viewing details.","lastModifiedDate":"2024-02-28"},{"lineNumber":363,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":364,"author":{"gitId":"MarcusGitty"},"content":" * 2b1. AddressBook shows an error message and the correct command format.","lastModifiedDate":"2024-02-28"},{"lineNumber":365,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":366,"author":{"gitId":"MarcusGitty"},"content":"Use case ends.","lastModifiedDate":"2024-02-28"},{"lineNumber":367,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":368,"author":{"gitId":"MarcusGitty"},"content":"**Use case: View Summary Statistics**","lastModifiedDate":"2024-02-28"},{"lineNumber":369,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":370,"author":{"gitId":"MarcusGitty"},"content":"**MSS**","lastModifiedDate":"2024-02-28"},{"lineNumber":371,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":372,"author":{"gitId":"MarcusGitty"},"content":"1. User requests to view summary statistics of students.","lastModifiedDate":"2024-02-28"},{"lineNumber":373,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":374,"author":{"gitId":"MarcusGitty"},"content":"2. AddressBook processes the request and displays the total number of students along with other relevant statistics.","lastModifiedDate":"2024-02-28"},{"lineNumber":375,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":376,"author":{"gitId":"MarcusGitty"},"content":" Use case ends.","lastModifiedDate":"2024-02-28"},{"lineNumber":377,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":378,"author":{"gitId":"MarcusGitty"},"content":"**Extensions**","lastModifiedDate":"2024-02-28"},{"lineNumber":379,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":380,"author":{"gitId":"MarcusGitty"},"content":"* 2a. There is an error in processing the request.","lastModifiedDate":"2024-02-28"},{"lineNumber":381,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":382,"author":{"gitId":"MarcusGitty"},"content":" * 2a1. AddressBook displays an error message in red.","lastModifiedDate":"2024-02-28"},{"lineNumber":383,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":384,"author":{"gitId":"MarcusGitty"},"content":" Use case ends.","lastModifiedDate":"2024-02-28"},{"lineNumber":385,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":386,"author":{"gitId":"MarcusGitty"},"content":"**Use case: Delete a Student**","lastModifiedDate":"2024-02-28"},{"lineNumber":387,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":388,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2020-05-23"},{"lineNumber":389,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":390,"author":{"gitId":"MarcusGitty"},"content":"1. User requests to list Student","lastModifiedDate":"2024-02-28"},{"lineNumber":391,"author":{"gitId":"MarcusGitty"},"content":"2. AddressBook shows a list of Student","lastModifiedDate":"2024-02-28"},{"lineNumber":392,"author":{"gitId":"MarcusGitty"},"content":"3. User requests to delete a specific Student in the list","lastModifiedDate":"2024-02-28"},{"lineNumber":393,"author":{"gitId":"MarcusGitty"},"content":"4. AddressBook deletes the Student","lastModifiedDate":"2024-02-28"},{"lineNumber":394,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":395,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":396,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":397,"author":{"gitId":"-"},"content":"**Extensions**","lastModifiedDate":"2020-05-23"},{"lineNumber":398,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":399,"author":{"gitId":"-"},"content":"* 2a. The list is empty.","lastModifiedDate":"2020-05-23"},{"lineNumber":400,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":401,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":402,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":403,"author":{"gitId":"-"},"content":"* 3a. The given index is invalid.","lastModifiedDate":"2020-05-23"},{"lineNumber":404,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":405,"author":{"gitId":"-"},"content":" * 3a1. AddressBook shows an error message.","lastModifiedDate":"2020-05-23"},{"lineNumber":406,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":407,"author":{"gitId":"-"},"content":" Use case resumes at step 2.","lastModifiedDate":"2020-05-23"},{"lineNumber":408,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":409,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":410,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":411,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":412,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":413,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":414,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":415,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":416,"author":{"gitId":"-"},"content":"1. Should work on any _mainstream OS_ as long as it has Java `11` or above installed.","lastModifiedDate":"2020-05-23"},{"lineNumber":417,"author":{"gitId":"-"},"content":"2. Should be able to hold up to 1000 persons without a noticeable sluggishness in performance for typical usage.","lastModifiedDate":"2020-05-23"},{"lineNumber":418,"author":{"gitId":"-"},"content":"3. A user with above average typing speed for regular English text (i.e. not code, not system admin commands) should be able to accomplish most of the tasks faster using commands than using the mouse.","lastModifiedDate":"2020-05-23"},{"lineNumber":419,"author":{"gitId":"jessicawyz"},"content":"4. System should provide quick responses to user commands.","lastModifiedDate":"2024-03-05"},{"lineNumber":420,"author":{"gitId":"jessicawyz"},"content":"5. Should have user-friendly design for interface, so it is intuitive to use.","lastModifiedDate":"2024-03-05"},{"lineNumber":421,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":422,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":423,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":424,"author":{"gitId":"-"},"content":"* **Mainstream OS**: Windows, Linux, Unix, MacOS","lastModifiedDate":"2024-02-09"},{"lineNumber":425,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":426,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":427,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":428,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":429,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":430,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":431,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":432,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":433,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":434,"author":{"gitId":"-"},"content":"**Note:** These instructions only provide a starting point for testers to work on;","lastModifiedDate":"2023-09-12"},{"lineNumber":435,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":436,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":437,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":438,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":439,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":440,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":441,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":442,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":443,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":444,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":445,"author":{"gitId":"-"},"content":" 1. Double-click the jar file Expected: Shows the GUI with a set of sample contacts. The window size may not be optimum.","lastModifiedDate":"2020-05-23"},{"lineNumber":446,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":447,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":448,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":449,"author":{"gitId":"-"},"content":" 1. Resize the window to an optimum size. Move the window to a different location. Close the window.","lastModifiedDate":"2020-05-23"},{"lineNumber":450,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":451,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":452,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","lastModifiedDate":"2020-05-23"},{"lineNumber":453,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":454,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":455,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":456,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":457,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":458,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":459,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":460,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":461,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":462,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":463,"author":{"gitId":"-"},"content":" Expected: First contact is deleted from the list. Details of the deleted contact shown in the status message. Timestamp in the status bar is updated.","lastModifiedDate":"2020-05-23"},{"lineNumber":464,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":465,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":466,"author":{"gitId":"-"},"content":" Expected: No person is deleted. Error details shown in the status message. Status bar remains the same.","lastModifiedDate":"2020-05-23"},{"lineNumber":467,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":468,"author":{"gitId":"-"},"content":" 1. Other incorrect delete commands to try: `delete`, `delete x`, `...` (where x is larger than the list size)\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":469,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":470,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":471,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":472,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":473,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":474,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":475,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":476,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":477,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":478,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":479,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"MarcusGitty":83,"jessicawyz":18,"-":378}},{"path":"docs/UserGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"User Guide\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":" pageNav: 3","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":7,"author":{"gitId":"0nesheep"},"content":"# TuteeTally User Guide","lastModifiedDate":"2024-02-28"},{"lineNumber":8,"author":{"gitId":"0nesheep"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":9,"author":{"gitId":"0nesheep"},"content":"TuteeTally is a **desktop app for managing student contacts, optimized for use via a Line Interface** (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast, TuteeTally can make student management much easier and faster than traditional GUI apps.","lastModifiedDate":"2024-02-28"},{"lineNumber":10,"author":{"gitId":"0nesheep"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":11,"author":{"gitId":"0nesheep"},"content":"The system includes features for adding students, viewing student details, viewing summary statistics, and deleting student entries. All inputs are case-insensitive, enhancing user accessibility.","lastModifiedDate":"2024-02-28"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"-"},"content":"\u003c!-- * Table of Contents --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"-"},"content":"\u003cpage-nav-print /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":17,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"## Quick start","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"1. Ensure you have Java `11` or above installed in your Computer.","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"0nesheep"},"content":"1. Download the latest `tuteetally.jar` from [here](https://github.com/AY2324S2-CS2103T-F10-2/tp/releases).","lastModifiedDate":"2024-03-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":25,"author":{"gitId":"-"},"content":"1. Copy the file to the folder you want to use as the _home folder_ for your AddressBook.","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":27,"author":{"gitId":"0nesheep"},"content":"1. Open a command terminal, `cd` into the folder you put the jar file in, and use the `java -jar tuteetally.jar` command to run the application.\u003cbr\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":28,"author":{"gitId":"-"},"content":" A GUI similar to the below should appear in a few seconds. Note how the app contains some sample data.\u003cbr\u003e","lastModifiedDate":"2023-01-01"},{"lineNumber":29,"author":{"gitId":"-"},"content":" ![Ui](images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"-"},"content":"1. Type the command in the command box and press Enter to execute it. e.g. typing **`help`** and pressing Enter will open the help window.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"-"},"content":" Some example commands you can try:","lastModifiedDate":"2020-05-23"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"0nesheep"},"content":" * `add` - adding student to list","lastModifiedDate":"2024-03-05"},{"lineNumber":35,"author":{"gitId":"0nesheep"},"content":" * `delete` - deleting student from list","lastModifiedDate":"2024-03-05"},{"lineNumber":36,"author":{"gitId":"0nesheep"},"content":" * `view` - viewing student overview or details","lastModifiedDate":"2024-03-05"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":"1. Refer to the [Features](#features) below for details of each command.","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":40,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":"## Features","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":"**Notes about the command format:**\u003cbr\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"0nesheep"},"content":"* Words in `{UPPER_CASE}` are the parameters to be supplied by the user.\u003cbr\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":49,"author":{"gitId":"0nesheep"},"content":" e.g. in `-name/{NAME}`, `NAME` is a parameter which can be used as `add -name John Doe`.","lastModifiedDate":"2024-03-05"},{"lineNumber":50,"author":{"gitId":"0nesheep"},"content":"* `{PREFIX{FIELD}}` indicates parameters in `FIELD` need to be preceded with `PREFIX` \u003cbr\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":51,"author":{"gitId":"0nesheep"},"content":"e.g. in `{S{POSTAL_CODE}}`, `S` is the compulsory prefix and inputs should always start with S (e.g. `S123456`, `S888888`)","lastModifiedDate":"2024-03-05"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":"* Parameters can be in any order.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"0nesheep"},"content":" e.g. if the command specifies `-name {NAME} -address {S{POSTALCODE}}`, `-address {S{POSTALCODE}} -name {NAME}` is also acceptable.","lastModifiedDate":"2024-03-05"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-02-03"},{"lineNumber":56,"author":{"gitId":"-"},"content":"* If you are using a PDF version of this document, be careful when copying and pasting commands that span multiple lines as space characters surrounding line-breaks may be omitted when copied over to the application.","lastModifiedDate":"2023-06-26"},{"lineNumber":57,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":60,"author":{"gitId":"0nesheep"},"content":"### Adding a student: `add`","lastModifiedDate":"2024-02-28"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":62,"author":{"gitId":"0nesheep"},"content":"Adds a student particulars into address book.","lastModifiedDate":"2024-02-28"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":64,"author":{"gitId":"0nesheep"},"content":"Format: `add -name {NAME} -address {S{POSTAL_CODE}} #{UNIT_NUMBER} -number {NUMBER} -subject {SUBJECT} -level {LEVEL}`","lastModifiedDate":"2024-03-05"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":66,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"0nesheep"},"content":"**Tip:** If addition is successful, the new student record will be shown at the top of the list.","lastModifiedDate":"2024-02-28"},{"lineNumber":68,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":70,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":71,"author":{"gitId":"0nesheep"},"content":"* `add -name Xiao Ming -address S000000 #01-01 -number 88888888 -subject Math -level P1`","lastModifiedDate":"2024-02-28"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":73,"author":{"gitId":"0nesheep"},"content":"### Deleting a student : `Delete`","lastModifiedDate":"2024-02-28"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":75,"author":{"gitId":"0nesheep"},"content":"Deletes the specified student from the address book.","lastModifiedDate":"2024-02-28"},{"lineNumber":76,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":77,"author":{"gitId":"0nesheep"},"content":"Format: `Delete -id {ID}`","lastModifiedDate":"2024-03-05"},{"lineNumber":78,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":79,"author":{"gitId":"0nesheep"},"content":"* Deletes the person at the specified `id`.","lastModifiedDate":"2024-02-28"},{"lineNumber":80,"author":{"gitId":"0nesheep"},"content":"* The index refers to the 5-digit code attached to each student entry.","lastModifiedDate":"2024-02-28"},{"lineNumber":81,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":82,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":83,"author":{"gitId":"0nesheep"},"content":"* `delete -id 88888` deletes the student with the id 8888","lastModifiedDate":"2024-02-28"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":85,"author":{"gitId":"0nesheep"},"content":"### View student statistics: `View`","lastModifiedDate":"2024-03-05"},{"lineNumber":86,"author":{"gitId":"Windofbitter"},"content":"This would display the total number of students","lastModifiedDate":"2024-02-28"},{"lineNumber":87,"author":{"gitId":"Windofbitter"},"content":"Format: `View -statistics`","lastModifiedDate":"2024-02-28"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":89,"author":{"gitId":"0nesheep"},"content":"### View student summary at home page: `View`","lastModifiedDate":"2024-03-05"},{"lineNumber":90,"author":{"gitId":"Windofbitter"},"content":"This would display a summary of student particulars on the homepage.","lastModifiedDate":"2024-02-28"},{"lineNumber":91,"author":{"gitId":"Windofbitter"},"content":"Format: `View -all`","lastModifiedDate":"2024-02-28"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":93,"author":{"gitId":"0nesheep"},"content":"### View student particular by name: `View`","lastModifiedDate":"2024-03-05"},{"lineNumber":94,"author":{"gitId":"Windofbitter"},"content":"This will display a specific student particular by searching its name","lastModifiedDate":"2024-02-28"},{"lineNumber":95,"author":{"gitId":"0nesheep"},"content":"Format: `View -name {NAME}`","lastModifiedDate":"2024-03-05"},{"lineNumber":96,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2024-02-28"},{"lineNumber":97,"author":{"gitId":"Windofbitter"},"content":"* `View -name Xiao Ming` would display the student particular of Xiao Ming if existed","lastModifiedDate":"2024-02-28"},{"lineNumber":98,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":99,"author":{"gitId":"0nesheep"},"content":"### View student particular by id: `View`","lastModifiedDate":"2024-03-05"},{"lineNumber":100,"author":{"gitId":"Windofbitter"},"content":"This will display a specific particular by searching for its id","lastModifiedDate":"2024-02-28"},{"lineNumber":101,"author":{"gitId":"0nesheep"},"content":"Format: `View -id {ID}`","lastModifiedDate":"2024-03-05"},{"lineNumber":102,"author":{"gitId":"Windofbitter"},"content":"Examples;","lastModifiedDate":"2024-02-28"},{"lineNumber":103,"author":{"gitId":"Windofbitter"},"content":"* `View -id 88888` would display the student particular for student whose id is 88888 if it exists.","lastModifiedDate":"2024-02-28"},{"lineNumber":104,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":105,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-02-04"},{"lineNumber":106,"author":{"gitId":"-"},"content":"### Archiving data files `[coming in v2.0]`","lastModifiedDate":"2020-05-23"},{"lineNumber":107,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":108,"author":{"gitId":"-"},"content":"_Details coming soon ..._","lastModifiedDate":"2021-02-04"},{"lineNumber":109,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":110,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":111,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":112,"author":{"gitId":"-"},"content":"## FAQ","lastModifiedDate":"2020-05-23"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":114,"author":{"gitId":"-"},"content":"**Q**: How do I transfer my data to another Computer?\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":115,"author":{"gitId":"-"},"content":"**A**: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous AddressBook home folder.","lastModifiedDate":"2020-05-23"},{"lineNumber":116,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":117,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":118,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":119,"author":{"gitId":"-"},"content":"## Known issues","lastModifiedDate":"2023-09-08"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":121,"author":{"gitId":"-"},"content":"1. **When using multiple screens**, if you move the application to a secondary screen, and later switch to using only the primary screen, the GUI will open off-screen. The remedy is to delete the `preferences.json` file created by the application before running the application again.","lastModifiedDate":"2023-09-08"},{"lineNumber":122,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":123,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2023-09-08"},{"lineNumber":124,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":125,"author":{"gitId":"-"},"content":"## Command summary","lastModifiedDate":"2020-05-23"},{"lineNumber":126,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":127,"author":{"gitId":"0nesheep"},"content":"| Action | Format, Examples |","lastModifiedDate":"2024-03-05"},{"lineNumber":128,"author":{"gitId":"0nesheep"},"content":"|------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|","lastModifiedDate":"2024-03-05"},{"lineNumber":129,"author":{"gitId":"0nesheep"},"content":"| **Add** | `add -name {NAME} -address {S{PostalCode}} #{UnitNumber} -number {number} -subject {subject} -level {level}` \u003cbr\u003e e.g., `add -name Xiao Ming -address S000000 #01-01 -number 88888888 -subject Math -level P1` |","lastModifiedDate":"2024-03-05"},{"lineNumber":130,"author":{"gitId":"0nesheep"},"content":"| **Delete** | `Delete -id {id}`\u003cbr\u003e e.g., `delete -id 88888` |","lastModifiedDate":"2024-03-05"},{"lineNumber":131,"author":{"gitId":"0nesheep"},"content":"| **View** | `View [-statistics] [-all] [-id ID] [-name NAME]` |","lastModifiedDate":"2024-03-05"},{"lineNumber":132,"author":{"gitId":"Windofbitter"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":133,"author":{"gitId":"0nesheep"},"content":"","lastModifiedDate":"2024-02-28"}],"authorContributionMap":{"0nesheep":38,"Windofbitter":10,"-":85}},{"path":"docs/_markbind/layouts/default.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003chead-bottom\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003clink rel\u003d\"stylesheet\" href\u003d\"{{baseUrl}}/stylesheets/main.css\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003c/head-bottom\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cheader sticky\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cnavbar type\u003d\"dark\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"MarcusGitty"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"{{baseUrl}}/index.html\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003eTuteeTally\u003c/a\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/index.html\" class\u003d\"nav-link\"\u003eHome\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/UserGuide.html\" class\u003d\"nav-link\"\u003eUser Guide\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/DeveloperGuide.html\" class\u003d\"nav-link\"\u003eDeveloper Guide\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/AboutUs.html\" class\u003d\"nav-link\"\u003eAbout Us\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"MarcusGitty"},"content":" \u003cli\u003e\u003ca href\u003d\"https://github.com/AY2324S2-CS2103T-F10-2/tp\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003e\u003cmd\u003e:fab-github:\u003c/md\u003e\u003c/a\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003cli slot\u003d\"right\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003cform class\u003d\"navbar-form\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\" menu-align-right\u003e\u003c/searchbar\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003c/form\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003c/navbar\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"-"},"content":"\u003c/header\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"flex-body\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"site-nav\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"site-nav-top\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"fw-bold mb-2\" style\u003d\"font-size: 1.25rem;\"\u003eSite Map\u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003csite-nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"-"},"content":"* [Home]({{ baseUrl }}/index.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"-"},"content":"* [User Guide]({{ baseUrl }}/UserGuide.html) :expanded:","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * [Quick Start]({{ baseUrl }}/UserGuide.html#quick-start)","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"-"},"content":" * [Features]({{ baseUrl }}/UserGuide.html#features)","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * [FAQ]({{ baseUrl }}/UserGuide.html#faq)","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * [Command Summary]({{ baseUrl }}/UserGuide.html#faq)","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"-"},"content":"* [Developer Guide]({{ baseUrl }}/DeveloperGuide.html) :expanded:","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * [Acknowledgements]({{ baseUrl }}/DeveloperGuide.html#acknowledgements)","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * [Setting Up]({{ baseUrl }}/DeveloperGuide.html#setting-up-getting-started)","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"-"},"content":" * [Design]({{ baseUrl }}/DeveloperGuide.html#design)","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * [Implementation]({{ baseUrl }}/DeveloperGuide.html#implementation)","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"-"},"content":" * [Documentation, logging, testing, configuration, dev-ops]({{ baseUrl }}/DeveloperGuide.html#documentation-logging-testing-configuration-dev-ops)","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * [Appendix: Requirements]({{ baseUrl }}/DeveloperGuide.html#appendix-requirements)","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * [Appendix: Instructions for manual testing]({{ baseUrl }}/DeveloperGuide.html#appendix-instructions-for-manual-testing)","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"-"},"content":"* Tutorials","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * [Tracing code]({{ baseUrl }}/tutorials/TracingCode.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"-"},"content":" * [Adding a command]({{ baseUrl }}/tutorials/AddRemark.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"-"},"content":" * [Removing Fields]({{ baseUrl }}/tutorials/RemovingFields.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* [About Us]({{ baseUrl }}/AboutUs.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003c/site-nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003c/nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003cdiv id\u003d\"content-wrapper\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"-"},"content":" {{ content }}","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"page-nav\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"-"},"content":" \u003cpage-nav /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"-"},"content":" \u003c/nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"-"},"content":" \u003cscroll-top-button\u003e\u003c/scroll-top-button\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"-"},"content":"\u003cfooter\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u003c!-- Support MarkBind by including a link to us on your landing page! --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"text-center\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"-"},"content":" \u003csmall\u003e[\u003cmd\u003e**Powered by**\u003c/md\u003e \u003cimg src\u003d\"https://markbind.org/favicon.ico\" width\u003d\"30\"\u003e {{MarkBind}}, generated on {{timestamp}}]\u003c/small\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"-"},"content":"\u003c/footer\u003e","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"MarcusGitty":2,"-":65}},{"path":"docs/index.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"MarcusGitty"},"content":"# TuteeTally","lastModifiedDate":"2024-03-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"MarcusGitty"},"content":"[![CI Status](https://github.com/se-edu/addressbook-level3/workflows/Java%20CI/badge.svg)](https://github.com/AY2324S2-CS2103T-F10-2/tp/actions)","lastModifiedDate":"2024-03-05"},{"lineNumber":9,"author":{"gitId":"MarcusGitty"},"content":"[![codecov](https://codecov.io/gh/se-edu/addressbook-level3/branch/master/graph/badge.svg)](https://app.codecov.io/gh/AY2324S2-CS2103T-F10-2/tp)","lastModifiedDate":"2024-03-05"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":11,"author":{"gitId":"-"},"content":"![Ui](images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":13,"author":{"gitId":"MarcusGitty"},"content":"**TuteeTally is a desktop application for managing your contact details.** While it has a GUI, most of the user interactions happen using a CLI (Command Line Interface).","lastModifiedDate":"2024-03-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":15,"author":{"gitId":"MarcusGitty"},"content":"* If you are interested in using TuteeTally, head over to the [_Quick Start_ section of the **User Guide**](UserGuide.html#quick-start).","lastModifiedDate":"2024-03-05"},{"lineNumber":16,"author":{"gitId":"MarcusGitty"},"content":"* If you are interested about developing TuteeTally, the [**Developer Guide**](DeveloperGuide.html) is a good place to start.","lastModifiedDate":"2024-03-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"**Acknowledgements**","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"* Libraries used: [JavaFX](https://openjfx.io/), [Jackson](https://github.com/FasterXML/jackson), [JUnit5](https://github.com/junit-team/junit5)","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"MarcusGitty":6,"-":15}},{"path":"docs/team/baizhou.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"MarcusGitty"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":2,"author":{"gitId":"MarcusGitty"},"content":" layout: default.md","lastModifiedDate":"2024-03-05"},{"lineNumber":3,"author":{"gitId":"MarcusGitty"},"content":" title: \"Bai Zhou\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-05"},{"lineNumber":4,"author":{"gitId":"MarcusGitty"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":5,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":6,"author":{"gitId":"MarcusGitty"},"content":"### Personal Portfolio","lastModifiedDate":"2024-03-05"},{"lineNumber":7,"author":{"gitId":"MarcusGitty"},"content":"Hi I\u0027m Bai Zhou","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"MarcusGitty":7}},{"path":"docs/team/jessica.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"MarcusGitty"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":2,"author":{"gitId":"MarcusGitty"},"content":" layout: default.md","lastModifiedDate":"2024-03-05"},{"lineNumber":3,"author":{"gitId":"MarcusGitty"},"content":" title: \"Jessica\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-05"},{"lineNumber":4,"author":{"gitId":"MarcusGitty"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":5,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":6,"author":{"gitId":"MarcusGitty"},"content":"### Personal Portfolio","lastModifiedDate":"2024-03-05"},{"lineNumber":7,"author":{"gitId":"MarcusGitty"},"content":"Hi I\u0027m Jessica.","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"MarcusGitty":7}},{"path":"docs/team/kintat.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"---","lastModifiedDate":"2024-02-28"},{"lineNumber":2,"author":{"gitId":"KinTatHo"},"content":" layout: default.md","lastModifiedDate":"2024-02-28"},{"lineNumber":3,"author":{"gitId":"KinTatHo"},"content":" title: \"Kin Tat\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-02-28"},{"lineNumber":4,"author":{"gitId":"KinTatHo"},"content":"---","lastModifiedDate":"2024-02-28"},{"lineNumber":5,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":6,"author":{"gitId":"KinTatHo"},"content":"### Personal Portfolio","lastModifiedDate":"2024-02-28"},{"lineNumber":7,"author":{"gitId":"MarcusGitty"},"content":"Hi I\u0027m Kin Tat","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"MarcusGitty":1,"KinTatHo":6}},{"path":"docs/team/marcus.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"MarcusGitty"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":2,"author":{"gitId":"MarcusGitty"},"content":" layout: default.md","lastModifiedDate":"2024-03-05"},{"lineNumber":3,"author":{"gitId":"MarcusGitty"},"content":" title: \"Marcus\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-05"},{"lineNumber":4,"author":{"gitId":"MarcusGitty"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":5,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":6,"author":{"gitId":"MarcusGitty"},"content":"### Personal Portfolio","lastModifiedDate":"2024-03-05"},{"lineNumber":7,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":8,"author":{"gitId":"MarcusGitty"},"content":"Hi I\u0027m Marcus","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"MarcusGitty":8}},{"path":"docs/team/yiyang.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"MarcusGitty"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":2,"author":{"gitId":"MarcusGitty"},"content":" layout: default.md","lastModifiedDate":"2024-03-05"},{"lineNumber":3,"author":{"gitId":"MarcusGitty"},"content":" title: \"Yi Yang\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-05"},{"lineNumber":4,"author":{"gitId":"MarcusGitty"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":5,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":6,"author":{"gitId":"MarcusGitty"},"content":"### Personal Portfolio","lastModifiedDate":"2024-03-05"},{"lineNumber":7,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":8,"author":{"gitId":"MarcusGitty"},"content":"Hi I\u0027m Yi Yang","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"MarcusGitty":8}}] +[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"MarcusGitty"},"content":"[![CI Status](https://github.com/se-edu/addressbook-level3/workflows/Java%20CI/badge.svg)](https://github.com/AY2324S2-CS2103T-F10-2/tp/actions)","lastModifiedDate":"2024-03-08"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":3,"author":{"gitId":"-"},"content":"![Ui](docs/images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"KinTatHo"},"content":"# Target Proposition","lastModifiedDate":"2024-03-01"},{"lineNumber":6,"author":{"gitId":"KinTatHo"},"content":"This app is targeted towards student tutors who are more tech savvy, tapping into their proficiency in tech to streamline the management of student contact, needs, and administrative information. The app will provide structure to organization and information retrieval, simplifying the otherwise complicated and stressful process.","lastModifiedDate":"2024-03-01"},{"lineNumber":7,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":8,"author":{"gitId":"KinTatHo"},"content":"# User Feature List","lastModifiedDate":"2024-03-01"},{"lineNumber":9,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":10,"author":{"gitId":"KinTatHo"},"content":"## Features Overview","lastModifiedDate":"2024-03-01"},{"lineNumber":11,"author":{"gitId":"KinTatHo"},"content":"- **Case Insensitive Inputs**: All inputs are processed in a case-insensitive manner.","lastModifiedDate":"2024-03-01"},{"lineNumber":12,"author":{"gitId":"KinTatHo"},"content":"- **Add Student**: `add -name {name} -address {S[PostalCode] #{UnitNumber}} -number {number} -subject {subject} -level {level}`","lastModifiedDate":"2024-03-01"},{"lineNumber":13,"author":{"gitId":"KinTatHo"},"content":"- **View Student Details**:","lastModifiedDate":"2024-03-01"},{"lineNumber":14,"author":{"gitId":"KinTatHo"},"content":" - Summary: `View -all`","lastModifiedDate":"2024-03-01"},{"lineNumber":15,"author":{"gitId":"KinTatHo"},"content":" - Detailed: `View -name {name}` or `View -id {id}`","lastModifiedDate":"2024-03-01"},{"lineNumber":16,"author":{"gitId":"KinTatHo"},"content":"- **View Summary Statistics**: `View -statistics`","lastModifiedDate":"2024-03-01"},{"lineNumber":17,"author":{"gitId":"KinTatHo"},"content":"- **Delete Student**: `Delete -id {id}`","lastModifiedDate":"2024-03-01"},{"lineNumber":18,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":19,"author":{"gitId":"KinTatHo"},"content":"## Detailed Commands","lastModifiedDate":"2024-03-01"},{"lineNumber":20,"author":{"gitId":"KinTatHo"},"content":"### Add a Student","lastModifiedDate":"2024-03-01"},{"lineNumber":21,"author":{"gitId":"KinTatHo"},"content":"- **Example**: `add -name Xiao Ming -address S000000 #01-01 -number 88888888 -subject Math -level P1`","lastModifiedDate":"2024-03-01"},{"lineNumber":22,"author":{"gitId":"KinTatHo"},"content":"- **Success**: New student appears at the top of the list.","lastModifiedDate":"2024-03-01"},{"lineNumber":23,"author":{"gitId":"KinTatHo"},"content":"- **Failure**: Terminal shows an error in red.","lastModifiedDate":"2024-03-01"},{"lineNumber":24,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":25,"author":{"gitId":"KinTatHo"},"content":"### Viewing Student Details","lastModifiedDate":"2024-03-01"},{"lineNumber":26,"author":{"gitId":"KinTatHo"},"content":"- **Summary**: Use `View -all` to see all students.","lastModifiedDate":"2024-03-01"},{"lineNumber":27,"author":{"gitId":"KinTatHo"},"content":"- **Details**: Use `View -name {name}` or `View -id {id}` for specific students.","lastModifiedDate":"2024-03-01"},{"lineNumber":28,"author":{"gitId":"KinTatHo"},"content":"- **Success**: Appropriate student details page is shown.","lastModifiedDate":"2024-03-01"},{"lineNumber":29,"author":{"gitId":"KinTatHo"},"content":"- **Failure**: \"No such student exists\" message is displayed.","lastModifiedDate":"2024-03-01"},{"lineNumber":30,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":31,"author":{"gitId":"KinTatHo"},"content":"### Summary Statistics","lastModifiedDate":"2024-03-01"},{"lineNumber":32,"author":{"gitId":"KinTatHo"},"content":"- **Usage**: `View -statistics`","lastModifiedDate":"2024-03-01"},{"lineNumber":33,"author":{"gitId":"KinTatHo"},"content":"- **Success**: Displays total number of students.","lastModifiedDate":"2024-03-01"},{"lineNumber":34,"author":{"gitId":"KinTatHo"},"content":"- **Failure**: Error shown in red.","lastModifiedDate":"2024-03-01"},{"lineNumber":35,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":36,"author":{"gitId":"KinTatHo"},"content":"### Delete Student Entry","lastModifiedDate":"2024-03-01"},{"lineNumber":37,"author":{"gitId":"KinTatHo"},"content":"- **Usage**: `Delete -id {id}`","lastModifiedDate":"2024-03-01"},{"lineNumber":38,"author":{"gitId":"KinTatHo"},"content":"- **Success**: Student is removed after confirmation.","lastModifiedDate":"2024-03-01"},{"lineNumber":39,"author":{"gitId":"KinTatHo"},"content":"- **Failure**: \"No such student exists\" error if ID is not found.","lastModifiedDate":"2024-03-01"},{"lineNumber":40,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":41,"author":{"gitId":"KinTatHo"},"content":"## Parameters","lastModifiedDate":"2024-03-01"},{"lineNumber":42,"author":{"gitId":"KinTatHo"},"content":"- **Name**: Full name required, auto-incremented ID for duplicates.","lastModifiedDate":"2024-03-01"},{"lineNumber":43,"author":{"gitId":"KinTatHo"},"content":"- **Contact Number**: Must be 8 digits.","lastModifiedDate":"2024-03-01"},{"lineNumber":44,"author":{"gitId":"KinTatHo"},"content":"- **Address**: Format `S[PostalCode] #[UnitNumber]`.","lastModifiedDate":"2024-03-01"},{"lineNumber":45,"author":{"gitId":"KinTatHo"},"content":"- **Subject**: Consistent subject naming.","lastModifiedDate":"2024-03-01"},{"lineNumber":46,"author":{"gitId":"KinTatHo"},"content":"- **Level**: Format `P1-6`, `S1-5`, `J1-3`.","lastModifiedDate":"2024-03-01"},{"lineNumber":47,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":48,"author":{"gitId":"KinTatHo"},"content":"---","lastModifiedDate":"2024-03-01"},{"lineNumber":49,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":50,"author":{"gitId":"KinTatHo"},"content":"_Commands are designed with user ease and intuitive process flows in mind._","lastModifiedDate":"2024-03-01"},{"lineNumber":51,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":52,"author":{"gitId":"MarcusGitty"},"content":"* For the detailed documentation of this project, see the **[TuteeTally Product Website](https://ay2324s2-cs2103t-f10-2.github.io/tp/)**.","lastModifiedDate":"2024-03-08"},{"lineNumber":53,"author":{"gitId":"KinTatHo"},"content":"* This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-03-01"}],"authorContributionMap":{"MarcusGitty":2,"-":3,"KinTatHo":48}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"About Us\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"# About Us","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"-"},"content":"We are a team based in the [School of Computing, National University of Singapore](http://www.comp.nus.edu.sg).","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":10,"author":{"gitId":"-"},"content":"You can reach us at the email `seer[at]comp.nus.edu.sg`","lastModifiedDate":"2020-06-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-06-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":"## Project team","lastModifiedDate":"2020-06-07"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":14,"author":{"gitId":"MarcusGitty"},"content":"### Baizhou","lastModifiedDate":"2024-02-28"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"Windofbitter"},"content":"\u003cimg src\u003d\"images/windofbitter.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-28"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"MarcusGitty"},"content":"[[github](https://github.com/windofbitter)]","lastModifiedDate":"2024-03-05"},{"lineNumber":19,"author":{"gitId":"MarcusGitty"},"content":"[[portfolio](team/baizhou.md)]","lastModifiedDate":"2024-03-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"* Role: Project Advisor","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"jessicawyz"},"content":"### Ho Kin Tat","lastModifiedDate":"2024-03-04"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"KinTatHo"},"content":"\u003cimg src\u003d\"images/kintatho.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-01"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"KinTatHo"},"content":"[[github](http://github.com/kintatho)]","lastModifiedDate":"2024-02-28"},{"lineNumber":29,"author":{"gitId":"KinTatHo"},"content":"[[portfolio](team/kintat.md)]","lastModifiedDate":"2024-02-28"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"KinTatHo"},"content":"* Role: Developer","lastModifiedDate":"2024-03-01"},{"lineNumber":32,"author":{"gitId":"KinTatHo"},"content":"* Responsibilities: Integration","lastModifiedDate":"2024-03-01"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":35,"author":{"gitId":"0nesheep"},"content":"### Liu Yiyang","lastModifiedDate":"2024-02-28"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":37,"author":{"gitId":"0nesheep"},"content":"\u003cimg src\u003d\"images/0nesheep.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-28"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"MarcusGitty"},"content":"[[github](https://github.com/0nesheep/)]","lastModifiedDate":"2024-03-05"},{"lineNumber":40,"author":{"gitId":"MarcusGitty"},"content":"[[portfolio](team/yiyang.md)]","lastModifiedDate":"2024-03-05"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"0nesheep"},"content":"* Responsibilities: UI","lastModifiedDate":"2024-02-28"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"MarcusGitty"},"content":"### Marcus","lastModifiedDate":"2024-02-28"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"MarcusGitty"},"content":"\u003cimg src\u003d\"images/marcusgitty.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-28"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":50,"author":{"gitId":"MarcusGitty"},"content":"[[github](http://github.com/marcusgitty)]","lastModifiedDate":"2024-03-05"},{"lineNumber":51,"author":{"gitId":"MarcusGitty"},"content":"[[portfolio](team/marcus.md)]","lastModifiedDate":"2024-03-05"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"MarcusGitty"},"content":"* Responsibilities: Data","lastModifiedDate":"2024-02-28"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":58,"author":{"gitId":"jessicawyz"},"content":"### Wu Yizheng","lastModifiedDate":"2024-02-28"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":61,"author":{"gitId":"KinTatHo"},"content":"\u003cimg src\u003d\"images/jessicawyz.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-01"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":63,"author":{"gitId":"jessicawyz"},"content":"[[github](http://github.com/jessicawyz)]","lastModifiedDate":"2024-02-28"},{"lineNumber":64,"author":{"gitId":"MarcusGitty"},"content":"[[portfolio](team/jessica.md)]","lastModifiedDate":"2024-03-05"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":66,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":67,"author":{"gitId":"jessicawyz"},"content":"* Responsibilities: Deliverables","lastModifiedDate":"2024-02-28"}],"authorContributionMap":{"0nesheep":3,"MarcusGitty":11,"Windofbitter":1,"jessicawyz":4,"-":42,"KinTatHo":6}},{"path":"docs/DeveloperGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"Developer Guide\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":" pageNav: 3","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"-"},"content":"# AB-3 Developer Guide","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c!-- * Table of Contents --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003cpage-nav-print /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":14,"author":{"gitId":"-"},"content":"## **Acknowledgements**","lastModifiedDate":"2021-07-30"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":16,"author":{"gitId":"-"},"content":"_{ list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the original source as well }_","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":18,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2021-07-30"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"-"},"content":"## **Setting up, getting started**","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"Refer to the guide [_Setting up and getting started_](SettingUp.md).","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"-"},"content":"## **Design**","lastModifiedDate":"2020-05-23"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":"### Architecture","lastModifiedDate":"2021-07-31"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ArchitectureDiagram.puml\" width\u003d\"280\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"-"},"content":"The ***Architecture Diagram*** given above explains the high-level design of the App.","lastModifiedDate":"2021-07-31"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"-"},"content":"Given below is a quick overview of main components and how they interact with each other.","lastModifiedDate":"2021-07-31"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":36,"author":{"gitId":"-"},"content":"**Main components of the architecture**","lastModifiedDate":"2021-07-31"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":"**`Main`** (consisting of classes [`Main`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/Main.java) and [`MainApp`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/MainApp.java)) is in charge of the app launch and shut down.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"-"},"content":"* At app launch, it initializes the other components in the correct sequence, and connects them up with each other.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"-"},"content":"* At shut down, it shuts down the other components and invokes cleanup methods where necessary.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":"The bulk of the app\u0027s work is done by the following four components:","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"-"},"content":"* [**`UI`**](#ui-component): The UI of the App.","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":"* [**`Logic`**](#logic-component): The command executor.","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":"* [**`Model`**](#model-component): Holds the data of the App in memory.","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* [**`Storage`**](#storage-component): Reads data from, and writes data to, the hard disk.","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"-"},"content":"[**`Commons`**](#common-classes) represents a collection of classes used by multiple other components.","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"-"},"content":"**How the architecture components interact with each other**","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":"The *Sequence Diagram* below shows how the components interact with each other for the scenario where the user issues the command `delete 1`.","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ArchitectureSequenceDiagram.puml\" width\u003d\"574\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":57,"author":{"gitId":"-"},"content":"Each of the four main components (also shown in the diagram above),","lastModifiedDate":"2021-07-31"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":59,"author":{"gitId":"-"},"content":"* defines its *API* in an `interface` with the same name as the Component.","lastModifiedDate":"2021-07-31"},{"lineNumber":60,"author":{"gitId":"-"},"content":"* implements its functionality using a concrete `{Component Name}Manager` class (which follows the corresponding API `interface` mentioned in the previous point.","lastModifiedDate":"2021-07-31"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":62,"author":{"gitId":"-"},"content":"For example, the `Logic` component defines its API in the `Logic.java` interface and implements its functionality using the `LogicManager.java` class which follows the `Logic` interface. Other components interact with a given component through its interface rather than the concrete class (reason: to prevent outside component\u0027s being coupled to the implementation of a component), as illustrated in the (partial) class diagram below.","lastModifiedDate":"2021-07-31"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":64,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ComponentManagers.puml\" width\u003d\"300\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":66,"author":{"gitId":"-"},"content":"The sections below give more details of each component.","lastModifiedDate":"2020-05-23"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":68,"author":{"gitId":"-"},"content":"### UI component","lastModifiedDate":"2020-05-23"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":70,"author":{"gitId":"-"},"content":"The **API** of this component is specified in [`Ui.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/Ui.java)","lastModifiedDate":"2021-07-31"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":72,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UiClassDiagram.puml\" alt\u003d\"Structure of the UI Component\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":74,"author":{"gitId":"-"},"content":"The UI consists of a `MainWindow` that is made up of parts e.g.`CommandBox`, `ResultDisplay`, `PersonListPanel`, `StatusBarFooter` etc. All these, including the `MainWindow`, inherit from the abstract `UiPart` class which captures the commonalities between classes that represent parts of the visible GUI.","lastModifiedDate":"2021-07-31"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":76,"author":{"gitId":"-"},"content":"The `UI` component uses the JavaFx UI framework. The layout of these UI parts are defined in matching `.fxml` files that are in the `src/main/resources/view` folder. For example, the layout of the [`MainWindow`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/MainWindow.java) is specified in [`MainWindow.fxml`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/resources/view/MainWindow.fxml)","lastModifiedDate":"2021-07-31"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":78,"author":{"gitId":"-"},"content":"The `UI` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":80,"author":{"gitId":"-"},"content":"* executes user commands using the `Logic` component.","lastModifiedDate":"2021-07-31"},{"lineNumber":81,"author":{"gitId":"-"},"content":"* listens for changes to `Model` data so that the UI can be updated with the modified data.","lastModifiedDate":"2021-07-31"},{"lineNumber":82,"author":{"gitId":"-"},"content":"* keeps a reference to the `Logic` component, because the `UI` relies on the `Logic` to execute commands.","lastModifiedDate":"2021-07-31"},{"lineNumber":83,"author":{"gitId":"-"},"content":"* depends on some classes in the `Model` component, as it displays `Person` object residing in the `Model`.","lastModifiedDate":"2021-07-31"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":85,"author":{"gitId":"-"},"content":"### Logic component","lastModifiedDate":"2020-05-23"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":87,"author":{"gitId":"-"},"content":"**API** : [`Logic.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/logic/Logic.java)","lastModifiedDate":"2021-07-31"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":89,"author":{"gitId":"-"},"content":"Here\u0027s a (partial) class diagram of the `Logic` component:","lastModifiedDate":"2021-07-31"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":91,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/LogicClassDiagram.puml\" width\u003d\"550\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":93,"author":{"gitId":"-"},"content":"The sequence diagram below illustrates the interactions within the `Logic` component, taking `execute(\"delete 1\")` API call as an example.","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":95,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/DeleteSequenceDiagram.puml\" alt\u003d\"Interactions Inside the Logic Component for the `delete 1` Command\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":97,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":98,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":99,"author":{"gitId":"-"},"content":"**Note:** The lifeline for `DeleteCommandParser` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline continues till the end of diagram.","lastModifiedDate":"2023-09-12"},{"lineNumber":100,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":101,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":102,"author":{"gitId":"-"},"content":"How the `Logic` component works:","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"-"},"content":"1. When `Logic` is called upon to execute a command, it is passed to an `AddressBookParser` object which in turn creates a parser that matches the command (e.g., `DeleteCommandParser`) and uses it to parse the command.","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"-"},"content":"1. This results in a `Command` object (more precisely, an object of one of its subclasses e.g., `DeleteCommand`) which is executed by the `LogicManager`.","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"-"},"content":"1. The command can communicate with the `Model` when it is executed (e.g. to delete a person).\u003cbr\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":107,"author":{"gitId":"-"},"content":" Note that although this is shown as a single step in the diagram above (for simplicity), in the code it can take several interactions (between the command object and the `Model`) to achieve.","lastModifiedDate":"2024-02-09"},{"lineNumber":108,"author":{"gitId":"-"},"content":"1. The result of the command execution is encapsulated as a `CommandResult` object which is returned back from `Logic`.","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"-"},"content":"Here are the other classes in `Logic` (omitted from the class diagram above) that are used for parsing a user command:","lastModifiedDate":"2021-07-31"},{"lineNumber":111,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":112,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ParserClasses.puml\" width\u003d\"600\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":114,"author":{"gitId":"-"},"content":"How the parsing works:","lastModifiedDate":"2021-07-31"},{"lineNumber":115,"author":{"gitId":"-"},"content":"* When called upon to parse a user command, the `AddressBookParser` class creates an `XYZCommandParser` (`XYZ` is a placeholder for the specific command name e.g., `AddCommandParser`) which uses the other classes shown above to parse the user command and create a `XYZCommand` object (e.g., `AddCommand`) which the `AddressBookParser` returns back as a `Command` object.","lastModifiedDate":"2021-07-31"},{"lineNumber":116,"author":{"gitId":"-"},"content":"* All `XYZCommandParser` classes (e.g., `AddCommandParser`, `DeleteCommandParser`, ...) inherit from the `Parser` interface so that they can be treated similarly where possible e.g, during testing.","lastModifiedDate":"2021-07-31"},{"lineNumber":117,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":118,"author":{"gitId":"-"},"content":"### Model component","lastModifiedDate":"2021-07-31"},{"lineNumber":119,"author":{"gitId":"-"},"content":"**API** : [`Model.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/model/Model.java)","lastModifiedDate":"2020-05-23"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":121,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ModelClassDiagram.puml\" width\u003d\"450\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":122,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":123,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":124,"author":{"gitId":"-"},"content":"The `Model` component,","lastModifiedDate":"2021-07-31"},{"lineNumber":125,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":126,"author":{"gitId":"-"},"content":"* stores the address book data i.e., all `Person` objects (which are contained in a `UniquePersonList` object).","lastModifiedDate":"2021-07-31"},{"lineNumber":127,"author":{"gitId":"-"},"content":"* stores the currently \u0027selected\u0027 `Person` objects (e.g., results of a search query) as a separate _filtered_ list which is exposed to outsiders as an unmodifiable `ObservableList\u003cPerson\u003e` that can be \u0027observed\u0027 e.g. the UI can be bound to this list so that the UI automatically updates when the data in the list change.","lastModifiedDate":"2021-07-31"},{"lineNumber":128,"author":{"gitId":"-"},"content":"* stores a `UserPref` object that represents the user’s preferences. This is exposed to the outside as a `ReadOnlyUserPref` objects.","lastModifiedDate":"2021-07-31"},{"lineNumber":129,"author":{"gitId":"-"},"content":"* does not depend on any of the other three components (as the `Model` represents data entities of the domain, they should make sense on their own without depending on other components)","lastModifiedDate":"2021-07-31"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":131,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":132,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":133,"author":{"gitId":"-"},"content":"**Note:** An alternative (arguably, a more OOP) model is given below. It has a `Tag` list in the `AddressBook`, which `Person` references. This allows `AddressBook` to only require one `Tag` object per unique tag, instead of each `Person` needing their own `Tag` objects.\u003cbr\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":134,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":135,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/BetterModelClassDiagram.puml\" width\u003d\"450\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":137,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":138,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":139,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":140,"author":{"gitId":"-"},"content":"### Storage component","lastModifiedDate":"2020-05-23"},{"lineNumber":141,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":142,"author":{"gitId":"-"},"content":"**API** : [`Storage.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/storage/Storage.java)","lastModifiedDate":"2020-05-23"},{"lineNumber":143,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":144,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/StorageClassDiagram.puml\" width\u003d\"550\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":145,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":146,"author":{"gitId":"-"},"content":"The `Storage` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":147,"author":{"gitId":"-"},"content":"* can save both address book data and user preference data in JSON format, and read them back into corresponding objects.","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"-"},"content":"* inherits from both `AddressBookStorage` and `UserPrefStorage`, which means it can be treated as either one (if only the functionality of only one is needed).","lastModifiedDate":"2021-07-31"},{"lineNumber":149,"author":{"gitId":"-"},"content":"* depends on some classes in the `Model` component (because the `Storage` component\u0027s job is to save/retrieve objects that belong to the `Model`)","lastModifiedDate":"2021-07-21"},{"lineNumber":150,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":151,"author":{"gitId":"-"},"content":"### Common classes","lastModifiedDate":"2020-05-23"},{"lineNumber":152,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":153,"author":{"gitId":"-"},"content":"Classes used by multiple components are in the `seedu.addressbook.commons` package.","lastModifiedDate":"2020-05-23"},{"lineNumber":154,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":155,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":156,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":157,"author":{"gitId":"-"},"content":"## **Implementation**","lastModifiedDate":"2020-05-23"},{"lineNumber":158,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":159,"author":{"gitId":"-"},"content":"This section describes some noteworthy details on how certain features are implemented.","lastModifiedDate":"2020-05-23"},{"lineNumber":160,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":161,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Undo/redo feature","lastModifiedDate":"2020-06-07"},{"lineNumber":162,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":163,"author":{"gitId":"-"},"content":"#### Proposed Implementation","lastModifiedDate":"2020-05-23"},{"lineNumber":164,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":165,"author":{"gitId":"-"},"content":"The proposed undo/redo mechanism is facilitated by `VersionedAddressBook`. It extends `AddressBook` with an undo/redo history, stored internally as an `addressBookStateList` and `currentStatePointer`. Additionally, it implements the following operations:","lastModifiedDate":"2020-05-23"},{"lineNumber":166,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":167,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#commit()` — Saves the current address book state in its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":168,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#undo()` — Restores the previous address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":169,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#redo()` — Restores a previously undone address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":170,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":171,"author":{"gitId":"-"},"content":"These operations are exposed in the `Model` interface as `Model#commitAddressBook()`, `Model#undoAddressBook()` and `Model#redoAddressBook()` respectively.","lastModifiedDate":"2020-05-23"},{"lineNumber":172,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":173,"author":{"gitId":"-"},"content":"Given below is an example usage scenario and how the undo/redo mechanism behaves at each step.","lastModifiedDate":"2020-05-23"},{"lineNumber":174,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":175,"author":{"gitId":"-"},"content":"Step 1. The user launches the application for the first time. The `VersionedAddressBook` will be initialized with the initial address book state, and the `currentStatePointer` pointing to that single address book state.","lastModifiedDate":"2020-05-23"},{"lineNumber":176,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":177,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState0.puml\" alt\u003d\"UndoRedoState0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":178,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":179,"author":{"gitId":"-"},"content":"Step 2. The user executes `delete 5` command to delete the 5th person in the address book. The `delete` command calls `Model#commitAddressBook()`, causing the modified state of the address book after the `delete 5` command executes to be saved in the `addressBookStateList`, and the `currentStatePointer` is shifted to the newly inserted address book state.","lastModifiedDate":"2020-05-23"},{"lineNumber":180,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":181,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState1.puml\" alt\u003d\"UndoRedoState1\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":182,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":183,"author":{"gitId":"-"},"content":"Step 3. The user executes `add n/David …​` to add a new person. The `add` command also calls `Model#commitAddressBook()`, causing another modified address book state to be saved into the `addressBookStateList`.","lastModifiedDate":"2020-05-23"},{"lineNumber":184,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":185,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState2.puml\" alt\u003d\"UndoRedoState2\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":186,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":187,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":188,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":189,"author":{"gitId":"-"},"content":"**Note:** If a command fails its execution, it will not call `Model#commitAddressBook()`, so the address book state will not be saved into the `addressBookStateList`.","lastModifiedDate":"2023-09-12"},{"lineNumber":190,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":191,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":192,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":193,"author":{"gitId":"-"},"content":"Step 4. The user now decides that adding the person was a mistake, and decides to undo that action by executing the `undo` command. The `undo` command will call `Model#undoAddressBook()`, which will shift the `currentStatePointer` once to the left, pointing it to the previous address book state, and restores the address book to that state.","lastModifiedDate":"2020-05-23"},{"lineNumber":194,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":195,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState3.puml\" alt\u003d\"UndoRedoState3\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":196,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":197,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":198,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":199,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":200,"author":{"gitId":"-"},"content":"**Note:** If the `currentStatePointer` is at index 0, pointing to the initial AddressBook state, then there are no previous AddressBook states to restore. The `undo` command uses `Model#canUndoAddressBook()` to check if this is the case. If so, it will return an error to the user rather","lastModifiedDate":"2023-09-12"},{"lineNumber":201,"author":{"gitId":"-"},"content":"than attempting to perform the undo.","lastModifiedDate":"2020-05-23"},{"lineNumber":202,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":203,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":204,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":205,"author":{"gitId":"-"},"content":"The following sequence diagram shows how an undo operation goes through the `Logic` component:","lastModifiedDate":"2024-02-09"},{"lineNumber":206,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":207,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoSequenceDiagram-Logic.puml\" alt\u003d\"UndoSequenceDiagram-Logic\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":208,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":209,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":210,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":211,"author":{"gitId":"-"},"content":"**Note:** The lifeline for `UndoCommand` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram.","lastModifiedDate":"2023-09-12"},{"lineNumber":212,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":213,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":214,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":215,"author":{"gitId":"-"},"content":"Similarly, how an undo operation goes through the `Model` component is shown below:","lastModifiedDate":"2024-02-09"},{"lineNumber":216,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":217,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoSequenceDiagram-Model.puml\" alt\u003d\"UndoSequenceDiagram-Model\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":218,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":219,"author":{"gitId":"-"},"content":"The `redo` command does the opposite — it calls `Model#redoAddressBook()`, which shifts the `currentStatePointer` once to the right, pointing to the previously undone state, and restores the address book to that state.","lastModifiedDate":"2020-05-23"},{"lineNumber":220,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":221,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":222,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":223,"author":{"gitId":"-"},"content":"**Note:** If the `currentStatePointer` is at index `addressBookStateList.size() - 1`, pointing to the latest address book state, then there are no undone AddressBook states to restore. The `redo` command uses `Model#canRedoAddressBook()` to check if this is the case. If so, it will return an error to the user rather than attempting to perform the redo.","lastModifiedDate":"2023-09-12"},{"lineNumber":224,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":225,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":226,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":227,"author":{"gitId":"-"},"content":"Step 5. The user then decides to execute the command `list`. Commands that do not modify the address book, such as `list`, will usually not call `Model#commitAddressBook()`, `Model#undoAddressBook()` or `Model#redoAddressBook()`. Thus, the `addressBookStateList` remains unchanged.","lastModifiedDate":"2020-05-23"},{"lineNumber":228,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":229,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState4.puml\" alt\u003d\"UndoRedoState4\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":230,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":231,"author":{"gitId":"-"},"content":"Step 6. The user executes `clear`, which calls `Model#commitAddressBook()`. Since the `currentStatePointer` is not pointing at the end of the `addressBookStateList`, all address book states after the `currentStatePointer` will be purged. Reason: It no longer makes sense to redo the `add n/David …​` command. This is the behavior that most modern desktop applications follow.","lastModifiedDate":"2020-05-23"},{"lineNumber":232,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":233,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState5.puml\" alt\u003d\"UndoRedoState5\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":234,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":235,"author":{"gitId":"-"},"content":"The following activity diagram summarizes what happens when a user executes a new command:","lastModifiedDate":"2020-05-23"},{"lineNumber":236,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":237,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/CommitActivityDiagram.puml\" width\u003d\"250\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":238,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":239,"author":{"gitId":"-"},"content":"#### Design considerations:","lastModifiedDate":"2021-07-31"},{"lineNumber":240,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":241,"author":{"gitId":"-"},"content":"**Aspect: How undo \u0026 redo executes:**","lastModifiedDate":"2021-07-31"},{"lineNumber":242,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":243,"author":{"gitId":"-"},"content":"* **Alternative 1 (current choice):** Saves the entire address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":244,"author":{"gitId":"-"},"content":" * Pros: Easy to implement.","lastModifiedDate":"2020-05-23"},{"lineNumber":245,"author":{"gitId":"-"},"content":" * Cons: May have performance issues in terms of memory usage.","lastModifiedDate":"2020-05-23"},{"lineNumber":246,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":247,"author":{"gitId":"-"},"content":"* **Alternative 2:** Individual command knows how to undo/redo by","lastModifiedDate":"2020-05-23"},{"lineNumber":248,"author":{"gitId":"-"},"content":" itself.","lastModifiedDate":"2020-05-23"},{"lineNumber":249,"author":{"gitId":"-"},"content":" * Pros: Will use less memory (e.g. for `delete`, just save the person being deleted).","lastModifiedDate":"2020-05-23"},{"lineNumber":250,"author":{"gitId":"-"},"content":" * Cons: We must ensure that the implementation of each individual command are correct.","lastModifiedDate":"2020-05-23"},{"lineNumber":251,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":252,"author":{"gitId":"-"},"content":"_{more aspects and alternatives to be added}_","lastModifiedDate":"2020-05-23"},{"lineNumber":253,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":254,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Data archiving","lastModifiedDate":"2020-05-23"},{"lineNumber":255,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":256,"author":{"gitId":"-"},"content":"_{Explain here how the data archiving feature will be implemented}_","lastModifiedDate":"2020-05-23"},{"lineNumber":257,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":258,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":259,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":260,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":261,"author":{"gitId":"-"},"content":"## **Documentation, logging, testing, configuration, dev-ops**","lastModifiedDate":"2020-06-07"},{"lineNumber":262,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":263,"author":{"gitId":"-"},"content":"* [Documentation guide](Documentation.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":264,"author":{"gitId":"-"},"content":"* [Testing guide](Testing.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":265,"author":{"gitId":"-"},"content":"* [Logging guide](Logging.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":266,"author":{"gitId":"-"},"content":"* [Configuration guide](Configuration.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":267,"author":{"gitId":"-"},"content":"* [DevOps guide](DevOps.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":268,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":269,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":270,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":271,"author":{"gitId":"-"},"content":"## **Appendix: Requirements**","lastModifiedDate":"2020-05-23"},{"lineNumber":272,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":273,"author":{"gitId":"-"},"content":"### Product scope","lastModifiedDate":"2020-05-23"},{"lineNumber":274,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":275,"author":{"gitId":"-"},"content":"**Target user profile**:","lastModifiedDate":"2020-05-23"},{"lineNumber":276,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":277,"author":{"gitId":"jessicawyz"},"content":"* a tutor that has a need to manage a significant number of contacts of students","lastModifiedDate":"2024-02-28"},{"lineNumber":278,"author":{"gitId":"-"},"content":"* prefer desktop apps over other types","lastModifiedDate":"2020-05-23"},{"lineNumber":279,"author":{"gitId":"-"},"content":"* can type fast","lastModifiedDate":"2020-05-23"},{"lineNumber":280,"author":{"gitId":"-"},"content":"* prefers typing to mouse interactions","lastModifiedDate":"2020-05-26"},{"lineNumber":281,"author":{"gitId":"-"},"content":"* is reasonably comfortable using CLI apps","lastModifiedDate":"2020-05-23"},{"lineNumber":282,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":283,"author":{"gitId":"jessicawyz"},"content":"**Value proposition**:","lastModifiedDate":"2024-02-28"},{"lineNumber":284,"author":{"gitId":"jessicawyz"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":285,"author":{"gitId":"jessicawyz"},"content":"* Easier time managing their contacts (fast retrieval of relevant info)","lastModifiedDate":"2024-02-28"},{"lineNumber":286,"author":{"gitId":"jessicawyz"},"content":"* More organization \u0026 personalisation","lastModifiedDate":"2024-02-28"},{"lineNumber":287,"author":{"gitId":"jessicawyz"},"content":"* Easier time to track Student’s grades and weaknesses","lastModifiedDate":"2024-02-28"},{"lineNumber":288,"author":{"gitId":"jessicawyz"},"content":"* Manage parent’s expectations","lastModifiedDate":"2024-02-28"},{"lineNumber":289,"author":{"gitId":"jessicawyz"},"content":"* Easy tracking of payment","lastModifiedDate":"2024-02-28"},{"lineNumber":290,"author":{"gitId":"jessicawyz"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":291,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":292,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":293,"author":{"gitId":"-"},"content":"### User stories","lastModifiedDate":"2020-06-07"},{"lineNumber":294,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":295,"author":{"gitId":"-"},"content":"Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unlikely to have) - `*`","lastModifiedDate":"2020-05-23"},{"lineNumber":296,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":297,"author":{"gitId":"-"},"content":"| Priority | As a …​ | I want to …​ | So that I can…​ |","lastModifiedDate":"2020-05-23"},{"lineNumber":298,"author":{"gitId":"jessicawyz"},"content":"|----------|---------|-------------------------------------------|-----------------------------------------------------------|","lastModifiedDate":"2024-02-28"},{"lineNumber":299,"author":{"gitId":"jessicawyz"},"content":"| `* * *` | Tutor | add a student | track the details of the student |","lastModifiedDate":"2024-02-28"},{"lineNumber":300,"author":{"gitId":"jessicawyz"},"content":"| `* * *` | Tutor | view student details summary on main page | get a brief idea of the student while navigating the list |","lastModifiedDate":"2024-02-28"},{"lineNumber":301,"author":{"gitId":"jessicawyz"},"content":"| `* * *` | Tutor | delete a person | remove entries that I no longer need |","lastModifiedDate":"2024-02-28"},{"lineNumber":302,"author":{"gitId":"jessicawyz"},"content":"| `* * *` | Tutor | view single students detail | see the individual detail for a single student |","lastModifiedDate":"2024-02-28"},{"lineNumber":303,"author":{"gitId":"jessicawyz"},"content":"| `* * *` | Tutor | view total number of students | check if I have space for more students |","lastModifiedDate":"2024-02-28"},{"lineNumber":304,"author":{"gitId":"jessicawyz"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":305,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":306,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":307,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":308,"author":{"gitId":"-"},"content":"### Use cases","lastModifiedDate":"2020-06-07"},{"lineNumber":309,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":310,"author":{"gitId":"-"},"content":"(For all use cases below, the **System** is the `AddressBook` and the **Actor** is the `user`, unless specified otherwise)","lastModifiedDate":"2020-05-23"},{"lineNumber":311,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":312,"author":{"gitId":"MarcusGitty"},"content":"**Use case: Add a Student**","lastModifiedDate":"2024-02-28"},{"lineNumber":313,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":314,"author":{"gitId":"MarcusGitty"},"content":"**MSS** (Main Success Story)","lastModifiedDate":"2024-02-28"},{"lineNumber":315,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":316,"author":{"gitId":"MarcusGitty"},"content":"1. User initiates the command to add a student by providing the student\u0027s name, address, contact number, subject, and level.","lastModifiedDate":"2024-02-28"},{"lineNumber":317,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":318,"author":{"gitId":"MarcusGitty"},"content":"2. The AddressBook processes the provided information, adds the student particulars into the system, and assigns a unique ID to the student.","lastModifiedDate":"2024-02-28"},{"lineNumber":319,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":320,"author":{"gitId":"MarcusGitty"},"content":"3. AddressBook displays a confirmation message along with the details of the newly added student at the top of the list.","lastModifiedDate":"2024-02-28"},{"lineNumber":321,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":322,"author":{"gitId":"MarcusGitty"},"content":" Use case ends.","lastModifiedDate":"2024-02-28"},{"lineNumber":323,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":324,"author":{"gitId":"MarcusGitty"},"content":"**Extensions**","lastModifiedDate":"2024-02-28"},{"lineNumber":325,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":326,"author":{"gitId":"MarcusGitty"},"content":"* 1a. User inputs the command in an incorrect format.","lastModifiedDate":"2024-02-28"},{"lineNumber":327,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":328,"author":{"gitId":"MarcusGitty"},"content":" * 1a1. AddressBook shows an error message and the correct command format.","lastModifiedDate":"2024-02-28"},{"lineNumber":329,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":330,"author":{"gitId":"MarcusGitty"},"content":" Use case ends.","lastModifiedDate":"2024-02-28"},{"lineNumber":331,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":332,"author":{"gitId":"MarcusGitty"},"content":"* 1b. User enters a name that already exists in the AddressBook.","lastModifiedDate":"2024-02-28"},{"lineNumber":333,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":334,"author":{"gitId":"MarcusGitty"},"content":" * 1b1. AddressBook generates and assigns a unique ID to the new student to avoid duplication.","lastModifiedDate":"2024-02-28"},{"lineNumber":335,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":336,"author":{"gitId":"MarcusGitty"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-02-28"},{"lineNumber":337,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":338,"author":{"gitId":"MarcusGitty"},"content":"* 1c. User omits a required field in the command.","lastModifiedDate":"2024-02-28"},{"lineNumber":339,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":340,"author":{"gitId":"MarcusGitty"},"content":" * 1c1. AddressBook shows an error message indicating the missing field.","lastModifiedDate":"2024-02-28"},{"lineNumber":341,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":342,"author":{"gitId":"MarcusGitty"},"content":" Use case ends.","lastModifiedDate":"2024-02-28"},{"lineNumber":343,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":344,"author":{"gitId":"MarcusGitty"},"content":"**Use case: View Student Detail**","lastModifiedDate":"2024-02-28"},{"lineNumber":345,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":346,"author":{"gitId":"MarcusGitty"},"content":"**MSS**","lastModifiedDate":"2024-02-28"},{"lineNumber":347,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":348,"author":{"gitId":"MarcusGitty"},"content":"1. User requests to view details of students either by listing all or searching by name or ID.","lastModifiedDate":"2024-02-28"},{"lineNumber":349,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":350,"author":{"gitId":"MarcusGitty"},"content":"2. AddressBook retrieves and shows the relevant student details based on the request.","lastModifiedDate":"2024-02-28"},{"lineNumber":351,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":352,"author":{"gitId":"MarcusGitty"},"content":" Use case ends.","lastModifiedDate":"2024-02-28"},{"lineNumber":353,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":354,"author":{"gitId":"MarcusGitty"},"content":"**Extensions**","lastModifiedDate":"2024-02-28"},{"lineNumber":355,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":356,"author":{"gitId":"MarcusGitty"},"content":"* 2a. The requested student does not exist or the list is empty.","lastModifiedDate":"2024-02-28"},{"lineNumber":357,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":358,"author":{"gitId":"MarcusGitty"},"content":" * 2a1. AddressBook displays a message indicating no such student exists or the list is empty.","lastModifiedDate":"2024-02-28"},{"lineNumber":359,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":360,"author":{"gitId":"MarcusGitty"},"content":" Use case ends.","lastModifiedDate":"2024-02-28"},{"lineNumber":361,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":362,"author":{"gitId":"MarcusGitty"},"content":"* 2b. User inputs an incorrect command format for viewing details.","lastModifiedDate":"2024-02-28"},{"lineNumber":363,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":364,"author":{"gitId":"MarcusGitty"},"content":" * 2b1. AddressBook shows an error message and the correct command format.","lastModifiedDate":"2024-02-28"},{"lineNumber":365,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":366,"author":{"gitId":"MarcusGitty"},"content":"Use case ends.","lastModifiedDate":"2024-02-28"},{"lineNumber":367,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":368,"author":{"gitId":"MarcusGitty"},"content":"**Use case: View Summary Statistics**","lastModifiedDate":"2024-02-28"},{"lineNumber":369,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":370,"author":{"gitId":"MarcusGitty"},"content":"**MSS**","lastModifiedDate":"2024-02-28"},{"lineNumber":371,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":372,"author":{"gitId":"MarcusGitty"},"content":"1. User requests to view summary statistics of students.","lastModifiedDate":"2024-02-28"},{"lineNumber":373,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":374,"author":{"gitId":"MarcusGitty"},"content":"2. AddressBook processes the request and displays the total number of students along with other relevant statistics.","lastModifiedDate":"2024-02-28"},{"lineNumber":375,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":376,"author":{"gitId":"MarcusGitty"},"content":" Use case ends.","lastModifiedDate":"2024-02-28"},{"lineNumber":377,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":378,"author":{"gitId":"MarcusGitty"},"content":"**Extensions**","lastModifiedDate":"2024-02-28"},{"lineNumber":379,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":380,"author":{"gitId":"MarcusGitty"},"content":"* 2a. There is an error in processing the request.","lastModifiedDate":"2024-02-28"},{"lineNumber":381,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":382,"author":{"gitId":"MarcusGitty"},"content":" * 2a1. AddressBook displays an error message in red.","lastModifiedDate":"2024-02-28"},{"lineNumber":383,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":384,"author":{"gitId":"MarcusGitty"},"content":" Use case ends.","lastModifiedDate":"2024-02-28"},{"lineNumber":385,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":386,"author":{"gitId":"MarcusGitty"},"content":"**Use case: Delete a Student**","lastModifiedDate":"2024-02-28"},{"lineNumber":387,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":388,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2020-05-23"},{"lineNumber":389,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":390,"author":{"gitId":"MarcusGitty"},"content":"1. User requests to list Student","lastModifiedDate":"2024-02-28"},{"lineNumber":391,"author":{"gitId":"MarcusGitty"},"content":"2. AddressBook shows a list of Student","lastModifiedDate":"2024-02-28"},{"lineNumber":392,"author":{"gitId":"MarcusGitty"},"content":"3. User requests to delete a specific Student in the list","lastModifiedDate":"2024-02-28"},{"lineNumber":393,"author":{"gitId":"MarcusGitty"},"content":"4. AddressBook deletes the Student","lastModifiedDate":"2024-02-28"},{"lineNumber":394,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":395,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":396,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":397,"author":{"gitId":"-"},"content":"**Extensions**","lastModifiedDate":"2020-05-23"},{"lineNumber":398,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":399,"author":{"gitId":"-"},"content":"* 2a. The list is empty.","lastModifiedDate":"2020-05-23"},{"lineNumber":400,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":401,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":402,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":403,"author":{"gitId":"-"},"content":"* 3a. The given index is invalid.","lastModifiedDate":"2020-05-23"},{"lineNumber":404,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":405,"author":{"gitId":"-"},"content":" * 3a1. AddressBook shows an error message.","lastModifiedDate":"2020-05-23"},{"lineNumber":406,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":407,"author":{"gitId":"-"},"content":" Use case resumes at step 2.","lastModifiedDate":"2020-05-23"},{"lineNumber":408,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":409,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":410,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":411,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":412,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":413,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":414,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":415,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":416,"author":{"gitId":"-"},"content":"1. Should work on any _mainstream OS_ as long as it has Java `11` or above installed.","lastModifiedDate":"2020-05-23"},{"lineNumber":417,"author":{"gitId":"-"},"content":"2. Should be able to hold up to 1000 persons without a noticeable sluggishness in performance for typical usage.","lastModifiedDate":"2020-05-23"},{"lineNumber":418,"author":{"gitId":"-"},"content":"3. A user with above average typing speed for regular English text (i.e. not code, not system admin commands) should be able to accomplish most of the tasks faster using commands than using the mouse.","lastModifiedDate":"2020-05-23"},{"lineNumber":419,"author":{"gitId":"jessicawyz"},"content":"4. System should provide quick responses to user commands.","lastModifiedDate":"2024-03-05"},{"lineNumber":420,"author":{"gitId":"jessicawyz"},"content":"5. Should have user-friendly design for interface, so it is intuitive to use.","lastModifiedDate":"2024-03-05"},{"lineNumber":421,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":422,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":423,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":424,"author":{"gitId":"-"},"content":"* **Mainstream OS**: Windows, Linux, Unix, MacOS","lastModifiedDate":"2024-02-09"},{"lineNumber":425,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":426,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":427,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":428,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":429,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":430,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":431,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":432,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":433,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":434,"author":{"gitId":"-"},"content":"**Note:** These instructions only provide a starting point for testers to work on;","lastModifiedDate":"2023-09-12"},{"lineNumber":435,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":436,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":437,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":438,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":439,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":440,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":441,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":442,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":443,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":444,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":445,"author":{"gitId":"-"},"content":" 1. Double-click the jar file Expected: Shows the GUI with a set of sample contacts. The window size may not be optimum.","lastModifiedDate":"2020-05-23"},{"lineNumber":446,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":447,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":448,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":449,"author":{"gitId":"-"},"content":" 1. Resize the window to an optimum size. Move the window to a different location. Close the window.","lastModifiedDate":"2020-05-23"},{"lineNumber":450,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":451,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":452,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","lastModifiedDate":"2020-05-23"},{"lineNumber":453,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":454,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":455,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":456,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":457,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":458,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":459,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":460,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":461,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":462,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":463,"author":{"gitId":"-"},"content":" Expected: First contact is deleted from the list. Details of the deleted contact shown in the status message. Timestamp in the status bar is updated.","lastModifiedDate":"2020-05-23"},{"lineNumber":464,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":465,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":466,"author":{"gitId":"-"},"content":" Expected: No person is deleted. Error details shown in the status message. Status bar remains the same.","lastModifiedDate":"2020-05-23"},{"lineNumber":467,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":468,"author":{"gitId":"-"},"content":" 1. Other incorrect delete commands to try: `delete`, `delete x`, `...` (where x is larger than the list size)\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":469,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":470,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":471,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":472,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":473,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":474,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":475,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":476,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":477,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":478,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":479,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"MarcusGitty":83,"jessicawyz":18,"-":378}},{"path":"docs/UserGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"User Guide\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":" pageNav: 3","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":7,"author":{"gitId":"0nesheep"},"content":"# TuteeTally User Guide","lastModifiedDate":"2024-02-28"},{"lineNumber":8,"author":{"gitId":"0nesheep"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":9,"author":{"gitId":"0nesheep"},"content":"TuteeTally is a **desktop app for managing student contacts, optimized for use via a Line Interface** (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast, TuteeTally can make student management much easier and faster than traditional GUI apps.","lastModifiedDate":"2024-02-28"},{"lineNumber":10,"author":{"gitId":"0nesheep"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":11,"author":{"gitId":"0nesheep"},"content":"The system includes features for adding students, viewing student details, viewing summary statistics, and deleting student entries. All inputs are case-insensitive, enhancing user accessibility.","lastModifiedDate":"2024-02-28"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"-"},"content":"\u003c!-- * Table of Contents --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"-"},"content":"\u003cpage-nav-print /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":17,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"## Quick start","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"1. Ensure you have Java `11` or above installed in your Computer.","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"0nesheep"},"content":"1. Download the latest `tuteetally.jar` from [here](https://github.com/AY2324S2-CS2103T-F10-2/tp/releases).","lastModifiedDate":"2024-03-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":25,"author":{"gitId":"-"},"content":"1. Copy the file to the folder you want to use as the _home folder_ for your AddressBook.","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":27,"author":{"gitId":"0nesheep"},"content":"1. Open a command terminal, `cd` into the folder you put the jar file in, and use the `java -jar tuteetally.jar` command to run the application.\u003cbr\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":28,"author":{"gitId":"-"},"content":" A GUI similar to the below should appear in a few seconds. Note how the app contains some sample data.\u003cbr\u003e","lastModifiedDate":"2023-01-01"},{"lineNumber":29,"author":{"gitId":"-"},"content":" ![Ui](images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"-"},"content":"1. Type the command in the command box and press Enter to execute it. e.g. typing **`help`** and pressing Enter will open the help window.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"-"},"content":" Some example commands you can try:","lastModifiedDate":"2020-05-23"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"0nesheep"},"content":" * `add` - adding student to list","lastModifiedDate":"2024-03-05"},{"lineNumber":35,"author":{"gitId":"0nesheep"},"content":" * `delete` - deleting student from list","lastModifiedDate":"2024-03-05"},{"lineNumber":36,"author":{"gitId":"0nesheep"},"content":" * `view` - viewing student overview or details","lastModifiedDate":"2024-03-05"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":"1. Refer to the [Features](#features) below for details of each command.","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":40,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":"## Features","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":"**Notes about the command format:**\u003cbr\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"0nesheep"},"content":"* Words in `{UPPER_CASE}` are the parameters to be supplied by the user.\u003cbr\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":49,"author":{"gitId":"0nesheep"},"content":" e.g. in `-name/{NAME}`, `NAME` is a parameter which can be used as `add -name John Doe`.","lastModifiedDate":"2024-03-05"},{"lineNumber":50,"author":{"gitId":"0nesheep"},"content":"* `{PREFIX{FIELD}}` indicates parameters in `FIELD` need to be preceded with `PREFIX` \u003cbr\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":51,"author":{"gitId":"0nesheep"},"content":"e.g. in `{S{POSTAL_CODE}}`, `S` is the compulsory prefix and inputs should always start with S (e.g. `S123456`, `S888888`)","lastModifiedDate":"2024-03-05"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":"* Parameters can be in any order.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"0nesheep"},"content":" e.g. if the command specifies `-name {NAME} -address {S{POSTALCODE}}`, `-address {S{POSTALCODE}} -name {NAME}` is also acceptable.","lastModifiedDate":"2024-03-05"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-02-03"},{"lineNumber":56,"author":{"gitId":"-"},"content":"* If you are using a PDF version of this document, be careful when copying and pasting commands that span multiple lines as space characters surrounding line-breaks may be omitted when copied over to the application.","lastModifiedDate":"2023-06-26"},{"lineNumber":57,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":60,"author":{"gitId":"0nesheep"},"content":"### Adding a student: `add`","lastModifiedDate":"2024-02-28"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":62,"author":{"gitId":"0nesheep"},"content":"Adds a student particulars into address book.","lastModifiedDate":"2024-02-28"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":64,"author":{"gitId":"0nesheep"},"content":"Format: `add -name {NAME} -address {S{POSTAL_CODE}} #{UNIT_NUMBER} -number {NUMBER} -subject {SUBJECT} -level {LEVEL}`","lastModifiedDate":"2024-03-05"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":66,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"0nesheep"},"content":"**Tip:** If addition is successful, the new student record will be shown at the top of the list.","lastModifiedDate":"2024-02-28"},{"lineNumber":68,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":70,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":71,"author":{"gitId":"0nesheep"},"content":"* `add -name Xiao Ming -address S000000 #01-01 -number 88888888 -subject Math -level P1`","lastModifiedDate":"2024-02-28"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":73,"author":{"gitId":"0nesheep"},"content":"### Deleting a student : `Delete`","lastModifiedDate":"2024-02-28"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":75,"author":{"gitId":"0nesheep"},"content":"Deletes the specified student from the address book.","lastModifiedDate":"2024-02-28"},{"lineNumber":76,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":77,"author":{"gitId":"0nesheep"},"content":"Format: `Delete -id {ID}`","lastModifiedDate":"2024-03-05"},{"lineNumber":78,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":79,"author":{"gitId":"0nesheep"},"content":"* Deletes the person at the specified `id`.","lastModifiedDate":"2024-02-28"},{"lineNumber":80,"author":{"gitId":"0nesheep"},"content":"* The index refers to the 5-digit code attached to each student entry.","lastModifiedDate":"2024-02-28"},{"lineNumber":81,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":82,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":83,"author":{"gitId":"0nesheep"},"content":"* `delete -id 88888` deletes the student with the id 8888","lastModifiedDate":"2024-02-28"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":85,"author":{"gitId":"0nesheep"},"content":"### View student statistics: `View`","lastModifiedDate":"2024-03-05"},{"lineNumber":86,"author":{"gitId":"Windofbitter"},"content":"This would display the total number of students","lastModifiedDate":"2024-02-28"},{"lineNumber":87,"author":{"gitId":"Windofbitter"},"content":"Format: `View -statistics`","lastModifiedDate":"2024-02-28"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":89,"author":{"gitId":"0nesheep"},"content":"### View student summary at home page: `View`","lastModifiedDate":"2024-03-05"},{"lineNumber":90,"author":{"gitId":"Windofbitter"},"content":"This would display a summary of student particulars on the homepage.","lastModifiedDate":"2024-02-28"},{"lineNumber":91,"author":{"gitId":"Windofbitter"},"content":"Format: `View -all`","lastModifiedDate":"2024-02-28"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":93,"author":{"gitId":"0nesheep"},"content":"### View student particular by name: `View`","lastModifiedDate":"2024-03-05"},{"lineNumber":94,"author":{"gitId":"Windofbitter"},"content":"This will display a specific student particular by searching its name","lastModifiedDate":"2024-02-28"},{"lineNumber":95,"author":{"gitId":"0nesheep"},"content":"Format: `View -name {NAME}`","lastModifiedDate":"2024-03-05"},{"lineNumber":96,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2024-02-28"},{"lineNumber":97,"author":{"gitId":"Windofbitter"},"content":"* `View -name Xiao Ming` would display the student particular of Xiao Ming if existed","lastModifiedDate":"2024-02-28"},{"lineNumber":98,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":99,"author":{"gitId":"0nesheep"},"content":"### View student particular by id: `View`","lastModifiedDate":"2024-03-05"},{"lineNumber":100,"author":{"gitId":"Windofbitter"},"content":"This will display a specific particular by searching for its id","lastModifiedDate":"2024-02-28"},{"lineNumber":101,"author":{"gitId":"0nesheep"},"content":"Format: `View -id {ID}`","lastModifiedDate":"2024-03-05"},{"lineNumber":102,"author":{"gitId":"Windofbitter"},"content":"Examples;","lastModifiedDate":"2024-02-28"},{"lineNumber":103,"author":{"gitId":"Windofbitter"},"content":"* `View -id 88888` would display the student particular for student whose id is 88888 if it exists.","lastModifiedDate":"2024-02-28"},{"lineNumber":104,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":105,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-02-04"},{"lineNumber":106,"author":{"gitId":"-"},"content":"### Archiving data files `[coming in v2.0]`","lastModifiedDate":"2020-05-23"},{"lineNumber":107,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":108,"author":{"gitId":"-"},"content":"_Details coming soon ..._","lastModifiedDate":"2021-02-04"},{"lineNumber":109,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":110,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":111,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":112,"author":{"gitId":"-"},"content":"## FAQ","lastModifiedDate":"2020-05-23"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":114,"author":{"gitId":"-"},"content":"**Q**: How do I transfer my data to another Computer?\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":115,"author":{"gitId":"-"},"content":"**A**: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous AddressBook home folder.","lastModifiedDate":"2020-05-23"},{"lineNumber":116,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":117,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":118,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":119,"author":{"gitId":"-"},"content":"## Known issues","lastModifiedDate":"2023-09-08"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":121,"author":{"gitId":"-"},"content":"1. **When using multiple screens**, if you move the application to a secondary screen, and later switch to using only the primary screen, the GUI will open off-screen. The remedy is to delete the `preferences.json` file created by the application before running the application again.","lastModifiedDate":"2023-09-08"},{"lineNumber":122,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":123,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2023-09-08"},{"lineNumber":124,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":125,"author":{"gitId":"-"},"content":"## Command summary","lastModifiedDate":"2020-05-23"},{"lineNumber":126,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":127,"author":{"gitId":"0nesheep"},"content":"| Action | Format, Examples |","lastModifiedDate":"2024-03-05"},{"lineNumber":128,"author":{"gitId":"0nesheep"},"content":"|------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|","lastModifiedDate":"2024-03-05"},{"lineNumber":129,"author":{"gitId":"0nesheep"},"content":"| **Add** | `add -name {NAME} -address {S{PostalCode}} #{UnitNumber} -number {number} -subject {subject} -level {level}` \u003cbr\u003e e.g., `add -name Xiao Ming -address S000000 #01-01 -number 88888888 -subject Math -level P1` |","lastModifiedDate":"2024-03-05"},{"lineNumber":130,"author":{"gitId":"0nesheep"},"content":"| **Delete** | `Delete -id {id}`\u003cbr\u003e e.g., `delete -id 88888` |","lastModifiedDate":"2024-03-05"},{"lineNumber":131,"author":{"gitId":"0nesheep"},"content":"| **View** | `View [-statistics] [-all] [-id ID] [-name NAME]` |","lastModifiedDate":"2024-03-05"},{"lineNumber":132,"author":{"gitId":"Windofbitter"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":133,"author":{"gitId":"0nesheep"},"content":"","lastModifiedDate":"2024-02-28"}],"authorContributionMap":{"0nesheep":38,"Windofbitter":10,"-":85}},{"path":"docs/_markbind/layouts/default.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003chead-bottom\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003clink rel\u003d\"stylesheet\" href\u003d\"{{baseUrl}}/stylesheets/main.css\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003c/head-bottom\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cheader sticky\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cnavbar type\u003d\"dark\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"MarcusGitty"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"{{baseUrl}}/index.html\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003eTuteeTally\u003c/a\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/index.html\" class\u003d\"nav-link\"\u003eHome\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/UserGuide.html\" class\u003d\"nav-link\"\u003eUser Guide\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/DeveloperGuide.html\" class\u003d\"nav-link\"\u003eDeveloper Guide\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/AboutUs.html\" class\u003d\"nav-link\"\u003eAbout Us\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"MarcusGitty"},"content":" \u003cli\u003e\u003ca href\u003d\"https://github.com/AY2324S2-CS2103T-F10-2/tp\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003e\u003cmd\u003e:fab-github:\u003c/md\u003e\u003c/a\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003cli slot\u003d\"right\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003cform class\u003d\"navbar-form\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\" menu-align-right\u003e\u003c/searchbar\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003c/form\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003c/navbar\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"-"},"content":"\u003c/header\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"flex-body\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"site-nav\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"site-nav-top\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"fw-bold mb-2\" style\u003d\"font-size: 1.25rem;\"\u003eSite Map\u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003csite-nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"-"},"content":"* [Home]({{ baseUrl }}/index.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"-"},"content":"* [User Guide]({{ baseUrl }}/UserGuide.html) :expanded:","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * [Quick Start]({{ baseUrl }}/UserGuide.html#quick-start)","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"-"},"content":" * [Features]({{ baseUrl }}/UserGuide.html#features)","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * [FAQ]({{ baseUrl }}/UserGuide.html#faq)","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * [Command Summary]({{ baseUrl }}/UserGuide.html#faq)","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"-"},"content":"* [Developer Guide]({{ baseUrl }}/DeveloperGuide.html) :expanded:","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * [Acknowledgements]({{ baseUrl }}/DeveloperGuide.html#acknowledgements)","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * [Setting Up]({{ baseUrl }}/DeveloperGuide.html#setting-up-getting-started)","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"-"},"content":" * [Design]({{ baseUrl }}/DeveloperGuide.html#design)","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * [Implementation]({{ baseUrl }}/DeveloperGuide.html#implementation)","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"-"},"content":" * [Documentation, logging, testing, configuration, dev-ops]({{ baseUrl }}/DeveloperGuide.html#documentation-logging-testing-configuration-dev-ops)","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * [Appendix: Requirements]({{ baseUrl }}/DeveloperGuide.html#appendix-requirements)","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * [Appendix: Instructions for manual testing]({{ baseUrl }}/DeveloperGuide.html#appendix-instructions-for-manual-testing)","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"-"},"content":"* Tutorials","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * [Tracing code]({{ baseUrl }}/tutorials/TracingCode.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"-"},"content":" * [Adding a command]({{ baseUrl }}/tutorials/AddRemark.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"-"},"content":" * [Removing Fields]({{ baseUrl }}/tutorials/RemovingFields.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* [About Us]({{ baseUrl }}/AboutUs.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003c/site-nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003c/nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003cdiv id\u003d\"content-wrapper\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"-"},"content":" {{ content }}","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"page-nav\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"-"},"content":" \u003cpage-nav /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"-"},"content":" \u003c/nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"-"},"content":" \u003cscroll-top-button\u003e\u003c/scroll-top-button\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"-"},"content":"\u003cfooter\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u003c!-- Support MarkBind by including a link to us on your landing page! --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"text-center\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"-"},"content":" \u003csmall\u003e[\u003cmd\u003e**Powered by**\u003c/md\u003e \u003cimg src\u003d\"https://markbind.org/favicon.ico\" width\u003d\"30\"\u003e {{MarkBind}}, generated on {{timestamp}}]\u003c/small\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"-"},"content":"\u003c/footer\u003e","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"MarcusGitty":2,"-":65}},{"path":"docs/index.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"MarcusGitty"},"content":"# TuteeTally","lastModifiedDate":"2024-03-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"MarcusGitty"},"content":"[![CI Status](https://github.com/se-edu/addressbook-level3/workflows/Java%20CI/badge.svg)](https://github.com/AY2324S2-CS2103T-F10-2/tp/actions)","lastModifiedDate":"2024-03-05"},{"lineNumber":9,"author":{"gitId":"MarcusGitty"},"content":"[![codecov](https://codecov.io/gh/se-edu/addressbook-level3/branch/master/graph/badge.svg)](https://app.codecov.io/gh/AY2324S2-CS2103T-F10-2/tp)","lastModifiedDate":"2024-03-05"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":11,"author":{"gitId":"-"},"content":"![Ui](images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":13,"author":{"gitId":"MarcusGitty"},"content":"**TuteeTally is a desktop application for managing your contact details.** While it has a GUI, most of the user interactions happen using a CLI (Command Line Interface).","lastModifiedDate":"2024-03-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":15,"author":{"gitId":"MarcusGitty"},"content":"* If you are interested in using TuteeTally, head over to the [_Quick Start_ section of the **User Guide**](UserGuide.html#quick-start).","lastModifiedDate":"2024-03-05"},{"lineNumber":16,"author":{"gitId":"MarcusGitty"},"content":"* If you are interested about developing TuteeTally, the [**Developer Guide**](DeveloperGuide.html) is a good place to start.","lastModifiedDate":"2024-03-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"**Acknowledgements**","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"* Libraries used: [JavaFX](https://openjfx.io/), [Jackson](https://github.com/FasterXML/jackson), [JUnit5](https://github.com/junit-team/junit5)","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"MarcusGitty":6,"-":15}},{"path":"docs/team/baizhou.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"MarcusGitty"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":2,"author":{"gitId":"MarcusGitty"},"content":" layout: default.md","lastModifiedDate":"2024-03-05"},{"lineNumber":3,"author":{"gitId":"MarcusGitty"},"content":" title: \"Bai Zhou\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-05"},{"lineNumber":4,"author":{"gitId":"MarcusGitty"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":5,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":6,"author":{"gitId":"MarcusGitty"},"content":"### Personal Portfolio","lastModifiedDate":"2024-03-05"},{"lineNumber":7,"author":{"gitId":"MarcusGitty"},"content":"Hi I\u0027m Bai Zhou","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"MarcusGitty":7}},{"path":"docs/team/jessica.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"MarcusGitty"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":2,"author":{"gitId":"MarcusGitty"},"content":" layout: default.md","lastModifiedDate":"2024-03-05"},{"lineNumber":3,"author":{"gitId":"MarcusGitty"},"content":" title: \"Jessica\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-05"},{"lineNumber":4,"author":{"gitId":"MarcusGitty"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":5,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":6,"author":{"gitId":"MarcusGitty"},"content":"### Personal Portfolio","lastModifiedDate":"2024-03-05"},{"lineNumber":7,"author":{"gitId":"MarcusGitty"},"content":"Hi I\u0027m Jessica.","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"MarcusGitty":7}},{"path":"docs/team/kintat.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"KinTatHo"},"content":"---","lastModifiedDate":"2024-02-28"},{"lineNumber":2,"author":{"gitId":"KinTatHo"},"content":" layout: default.md","lastModifiedDate":"2024-02-28"},{"lineNumber":3,"author":{"gitId":"KinTatHo"},"content":" title: \"Kin Tat\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-02-28"},{"lineNumber":4,"author":{"gitId":"KinTatHo"},"content":"---","lastModifiedDate":"2024-02-28"},{"lineNumber":5,"author":{"gitId":"KinTatHo"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":6,"author":{"gitId":"KinTatHo"},"content":"### Personal Portfolio","lastModifiedDate":"2024-02-28"},{"lineNumber":7,"author":{"gitId":"MarcusGitty"},"content":"Hi I\u0027m Kin Tat","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"MarcusGitty":1,"KinTatHo":6}},{"path":"docs/team/marcus.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"MarcusGitty"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":2,"author":{"gitId":"MarcusGitty"},"content":" layout: default.md","lastModifiedDate":"2024-03-05"},{"lineNumber":3,"author":{"gitId":"MarcusGitty"},"content":" title: \"Marcus\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-05"},{"lineNumber":4,"author":{"gitId":"MarcusGitty"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":5,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":6,"author":{"gitId":"MarcusGitty"},"content":"### Personal Portfolio","lastModifiedDate":"2024-03-05"},{"lineNumber":7,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":8,"author":{"gitId":"MarcusGitty"},"content":"Hi I\u0027m Marcus","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"MarcusGitty":8}},{"path":"docs/team/yiyang.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"MarcusGitty"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":2,"author":{"gitId":"MarcusGitty"},"content":" layout: default.md","lastModifiedDate":"2024-03-05"},{"lineNumber":3,"author":{"gitId":"MarcusGitty"},"content":" title: \"Yi Yang\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-05"},{"lineNumber":4,"author":{"gitId":"MarcusGitty"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":5,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":6,"author":{"gitId":"MarcusGitty"},"content":"### Personal Portfolio","lastModifiedDate":"2024-03-05"},{"lineNumber":7,"author":{"gitId":"MarcusGitty"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":8,"author":{"gitId":"MarcusGitty"},"content":"Hi I\u0027m Yi Yang","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"MarcusGitty":8}}] diff --git a/AY2324S2-CS2103T-F10-2_tp_master/commits.json b/AY2324S2-CS2103T-F10-2_tp_master/commits.json index 211cae78..34ed1c7a 100644 --- a/AY2324S2-CS2103T-F10-2_tp_master/commits.json +++ b/AY2324S2-CS2103T-F10-2_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"0nesheep":[{"date":"2024-02-28","commitResults":[{"hash":"d69b533936093aa166a6efd8f47eb93f1c5ca58e","isMergeCommit":false,"messageTitle":"Add 0nesheep.png and edit AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":4}}},{"hash":"ff2c351d74110c2ac0b5adad1f5168767c771e1d","isMergeCommit":false,"messageTitle":"Edit UserGuide.md to include add and delete commands","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":14,"deletions":96}}},{"hash":"69222a47a33a52c3ecbd7cb057d099d99595eb7b","isMergeCommit":false,"messageTitle":"Edit user guide intro","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":2}}},{"hash":"63a29a544614c93c5a0a6dd4d803ca8f8f741aea","isMergeCommit":true,"messageTitle":"Merge pull request #13 from AY2324S2-CS2103T-F10-2/kt-profile","messageBody":"Add profile photo and kintat.md","fileTypesAndContributionMap":{}},{"hash":"671bbab5c0b320139b193d18016772367edd00d4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-user-guide\u0027 into branch-user-guide","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"99c3c999782d56c3657288b21523998aaf86e26a","isMergeCommit":true,"messageTitle":"Merge pull request #22 from 0nesheep/branch-user-guide","messageBody":"Add delete and add command description, edit user guide intro","fileTypesAndContributionMap":{}},{"hash":"47a3ca52d12857096df82156c1b36a799c83e4de","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"782c8b96d45730736a6258da260fef0ef2385aac","isMergeCommit":true,"messageTitle":"Merge pull request #15 from 0nesheep/master","messageBody":"Add 0nesheep.png and edit AboutUs.md","fileTypesAndContributionMap":{}}]},{"date":"2024-03-02","commitResults":[{"hash":"ba28783966983c44fbd98b43c154edce06469d43","isMergeCommit":true,"messageTitle":"Merge pull request #27 from jessicawyz/master","messageBody":"Edit naming of jessicawyz image","fileTypesAndContributionMap":{}}]},{"date":"2024-03-05","commitResults":[{"hash":"8e152e00203da2c04044a6d72012036511a5cc44","isMergeCommit":false,"messageTitle":"Update user guide to remove traces of AB3","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":23,"deletions":43}}},{"hash":"e7eb798ce14cb0f25b81d4ce92c89d15419bc6bb","isMergeCommit":true,"messageTitle":"Merge pull request #31 from MarcusGitty/Developer-Guide","messageBody":"Change default.md to reflect project name as \"TuteeTally\"","fileTypesAndContributionMap":{}},{"hash":"7ebb044cdcaed6c2aa4ebdc3b26558b776a1212e","isMergeCommit":true,"messageTitle":"Merge pull request #38 from AY2324S2-CS2103T-F10-2/branch-developer-guide","messageBody":"Add NFR in developer guide and Merge to master","fileTypesAndContributionMap":{}}]},{"date":"2024-03-06","commitResults":[{"hash":"b9b7d60f2b51de4ddc21bf74d7e84e3bdad4a5c9","isMergeCommit":true,"messageTitle":"Merge pull request #39 from MarcusGitty/website-adapted","messageBody":"Update Website Config File as per Week 7 Requirement","fileTypesAndContributionMap":{}}]}],"MarcusGitty":[{"date":"2024-02-28","commitResults":[{"hash":"60465731a5793b1ae7c752dc5603e847aea2068f","isMergeCommit":false,"messageTitle":"Added Photo and Edited AboutUS.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":11,"deletions":11}}},{"hash":"dffe8757b4922fc0008db68dff169dd1377013c9","isMergeCommit":false,"messageTitle":"Add 3 use cases under DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":83,"deletions":6}}},{"hash":"e0b45d7483e128d212d760f2aebcd40a68645b73","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"39d3ae24c098e007b1e271a065f98d59db39f753","isMergeCommit":true,"messageTitle":"Merge pull request #9 from MarcusGitty/master","messageBody":"Add marcusgitty photo and edit aboutUS.md","fileTypesAndContributionMap":{}},{"hash":"41c4fbf36acf8faf382cc50c0cbf90293ecb976b","isMergeCommit":true,"messageTitle":"Merge pull request #24 from MarcusGitty/Developer-Guide","messageBody":"Add \u0027view students details, summary statistics and add students under use cases under DeveloperGuide.md","fileTypesAndContributionMap":{}}]},{"date":"2024-03-04","commitResults":[{"hash":"864e865503e867bfd1b84f628f41791588ae7beb","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-user-guide","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ea8921570fa4e44532a7df91bcfc4c3dc755d55f","isMergeCommit":true,"messageTitle":"Merge pull request #30 from AY2324S2-CS2103T-F10-2/branch-user-guide","messageBody":"Merge user guide to master","fileTypesAndContributionMap":{}},{"hash":"94e46365ea0cbbaf3951bf5476452615631d1a4f","isMergeCommit":false,"messageTitle":"Change default.md to reflect project name as \"TuteeTally\"","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2024-03-05","commitResults":[{"hash":"080fec5bb60e2d5e2c1fde964f0d462f536ed985","isMergeCommit":false,"messageTitle":"Change index.md to remove traces of AB3","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":4}}},{"hash":"dfc8bdf4215bfcd6d6246bbf946431a6aa49fb8a","isMergeCommit":true,"messageTitle":"Merge branch \u0027AY2324S2-CS2103T-F10-2:master\u0027 into website-adapted","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a3e714357d44d9adb5718b66a213350aa4d3d33e","isMergeCommit":false,"messageTitle":"Update Readme.md, AboutUs.md and deafult.md to remove traces of AB-3","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":10,"deletions":8}}},{"hash":"942caeb9b2db8e37676441c1fd5b649acda8218f","isMergeCommit":false,"messageTitle":"Create portfolio pages for Marcus, Baizhou, Yiyang and Jessica, also change the reference for everyone to point to the correct portfolio","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":31,"deletions":0}}},{"hash":"6b1e655d6aabfec1b88124d90f1988eda3904325","isMergeCommit":false,"messageTitle":"Remove website link for baizhou, it was previously pointing prof damith\u0027s","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":1}}},{"hash":"f6c04b2bbd45a2ea41064c61a832cb251e8b7400","isMergeCommit":false,"messageTitle":"Remove coding violations","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":12,"deletions":12}}}]}],"Windofbitter":[{"date":"2024-02-28","commitResults":[{"hash":"25c880729081540dc393e6e1900449ad1a1d0c12","isMergeCommit":false,"messageTitle":"Add Baizhou photo","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"f3eec7cf4780ea446359471f75e7142321e023c1","isMergeCommit":false,"messageTitle":"update user guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":26,"deletions":5}}},{"hash":"593a47cddf49f18e4f09c0c5d8ef0c4d24188fb9","isMergeCommit":true,"messageTitle":"Merge pull request #23 from Windofbitter/branch_user_guide","messageBody":"update user guide","fileTypesAndContributionMap":{}}]}],"jessicawyz":[{"date":"2024-02-28","commitResults":[{"hash":"f90ddad86e821f97fe2296ebf8fe57c6ff5b952e","isMergeCommit":false,"messageTitle":"Update AboutUs page for yizheng","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":4}}},{"hash":"61d58a864f12f21ee7154137fdee2658400c0e22","isMergeCommit":false,"messageTitle":"Add User profile, value proposition and User Stories","messageBody":"Update all to align with v1.1 goals\n","fileTypesAndContributionMap":{"docs":{"insertions":17,"deletions":11}}},{"hash":"e10341f56dcc94085abe152795ee99cd5381d070","isMergeCommit":true,"messageTitle":"Merge pull request #19 from jessicawyz/Update-Developer_Guide","messageBody":"Update developer guide","fileTypesAndContributionMap":{}},{"hash":"60f6979fca5907b52cc9a17577106c1fafd12e3d","isMergeCommit":true,"messageTitle":"Merge pull request #12 from jessicawyz/master","messageBody":"Update AboutUs page for yizheng","fileTypesAndContributionMap":{}},{"hash":"63046e092c91bae4ceb4cfe9ee1cc24a6110f340","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-developer-guide\u0027 into Developer-Guide","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2024-03-02","commitResults":[{"hash":"b637d912a35ece4466cea120e66ce21e1a707f01","isMergeCommit":false,"messageTitle":"Edit naming of jessicawyz image","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2024-03-04","commitResults":[{"hash":"652ecd3185638939eb1e73cd1e82ed1ff4d8993f","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-developer-guide","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2024-03-05","commitResults":[{"hash":"ee8aeaa22071a268bf475a2fc8daf8a3e5a9f574","isMergeCommit":false,"messageTitle":"Add NFR in developer guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"f96d840346bc22ed44c6e371694f241f4c142e7e","isMergeCommit":true,"messageTitle":"Merge pull request #36 from 0nesheep/branch-user-guide","messageBody":"Update user guide to remove traces of AB3","fileTypesAndContributionMap":{}},{"hash":"2e6e4f382e2858912c3438171dc16d56b60934a5","isMergeCommit":true,"messageTitle":"Merge pull request #37 from AY2324S2-CS2103T-F10-2/branch-user-guide","messageBody":"Update user guide to remove traces of AB3","fileTypesAndContributionMap":{}}]}],"KinTatHo":[{"date":"2024-02-28","commitResults":[{"hash":"cc81a8dee48f8a2fc7088602ced464ec13191dfb","isMergeCommit":false,"messageTitle":"Add Kin Tat photo and kintat.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":10,"deletions":6}}},{"hash":"170e1f482893d99ea9d675a13db30a981447999f","isMergeCommit":false,"messageTitle":"Add newline at READme","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":1}}}]},{"date":"2024-03-01","commitResults":[{"hash":"392ddd370fc46f75ebf52e5a4f06f9362a49f843","isMergeCommit":false,"messageTitle":"Update README to showcase TuteeTally","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":52,"deletions":10}}},{"hash":"5a60b5c7d94b4f19bba337b8072a68e1682b8b0e","isMergeCommit":false,"messageTitle":"Update Yizheng and my profile pic to be our github username","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}}]},{"date":"2024-03-03","commitResults":[{"hash":"c458beac5f27711ddddebdc1e913b24b0b3adedb","isMergeCommit":true,"messageTitle":"Merge pull request #25 from AY2324S2-CS2103T-F10-2/readme","messageBody":"Update README to showcase TuteeTally","fileTypesAndContributionMap":{}}]},{"date":"2024-03-04","commitResults":[{"hash":"d6a499db6e9cc45f887642a007b78241202aad80","isMergeCommit":true,"messageTitle":"Merge pull request #29 from AY2324S2-CS2103T-F10-2/branch-developer-guide","messageBody":"Merge developer guide to master for deployment onto the site","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"0nesheep":{"docs":41,"functional-code":0,"test-code":0},"MarcusGitty":{"docs":133,"functional-code":0,"test-code":0},"Windofbitter":{"docs":11,"functional-code":0,"test-code":0},"jessicawyz":{"docs":22,"functional-code":0,"test-code":0},"KinTatHo":{"docs":61,"functional-code":0,"test-code":0}},"authorContributionVariance":{"0nesheep":1321.1361,"MarcusGitty":1240.3077,"Windofbitter":86.98226,"jessicawyz":90.792885,"KinTatHo":322.08286},"authorDisplayNameMap":{"0nesheep":"CS2103T-F10-2 LIU ..YANG","MarcusGitty":"CS2103T-F10-2 MARC.. RUI","Windofbitter":"CS2103T-F10-2 BAIZ.. CAI","jessicawyz":"CS2103T-F10-2 WU Y..HENG","KinTatHo":"CS2103T-F10-2 HO K.. TAT"}} +{"authorDailyContributionsMap":{"0nesheep":[{"date":"2024-02-28","commitResults":[{"hash":"d69b533936093aa166a6efd8f47eb93f1c5ca58e","isMergeCommit":false,"messageTitle":"Add 0nesheep.png and edit AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":4}}},{"hash":"ff2c351d74110c2ac0b5adad1f5168767c771e1d","isMergeCommit":false,"messageTitle":"Edit UserGuide.md to include add and delete commands","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":14,"deletions":96}}},{"hash":"69222a47a33a52c3ecbd7cb057d099d99595eb7b","isMergeCommit":false,"messageTitle":"Edit user guide intro","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":2}}},{"hash":"63a29a544614c93c5a0a6dd4d803ca8f8f741aea","isMergeCommit":true,"messageTitle":"Merge pull request #13 from AY2324S2-CS2103T-F10-2/kt-profile","messageBody":"Add profile photo and kintat.md","fileTypesAndContributionMap":{}},{"hash":"671bbab5c0b320139b193d18016772367edd00d4","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-user-guide\u0027 into branch-user-guide","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"99c3c999782d56c3657288b21523998aaf86e26a","isMergeCommit":true,"messageTitle":"Merge pull request #22 from 0nesheep/branch-user-guide","messageBody":"Add delete and add command description, edit user guide intro","fileTypesAndContributionMap":{}},{"hash":"47a3ca52d12857096df82156c1b36a799c83e4de","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"782c8b96d45730736a6258da260fef0ef2385aac","isMergeCommit":true,"messageTitle":"Merge pull request #15 from 0nesheep/master","messageBody":"Add 0nesheep.png and edit AboutUs.md","fileTypesAndContributionMap":{}}]},{"date":"2024-03-02","commitResults":[{"hash":"ba28783966983c44fbd98b43c154edce06469d43","isMergeCommit":true,"messageTitle":"Merge pull request #27 from jessicawyz/master","messageBody":"Edit naming of jessicawyz image","fileTypesAndContributionMap":{}}]},{"date":"2024-03-05","commitResults":[{"hash":"8e152e00203da2c04044a6d72012036511a5cc44","isMergeCommit":false,"messageTitle":"Update user guide to remove traces of AB3","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":23,"deletions":43}}},{"hash":"e7eb798ce14cb0f25b81d4ce92c89d15419bc6bb","isMergeCommit":true,"messageTitle":"Merge pull request #31 from MarcusGitty/Developer-Guide","messageBody":"Change default.md to reflect project name as \"TuteeTally\"","fileTypesAndContributionMap":{}},{"hash":"7ebb044cdcaed6c2aa4ebdc3b26558b776a1212e","isMergeCommit":true,"messageTitle":"Merge pull request #38 from AY2324S2-CS2103T-F10-2/branch-developer-guide","messageBody":"Add NFR in developer guide and Merge to master","fileTypesAndContributionMap":{}}]},{"date":"2024-03-06","commitResults":[{"hash":"b9b7d60f2b51de4ddc21bf74d7e84e3bdad4a5c9","isMergeCommit":true,"messageTitle":"Merge pull request #39 from MarcusGitty/website-adapted","messageBody":"Update Website Config File as per Week 7 Requirement","fileTypesAndContributionMap":{}}]}],"MarcusGitty":[{"date":"2024-02-28","commitResults":[{"hash":"60465731a5793b1ae7c752dc5603e847aea2068f","isMergeCommit":false,"messageTitle":"Added Photo and Edited AboutUS.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":11,"deletions":11}}},{"hash":"dffe8757b4922fc0008db68dff169dd1377013c9","isMergeCommit":false,"messageTitle":"Add 3 use cases under DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":83,"deletions":6}}},{"hash":"e0b45d7483e128d212d760f2aebcd40a68645b73","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"39d3ae24c098e007b1e271a065f98d59db39f753","isMergeCommit":true,"messageTitle":"Merge pull request #9 from MarcusGitty/master","messageBody":"Add marcusgitty photo and edit aboutUS.md","fileTypesAndContributionMap":{}},{"hash":"41c4fbf36acf8faf382cc50c0cbf90293ecb976b","isMergeCommit":true,"messageTitle":"Merge pull request #24 from MarcusGitty/Developer-Guide","messageBody":"Add \u0027view students details, summary statistics and add students under use cases under DeveloperGuide.md","fileTypesAndContributionMap":{}}]},{"date":"2024-03-04","commitResults":[{"hash":"864e865503e867bfd1b84f628f41791588ae7beb","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-user-guide","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ea8921570fa4e44532a7df91bcfc4c3dc755d55f","isMergeCommit":true,"messageTitle":"Merge pull request #30 from AY2324S2-CS2103T-F10-2/branch-user-guide","messageBody":"Merge user guide to master","fileTypesAndContributionMap":{}},{"hash":"94e46365ea0cbbaf3951bf5476452615631d1a4f","isMergeCommit":false,"messageTitle":"Change default.md to reflect project name as \"TuteeTally\"","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2024-03-05","commitResults":[{"hash":"080fec5bb60e2d5e2c1fde964f0d462f536ed985","isMergeCommit":false,"messageTitle":"Change index.md to remove traces of AB3","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":4}}},{"hash":"dfc8bdf4215bfcd6d6246bbf946431a6aa49fb8a","isMergeCommit":true,"messageTitle":"Merge branch \u0027AY2324S2-CS2103T-F10-2:master\u0027 into website-adapted","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a3e714357d44d9adb5718b66a213350aa4d3d33e","isMergeCommit":false,"messageTitle":"Update Readme.md, AboutUs.md and deafult.md to remove traces of AB-3","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":10,"deletions":8}}},{"hash":"942caeb9b2db8e37676441c1fd5b649acda8218f","isMergeCommit":false,"messageTitle":"Create portfolio pages for Marcus, Baizhou, Yiyang and Jessica, also change the reference for everyone to point to the correct portfolio","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":31,"deletions":0}}},{"hash":"6b1e655d6aabfec1b88124d90f1988eda3904325","isMergeCommit":false,"messageTitle":"Remove website link for baizhou, it was previously pointing prof damith\u0027s","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":1}}},{"hash":"f6c04b2bbd45a2ea41064c61a832cb251e8b7400","isMergeCommit":false,"messageTitle":"Remove coding violations","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":12,"deletions":12}}}]},{"date":"2024-03-08","commitResults":[{"hash":"c0cc70d45ce7c48d909a08da479fd8872b0e49e4","isMergeCommit":false,"messageTitle":"Change CI link and project website link for Github Repo\u0027s README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}}]}],"Windofbitter":[{"date":"2024-02-28","commitResults":[{"hash":"25c880729081540dc393e6e1900449ad1a1d0c12","isMergeCommit":false,"messageTitle":"Add Baizhou photo","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"f3eec7cf4780ea446359471f75e7142321e023c1","isMergeCommit":false,"messageTitle":"update user guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":26,"deletions":5}}},{"hash":"593a47cddf49f18e4f09c0c5d8ef0c4d24188fb9","isMergeCommit":true,"messageTitle":"Merge pull request #23 from Windofbitter/branch_user_guide","messageBody":"update user guide","fileTypesAndContributionMap":{}}]}],"jessicawyz":[{"date":"2024-02-28","commitResults":[{"hash":"f90ddad86e821f97fe2296ebf8fe57c6ff5b952e","isMergeCommit":false,"messageTitle":"Update AboutUs page for yizheng","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":4}}},{"hash":"61d58a864f12f21ee7154137fdee2658400c0e22","isMergeCommit":false,"messageTitle":"Add User profile, value proposition and User Stories","messageBody":"Update all to align with v1.1 goals\n","fileTypesAndContributionMap":{"docs":{"insertions":17,"deletions":11}}},{"hash":"e10341f56dcc94085abe152795ee99cd5381d070","isMergeCommit":true,"messageTitle":"Merge pull request #19 from jessicawyz/Update-Developer_Guide","messageBody":"Update developer guide","fileTypesAndContributionMap":{}},{"hash":"60f6979fca5907b52cc9a17577106c1fafd12e3d","isMergeCommit":true,"messageTitle":"Merge pull request #12 from jessicawyz/master","messageBody":"Update AboutUs page for yizheng","fileTypesAndContributionMap":{}},{"hash":"63046e092c91bae4ceb4cfe9ee1cc24a6110f340","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-developer-guide\u0027 into Developer-Guide","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2024-03-02","commitResults":[{"hash":"b637d912a35ece4466cea120e66ce21e1a707f01","isMergeCommit":false,"messageTitle":"Edit naming of jessicawyz image","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2024-03-04","commitResults":[{"hash":"652ecd3185638939eb1e73cd1e82ed1ff4d8993f","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-developer-guide","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2024-03-05","commitResults":[{"hash":"ee8aeaa22071a268bf475a2fc8daf8a3e5a9f574","isMergeCommit":false,"messageTitle":"Add NFR in developer guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"f96d840346bc22ed44c6e371694f241f4c142e7e","isMergeCommit":true,"messageTitle":"Merge pull request #36 from 0nesheep/branch-user-guide","messageBody":"Update user guide to remove traces of AB3","fileTypesAndContributionMap":{}},{"hash":"2e6e4f382e2858912c3438171dc16d56b60934a5","isMergeCommit":true,"messageTitle":"Merge pull request #37 from AY2324S2-CS2103T-F10-2/branch-user-guide","messageBody":"Update user guide to remove traces of AB3","fileTypesAndContributionMap":{}}]}],"KinTatHo":[{"date":"2024-02-28","commitResults":[{"hash":"cc81a8dee48f8a2fc7088602ced464ec13191dfb","isMergeCommit":false,"messageTitle":"Add Kin Tat photo and kintat.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":10,"deletions":6}}},{"hash":"170e1f482893d99ea9d675a13db30a981447999f","isMergeCommit":false,"messageTitle":"Add newline at READme","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":1}}}]},{"date":"2024-03-01","commitResults":[{"hash":"392ddd370fc46f75ebf52e5a4f06f9362a49f843","isMergeCommit":false,"messageTitle":"Update README to showcase TuteeTally","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":52,"deletions":10}}},{"hash":"5a60b5c7d94b4f19bba337b8072a68e1682b8b0e","isMergeCommit":false,"messageTitle":"Update Yizheng and my profile pic to be our github username","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}}]},{"date":"2024-03-03","commitResults":[{"hash":"c458beac5f27711ddddebdc1e913b24b0b3adedb","isMergeCommit":true,"messageTitle":"Merge pull request #25 from AY2324S2-CS2103T-F10-2/readme","messageBody":"Update README to showcase TuteeTally","fileTypesAndContributionMap":{}}]},{"date":"2024-03-04","commitResults":[{"hash":"d6a499db6e9cc45f887642a007b78241202aad80","isMergeCommit":true,"messageTitle":"Merge pull request #29 from AY2324S2-CS2103T-F10-2/branch-developer-guide","messageBody":"Merge developer guide to master for deployment onto the site","fileTypesAndContributionMap":{}}]},{"date":"2024-03-08","commitResults":[{"hash":"3801337f32f18b0ddf310b2dc1d2b5d2f0a34e2f","isMergeCommit":true,"messageTitle":"Merge pull request #41 from MarcusGitty/website-adapted","messageBody":"Change CI link and project website link for Github Repo\u0027s README.md","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"0nesheep":{"docs":41,"functional-code":0,"test-code":0},"MarcusGitty":{"docs":135,"functional-code":0,"test-code":0},"Windofbitter":{"docs":11,"functional-code":0,"test-code":0},"jessicawyz":{"docs":22,"functional-code":0,"test-code":0},"KinTatHo":{"docs":60,"functional-code":0,"test-code":0}},"authorContributionVariance":{"0nesheep":1169.929,"MarcusGitty":1094.9958,"Windofbitter":76.22224,"jessicawyz":79.89332,"KinTatHo":284.19553},"authorDisplayNameMap":{"0nesheep":"CS2103T-F10-2 LIU ..YANG","MarcusGitty":"CS2103T-F10-2 MARC.. RUI","Windofbitter":"CS2103T-F10-2 BAIZ.. CAI","jessicawyz":"CS2103T-F10-2 WU Y..HENG","KinTatHo":"CS2103T-F10-2 HO K.. TAT"}} diff --git a/AY2324S2-CS2103T-F14-1_tp_master/authorship.json b/AY2324S2-CS2103T-F14-1_tp_master/authorship.json index 0f4e0074..32b7ea59 100644 --- a/AY2324S2-CS2103T-F14-1_tp_master/authorship.json +++ b/AY2324S2-CS2103T-F14-1_tp_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"eunrcn"},"content":"# InternHub","lastModifiedDate":"2024-02-25"},{"lineNumber":2,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":3,"author":{"gitId":"ashleygoh1"},"content":"[![CI Status](https://github.com/AY2324S2-CS2103T-F14-1/tp/actions/workflows/gradle.yml/badge.svg)](https://github.com/AY2324S2-CS2103T-F14-1/tp/actions/workflows/gradle.yml)","lastModifiedDate":"2024-03-02"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"![Ui](docs/images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":7,"author":{"gitId":"eunrcn"},"content":"## Overview","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"eunrcn"},"content":"InternHub is a comprehensive project designed to assist Computer Science (CS) students in managing their internship applications. This project serves various purposes:","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"eunrcn"},"content":"- It can be utilized as a starting point for a course project, offering students a foundation rather than building everything from scratch.","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"eunrcn"},"content":"- It serves as a case study for understanding the development of a desktop application in an Object-Oriented Programming (OOP) fashion.","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"eunrcn"},"content":"- The project provides a well-written code base, surpassing the typical size of beginner-level SE modules (around 6 KLoC) without becoming overwhelming.","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"eunrcn"},"content":"- Extensive user and developer documentation is included to facilitate understanding and usage.","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"eunrcn"},"content":"## Project Details","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":18,"author":{"gitId":"eunrcn"},"content":"- **Name:** InternHub","lastModifiedDate":"2024-02-25"},{"lineNumber":19,"author":{"gitId":"eunrcn"},"content":"- **Type:** Desktop Application","lastModifiedDate":"2024-02-25"},{"lineNumber":20,"author":{"gitId":"eunrcn"},"content":"- **Initiative:** Part of the se-education.org initiative","lastModifiedDate":"2024-02-25"},{"lineNumber":21,"author":{"gitId":"eunrcn"},"content":"- **Documentation:** [InternHub Product Website](https://ay2324s2-cs2103t-f14-1.github.io/tp/index.html)","lastModifiedDate":"2024-02-28"},{"lineNumber":22,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":23,"author":{"gitId":"eunrcn"},"content":"## Features","lastModifiedDate":"2024-02-25"},{"lineNumber":24,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":25,"author":{"gitId":"eunrcn"},"content":"InternHub is specifically tailored for CS students, offering the following features:","lastModifiedDate":"2024-02-25"},{"lineNumber":26,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"eunrcn"},"content":"- Organization and optimization of internship application details.","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"eunrcn"},"content":"- Seamless management of contacts, interview dates, internship duration, salary and job description.","lastModifiedDate":"2024-02-28"},{"lineNumber":29,"author":{"gitId":"eunrcn"},"content":"- Editable fields to meet sudden changes in attributes.","lastModifiedDate":"2024-02-28"},{"lineNumber":30,"author":{"gitId":"eunrcn"},"content":"- Tagging system to categorize and track the stages of each interview process.","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"eunrcn"},"content":"- Filtering and sorting capabilities for efficient access to relevant information.","lastModifiedDate":"2024-02-25"},{"lineNumber":32,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"eunrcn"},"content":"## Getting Started","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":35,"author":{"gitId":"eunrcn"},"content":"For detailed information on using InternHub, refer to our [User Guide](https://ay2324s2-cs2103t-f14-1.github.io/tp/UserGuide.html).","lastModifiedDate":"2024-02-28"},{"lineNumber":36,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"eunrcn"},"content":"## Contributing","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":39,"author":{"gitId":"ashleygoh1"},"content":"This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-03-02"}],"authorContributionMap":{"eunrcn":34,"ashleygoh1":2,"-":3}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"About Us\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"# About Us","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"-"},"content":"We are a team based in the [School of Computing, National University of Singapore](http://www.comp.nus.edu.sg).","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":10,"author":{"gitId":"-"},"content":"You can reach us at the email `seer[at]comp.nus.edu.sg`","lastModifiedDate":"2020-06-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-06-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":"## Project team","lastModifiedDate":"2020-06-07"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":14,"author":{"gitId":"ashleygoh1"},"content":"### Ashley Goh","lastModifiedDate":"2024-02-27"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"ashleygoh1"},"content":"\u003cimg src\u003d\"images/ashleygoh1.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-27"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"ashleygoh1"},"content":"[[github](http://github.com/ashleygoh1)]","lastModifiedDate":"2024-02-27"},{"lineNumber":19,"author":{"gitId":"ashleygoh1"},"content":"[[portfolio](team/ashley.md)]","lastModifiedDate":"2024-02-27"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"ashleygoh1"},"content":"* Role: Developer","lastModifiedDate":"2024-02-27"},{"lineNumber":22,"author":{"gitId":"ashleygoh1"},"content":"* Responsibilities: Model","lastModifiedDate":"2024-02-27"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"ashleygoh1"},"content":"### Chai Ming How","lastModifiedDate":"2024-02-27"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"ashleygoh1"},"content":"\u003cimg src\u003d\"images/minghowc.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-02"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"ashleygoh1"},"content":"[[github](http://github.com/minghowC)]","lastModifiedDate":"2024-02-27"},{"lineNumber":29,"author":{"gitId":"ashleygoh1"},"content":"[[portfolio](team/minghow.md)]","lastModifiedDate":"2024-02-27"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"ashleygoh1"},"content":"* Role: Developer","lastModifiedDate":"2024-02-27"},{"lineNumber":32,"author":{"gitId":"ashleygoh1"},"content":"* Responsibilities: Data","lastModifiedDate":"2024-02-27"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":"### Chen Yixin","lastModifiedDate":"2024-02-27"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"Jawad280"},"content":"\u003cimg src\u003d\"images/chenyixin0.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-03"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"ashleygoh1"},"content":"[[github](http://github.com/chenyixin0)]","lastModifiedDate":"2024-02-27"},{"lineNumber":39,"author":{"gitId":"ashleygoh1"},"content":"[[portfolio](team/yixin.md)]","lastModifiedDate":"2024-02-27"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":41,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":"* Responsibilities: Dev Ops + Threading","lastModifiedDate":"2024-02-27"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"ashleygoh1"},"content":"### Eunice Koh","lastModifiedDate":"2024-02-27"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"eunrcn"},"content":"\u003cimg src\u003d\"images/eunrcn.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-01"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"ashleygoh1"},"content":"[[github](http://github.com/eunrcn)]","lastModifiedDate":"2024-02-27"},{"lineNumber":49,"author":{"gitId":"ashleygoh1"},"content":"[[portfolio](team/eunice.md)]","lastModifiedDate":"2024-02-27"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"eunrcn"},"content":"* Responsibilities: Model","lastModifiedDate":"2024-02-28"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"Jawad280"},"content":"### Jawad Afthab","lastModifiedDate":"2024-02-27"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":56,"author":{"gitId":"Jawad280"},"content":"\u003cimg src\u003d\"images/jawad280.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-27"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":58,"author":{"gitId":"ashleygoh1"},"content":"[[github](http://github.com/Jawad280)]","lastModifiedDate":"2024-02-27"},{"lineNumber":59,"author":{"gitId":"ashleygoh1"},"content":"[[portfolio](team/jawad.md)]","lastModifiedDate":"2024-02-27"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":61,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":62,"author":{"gitId":"-"},"content":"* Responsibilities: UI","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"eunrcn":2,"Jawad280":3,"ashleygoh1":21,"-":36}},{"path":"docs/DeveloperGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":"layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":"title: \"Developer Guide\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"pageNav: 3","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":"# InternHub Developer Guide","lastModifiedDate":"2024-03-02"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c!-- * Table of Contents --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003cpage-nav-print /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":14,"author":{"gitId":"-"},"content":"## **Acknowledgements**","lastModifiedDate":"2021-07-30"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":16,"author":{"gitId":"-"},"content":"_{ list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the original source as well }_","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":18,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2021-07-30"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"-"},"content":"## **Setting up, getting started**","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"Refer to the guide [_Setting up and getting started_](SettingUp.md).","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"-"},"content":"## **Design**","lastModifiedDate":"2020-05-23"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":"### Architecture","lastModifiedDate":"2021-07-31"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ArchitectureDiagram.puml\" width\u003d\"280\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"-"},"content":"The ***Architecture Diagram*** given above explains the high-level design of the App.","lastModifiedDate":"2021-07-31"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"-"},"content":"Given below is a quick overview of main components and how they interact with each other.","lastModifiedDate":"2021-07-31"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":36,"author":{"gitId":"-"},"content":"**Main components of the architecture**","lastModifiedDate":"2021-07-31"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":"**`Main`** (consisting of classes [`Main`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/Main.java) and [`MainApp`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/MainApp.java)) is in charge of the app launch and shut down.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"-"},"content":"* At app launch, it initializes the other components in the correct sequence, and connects them up with each other.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"-"},"content":"* At shut down, it shuts down the other components and invokes cleanup methods where necessary.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":"The bulk of the app\u0027s work is done by the following four components:","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"-"},"content":"* [**`UI`**](#ui-component): The UI of the App.","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":"* [**`Logic`**](#logic-component): The command executor.","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":"* [**`Model`**](#model-component): Holds the data of the App in memory.","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* [**`Storage`**](#storage-component): Reads data from, and writes data to, the hard disk.","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"-"},"content":"[**`Commons`**](#common-classes) represents a collection of classes used by multiple other components.","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"-"},"content":"**How the architecture components interact with each other**","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":"The *Sequence Diagram* below shows how the components interact with each other for the scenario where the user issues the command `delete 1`.","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ArchitectureSequenceDiagram.puml\" width\u003d\"574\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":57,"author":{"gitId":"-"},"content":"Each of the four main components (also shown in the diagram above),","lastModifiedDate":"2021-07-31"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":59,"author":{"gitId":"-"},"content":"* defines its *API* in an `interface` with the same name as the Component.","lastModifiedDate":"2021-07-31"},{"lineNumber":60,"author":{"gitId":"-"},"content":"* implements its functionality using a concrete `{Component Name}Manager` class (which follows the corresponding API `interface` mentioned in the previous point.","lastModifiedDate":"2021-07-31"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":62,"author":{"gitId":"-"},"content":"For example, the `Logic` component defines its API in the `Logic.java` interface and implements its functionality using the `LogicManager.java` class which follows the `Logic` interface. Other components interact with a given component through its interface rather than the concrete class (reason: to prevent outside component\u0027s being coupled to the implementation of a component), as illustrated in the (partial) class diagram below.","lastModifiedDate":"2021-07-31"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":64,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ComponentManagers.puml\" width\u003d\"300\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":66,"author":{"gitId":"-"},"content":"The sections below give more details of each component.","lastModifiedDate":"2020-05-23"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":68,"author":{"gitId":"-"},"content":"### UI component","lastModifiedDate":"2020-05-23"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":70,"author":{"gitId":"-"},"content":"The **API** of this component is specified in [`Ui.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/Ui.java)","lastModifiedDate":"2021-07-31"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":72,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UiClassDiagram.puml\" alt\u003d\"Structure of the UI Component\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":74,"author":{"gitId":"-"},"content":"The UI consists of a `MainWindow` that is made up of parts e.g.`CommandBox`, `ResultDisplay`, `PersonListPanel`, `StatusBarFooter` etc. All these, including the `MainWindow`, inherit from the abstract `UiPart` class which captures the commonalities between classes that represent parts of the visible GUI.","lastModifiedDate":"2021-07-31"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":76,"author":{"gitId":"-"},"content":"The `UI` component uses the JavaFx UI framework. The layout of these UI parts are defined in matching `.fxml` files that are in the `src/main/resources/view` folder. For example, the layout of the [`MainWindow`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/MainWindow.java) is specified in [`MainWindow.fxml`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/resources/view/MainWindow.fxml)","lastModifiedDate":"2021-07-31"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":78,"author":{"gitId":"-"},"content":"The `UI` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":80,"author":{"gitId":"-"},"content":"* executes user commands using the `Logic` component.","lastModifiedDate":"2021-07-31"},{"lineNumber":81,"author":{"gitId":"-"},"content":"* listens for changes to `Model` data so that the UI can be updated with the modified data.","lastModifiedDate":"2021-07-31"},{"lineNumber":82,"author":{"gitId":"-"},"content":"* keeps a reference to the `Logic` component, because the `UI` relies on the `Logic` to execute commands.","lastModifiedDate":"2021-07-31"},{"lineNumber":83,"author":{"gitId":"-"},"content":"* depends on some classes in the `Model` component, as it displays `Person` object residing in the `Model`.","lastModifiedDate":"2021-07-31"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":85,"author":{"gitId":"-"},"content":"### Logic component","lastModifiedDate":"2020-05-23"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":87,"author":{"gitId":"-"},"content":"**API** : [`Logic.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/logic/Logic.java)","lastModifiedDate":"2021-07-31"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":89,"author":{"gitId":"-"},"content":"Here\u0027s a (partial) class diagram of the `Logic` component:","lastModifiedDate":"2021-07-31"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":91,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/LogicClassDiagram.puml\" width\u003d\"550\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":93,"author":{"gitId":"-"},"content":"The sequence diagram below illustrates the interactions within the `Logic` component, taking `execute(\"delete 1\")` API call as an example.","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":95,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/DeleteSequenceDiagram.puml\" alt\u003d\"Interactions Inside the Logic Component for the `delete 1` Command\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":97,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":98,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":99,"author":{"gitId":"-"},"content":"**Note:** The lifeline for `DeleteCommandParser` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline continues till the end of diagram.","lastModifiedDate":"2023-09-12"},{"lineNumber":100,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":101,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":102,"author":{"gitId":"-"},"content":"How the `Logic` component works:","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"-"},"content":"1. When `Logic` is called upon to execute a command, it is passed to an `AddressBookParser` object which in turn creates a parser that matches the command (e.g., `DeleteCommandParser`) and uses it to parse the command.","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"-"},"content":"1. This results in a `Command` object (more precisely, an object of one of its subclasses e.g., `DeleteCommand`) which is executed by the `LogicManager`.","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"-"},"content":"1. The command can communicate with the `Model` when it is executed (e.g. to delete a person).\u003cbr\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":107,"author":{"gitId":"-"},"content":" Note that although this is shown as a single step in the diagram above (for simplicity), in the code it can take several interactions (between the command object and the `Model`) to achieve.","lastModifiedDate":"2024-02-09"},{"lineNumber":108,"author":{"gitId":"-"},"content":"1. The result of the command execution is encapsulated as a `CommandResult` object which is returned back from `Logic`.","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"-"},"content":"Here are the other classes in `Logic` (omitted from the class diagram above) that are used for parsing a user command:","lastModifiedDate":"2021-07-31"},{"lineNumber":111,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":112,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ParserClasses.puml\" width\u003d\"600\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":114,"author":{"gitId":"-"},"content":"How the parsing works:","lastModifiedDate":"2021-07-31"},{"lineNumber":115,"author":{"gitId":"-"},"content":"* When called upon to parse a user command, the `AddressBookParser` class creates an `XYZCommandParser` (`XYZ` is a placeholder for the specific command name e.g., `AddCommandParser`) which uses the other classes shown above to parse the user command and create a `XYZCommand` object (e.g., `AddCommand`) which the `AddressBookParser` returns back as a `Command` object.","lastModifiedDate":"2021-07-31"},{"lineNumber":116,"author":{"gitId":"-"},"content":"* All `XYZCommandParser` classes (e.g., `AddCommandParser`, `DeleteCommandParser`, ...) inherit from the `Parser` interface so that they can be treated similarly where possible e.g, during testing.","lastModifiedDate":"2021-07-31"},{"lineNumber":117,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":118,"author":{"gitId":"-"},"content":"### Model component","lastModifiedDate":"2021-07-31"},{"lineNumber":119,"author":{"gitId":"-"},"content":"**API** : [`Model.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/model/Model.java)","lastModifiedDate":"2020-05-23"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":121,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ModelClassDiagram.puml\" width\u003d\"450\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":122,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":123,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":124,"author":{"gitId":"-"},"content":"The `Model` component,","lastModifiedDate":"2021-07-31"},{"lineNumber":125,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":126,"author":{"gitId":"-"},"content":"* stores the address book data i.e., all `Person` objects (which are contained in a `UniquePersonList` object).","lastModifiedDate":"2021-07-31"},{"lineNumber":127,"author":{"gitId":"-"},"content":"* stores the currently \u0027selected\u0027 `Person` objects (e.g., results of a search query) as a separate _filtered_ list which is exposed to outsiders as an unmodifiable `ObservableList\u003cPerson\u003e` that can be \u0027observed\u0027 e.g. the UI can be bound to this list so that the UI automatically updates when the data in the list change.","lastModifiedDate":"2021-07-31"},{"lineNumber":128,"author":{"gitId":"-"},"content":"* stores a `UserPref` object that represents the user’s preferences. This is exposed to the outside as a `ReadOnlyUserPref` objects.","lastModifiedDate":"2021-07-31"},{"lineNumber":129,"author":{"gitId":"-"},"content":"* does not depend on any of the other three components (as the `Model` represents data entities of the domain, they should make sense on their own without depending on other components)","lastModifiedDate":"2021-07-31"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":131,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":132,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":133,"author":{"gitId":"-"},"content":"**Note:** An alternative (arguably, a more OOP) model is given below. It has a `Tag` list in the `AddressBook`, which `Person` references. This allows `AddressBook` to only require one `Tag` object per unique tag, instead of each `Person` needing their own `Tag` objects.\u003cbr\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":134,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":135,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/BetterModelClassDiagram.puml\" width\u003d\"450\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":137,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":138,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":139,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":140,"author":{"gitId":"-"},"content":"### Storage component","lastModifiedDate":"2020-05-23"},{"lineNumber":141,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":142,"author":{"gitId":"-"},"content":"**API** : [`Storage.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/storage/Storage.java)","lastModifiedDate":"2020-05-23"},{"lineNumber":143,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":144,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/StorageClassDiagram.puml\" width\u003d\"550\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":145,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":146,"author":{"gitId":"-"},"content":"The `Storage` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":147,"author":{"gitId":"-"},"content":"* can save both address book data and user preference data in JSON format, and read them back into corresponding objects.","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"-"},"content":"* inherits from both `AddressBookStorage` and `UserPrefStorage`, which means it can be treated as either one (if only the functionality of only one is needed).","lastModifiedDate":"2021-07-31"},{"lineNumber":149,"author":{"gitId":"-"},"content":"* depends on some classes in the `Model` component (because the `Storage` component\u0027s job is to save/retrieve objects that belong to the `Model`)","lastModifiedDate":"2021-07-21"},{"lineNumber":150,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":151,"author":{"gitId":"-"},"content":"### Common classes","lastModifiedDate":"2020-05-23"},{"lineNumber":152,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":153,"author":{"gitId":"-"},"content":"Classes used by multiple components are in the `seedu.addressbook.commons` package.","lastModifiedDate":"2020-05-23"},{"lineNumber":154,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":155,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":156,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":157,"author":{"gitId":"-"},"content":"## **Implementation**","lastModifiedDate":"2020-05-23"},{"lineNumber":158,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":159,"author":{"gitId":"-"},"content":"This section describes some noteworthy details on how certain features are implemented.","lastModifiedDate":"2020-05-23"},{"lineNumber":160,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":161,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Undo/redo feature","lastModifiedDate":"2020-06-07"},{"lineNumber":162,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":163,"author":{"gitId":"-"},"content":"#### Proposed Implementation","lastModifiedDate":"2020-05-23"},{"lineNumber":164,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":165,"author":{"gitId":"-"},"content":"The proposed undo/redo mechanism is facilitated by `VersionedAddressBook`. It extends `AddressBook` with an undo/redo history, stored internally as an `addressBookStateList` and `currentStatePointer`. Additionally, it implements the following operations:","lastModifiedDate":"2020-05-23"},{"lineNumber":166,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":167,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#commit()` — Saves the current address book state in its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":168,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#undo()` — Restores the previous address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":169,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#redo()` — Restores a previously undone address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":170,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":171,"author":{"gitId":"-"},"content":"These operations are exposed in the `Model` interface as `Model#commitAddressBook()`, `Model#undoAddressBook()` and `Model#redoAddressBook()` respectively.","lastModifiedDate":"2020-05-23"},{"lineNumber":172,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":173,"author":{"gitId":"-"},"content":"Given below is an example usage scenario and how the undo/redo mechanism behaves at each step.","lastModifiedDate":"2020-05-23"},{"lineNumber":174,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":175,"author":{"gitId":"-"},"content":"Step 1. The user launches the application for the first time. The `VersionedAddressBook` will be initialized with the initial address book state, and the `currentStatePointer` pointing to that single address book state.","lastModifiedDate":"2020-05-23"},{"lineNumber":176,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":177,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState0.puml\" alt\u003d\"UndoRedoState0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":178,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":179,"author":{"gitId":"-"},"content":"Step 2. The user executes `delete 5` command to delete the 5th person in the address book. The `delete` command calls `Model#commitAddressBook()`, causing the modified state of the address book after the `delete 5` command executes to be saved in the `addressBookStateList`, and the `currentStatePointer` is shifted to the newly inserted address book state.","lastModifiedDate":"2020-05-23"},{"lineNumber":180,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":181,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState1.puml\" alt\u003d\"UndoRedoState1\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":182,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":183,"author":{"gitId":"-"},"content":"Step 3. The user executes `add n/David …​` to add a new person. The `add` command also calls `Model#commitAddressBook()`, causing another modified address book state to be saved into the `addressBookStateList`.","lastModifiedDate":"2020-05-23"},{"lineNumber":184,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":185,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState2.puml\" alt\u003d\"UndoRedoState2\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":186,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":187,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":188,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":189,"author":{"gitId":"-"},"content":"**Note:** If a command fails its execution, it will not call `Model#commitAddressBook()`, so the address book state will not be saved into the `addressBookStateList`.","lastModifiedDate":"2023-09-12"},{"lineNumber":190,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":191,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":192,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":193,"author":{"gitId":"-"},"content":"Step 4. The user now decides that adding the person was a mistake, and decides to undo that action by executing the `undo` command. The `undo` command will call `Model#undoAddressBook()`, which will shift the `currentStatePointer` once to the left, pointing it to the previous address book state, and restores the address book to that state.","lastModifiedDate":"2020-05-23"},{"lineNumber":194,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":195,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState3.puml\" alt\u003d\"UndoRedoState3\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":196,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":197,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":198,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":199,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":200,"author":{"gitId":"-"},"content":"**Note:** If the `currentStatePointer` is at index 0, pointing to the initial AddressBook state, then there are no previous AddressBook states to restore. The `undo` command uses `Model#canUndoAddressBook()` to check if this is the case. If so, it will return an error to the user rather","lastModifiedDate":"2023-09-12"},{"lineNumber":201,"author":{"gitId":"-"},"content":"than attempting to perform the undo.","lastModifiedDate":"2020-05-23"},{"lineNumber":202,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":203,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":204,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":205,"author":{"gitId":"-"},"content":"The following sequence diagram shows how an undo operation goes through the `Logic` component:","lastModifiedDate":"2024-02-09"},{"lineNumber":206,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":207,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoSequenceDiagram-Logic.puml\" alt\u003d\"UndoSequenceDiagram-Logic\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":208,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":209,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":210,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":211,"author":{"gitId":"-"},"content":"**Note:** The lifeline for `UndoCommand` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram.","lastModifiedDate":"2023-09-12"},{"lineNumber":212,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":213,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":214,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":215,"author":{"gitId":"-"},"content":"Similarly, how an undo operation goes through the `Model` component is shown below:","lastModifiedDate":"2024-02-09"},{"lineNumber":216,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":217,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoSequenceDiagram-Model.puml\" alt\u003d\"UndoSequenceDiagram-Model\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":218,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":219,"author":{"gitId":"-"},"content":"The `redo` command does the opposite — it calls `Model#redoAddressBook()`, which shifts the `currentStatePointer` once to the right, pointing to the previously undone state, and restores the address book to that state.","lastModifiedDate":"2020-05-23"},{"lineNumber":220,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":221,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":222,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":223,"author":{"gitId":"-"},"content":"**Note:** If the `currentStatePointer` is at index `addressBookStateList.size() - 1`, pointing to the latest address book state, then there are no undone AddressBook states to restore. The `redo` command uses `Model#canRedoAddressBook()` to check if this is the case. If so, it will return an error to the user rather than attempting to perform the redo.","lastModifiedDate":"2023-09-12"},{"lineNumber":224,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":225,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":226,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":227,"author":{"gitId":"-"},"content":"Step 5. The user then decides to execute the command `list`. Commands that do not modify the address book, such as `list`, will usually not call `Model#commitAddressBook()`, `Model#undoAddressBook()` or `Model#redoAddressBook()`. Thus, the `addressBookStateList` remains unchanged.","lastModifiedDate":"2020-05-23"},{"lineNumber":228,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":229,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState4.puml\" alt\u003d\"UndoRedoState4\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":230,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":231,"author":{"gitId":"-"},"content":"Step 6. The user executes `clear`, which calls `Model#commitAddressBook()`. Since the `currentStatePointer` is not pointing at the end of the `addressBookStateList`, all address book states after the `currentStatePointer` will be purged. Reason: It no longer makes sense to redo the `add n/David …​` command. This is the behavior that most modern desktop applications follow.","lastModifiedDate":"2020-05-23"},{"lineNumber":232,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":233,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState5.puml\" alt\u003d\"UndoRedoState5\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":234,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":235,"author":{"gitId":"-"},"content":"The following activity diagram summarizes what happens when a user executes a new command:","lastModifiedDate":"2020-05-23"},{"lineNumber":236,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":237,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/CommitActivityDiagram.puml\" width\u003d\"250\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":238,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":239,"author":{"gitId":"Jawad280"},"content":"### Design considerations:","lastModifiedDate":"2024-03-01"},{"lineNumber":240,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":241,"author":{"gitId":"-"},"content":"**Aspect: How undo \u0026 redo executes:**","lastModifiedDate":"2021-07-31"},{"lineNumber":242,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":243,"author":{"gitId":"-"},"content":"* **Alternative 1 (current choice):** Saves the entire address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":244,"author":{"gitId":"-"},"content":" * Pros: Easy to implement.","lastModifiedDate":"2020-05-23"},{"lineNumber":245,"author":{"gitId":"-"},"content":" * Cons: May have performance issues in terms of memory usage.","lastModifiedDate":"2020-05-23"},{"lineNumber":246,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":247,"author":{"gitId":"-"},"content":"* **Alternative 2:** Individual command knows how to undo/redo by","lastModifiedDate":"2020-05-23"},{"lineNumber":248,"author":{"gitId":"-"},"content":" itself.","lastModifiedDate":"2020-05-23"},{"lineNumber":249,"author":{"gitId":"-"},"content":" * Pros: Will use less memory (e.g. for `delete`, just save the person being deleted).","lastModifiedDate":"2020-05-23"},{"lineNumber":250,"author":{"gitId":"-"},"content":" * Cons: We must ensure that the implementation of each individual command are correct.","lastModifiedDate":"2020-05-23"},{"lineNumber":251,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":252,"author":{"gitId":"-"},"content":"_{more aspects and alternatives to be added}_","lastModifiedDate":"2020-05-23"},{"lineNumber":253,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":254,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Data archiving","lastModifiedDate":"2020-05-23"},{"lineNumber":255,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":256,"author":{"gitId":"-"},"content":"_{Explain here how the data archiving feature will be implemented}_","lastModifiedDate":"2020-05-23"},{"lineNumber":257,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":258,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":259,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":260,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":261,"author":{"gitId":"-"},"content":"## **Documentation, logging, testing, configuration, dev-ops**","lastModifiedDate":"2020-06-07"},{"lineNumber":262,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":263,"author":{"gitId":"-"},"content":"* [Documentation guide](Documentation.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":264,"author":{"gitId":"-"},"content":"* [Testing guide](Testing.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":265,"author":{"gitId":"-"},"content":"* [Logging guide](Logging.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":266,"author":{"gitId":"-"},"content":"* [Configuration guide](Configuration.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":267,"author":{"gitId":"-"},"content":"* [DevOps guide](DevOps.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":268,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":269,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":270,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":271,"author":{"gitId":"-"},"content":"## **Appendix: Requirements**","lastModifiedDate":"2020-05-23"},{"lineNumber":272,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":273,"author":{"gitId":"-"},"content":"### Product scope","lastModifiedDate":"2020-05-23"},{"lineNumber":274,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":275,"author":{"gitId":"-"},"content":"**Target user profile**:","lastModifiedDate":"2020-05-23"},{"lineNumber":276,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":277,"author":{"gitId":"ashleygoh1"},"content":"* CS students","lastModifiedDate":"2024-03-02"},{"lineNumber":278,"author":{"gitId":"ashleygoh1"},"content":"* has a need to keep track of contacts of companies and interview dates during thier internship hunt","lastModifiedDate":"2024-03-02"},{"lineNumber":279,"author":{"gitId":"ashleygoh1"},"content":"* prefer a one-stop, centralised dashboard to manage all contact details of companies","lastModifiedDate":"2024-03-02"},{"lineNumber":280,"author":{"gitId":"ashleygoh1"},"content":"* is reasonably comfortable in using a more CLI based app","lastModifiedDate":"2024-03-02"},{"lineNumber":281,"author":{"gitId":"ashleygoh1"},"content":"* wants to be better organized","lastModifiedDate":"2024-03-02"},{"lineNumber":282,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":283,"author":{"gitId":"ashleygoh1"},"content":"**Value proposition**: Ultimate companion for Computer Science (CS) students embarking on their internship journey !","lastModifiedDate":"2024-03-02"},{"lineNumber":284,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":285,"author":{"gitId":"-"},"content":"### User stories","lastModifiedDate":"2020-06-07"},{"lineNumber":286,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":287,"author":{"gitId":"-"},"content":"Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unlikely to have) - `*`","lastModifiedDate":"2020-05-23"},{"lineNumber":288,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":289,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":290,"author":{"gitId":"eunrcn"},"content":"| Priority | As an …​ | I want to …​ | So that I can…​ |","lastModifiedDate":"2024-03-01"},{"lineNumber":291,"author":{"gitId":"Jawad280"},"content":"|----------|----------------------|---------------------------------------------------------|---------------------------------------------------------------------------------------------------|","lastModifiedDate":"2024-03-01"},{"lineNumber":292,"author":{"gitId":"Jawad280"},"content":"| `* * *` | internship applicant | add contact information of internship companies | easily access their details when needed |","lastModifiedDate":"2024-03-01"},{"lineNumber":293,"author":{"gitId":"Jawad280"},"content":"| `* * *` | internship applicant | delete contact information of internship companies | easily remove any old or irrelevant company contacts |","lastModifiedDate":"2024-03-01"},{"lineNumber":294,"author":{"gitId":"Jawad280"},"content":"| `* * *` | internship applicant | edit contact information of internship companies | easily update any details on the go |","lastModifiedDate":"2024-03-01"},{"lineNumber":295,"author":{"gitId":"Jawad280"},"content":"| `* * *` | internship applicant | see usage instructions | refer to instructions when I forget how to use the AddressBook |","lastModifiedDate":"2024-03-01"},{"lineNumber":296,"author":{"gitId":"Jawad280"},"content":"| `* * *` | internship applicant | find the contact information of a certain company | easily search which company contact I want by name |","lastModifiedDate":"2024-03-01"},{"lineNumber":297,"author":{"gitId":"Jawad280"},"content":"| `* * *` | internship applicant | keep track of the status of each internship application | categorize and easily follow up accordingly |","lastModifiedDate":"2024-03-01"},{"lineNumber":298,"author":{"gitId":"Jawad280"},"content":"| `* * *` | internship applicant | sort company contacts by dates | prioritize and plan for upcoming interviews |","lastModifiedDate":"2024-03-01"},{"lineNumber":299,"author":{"gitId":"Jawad280"},"content":"| `* * ` | internship applicant | filter company contacts by date | quickly access contacts associated with a specific date |","lastModifiedDate":"2024-03-01"},{"lineNumber":300,"author":{"gitId":"Jawad280"},"content":"| `* * ` | internship applicant | filter company contacts by tag | easily find and manage contacts within specific categories |","lastModifiedDate":"2024-03-01"},{"lineNumber":301,"author":{"gitId":"Jawad280"},"content":"| `* * ` | internship applicant | add a time to a company contact | record when a specific task or interaction needs to be done |","lastModifiedDate":"2024-03-01"},{"lineNumber":302,"author":{"gitId":"Jawad280"},"content":"| `* ` | internship applicant | add notes to company contacts | include important details or information about specific interviews and what I can learn from them |","lastModifiedDate":"2024-03-01"},{"lineNumber":303,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":304,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":305,"author":{"gitId":"-"},"content":"### Use cases","lastModifiedDate":"2020-06-07"},{"lineNumber":306,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":307,"author":{"gitId":"-"},"content":"(For all use cases below, the **System** is the `AddressBook` and the **Actor** is the `user`, unless specified otherwise)","lastModifiedDate":"2020-05-23"},{"lineNumber":308,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":309,"author":{"gitId":"Jawad280"},"content":"**Use Case: Input Company Contact Information**","lastModifiedDate":"2024-03-01"},{"lineNumber":310,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":311,"author":{"gitId":"Jawad280"},"content":"**Actor:** Internship Applicant","lastModifiedDate":"2024-03-01"},{"lineNumber":312,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":313,"author":{"gitId":"Jawad280"},"content":"**Main Success Scenario (MSS):**","lastModifiedDate":"2024-03-01"},{"lineNumber":314,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":315,"author":{"gitId":"Jawad280"},"content":"1. Internship Applicant inputs contact information of internship company.","lastModifiedDate":"2024-03-01"},{"lineNumber":316,"author":{"gitId":"Jawad280"},"content":"2. System stores the contact information.","lastModifiedDate":"2024-03-01"},{"lineNumber":317,"author":{"gitId":"Jawad280"},"content":"3. Use case ends.","lastModifiedDate":"2024-03-01"},{"lineNumber":318,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":319,"author":{"gitId":"Jawad280"},"content":"**Extensions:**","lastModifiedDate":"2024-03-01"},{"lineNumber":320,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":321,"author":{"gitId":"Jawad280"},"content":"* 1a. System detects an error in the entered data.","lastModifiedDate":"2024-03-01"},{"lineNumber":322,"author":{"gitId":"Jawad280"},"content":" * 1a1. System requests for the correct data.","lastModifiedDate":"2024-03-01"},{"lineNumber":323,"author":{"gitId":"Jawad280"},"content":" * 1a2. Internship Applicant enters new data.","lastModifiedDate":"2024-03-01"},{"lineNumber":324,"author":{"gitId":"Jawad280"},"content":" * Steps 1a1-1a2 are repeated until the data entered are correct.","lastModifiedDate":"2024-03-01"},{"lineNumber":325,"author":{"gitId":"Jawad280"},"content":" * Use case resumes from step 2.","lastModifiedDate":"2024-03-01"},{"lineNumber":326,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":327,"author":{"gitId":"Jawad280"},"content":"* *a. At any time, Internship Applicant chooses to cancel the input.","lastModifiedDate":"2024-03-01"},{"lineNumber":328,"author":{"gitId":"Jawad280"},"content":" * Use case ends.","lastModifiedDate":"2024-03-01"},{"lineNumber":329,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":330,"author":{"gitId":"Jawad280"},"content":"---","lastModifiedDate":"2024-03-01"},{"lineNumber":331,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":332,"author":{"gitId":"Jawad280"},"content":"**Use Case: Delete Company Contact Information**","lastModifiedDate":"2024-03-01"},{"lineNumber":333,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":334,"author":{"gitId":"Jawad280"},"content":"**Actor:** Internship Applicant","lastModifiedDate":"2024-03-01"},{"lineNumber":335,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":336,"author":{"gitId":"Jawad280"},"content":"**Main Success Scenario (MSS):**","lastModifiedDate":"2024-03-01"},{"lineNumber":337,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":338,"author":{"gitId":"Jawad280"},"content":"1. Internship Applicant inputs index of contact to be deleted.","lastModifiedDate":"2024-03-01"},{"lineNumber":339,"author":{"gitId":"Jawad280"},"content":"2. System deletes the relevant contact information.","lastModifiedDate":"2024-03-01"},{"lineNumber":340,"author":{"gitId":"Jawad280"},"content":"3. Use case ends.","lastModifiedDate":"2024-03-01"},{"lineNumber":341,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":342,"author":{"gitId":"Jawad280"},"content":"**Extensions:**","lastModifiedDate":"2024-03-01"},{"lineNumber":343,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":344,"author":{"gitId":"Jawad280"},"content":"* 1a. System detects an error in index of contact","lastModifiedDate":"2024-03-01"},{"lineNumber":345,"author":{"gitId":"Jawad280"},"content":" * 1a1. System requests for proper input of index (1 to current number of contacts)","lastModifiedDate":"2024-03-01"},{"lineNumber":346,"author":{"gitId":"Jawad280"},"content":" * 1a2. Internship Applicant enters the correct index.","lastModifiedDate":"2024-03-01"},{"lineNumber":347,"author":{"gitId":"Jawad280"},"content":" * Steps 1a1-1a2 are repeated until the selection is correct.","lastModifiedDate":"2024-03-01"},{"lineNumber":348,"author":{"gitId":"Jawad280"},"content":" * Use case resumes from step 2.","lastModifiedDate":"2024-03-01"},{"lineNumber":349,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":350,"author":{"gitId":"Jawad280"},"content":"* *a. At any time, the Internship Applicant chooses to cancel to detect contact.","lastModifiedDate":"2024-03-01"},{"lineNumber":351,"author":{"gitId":"Jawad280"},"content":" * *a1. System cancels deletion of contact.","lastModifiedDate":"2024-03-01"},{"lineNumber":352,"author":{"gitId":"Jawad280"},"content":" * Use case ends.","lastModifiedDate":"2024-03-01"},{"lineNumber":353,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":354,"author":{"gitId":"Jawad280"},"content":"---","lastModifiedDate":"2024-03-01"},{"lineNumber":355,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":356,"author":{"gitId":"Jawad280"},"content":"**Use Case: Edit Contacts Info**","lastModifiedDate":"2024-03-01"},{"lineNumber":357,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":358,"author":{"gitId":"Jawad280"},"content":"**Actor:** Internship Applicant","lastModifiedDate":"2024-03-01"},{"lineNumber":359,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":360,"author":{"gitId":"Jawad280"},"content":"**Main Success Scenario (MSS):**","lastModifiedDate":"2024-03-01"},{"lineNumber":361,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":362,"author":{"gitId":"Jawad280"},"content":"1. Internship Applicant chooses contact to edit by its index and enters relevant fields to be modified","lastModifiedDate":"2024-03-01"},{"lineNumber":363,"author":{"gitId":"Jawad280"},"content":"2. System modifies that corresponding field of that contact","lastModifiedDate":"2024-03-01"},{"lineNumber":364,"author":{"gitId":"Jawad280"},"content":"3. Use case ends","lastModifiedDate":"2024-03-01"},{"lineNumber":365,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":366,"author":{"gitId":"Jawad280"},"content":"**Extensions:**","lastModifiedDate":"2024-03-01"},{"lineNumber":367,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":368,"author":{"gitId":"Jawad280"},"content":"* 1a. System detects an error in index of contact","lastModifiedDate":"2024-03-01"},{"lineNumber":369,"author":{"gitId":"Jawad280"},"content":" * 1a1. System requests for proper input of index (1 to current number of contacts)","lastModifiedDate":"2024-03-01"},{"lineNumber":370,"author":{"gitId":"Jawad280"},"content":" * 1a2. Internship Applicant enters the correct index.","lastModifiedDate":"2024-03-01"},{"lineNumber":371,"author":{"gitId":"Jawad280"},"content":" * Steps 1a1-1a2 are repeated until the selection is correct.","lastModifiedDate":"2024-03-01"},{"lineNumber":372,"author":{"gitId":"Jawad280"},"content":" * Use case resumes from step 2.","lastModifiedDate":"2024-03-01"},{"lineNumber":373,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":374,"author":{"gitId":"Jawad280"},"content":"* 1a. System detects an error in the fields to be edited (No fields at all or incorrect field prefixes)","lastModifiedDate":"2024-03-01"},{"lineNumber":375,"author":{"gitId":"Jawad280"},"content":" * 1a1. System requests for proper input of fields and correct prefix","lastModifiedDate":"2024-03-01"},{"lineNumber":376,"author":{"gitId":"Jawad280"},"content":" * 1a2. Internship Applicant enters the fields to be edited.","lastModifiedDate":"2024-03-01"},{"lineNumber":377,"author":{"gitId":"Jawad280"},"content":" * Steps 1a1-1a2 are repeated until the selection is correct.","lastModifiedDate":"2024-03-01"},{"lineNumber":378,"author":{"gitId":"Jawad280"},"content":" * Use case resumes from step 2.","lastModifiedDate":"2024-03-01"},{"lineNumber":379,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":380,"author":{"gitId":"Jawad280"},"content":"* *a. At any time, the Internship Applicant chooses to cancel to edit contact.","lastModifiedDate":"2024-03-01"},{"lineNumber":381,"author":{"gitId":"Jawad280"},"content":" * *a1. System cancels edit of contact.","lastModifiedDate":"2024-03-01"},{"lineNumber":382,"author":{"gitId":"Jawad280"},"content":" * Use case ends.","lastModifiedDate":"2024-03-01"},{"lineNumber":383,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":384,"author":{"gitId":"Jawad280"},"content":"---","lastModifiedDate":"2024-03-01"},{"lineNumber":385,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":386,"author":{"gitId":"Jawad280"},"content":"**Use Case: Filter Contacts by Tag**","lastModifiedDate":"2024-03-01"},{"lineNumber":387,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":388,"author":{"gitId":"Jawad280"},"content":"**Actor:** Internship Applicant","lastModifiedDate":"2024-03-01"},{"lineNumber":389,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":390,"author":{"gitId":"Jawad280"},"content":"**Main Success Scenario (MSS):**","lastModifiedDate":"2024-03-01"},{"lineNumber":391,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":392,"author":{"gitId":"Jawad280"},"content":"1. Internship Applicant chooses to filter contacts by tag.","lastModifiedDate":"2024-03-01"},{"lineNumber":393,"author":{"gitId":"Jawad280"},"content":"2. Internship Applicant inputs the tag.","lastModifiedDate":"2024-03-01"},{"lineNumber":394,"author":{"gitId":"Jawad280"},"content":"3. System filters the contacts associated with the selected tag.","lastModifiedDate":"2024-03-01"},{"lineNumber":395,"author":{"gitId":"Jawad280"},"content":"4. System displays the filtered contacts.","lastModifiedDate":"2024-03-01"},{"lineNumber":396,"author":{"gitId":"Jawad280"},"content":"5. Use case ends.","lastModifiedDate":"2024-03-01"},{"lineNumber":397,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":398,"author":{"gitId":"Jawad280"},"content":"**Extensions:**","lastModifiedDate":"2024-03-01"},{"lineNumber":399,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":400,"author":{"gitId":"Jawad280"},"content":"* 2a. System detects an error in tag to be filtered","lastModifiedDate":"2024-03-01"},{"lineNumber":401,"author":{"gitId":"Jawad280"},"content":" * 2a1. System requests for proper input of tag (One of existing tags)","lastModifiedDate":"2024-03-01"},{"lineNumber":402,"author":{"gitId":"Jawad280"},"content":" * 2a2. Internship Applicant enters the correct tag.","lastModifiedDate":"2024-03-01"},{"lineNumber":403,"author":{"gitId":"Jawad280"},"content":" * Steps 2a1-2a2 are repeated until the selection is correct.","lastModifiedDate":"2024-03-01"},{"lineNumber":404,"author":{"gitId":"Jawad280"},"content":" * Use case resumes from step 3.","lastModifiedDate":"2024-03-01"},{"lineNumber":405,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":406,"author":{"gitId":"Jawad280"},"content":"* *a. At any time, the Internship Applicant chooses to cancel the filtering.","lastModifiedDate":"2024-03-01"},{"lineNumber":407,"author":{"gitId":"Jawad280"},"content":" * *a1. System cancels the filtering.","lastModifiedDate":"2024-03-01"},{"lineNumber":408,"author":{"gitId":"Jawad280"},"content":" * Use case ends.","lastModifiedDate":"2024-03-01"},{"lineNumber":409,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":410,"author":{"gitId":"Jawad280"},"content":"---","lastModifiedDate":"2024-03-01"},{"lineNumber":411,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":412,"author":{"gitId":"Jawad280"},"content":"**Use Case: View information of a contact**","lastModifiedDate":"2024-03-01"},{"lineNumber":413,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":414,"author":{"gitId":"Jawad280"},"content":"**Actor:** Internship Applicant","lastModifiedDate":"2024-03-01"},{"lineNumber":415,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":416,"author":{"gitId":"Jawad280"},"content":"**Main Success Scenario (MSS):**","lastModifiedDate":"2024-03-01"},{"lineNumber":417,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":418,"author":{"gitId":"Jawad280"},"content":"1. Internship Applicant chooses contact to be viewed on view panel.","lastModifiedDate":"2024-03-01"},{"lineNumber":419,"author":{"gitId":"Jawad280"},"content":"2. System requests for the specific contact index.","lastModifiedDate":"2024-03-01"},{"lineNumber":420,"author":{"gitId":"Jawad280"},"content":"3. Internship Applicant enters the contact index.","lastModifiedDate":"2024-03-01"},{"lineNumber":421,"author":{"gitId":"Jawad280"},"content":"4. System views the relevant contact on the view panel.","lastModifiedDate":"2024-03-01"},{"lineNumber":422,"author":{"gitId":"Jawad280"},"content":"5. Use case ends.","lastModifiedDate":"2024-03-01"},{"lineNumber":423,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":424,"author":{"gitId":"Jawad280"},"content":"**Extensions:**","lastModifiedDate":"2024-03-01"},{"lineNumber":425,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":426,"author":{"gitId":"Jawad280"},"content":"* 3a. IH detects an error in index of contact","lastModifiedDate":"2024-03-01"},{"lineNumber":427,"author":{"gitId":"Jawad280"},"content":" * 3a1. System requests for proper input of index (1 to current number of contacts)","lastModifiedDate":"2024-03-01"},{"lineNumber":428,"author":{"gitId":"Jawad280"},"content":" * 3a2. Internship Applicant enters the correct index.","lastModifiedDate":"2024-03-01"},{"lineNumber":429,"author":{"gitId":"Jawad280"},"content":" * Steps 3a1-3a2 are repeated until the selection is correct.","lastModifiedDate":"2024-03-01"},{"lineNumber":430,"author":{"gitId":"Jawad280"},"content":" * Use case resumes from step 3.","lastModifiedDate":"2024-03-01"},{"lineNumber":431,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":432,"author":{"gitId":"Jawad280"},"content":"* *a. At any time, Internship Applicant chooses to cancel to view contact.","lastModifiedDate":"2024-03-01"},{"lineNumber":433,"author":{"gitId":"Jawad280"},"content":" * *a1. System cancels viewing of contact.","lastModifiedDate":"2024-03-01"},{"lineNumber":434,"author":{"gitId":"Jawad280"},"content":" * Use case ends.","lastModifiedDate":"2024-03-01"},{"lineNumber":435,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":436,"author":{"gitId":"Jawad280"},"content":"---","lastModifiedDate":"2024-03-01"},{"lineNumber":437,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":438,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":439,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":440,"author":{"gitId":"-"},"content":"1. Should work on any _mainstream OS_ as long as it has Java `11` or above installed.","lastModifiedDate":"2020-05-23"},{"lineNumber":441,"author":{"gitId":"-"},"content":"2. Should be able to hold up to 1000 persons without a noticeable sluggishness in performance for typical usage.","lastModifiedDate":"2020-05-23"},{"lineNumber":442,"author":{"gitId":"-"},"content":"3. A user with above average typing speed for regular English text (i.e. not code, not system admin commands) should be able to accomplish most of the tasks faster using commands than using the mouse.","lastModifiedDate":"2020-05-23"},{"lineNumber":443,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":444,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":445,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":446,"author":{"gitId":"-"},"content":"* **Mainstream OS**: Windows, Linux, Unix, MacOS","lastModifiedDate":"2024-02-09"},{"lineNumber":447,"author":{"gitId":"-"},"content":"* **Private contact detail**: A contact detail that is not meant to be shared with others","lastModifiedDate":"2020-05-23"},{"lineNumber":448,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":449,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":450,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":451,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":452,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":453,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":454,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":455,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":456,"author":{"gitId":"-"},"content":"**Note:** These instructions only provide a starting point for testers to work on;","lastModifiedDate":"2023-09-12"},{"lineNumber":457,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":458,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":459,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":460,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":461,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":462,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":463,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":464,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":465,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":466,"author":{"gitId":"-"},"content":" 1. Double-click the jar file Expected: Shows the GUI with a set of sample contacts. The window size may not be optimum.","lastModifiedDate":"2020-05-23"},{"lineNumber":467,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":468,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":469,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":470,"author":{"gitId":"-"},"content":" 1. Resize the window to an optimum size. Move the window to a different location. Close the window.","lastModifiedDate":"2020-05-23"},{"lineNumber":471,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":472,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":473,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","lastModifiedDate":"2020-05-23"},{"lineNumber":474,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":475,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":476,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":477,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":478,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":479,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":480,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":481,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":482,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":483,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":484,"author":{"gitId":"-"},"content":" Expected: First contact is deleted from the list. Details of the deleted contact shown in the status message. Timestamp in the status bar is updated.","lastModifiedDate":"2020-05-23"},{"lineNumber":485,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":486,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":487,"author":{"gitId":"-"},"content":" Expected: No person is deleted. Error details shown in the status message. Status bar remains the same.","lastModifiedDate":"2020-05-23"},{"lineNumber":488,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":489,"author":{"gitId":"-"},"content":" 1. Other incorrect delete commands to try: `delete`, `delete x`, `...` (where x is larger than the list size)\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":490,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":491,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":492,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":493,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":494,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":495,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":496,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":497,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":498,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":499,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":500,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"eunrcn":1,"Jawad280":120,"ashleygoh1":7,"-":372}},{"path":"docs/UserGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":"layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":"title: \"User Guide\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"pageNav: 3","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":7,"author":{"gitId":"eunrcn"},"content":"# Internhub User Guide","lastModifiedDate":"2024-02-28"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"Jawad280"},"content":"Intern Hub is a **desktop app for managing contacts, optimized for use via a Line Interface** (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast, InternHub can get your contact management tasks done faster than traditional GUI apps.","lastModifiedDate":"2024-03-01"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":"\u003c!-- * Table of Contents --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003cpage-nav-print /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":14,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"-"},"content":"## Quick start","lastModifiedDate":"2020-05-23"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"1. Ensure you have Java `11` or above installed in your Computer.","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"eunrcn"},"content":"1. Download the latest `internhub.jar` from [here](https://github.com/se-edu/addressbook-level3/releases).","lastModifiedDate":"2024-02-28"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"1. Copy the file to the folder you want to use as the _home folder_ for your AddressBook.","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"eunrcn"},"content":"1. Open a command terminal, `cd` into the folder you put the jar file in, and use the `java -jar internhub.jar` command to run the application.\u003cbr\u003e","lastModifiedDate":"2024-02-28"},{"lineNumber":25,"author":{"gitId":"-"},"content":" A GUI similar to the below should appear in a few seconds. Note how the app contains some sample data.\u003cbr\u003e","lastModifiedDate":"2023-01-01"},{"lineNumber":26,"author":{"gitId":"-"},"content":" ![Ui](images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":"1. Type the command in the command box and press Enter to execute it. e.g. typing **`help`** and pressing Enter will open the help window.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":29,"author":{"gitId":"-"},"content":" Some example commands you can try:","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * `list` : Lists all contacts.","lastModifiedDate":"2023-01-01"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":33,"author":{"gitId":"ashleygoh1"},"content":" * `add c/Food Panda p/12345678 e/panda@food.com a/CBD t/F jd/Front End Intern d/15-04-2024 0900 id/6 months s/500","lastModifiedDate":"2024-02-27"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":" ` : Adds a contact named `Food Panda` to the Address Book.","lastModifiedDate":"2024-02-27"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * `delete 3` : Deletes the 3rd contact shown in the current list.","lastModifiedDate":"2023-01-01"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":" * `clear` : Deletes all contacts.","lastModifiedDate":"2023-01-01"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":40,"author":{"gitId":"-"},"content":" * `exit` : Exits the app.","lastModifiedDate":"2023-01-01"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":"1. Refer to the [Features](#features) below for details of each command.","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":"## Features","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":50,"author":{"gitId":"-"},"content":"**Notes about the command format:**\u003cbr\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"-"},"content":"* Words in `UPPER_CASE` are the parameters to be supplied by the user.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"ashleygoh1"},"content":" e.g. in `add c/COMPANY_NAME`, `COMPANY_NAME` is a parameter which can be used as `add c/Food Panda`.","lastModifiedDate":"2024-02-27"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":"* Items in square brackets are optional.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":56,"author":{"gitId":"ashleygoh1"},"content":" e.g `c/COMPANY_NAME [a/ADDRESS]` can be used as `c/Food Panda a/CBD` or as `c/Food Panda`.","lastModifiedDate":"2024-02-27"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":58,"author":{"gitId":"-"},"content":"* Parameters can be in any order.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":59,"author":{"gitId":"ashleygoh1"},"content":" e.g. if the command specifies `add c/COMPANY_NAME p/PHONE_NUMBER`, `p/PHONE_NUMBER add c/COMPANY_NAME` is also acceptable.","lastModifiedDate":"2024-02-27"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":61,"author":{"gitId":"-"},"content":"* Extraneous parameters for commands that do not take in parameters (such as `help`, `list`, `exit` and `clear`) will be ignored.\u003cbr\u003e","lastModifiedDate":"2021-02-03"},{"lineNumber":62,"author":{"gitId":"-"},"content":" e.g. if the command specifies `help 123`, it will be interpreted as `help`.","lastModifiedDate":"2021-02-03"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-02-03"},{"lineNumber":64,"author":{"gitId":"-"},"content":"* If you are using a PDF version of this document, be careful when copying and pasting commands that span multiple lines as space characters surrounding line-breaks may be omitted when copied over to the application.","lastModifiedDate":"2023-06-26"},{"lineNumber":65,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":67,"author":{"gitId":"-"},"content":"### Viewing help : `help`","lastModifiedDate":"2020-05-23"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":69,"author":{"gitId":"-"},"content":"Shows a message explaning how to access the help page.","lastModifiedDate":"2020-05-23"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":71,"author":{"gitId":"-"},"content":"![help message](images/helpMessage.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":73,"author":{"gitId":"-"},"content":"Format: `help`","lastModifiedDate":"2020-05-23"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":76,"author":{"gitId":"Jawad280"},"content":"### Adding a contact: `add`","lastModifiedDate":"2024-03-01"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":78,"author":{"gitId":"Jawad280"},"content":"Adds a contact to the address book.","lastModifiedDate":"2024-03-01"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":80,"author":{"gitId":"ashleygoh1"},"content":"Format: `add c/COMPANY_NAME p/PHONE_NUMBER e/EMAIL a/[ADDRESS] t/TAG jd/JOB_DESCRIPTION d/[INTERVIEW_DATE] id/INTERN_DURATION s/salary`","lastModifiedDate":"2024-02-27"},{"lineNumber":81,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":82,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":83,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":86,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":87,"author":{"gitId":"ashleygoh1"},"content":"* `add c/FoodPanda p/12345678 e/panda@food.com a/CBD t/F jd/Front End Intern d/15-04-2024 0900 id/6 months s/500`","lastModifiedDate":"2024-02-27"},{"lineNumber":88,"author":{"gitId":"ashleygoh1"},"content":"* `add c/Shoppa p/99912345 e/panda@food.com t/F jd/Software Developer Intern id/6 months s/500`","lastModifiedDate":"2024-02-27"},{"lineNumber":89,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":90,"author":{"gitId":"Jawad280"},"content":"### Listing all contacts : `list`","lastModifiedDate":"2024-03-01"},{"lineNumber":91,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":92,"author":{"gitId":"Jawad280"},"content":"Shows a list of all contacts in the address book sorted in ascending order of interview dates. If a company contact does not have any interview dates yet, it will be pushed to the end of the list.","lastModifiedDate":"2024-03-01"},{"lineNumber":93,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":94,"author":{"gitId":"-"},"content":"Format: `list`","lastModifiedDate":"2020-05-23"},{"lineNumber":95,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":96,"author":{"gitId":"Jawad280"},"content":"### Viewing a contact : `view`","lastModifiedDate":"2024-03-02"},{"lineNumber":97,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":98,"author":{"gitId":"Jawad280"},"content":"Views the details of the contact on the view panel in address book.","lastModifiedDate":"2024-03-02"},{"lineNumber":99,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":100,"author":{"gitId":"Jawad280"},"content":"Format: `View INDEX`","lastModifiedDate":"2024-03-02"},{"lineNumber":101,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":102,"author":{"gitId":"Jawad280"},"content":"* Views the contact at the specified `INDEX`. The index refers to the index number shown in the displayed contact list. The index **must be a positive integer** 1, 2, 3, …​","lastModifiedDate":"2024-03-02"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":104,"author":{"gitId":"Jawad280"},"content":"Example:","lastModifiedDate":"2024-03-02"},{"lineNumber":105,"author":{"gitId":"Jawad280"},"content":"* `view 3` Shows the company name of the 3rd contact on the view panel.","lastModifiedDate":"2024-03-02"},{"lineNumber":106,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":107,"author":{"gitId":"Jawad280"},"content":"### Editing a contact : `edit`","lastModifiedDate":"2024-03-01"},{"lineNumber":108,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":109,"author":{"gitId":"Jawad280"},"content":"Edits an existing contact detail in the address book.","lastModifiedDate":"2024-03-01"},{"lineNumber":110,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":111,"author":{"gitId":"Jawad280"},"content":"Format: `Edit INDEX c/[COMPANY_NAME] p/[PHONE_NUMBER] e/[EMAIL] a/[ADDRESS] t/[TAG] jd/[JOB_DESCRIPTION] d/[INTERVIEW_DATE] id/[INTERN_DURATION] s/[salary]`","lastModifiedDate":"2024-03-01"},{"lineNumber":112,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":113,"author":{"gitId":"Jawad280"},"content":"* Edits the contact at the specified `INDEX`. The index refers to the index number shown in the displayed contact list. The index **must be a positive integer** 1, 2, 3, …​","lastModifiedDate":"2024-03-01"},{"lineNumber":114,"author":{"gitId":"-"},"content":"* At least one of the optional fields must be provided.","lastModifiedDate":"2020-05-23"},{"lineNumber":115,"author":{"gitId":"-"},"content":"* Existing values will be updated to the input values.","lastModifiedDate":"2020-05-23"},{"lineNumber":116,"author":{"gitId":"Jawad280"},"content":"* For `[INTERVIEW_DATE]`, if you want to remove a date, just enter `d/` and it will remove that field.","lastModifiedDate":"2024-03-01"},{"lineNumber":117,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":118,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":119,"author":{"gitId":"Jawad280"},"content":"* `edit 1 p/91234567 e/foodpanda@example.com` Edits the phone number and email address of the 1st contact to be `91234567` and `foodpanda@example.com` respectively.","lastModifiedDate":"2024-03-01"},{"lineNumber":120,"author":{"gitId":"Jawad280"},"content":"* `edit 2 c/shopee` Edits the company name of the 2nd contact to be `shopee`.","lastModifiedDate":"2024-03-01"},{"lineNumber":121,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":122,"author":{"gitId":"Jawad280"},"content":"### Locating contacts by name: `find`","lastModifiedDate":"2024-03-01"},{"lineNumber":123,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":124,"author":{"gitId":"Jawad280"},"content":"Finds contacts whose names contain any of the given keywords.","lastModifiedDate":"2024-03-01"},{"lineNumber":125,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":126,"author":{"gitId":"-"},"content":"Format: `find KEYWORD [MORE_KEYWORDS]`","lastModifiedDate":"2020-05-23"},{"lineNumber":127,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":128,"author":{"gitId":"chenyixin0"},"content":"* The search is case-insensitive. e.g `shoppa` will match `Shoppa`","lastModifiedDate":"2024-02-29"},{"lineNumber":129,"author":{"gitId":"chenyixin0"},"content":"* The order of the keywords does not matter. e.g. `Food Panda` will match `Panda Food`","lastModifiedDate":"2024-02-29"},{"lineNumber":130,"author":{"gitId":"-"},"content":"* Only the name is searched.","lastModifiedDate":"2020-05-23"},{"lineNumber":131,"author":{"gitId":"chenyixin0"},"content":"* Only full words will be matched e.g. `Shopp` will not match `Shoppa`","lastModifiedDate":"2024-02-29"},{"lineNumber":132,"author":{"gitId":"Jawad280"},"content":"* Contacts matching at least one keyword will be returned (i.e. `OR` search).","lastModifiedDate":"2024-03-01"},{"lineNumber":133,"author":{"gitId":"Jawad280"},"content":" e.g. `Happy Burger` will return `Happy Meal`, `Burger Queen`","lastModifiedDate":"2024-03-01"},{"lineNumber":134,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":135,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":136,"author":{"gitId":"Jawad280"},"content":"* `find Happy` returns `happy` and `Happy Burger`","lastModifiedDate":"2024-03-01"},{"lineNumber":137,"author":{"gitId":"-"},"content":"* `find alex david` returns `Alex Yeoh`, `David Li`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":138,"author":{"gitId":"-"},"content":" ![result for \u0027find alex david\u0027](images/findAlexDavidResult.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":139,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":140,"author":{"gitId":"Jawad280"},"content":"### Deleting a contact : `delete`","lastModifiedDate":"2024-03-01"},{"lineNumber":141,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":142,"author":{"gitId":"Jawad280"},"content":"Deletes the specified contact from the address book.","lastModifiedDate":"2024-03-01"},{"lineNumber":143,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":144,"author":{"gitId":"-"},"content":"Format: `delete INDEX`","lastModifiedDate":"2020-05-23"},{"lineNumber":145,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":146,"author":{"gitId":"Jawad280"},"content":"* Deletes the contact at the specified `INDEX`.","lastModifiedDate":"2024-03-01"},{"lineNumber":147,"author":{"gitId":"Jawad280"},"content":"* The index refers to the index number shown in the displayed contact list.","lastModifiedDate":"2024-03-01"},{"lineNumber":148,"author":{"gitId":"-"},"content":"* The index **must be a positive integer** 1, 2, 3, …​","lastModifiedDate":"2020-05-23"},{"lineNumber":149,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":150,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":151,"author":{"gitId":"Jawad280"},"content":"* `list` followed by `delete 2` deletes the 2nd contact in the address book.","lastModifiedDate":"2024-03-01"},{"lineNumber":152,"author":{"gitId":"Jawad280"},"content":"* `find Betsy` followed by `delete 1` deletes the 1st contact in the results of the `find` command.","lastModifiedDate":"2024-03-01"},{"lineNumber":153,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":154,"author":{"gitId":"-"},"content":"### Clearing all entries : `clear`","lastModifiedDate":"2020-05-23"},{"lineNumber":155,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":156,"author":{"gitId":"-"},"content":"Clears all entries from the address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":157,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":158,"author":{"gitId":"-"},"content":"Format: `clear`","lastModifiedDate":"2020-05-23"},{"lineNumber":159,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":160,"author":{"gitId":"-"},"content":"### Exiting the program : `exit`","lastModifiedDate":"2020-05-23"},{"lineNumber":161,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":162,"author":{"gitId":"-"},"content":"Exits the program.","lastModifiedDate":"2020-05-23"},{"lineNumber":163,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":164,"author":{"gitId":"-"},"content":"Format: `exit`","lastModifiedDate":"2020-05-23"},{"lineNumber":165,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":166,"author":{"gitId":"-"},"content":"### Saving the data","lastModifiedDate":"2020-05-23"},{"lineNumber":167,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":168,"author":{"gitId":"-"},"content":"AddressBook data are saved in the hard disk automatically after any command that changes the data. There is no need to save manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":169,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":170,"author":{"gitId":"-"},"content":"### Editing the data file","lastModifiedDate":"2021-02-04"},{"lineNumber":171,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-02-04"},{"lineNumber":172,"author":{"gitId":"-"},"content":"AddressBook data are saved automatically as a JSON file `[JAR file location]/data/addressbook.json`. Advanced users are welcome to update data directly by editing that data file.","lastModifiedDate":"2023-09-08"},{"lineNumber":173,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-02-04"},{"lineNumber":174,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":175,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":176,"author":{"gitId":"-"},"content":"**Caution:**","lastModifiedDate":"2023-09-12"},{"lineNumber":177,"author":{"gitId":"-"},"content":"If your changes to the data file makes its format invalid, AddressBook will discard all data and start with an empty data file at the next run. Hence, it is recommended to take a backup of the file before editing it.\u003cbr\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":178,"author":{"gitId":"-"},"content":"Furthermore, certain edits can cause the AddressBook to behave in unexpected ways (e.g., if a value entered is outside the acceptable range). Therefore, edit the data file only if you are confident that you can update it correctly.","lastModifiedDate":"2023-09-12"},{"lineNumber":179,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":180,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":181,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-02-04"},{"lineNumber":182,"author":{"gitId":"-"},"content":"### Archiving data files `[coming in v2.0]`","lastModifiedDate":"2020-05-23"},{"lineNumber":183,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":184,"author":{"gitId":"-"},"content":"_Details coming soon ..._","lastModifiedDate":"2021-02-04"},{"lineNumber":185,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":186,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":187,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":188,"author":{"gitId":"-"},"content":"## FAQ","lastModifiedDate":"2020-05-23"},{"lineNumber":189,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":190,"author":{"gitId":"-"},"content":"**Q**: How do I transfer my data to another Computer?\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":191,"author":{"gitId":"chenyixin0"},"content":"**A**: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous InternHub home folder.","lastModifiedDate":"2024-02-29"},{"lineNumber":192,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":193,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":194,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":195,"author":{"gitId":"-"},"content":"## Known issues","lastModifiedDate":"2023-09-08"},{"lineNumber":196,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":197,"author":{"gitId":"-"},"content":"1. **When using multiple screens**, if you move the application to a secondary screen, and later switch to using only the primary screen, the GUI will open off-screen. The remedy is to delete the `preferences.json` file created by the application before running the application again.","lastModifiedDate":"2023-09-08"},{"lineNumber":198,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":199,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2023-09-08"},{"lineNumber":200,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":201,"author":{"gitId":"-"},"content":"## Command summary","lastModifiedDate":"2020-05-23"},{"lineNumber":202,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":203,"author":{"gitId":"Jawad280"},"content":"| Action | Format, Examples |","lastModifiedDate":"2024-03-01"},{"lineNumber":204,"author":{"gitId":"Jawad280"},"content":"|------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|","lastModifiedDate":"2024-03-01"},{"lineNumber":205,"author":{"gitId":"Jawad280"},"content":"| **Add** | `add c/COMPANY_NAME p/PHONE_NUMBER e/EMAIL a/[ADDRESS] t/TAG jd/JOB_DESCRIPTION d/[INTERVIEW_DATE] id/INTERN_DURATION s/salary` \u003cbr\u003e e.g., `add c/FoodPanda p/12345678 e/panda@food.com a/CBD t/F jd/Front End Intern d/15-04-2024 0900 id/6 months s/500` |","lastModifiedDate":"2024-03-01"},{"lineNumber":206,"author":{"gitId":"Jawad280"},"content":"| **Clear** | `clear` |","lastModifiedDate":"2024-03-01"},{"lineNumber":207,"author":{"gitId":"Jawad280"},"content":"| **Delete** | `delete INDEX`\u003cbr\u003e e.g., `delete 3` |","lastModifiedDate":"2024-03-01"},{"lineNumber":208,"author":{"gitId":"Jawad280"},"content":"| **Edit** | `Edit INDEX c/[COMPANY_NAME] p/[PHONE_NUMBER] e/[EMAIL] a/[ADDRESS] t/[TAG] jd/[JOB_DESCRIPTION] d/[INTERVIEW_DATE] id/[INTERN_DURATION] s/[salary]`\u003cbr\u003e e.g.,`Edit 2 p/9998765` |","lastModifiedDate":"2024-03-01"},{"lineNumber":209,"author":{"gitId":"Jawad280"},"content":"| **Find** | `find KEYWORD [MORE_KEYWORDS]`\u003cbr\u003e e.g., `find foodpanda` |","lastModifiedDate":"2024-03-01"},{"lineNumber":210,"author":{"gitId":"Jawad280"},"content":"| **List** | `list` |","lastModifiedDate":"2024-03-01"},{"lineNumber":211,"author":{"gitId":"Jawad280"},"content":"| **View** | `view INDEX`\u003cbr\u003e e.g., `view 3` |","lastModifiedDate":"2024-03-02"},{"lineNumber":212,"author":{"gitId":"Jawad280"},"content":"| **Help** | `help` |","lastModifiedDate":"2024-03-01"}],"authorContributionMap":{"eunrcn":3,"chenyixin0":4,"Jawad280":43,"ashleygoh1":8,"-":154}},{"path":"docs/_markbind/layouts/default.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003chead-bottom\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003clink rel\u003d\"stylesheet\" href\u003d\"{{baseUrl}}/stylesheets/main.css\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003c/head-bottom\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cheader sticky\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cnavbar type\u003d\"dark\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"{{baseUrl}}/index.html\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003eInternHub\u003c/a\u003e","lastModifiedDate":"2024-02-23"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/index.html\" class\u003d\"nav-link\"\u003eHome\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/UserGuide.html\" class\u003d\"nav-link\"\u003eUser Guide\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/DeveloperGuide.html\" class\u003d\"nav-link\"\u003eDeveloper Guide\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/AboutUs.html\" class\u003d\"nav-link\"\u003eAbout Us\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"https://github.com/se-edu/addressbook-level3\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003e\u003cmd\u003e:fab-github:\u003c/md\u003e\u003c/a\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003cli slot\u003d\"right\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003cform class\u003d\"navbar-form\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\" menu-align-right\u003e\u003c/searchbar\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003c/form\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003c/navbar\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"-"},"content":"\u003c/header\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"flex-body\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"site-nav\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"site-nav-top\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"fw-bold mb-2\" style\u003d\"font-size: 1.25rem;\"\u003eSite Map\u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003csite-nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"-"},"content":"* [Home]({{ baseUrl }}/index.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"-"},"content":"* [User Guide]({{ baseUrl }}/UserGuide.html) :expanded:","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * [Quick Start]({{ baseUrl }}/UserGuide.html#quick-start)","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"-"},"content":" * [Features]({{ baseUrl }}/UserGuide.html#features)","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * [FAQ]({{ baseUrl }}/UserGuide.html#faq)","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * [Command Summary]({{ baseUrl }}/UserGuide.html#faq)","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"-"},"content":"* [Developer Guide]({{ baseUrl }}/DeveloperGuide.html) :expanded:","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * [Acknowledgements]({{ baseUrl }}/DeveloperGuide.html#acknowledgements)","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * [Setting Up]({{ baseUrl }}/DeveloperGuide.html#setting-up-getting-started)","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"-"},"content":" * [Design]({{ baseUrl }}/DeveloperGuide.html#design)","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * [Implementation]({{ baseUrl }}/DeveloperGuide.html#implementation)","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"-"},"content":" * [Documentation, logging, testing, configuration, dev-ops]({{ baseUrl }}/DeveloperGuide.html#documentation-logging-testing-configuration-dev-ops)","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * [Appendix: Requirements]({{ baseUrl }}/DeveloperGuide.html#appendix-requirements)","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * [Appendix: Instructions for manual testing]({{ baseUrl }}/DeveloperGuide.html#appendix-instructions-for-manual-testing)","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"-"},"content":"* Tutorials","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * [Tracing code]({{ baseUrl }}/tutorials/TracingCode.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"-"},"content":" * [Adding a command]({{ baseUrl }}/tutorials/AddRemark.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"-"},"content":" * [Removing Fields]({{ baseUrl }}/tutorials/RemovingFields.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* [About Us]({{ baseUrl }}/AboutUs.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003c/site-nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003c/nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003cdiv id\u003d\"content-wrapper\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"-"},"content":" {{ content }}","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"page-nav\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"-"},"content":" \u003cpage-nav /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"-"},"content":" \u003c/nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"-"},"content":" \u003cscroll-top-button\u003e\u003c/scroll-top-button\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"-"},"content":"\u003cfooter\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u003c!-- Support MarkBind by including a link to us on your landing page! --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"text-center\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"-"},"content":" \u003csmall\u003e[\u003cmd\u003e**Powered by**\u003c/md\u003e \u003cimg src\u003d\"https://markbind.org/favicon.ico\" width\u003d\"30\"\u003e {{MarkBind}}, generated on {{timestamp}}]\u003c/small\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"-"},"content":"\u003c/footer\u003e","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"ashleygoh1":1,"-":66}},{"path":"docs/team/ashley.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"ashleygoh1"},"content":"---","lastModifiedDate":"2024-02-27"},{"lineNumber":2,"author":{"gitId":"ashleygoh1"},"content":" layout: default.md","lastModifiedDate":"2024-02-27"},{"lineNumber":3,"author":{"gitId":"ashleygoh1"},"content":" title: \"John Doe\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-02-27"},{"lineNumber":4,"author":{"gitId":"ashleygoh1"},"content":"---","lastModifiedDate":"2024-02-27"},{"lineNumber":5,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":6,"author":{"gitId":"ashleygoh1"},"content":"### Project: AddressBook Level 3","lastModifiedDate":"2024-02-27"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":8,"author":{"gitId":"ashleygoh1"},"content":"AddressBook - Level 3 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.","lastModifiedDate":"2024-02-27"},{"lineNumber":9,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-02-27"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":12,"author":{"gitId":"ashleygoh1"},"content":"* **New Feature**: Allow user to add new contact to the address book.","lastModifiedDate":"2024-02-27"},{"lineNumber":13,"author":{"gitId":"ashleygoh1"},"content":" * What it does: Allow user to add the internship information that they applied for","lastModifiedDate":"2024-02-27"},{"lineNumber":14,"author":{"gitId":"ashleygoh1"},"content":" * Justification: This feature allow users to conveniently store all relevant internship details in one centralized location alongside their other contacts. This helps them stay organized and easily access internship information when needed.","lastModifiedDate":"2024-02-27"},{"lineNumber":15,"author":{"gitId":"ashleygoh1"},"content":" * Credits: The feature builds upon the robust foundation of AB3, optimizing code to accommodate new parameters.","lastModifiedDate":"2024-02-27"},{"lineNumber":16,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":17,"author":{"gitId":"ashleygoh1"},"content":"* **Code contributed**: [RepoSense link]()","lastModifiedDate":"2024-02-27"},{"lineNumber":18,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":19,"author":{"gitId":"ashleygoh1"},"content":"* **Project management**:","lastModifiedDate":"2024-02-27"},{"lineNumber":20,"author":{"gitId":"ashleygoh1"},"content":" * Managed releases `v1.3` - `v1.5rc` (3 releases) on GitHub","lastModifiedDate":"2024-02-27"},{"lineNumber":21,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":22,"author":{"gitId":"ashleygoh1"},"content":"* **Enhancements to existing features**:","lastModifiedDate":"2024-02-27"},{"lineNumber":23,"author":{"gitId":"ashleygoh1"},"content":" * Update existing tests for existing features with coverage of 78.57% (Pull requests [\\#36](), [\\#38]())","lastModifiedDate":"2024-02-27"},{"lineNumber":24,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":25,"author":{"gitId":"ashleygoh1"},"content":"* **Documentation**:","lastModifiedDate":"2024-02-27"},{"lineNumber":26,"author":{"gitId":"ashleygoh1"},"content":" * User Guide:","lastModifiedDate":"2024-02-27"},{"lineNumber":27,"author":{"gitId":"ashleygoh1"},"content":" * Added documentation for the features `add` and `edit` [\\#72]()","lastModifiedDate":"2024-02-27"},{"lineNumber":28,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":29,"author":{"gitId":"ashleygoh1"},"content":"* **Community**:","lastModifiedDate":"2024-02-27"},{"lineNumber":30,"author":{"gitId":"ashleygoh1"},"content":" * PRs reviewed (with non-trivial review comments): [\\#12](), [\\#32](), [\\#19](), [\\#42]()","lastModifiedDate":"2024-02-27"},{"lineNumber":31,"author":{"gitId":"ashleygoh1"},"content":" * Reported bugs and suggestions for other teams in the class (examples: [1](), [2](), [3]())","lastModifiedDate":"2024-02-27"},{"lineNumber":32,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":33,"author":{"gitId":"ashleygoh1"},"content":"* **Tools**:","lastModifiedDate":"2024-02-27"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":" * Set up codecov to the team repo","lastModifiedDate":"2024-02-27"},{"lineNumber":35,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":36,"author":{"gitId":"ashleygoh1"},"content":"* _{you can add/remove categories in the list above}_","lastModifiedDate":"2024-02-27"}],"authorContributionMap":{"ashleygoh1":36}},{"path":"src/main/java/seedu/address/logic/Messages.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic;","lastModifiedDate":"2023-07-13"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2023-07-14"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-07-14"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.stream.Stream;","lastModifiedDate":"2023-07-14"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.Prefix;","lastModifiedDate":"2023-07-14"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2019-02-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":10,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":" * Container for user visible messages.","lastModifiedDate":"2016-08-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class Messages {","lastModifiedDate":"2016-08-24"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":" public static final String MESSAGE_UNKNOWN_COMMAND \u003d \"Unknown command\";","lastModifiedDate":"2016-09-21"},{"lineNumber":16,"author":{"gitId":"-"},"content":" public static final String MESSAGE_INVALID_COMMAND_FORMAT \u003d \"Invalid command format! \\n%1$s\";","lastModifiedDate":"2016-08-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":" public static final String MESSAGE_INVALID_PERSON_DISPLAYED_INDEX \u003d \"The person index provided is invalid\";","lastModifiedDate":"2016-08-24"},{"lineNumber":18,"author":{"gitId":"-"},"content":" public static final String MESSAGE_PERSONS_LISTED_OVERVIEW \u003d \"%1$d persons listed!\";","lastModifiedDate":"2016-08-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":" public static final String MESSAGE_DUPLICATE_FIELDS \u003d","lastModifiedDate":"2023-07-14"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \"Multiple values specified for the following single-valued field(s): \";","lastModifiedDate":"2023-07-14"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":22,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-07-14"},{"lineNumber":23,"author":{"gitId":"-"},"content":" * Returns an error message indicating the duplicate prefixes.","lastModifiedDate":"2023-07-14"},{"lineNumber":24,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-07-14"},{"lineNumber":25,"author":{"gitId":"-"},"content":" public static String getErrorMessageForDuplicatePrefixes(Prefix... duplicatePrefixes) {","lastModifiedDate":"2023-07-14"},{"lineNumber":26,"author":{"gitId":"-"},"content":" assert duplicatePrefixes.length \u003e 0;","lastModifiedDate":"2023-07-14"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":28,"author":{"gitId":"-"},"content":" Set\u003cString\u003e duplicateFields \u003d","lastModifiedDate":"2023-07-14"},{"lineNumber":29,"author":{"gitId":"-"},"content":" Stream.of(duplicatePrefixes).map(Prefix::toString).collect(Collectors.toSet());","lastModifiedDate":"2023-07-14"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":31,"author":{"gitId":"-"},"content":" return MESSAGE_DUPLICATE_FIELDS + String.join(\" \", duplicateFields);","lastModifiedDate":"2023-07-14"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-14"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-28"},{"lineNumber":34,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2019-02-23"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * Formats the {@code person} for display to the user.","lastModifiedDate":"2019-02-23"},{"lineNumber":36,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2019-02-23"},{"lineNumber":37,"author":{"gitId":"-"},"content":" public static String format(Person person) {","lastModifiedDate":"2019-02-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":" final StringBuilder builder \u003d new StringBuilder();","lastModifiedDate":"2019-02-23"},{"lineNumber":39,"author":{"gitId":"ashleygoh1"},"content":" builder.append(person.getCompanyName())","lastModifiedDate":"2024-02-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" .append(\"; Phone: \")","lastModifiedDate":"2019-02-23"},{"lineNumber":41,"author":{"gitId":"-"},"content":" .append(person.getPhone())","lastModifiedDate":"2019-02-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":" .append(\"; Email: \")","lastModifiedDate":"2019-02-23"},{"lineNumber":43,"author":{"gitId":"-"},"content":" .append(person.getEmail())","lastModifiedDate":"2019-02-23"},{"lineNumber":44,"author":{"gitId":"-"},"content":" .append(\"; Address: \")","lastModifiedDate":"2019-02-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":" .append(person.getAddress())","lastModifiedDate":"2019-02-23"},{"lineNumber":46,"author":{"gitId":"ashleygoh1"},"content":" .append(\"; Tags: \")","lastModifiedDate":"2024-02-25"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":" .append(person.getTag())","lastModifiedDate":"2024-02-25"},{"lineNumber":48,"author":{"gitId":"ashleygoh1"},"content":" .append(\"; Job Description: \")","lastModifiedDate":"2024-02-25"},{"lineNumber":49,"author":{"gitId":"ashleygoh1"},"content":" .append(person.getJobDescription())","lastModifiedDate":"2024-02-25"},{"lineNumber":50,"author":{"gitId":"ashleygoh1"},"content":" .append(\"; Interview Date: \")","lastModifiedDate":"2024-02-25"},{"lineNumber":51,"author":{"gitId":"ashleygoh1"},"content":" .append(person.getInterviewDate())","lastModifiedDate":"2024-02-25"},{"lineNumber":52,"author":{"gitId":"ashleygoh1"},"content":" .append(\"; Internship Duration: \")","lastModifiedDate":"2024-02-25"},{"lineNumber":53,"author":{"gitId":"ashleygoh1"},"content":" .append(person.getInternDuration())","lastModifiedDate":"2024-02-25"},{"lineNumber":54,"author":{"gitId":"ashleygoh1"},"content":" .append(\"; Salary: \")","lastModifiedDate":"2024-02-25"},{"lineNumber":55,"author":{"gitId":"ashleygoh1"},"content":" .append(person.getSalary());","lastModifiedDate":"2024-02-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" return builder.toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-24"}],"authorContributionMap":{"ashleygoh1":11,"-":48}},{"path":"src/main/java/seedu/address/logic/commands/AddCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.commands;","lastModifiedDate":"2016-09-22"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2017-05-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2017-05-09"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2017-05-09"},{"lineNumber":6,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INTERN_DURATION;","lastModifiedDate":"2024-02-26"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INTERVIEW_DATE;","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_JOB_DESCRIPTION;","lastModifiedDate":"2024-02-26"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2017-06-06"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2017-05-09"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_SALARY;","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2017-05-09"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-09"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.ToStringBuilder;","lastModifiedDate":"2019-02-23"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.logic.Messages;","lastModifiedDate":"2023-07-13"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.exceptions.CommandException;","lastModifiedDate":"2017-02-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.model.Model;","lastModifiedDate":"2018-08-08"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2017-01-18"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":20,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-24"},{"lineNumber":21,"author":{"gitId":"-"},"content":" * Adds a person to the address book.","lastModifiedDate":"2016-08-24"},{"lineNumber":22,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":23,"author":{"gitId":"-"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2018-04-19"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":25,"author":{"gitId":"-"},"content":" public static final String COMMAND_WORD \u003d \"add\";","lastModifiedDate":"2016-08-24"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":27,"author":{"gitId":"-"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Adds a person to the address book. \"","lastModifiedDate":"2016-08-24"},{"lineNumber":28,"author":{"gitId":"-"},"content":" + \"Parameters: \"","lastModifiedDate":"2017-06-06"},{"lineNumber":29,"author":{"gitId":"-"},"content":" + PREFIX_NAME + \"NAME \"","lastModifiedDate":"2017-06-06"},{"lineNumber":30,"author":{"gitId":"-"},"content":" + PREFIX_PHONE + \"PHONE \"","lastModifiedDate":"2017-05-09"},{"lineNumber":31,"author":{"gitId":"-"},"content":" + PREFIX_EMAIL + \"EMAIL \"","lastModifiedDate":"2017-05-09"},{"lineNumber":32,"author":{"gitId":"ashleygoh1"},"content":" + \"[\" + PREFIX_ADDRESS + \"ADDRESS] \"","lastModifiedDate":"2024-02-26"},{"lineNumber":33,"author":{"gitId":"ashleygoh1"},"content":" + PREFIX_TAG + \"TAG \"","lastModifiedDate":"2024-02-26"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":" + PREFIX_JOB_DESCRIPTION + \"JOB DESCRIPTION \"","lastModifiedDate":"2024-02-26"},{"lineNumber":35,"author":{"gitId":"ashleygoh1"},"content":" + \"[\" + PREFIX_INTERVIEW_DATE + \"INTERVIEW DATE] \"","lastModifiedDate":"2024-02-26"},{"lineNumber":36,"author":{"gitId":"ashleygoh1"},"content":" + PREFIX_INTERN_DURATION + \"INTERN DURATION \"","lastModifiedDate":"2024-02-26"},{"lineNumber":37,"author":{"gitId":"ashleygoh1"},"content":" + PREFIX_SALARY + \"SALARY\\n\"","lastModifiedDate":"2024-02-26"},{"lineNumber":38,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":39,"author":{"gitId":"-"},"content":" + \"Example: \" + COMMAND_WORD + \" \"","lastModifiedDate":"2017-06-06"},{"lineNumber":40,"author":{"gitId":"ashleygoh1"},"content":" + PREFIX_NAME + \"Happy Burger \"","lastModifiedDate":"2024-02-26"},{"lineNumber":41,"author":{"gitId":"-"},"content":" + PREFIX_PHONE + \"98765432 \"","lastModifiedDate":"2017-05-09"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":" + PREFIX_EMAIL + \"HappyBurger@example.com \"","lastModifiedDate":"2024-02-26"},{"lineNumber":43,"author":{"gitId":"-"},"content":" + PREFIX_ADDRESS + \"311, Clementi Ave 2, #02-25 \"","lastModifiedDate":"2017-05-09"},{"lineNumber":44,"author":{"gitId":"ashleygoh1"},"content":" + PREFIX_TAG + \"F \"","lastModifiedDate":"2024-02-26"},{"lineNumber":45,"author":{"gitId":"ashleygoh1"},"content":" + PREFIX_JOB_DESCRIPTION + \"Software Developer intern \"","lastModifiedDate":"2024-02-26"},{"lineNumber":46,"author":{"gitId":"eunrcn"},"content":" + PREFIX_INTERVIEW_DATE + \"03-03-2024 1200 \"","lastModifiedDate":"2024-02-28"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":" + PREFIX_INTERN_DURATION + \"3 months \"","lastModifiedDate":"2024-02-26"},{"lineNumber":48,"author":{"gitId":"ashleygoh1"},"content":" + PREFIX_SALARY + \"1000\";","lastModifiedDate":"2024-02-26"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":50,"author":{"gitId":"-"},"content":" public static final String MESSAGE_SUCCESS \u003d \"New person added: %1$s\";","lastModifiedDate":"2016-08-24"},{"lineNumber":51,"author":{"gitId":"-"},"content":" public static final String MESSAGE_DUPLICATE_PERSON \u003d \"This person already exists in the address book\";","lastModifiedDate":"2016-08-24"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":53,"author":{"gitId":"-"},"content":" private final Person toAdd;","lastModifiedDate":"2016-08-24"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":55,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-09-21"},{"lineNumber":56,"author":{"gitId":"-"},"content":" * Creates an AddCommand to add the specified {@code Person}","lastModifiedDate":"2018-01-10"},{"lineNumber":57,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-09-21"},{"lineNumber":58,"author":{"gitId":"-"},"content":" public AddCommand(Person person) {","lastModifiedDate":"2018-01-10"},{"lineNumber":59,"author":{"gitId":"-"},"content":" requireNonNull(person);","lastModifiedDate":"2018-01-10"},{"lineNumber":60,"author":{"gitId":"-"},"content":" toAdd \u003d person;","lastModifiedDate":"2018-01-10"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-21"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":63,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":64,"author":{"gitId":"-"},"content":" public CommandResult execute(Model model) throws CommandException {","lastModifiedDate":"2019-01-25"},{"lineNumber":65,"author":{"gitId":"-"},"content":" requireNonNull(model);","lastModifiedDate":"2017-05-15"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-07"},{"lineNumber":67,"author":{"gitId":"-"},"content":" if (model.hasPerson(toAdd)) {","lastModifiedDate":"2018-08-07"},{"lineNumber":68,"author":{"gitId":"-"},"content":" throw new CommandException(MESSAGE_DUPLICATE_PERSON);","lastModifiedDate":"2018-08-07"},{"lineNumber":69,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-07"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-07"},{"lineNumber":71,"author":{"gitId":"-"},"content":" model.addPerson(toAdd);","lastModifiedDate":"2016-09-25"},{"lineNumber":72,"author":{"gitId":"-"},"content":" return new CommandResult(String.format(MESSAGE_SUCCESS, Messages.format(toAdd)));","lastModifiedDate":"2019-02-23"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":75,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-06-22"},{"lineNumber":76,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2017-06-22"},{"lineNumber":77,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2023-07-13"},{"lineNumber":78,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2023-07-13"},{"lineNumber":79,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-13"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-13"},{"lineNumber":81,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2023-07-13"},{"lineNumber":82,"author":{"gitId":"-"},"content":" if (!(other instanceof AddCommand)) {","lastModifiedDate":"2023-07-13"},{"lineNumber":83,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2023-07-13"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-13"},{"lineNumber":85,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-13"},{"lineNumber":86,"author":{"gitId":"-"},"content":" AddCommand otherAddCommand \u003d (AddCommand) other;","lastModifiedDate":"2023-07-13"},{"lineNumber":87,"author":{"gitId":"-"},"content":" return toAdd.equals(otherAddCommand.toAdd);","lastModifiedDate":"2023-07-13"},{"lineNumber":88,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-22"},{"lineNumber":89,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":90,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2019-02-23"},{"lineNumber":91,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2019-02-23"},{"lineNumber":92,"author":{"gitId":"-"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2019-02-23"},{"lineNumber":93,"author":{"gitId":"-"},"content":" .add(\"toAdd\", toAdd)","lastModifiedDate":"2019-02-23"},{"lineNumber":94,"author":{"gitId":"-"},"content":" .toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":95,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":96,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-24"}],"authorContributionMap":{"eunrcn":1,"ashleygoh1":17,"-":78}},{"path":"src/main/java/seedu/address/logic/commands/CommandResult.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.commands;","lastModifiedDate":"2016-09-22"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2017-05-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.Objects;","lastModifiedDate":"2018-12-09"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":7,"author":{"gitId":"chenyixin0"},"content":"import javafx.collections.transformation.FilteredList;","lastModifiedDate":"2024-02-29"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.ToStringBuilder;","lastModifiedDate":"2019-02-23"},{"lineNumber":9,"author":{"gitId":"Jawad280"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2024-02-26"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":11,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":" * Represents the result of a command execution.","lastModifiedDate":"2016-08-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":14,"author":{"gitId":"-"},"content":"public class CommandResult {","lastModifiedDate":"2016-08-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-28"},{"lineNumber":16,"author":{"gitId":"-"},"content":" private final String feedbackToUser;","lastModifiedDate":"2018-12-09"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":18,"author":{"gitId":"-"},"content":" /** Help information should be shown to the user. */","lastModifiedDate":"2018-12-09"},{"lineNumber":19,"author":{"gitId":"-"},"content":" private final boolean showHelp;","lastModifiedDate":"2018-12-09"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":21,"author":{"gitId":"-"},"content":" /** The application should exit. */","lastModifiedDate":"2018-12-09"},{"lineNumber":22,"author":{"gitId":"-"},"content":" private final boolean exit;","lastModifiedDate":"2018-12-09"},{"lineNumber":23,"author":{"gitId":"Jawad280"},"content":" private final Person viewPerson;","lastModifiedDate":"2024-02-26"},{"lineNumber":24,"author":{"gitId":"chenyixin0"},"content":" private final FilteredList\u003cPerson\u003e viewList;","lastModifiedDate":"2024-02-29"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":26,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-12-09"},{"lineNumber":27,"author":{"gitId":"-"},"content":" * Constructs a {@code CommandResult} with the specified fields.","lastModifiedDate":"2018-12-09"},{"lineNumber":28,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-12-09"},{"lineNumber":29,"author":{"gitId":"-"},"content":" public CommandResult(String feedbackToUser, boolean showHelp, boolean exit) {","lastModifiedDate":"2018-12-09"},{"lineNumber":30,"author":{"gitId":"-"},"content":" this.feedbackToUser \u003d requireNonNull(feedbackToUser);","lastModifiedDate":"2017-05-15"},{"lineNumber":31,"author":{"gitId":"-"},"content":" this.showHelp \u003d showHelp;","lastModifiedDate":"2018-12-09"},{"lineNumber":32,"author":{"gitId":"-"},"content":" this.exit \u003d exit;","lastModifiedDate":"2018-12-09"},{"lineNumber":33,"author":{"gitId":"Jawad280"},"content":" this.viewPerson \u003d null;","lastModifiedDate":"2024-02-26"},{"lineNumber":34,"author":{"gitId":"chenyixin0"},"content":" this.viewList \u003d null;","lastModifiedDate":"2024-02-29"},{"lineNumber":35,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":37,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-12-09"},{"lineNumber":38,"author":{"gitId":"-"},"content":" * Constructs a {@code CommandResult} with the specified {@code feedbackToUser},","lastModifiedDate":"2018-12-09"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * and other fields set to their default value.","lastModifiedDate":"2018-12-09"},{"lineNumber":40,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-12-09"},{"lineNumber":41,"author":{"gitId":"-"},"content":" public CommandResult(String feedbackToUser) {","lastModifiedDate":"2018-12-09"},{"lineNumber":42,"author":{"gitId":"-"},"content":" this(feedbackToUser, false, false);","lastModifiedDate":"2018-12-09"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":44,"author":{"gitId":"Jawad280"},"content":" /**","lastModifiedDate":"2024-02-26"},{"lineNumber":45,"author":{"gitId":"Jawad280"},"content":" * Constructs a {@code CommandResult} with the specified {@code feedbackToUser},","lastModifiedDate":"2024-02-26"},{"lineNumber":46,"author":{"gitId":"Jawad280"},"content":" * and other fields set to their default value.","lastModifiedDate":"2024-02-26"},{"lineNumber":47,"author":{"gitId":"Jawad280"},"content":" */","lastModifiedDate":"2024-02-26"},{"lineNumber":48,"author":{"gitId":"Jawad280"},"content":" public CommandResult(String feedbackToUser, Person viewPerson) {","lastModifiedDate":"2024-02-26"},{"lineNumber":49,"author":{"gitId":"Jawad280"},"content":" this.feedbackToUser \u003d requireNonNull(feedbackToUser);","lastModifiedDate":"2024-02-26"},{"lineNumber":50,"author":{"gitId":"Jawad280"},"content":" this.showHelp \u003d false;","lastModifiedDate":"2024-02-26"},{"lineNumber":51,"author":{"gitId":"Jawad280"},"content":" this.exit \u003d false;","lastModifiedDate":"2024-02-26"},{"lineNumber":52,"author":{"gitId":"Jawad280"},"content":" this.viewPerson \u003d viewPerson;","lastModifiedDate":"2024-02-26"},{"lineNumber":53,"author":{"gitId":"chenyixin0"},"content":" this.viewList \u003d null;","lastModifiedDate":"2024-02-29"},{"lineNumber":54,"author":{"gitId":"chenyixin0"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":55,"author":{"gitId":"chenyixin0"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":56,"author":{"gitId":"Jawad280"},"content":" /**","lastModifiedDate":"2024-03-01"},{"lineNumber":57,"author":{"gitId":"Jawad280"},"content":" * Constructs a {@code CommandResult} with the specified {@code feedbackToUser},","lastModifiedDate":"2024-03-01"},{"lineNumber":58,"author":{"gitId":"Jawad280"},"content":" * and other fields set to their default value.","lastModifiedDate":"2024-03-01"},{"lineNumber":59,"author":{"gitId":"Jawad280"},"content":" */","lastModifiedDate":"2024-03-01"},{"lineNumber":60,"author":{"gitId":"chenyixin0"},"content":" public CommandResult(String feedbackToUser, FilteredList\u003cPerson\u003e viewList) {","lastModifiedDate":"2024-02-29"},{"lineNumber":61,"author":{"gitId":"chenyixin0"},"content":" this.feedbackToUser \u003d requireNonNull(feedbackToUser);","lastModifiedDate":"2024-02-29"},{"lineNumber":62,"author":{"gitId":"chenyixin0"},"content":" this.showHelp \u003d false;","lastModifiedDate":"2024-02-29"},{"lineNumber":63,"author":{"gitId":"chenyixin0"},"content":" this.exit \u003d false;","lastModifiedDate":"2024-02-29"},{"lineNumber":64,"author":{"gitId":"chenyixin0"},"content":" this.viewPerson \u003d null;","lastModifiedDate":"2024-02-29"},{"lineNumber":65,"author":{"gitId":"chenyixin0"},"content":" this.viewList \u003d viewList;","lastModifiedDate":"2024-02-29"},{"lineNumber":66,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":68,"author":{"gitId":"-"},"content":" public String getFeedbackToUser() {","lastModifiedDate":"2018-12-09"},{"lineNumber":69,"author":{"gitId":"-"},"content":" return feedbackToUser;","lastModifiedDate":"2018-12-09"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":71,"author":{"gitId":"Jawad280"},"content":" public Person getViewPerson() {","lastModifiedDate":"2024-02-26"},{"lineNumber":72,"author":{"gitId":"Jawad280"},"content":" return this.viewPerson;","lastModifiedDate":"2024-02-26"},{"lineNumber":73,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":74,"author":{"gitId":"chenyixin0"},"content":" public FilteredList\u003cPerson\u003e getViewList() {","lastModifiedDate":"2024-02-29"},{"lineNumber":75,"author":{"gitId":"chenyixin0"},"content":" return this.viewList;","lastModifiedDate":"2024-02-29"},{"lineNumber":76,"author":{"gitId":"chenyixin0"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":78,"author":{"gitId":"-"},"content":" public boolean isShowHelp() {","lastModifiedDate":"2018-12-09"},{"lineNumber":79,"author":{"gitId":"-"},"content":" return showHelp;","lastModifiedDate":"2018-12-09"},{"lineNumber":80,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":81,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":82,"author":{"gitId":"-"},"content":" public boolean isExit() {","lastModifiedDate":"2018-12-09"},{"lineNumber":83,"author":{"gitId":"-"},"content":" return exit;","lastModifiedDate":"2018-12-09"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":85,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":86,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":87,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-12-09"},{"lineNumber":88,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2018-12-09"},{"lineNumber":89,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2018-12-09"},{"lineNumber":90,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2018-12-09"},{"lineNumber":91,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":93,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2018-12-09"},{"lineNumber":94,"author":{"gitId":"-"},"content":" if (!(other instanceof CommandResult)) {","lastModifiedDate":"2018-12-09"},{"lineNumber":95,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2018-12-09"},{"lineNumber":96,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":97,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":98,"author":{"gitId":"-"},"content":" CommandResult otherCommandResult \u003d (CommandResult) other;","lastModifiedDate":"2018-12-09"},{"lineNumber":99,"author":{"gitId":"-"},"content":" return feedbackToUser.equals(otherCommandResult.feedbackToUser)","lastModifiedDate":"2018-12-09"},{"lineNumber":100,"author":{"gitId":"-"},"content":" \u0026\u0026 showHelp \u003d\u003d otherCommandResult.showHelp","lastModifiedDate":"2018-12-09"},{"lineNumber":101,"author":{"gitId":"-"},"content":" \u0026\u0026 exit \u003d\u003d otherCommandResult.exit;","lastModifiedDate":"2018-12-09"},{"lineNumber":102,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":104,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-12-09"},{"lineNumber":105,"author":{"gitId":"-"},"content":" public int hashCode() {","lastModifiedDate":"2018-12-09"},{"lineNumber":106,"author":{"gitId":"-"},"content":" return Objects.hash(feedbackToUser, showHelp, exit);","lastModifiedDate":"2018-12-09"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":108,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":109,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2019-02-23"},{"lineNumber":110,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2019-02-23"},{"lineNumber":111,"author":{"gitId":"-"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2019-02-23"},{"lineNumber":112,"author":{"gitId":"-"},"content":" .add(\"feedbackToUser\", feedbackToUser)","lastModifiedDate":"2019-02-23"},{"lineNumber":113,"author":{"gitId":"-"},"content":" .add(\"showHelp\", showHelp)","lastModifiedDate":"2019-02-23"},{"lineNumber":114,"author":{"gitId":"-"},"content":" .add(\"exit\", exit)","lastModifiedDate":"2019-02-23"},{"lineNumber":115,"author":{"gitId":"-"},"content":" .toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":117,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":118,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-24"}],"authorContributionMap":{"chenyixin0":15,"Jawad280":21,"-":82}},{"path":"src/main/java/seedu/address/logic/commands/DeleteCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.commands;","lastModifiedDate":"2016-09-22"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2018-08-08"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2017-09-01"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2017-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.ToStringBuilder;","lastModifiedDate":"2019-02-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import seedu.address.logic.Messages;","lastModifiedDate":"2023-07-13"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.exceptions.CommandException;","lastModifiedDate":"2017-02-05"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.model.Model;","lastModifiedDate":"2018-08-08"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-01-10"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":14,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":" * Deletes a person identified using it\u0027s displayed index from the address book.","lastModifiedDate":"2018-04-01"},{"lineNumber":16,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2018-04-19"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":" public static final String COMMAND_WORD \u003d \"delete\";","lastModifiedDate":"2016-08-24"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":21,"author":{"gitId":"-"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD","lastModifiedDate":"2016-08-24"},{"lineNumber":22,"author":{"gitId":"-"},"content":" + \": Deletes the person identified by the index number used in the displayed person list.\\n\"","lastModifiedDate":"2018-04-01"},{"lineNumber":23,"author":{"gitId":"-"},"content":" + \"Parameters: INDEX (must be a positive integer)\\n\"","lastModifiedDate":"2016-09-29"},{"lineNumber":24,"author":{"gitId":"-"},"content":" + \"Example: \" + COMMAND_WORD + \" 1\";","lastModifiedDate":"2016-08-24"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":26,"author":{"gitId":"minghowC"},"content":" // Output message: \"Deleted Person: Person Name\"","lastModifiedDate":"2024-03-01"},{"lineNumber":27,"author":{"gitId":"-"},"content":" public static final String MESSAGE_DELETE_PERSON_SUCCESS \u003d \"Deleted Person: %1$s\";","lastModifiedDate":"2016-08-24"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":29,"author":{"gitId":"-"},"content":" private final Index targetIndex;","lastModifiedDate":"2017-06-27"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":31,"author":{"gitId":"-"},"content":" public DeleteCommand(Index targetIndex) {","lastModifiedDate":"2017-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" this.targetIndex \u003d targetIndex;","lastModifiedDate":"2016-09-22"},{"lineNumber":33,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":35,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":36,"author":{"gitId":"-"},"content":" public CommandResult execute(Model model) throws CommandException {","lastModifiedDate":"2019-01-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" requireNonNull(model);","lastModifiedDate":"2018-08-08"},{"lineNumber":38,"author":{"gitId":"-"},"content":" List\u003cPerson\u003e lastShownList \u003d model.getFilteredPersonList();","lastModifiedDate":"2018-04-19"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":40,"author":{"gitId":"-"},"content":" if (targetIndex.getZeroBased() \u003e\u003d lastShownList.size()) {","lastModifiedDate":"2018-04-19"},{"lineNumber":41,"author":{"gitId":"-"},"content":" throw new CommandException(Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX);","lastModifiedDate":"2018-04-19"},{"lineNumber":42,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-04-19"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":44,"author":{"gitId":"-"},"content":" Person personToDelete \u003d lastShownList.get(targetIndex.getZeroBased());","lastModifiedDate":"2018-04-19"},{"lineNumber":45,"author":{"gitId":"-"},"content":" model.deletePerson(personToDelete);","lastModifiedDate":"2016-09-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" return new CommandResult(String.format(MESSAGE_DELETE_PERSON_SUCCESS, Messages.format(personToDelete)));","lastModifiedDate":"2019-02-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-28"},{"lineNumber":49,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-06-27"},{"lineNumber":50,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2017-06-27"},{"lineNumber":51,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2023-07-13"},{"lineNumber":52,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2023-07-13"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-13"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-13"},{"lineNumber":55,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2023-07-13"},{"lineNumber":56,"author":{"gitId":"-"},"content":" if (!(other instanceof DeleteCommand)) {","lastModifiedDate":"2023-07-13"},{"lineNumber":57,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2023-07-13"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-13"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-13"},{"lineNumber":60,"author":{"gitId":"-"},"content":" DeleteCommand otherDeleteCommand \u003d (DeleteCommand) other;","lastModifiedDate":"2023-07-13"},{"lineNumber":61,"author":{"gitId":"-"},"content":" return targetIndex.equals(otherDeleteCommand.targetIndex);","lastModifiedDate":"2023-07-13"},{"lineNumber":62,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-27"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":64,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2019-02-23"},{"lineNumber":65,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2019-02-23"},{"lineNumber":66,"author":{"gitId":"-"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2019-02-23"},{"lineNumber":67,"author":{"gitId":"-"},"content":" .add(\"targetIndex\", targetIndex)","lastModifiedDate":"2019-02-23"},{"lineNumber":68,"author":{"gitId":"-"},"content":" .toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":69,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":70,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-24"}],"authorContributionMap":{"minghowC":1,"-":69}},{"path":"src/main/java/seedu/address/logic/commands/EditCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.commands;","lastModifiedDate":"2024-02-28"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2024-02-28"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2024-02-28"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2024-02-28"},{"lineNumber":6,"author":{"gitId":"eunrcn"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INTERN_DURATION;","lastModifiedDate":"2024-02-28"},{"lineNumber":7,"author":{"gitId":"eunrcn"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INTERVIEW_DATE;","lastModifiedDate":"2024-02-28"},{"lineNumber":8,"author":{"gitId":"eunrcn"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_JOB_DESCRIPTION;","lastModifiedDate":"2024-02-28"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2024-02-28"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2024-02-28"},{"lineNumber":11,"author":{"gitId":"eunrcn"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_SALARY;","lastModifiedDate":"2024-02-28"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2024-02-28"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import static seedu.address.model.Model.PREDICATE_SHOW_ALL_PERSONS;","lastModifiedDate":"2024-02-28"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2024-02-28"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import java.util.Objects;","lastModifiedDate":"2024-02-28"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import java.util.Optional;","lastModifiedDate":"2024-02-28"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2024-02-28"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.CollectionUtil;","lastModifiedDate":"2024-02-28"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.ToStringBuilder;","lastModifiedDate":"2024-02-28"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import seedu.address.logic.Messages;","lastModifiedDate":"2024-02-28"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.exceptions.CommandException;","lastModifiedDate":"2024-02-28"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import seedu.address.model.Model;","lastModifiedDate":"2024-02-28"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2024-02-28"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2024-02-29"},{"lineNumber":27,"author":{"gitId":"eunrcn"},"content":"import seedu.address.model.person.InternDuration;","lastModifiedDate":"2024-02-28"},{"lineNumber":28,"author":{"gitId":"eunrcn"},"content":"import seedu.address.model.person.InterviewDate;","lastModifiedDate":"2024-02-28"},{"lineNumber":29,"author":{"gitId":"Jawad280"},"content":"import seedu.address.model.person.JobDescription;","lastModifiedDate":"2024-02-29"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2024-02-28"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2024-02-28"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2024-02-28"},{"lineNumber":33,"author":{"gitId":"Jawad280"},"content":"import seedu.address.model.person.Salary;","lastModifiedDate":"2024-02-29"},{"lineNumber":34,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2024-02-28"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":36,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2024-02-28"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * Edits the details of an existing person in the address book.","lastModifiedDate":"2024-02-28"},{"lineNumber":38,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2024-02-28"},{"lineNumber":39,"author":{"gitId":"-"},"content":"public class EditCommand extends Command {","lastModifiedDate":"2024-02-28"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":41,"author":{"gitId":"-"},"content":" public static final String COMMAND_WORD \u003d \"edit\";","lastModifiedDate":"2024-02-28"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":43,"author":{"gitId":"-"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Edits the details of the person identified \"","lastModifiedDate":"2024-02-28"},{"lineNumber":44,"author":{"gitId":"-"},"content":" + \"by the index number used in the displayed person list. \"","lastModifiedDate":"2024-02-28"},{"lineNumber":45,"author":{"gitId":"-"},"content":" + \"Existing values will be overwritten by the input values.\\n\"","lastModifiedDate":"2024-02-28"},{"lineNumber":46,"author":{"gitId":"-"},"content":" + \"Parameters: INDEX (must be a positive integer) \"","lastModifiedDate":"2024-02-28"},{"lineNumber":47,"author":{"gitId":"-"},"content":" + \"[\" + PREFIX_NAME + \"NAME] \"","lastModifiedDate":"2024-02-28"},{"lineNumber":48,"author":{"gitId":"-"},"content":" + \"[\" + PREFIX_PHONE + \"PHONE] \"","lastModifiedDate":"2024-02-28"},{"lineNumber":49,"author":{"gitId":"-"},"content":" + \"[\" + PREFIX_EMAIL + \"EMAIL] \"","lastModifiedDate":"2024-02-28"},{"lineNumber":50,"author":{"gitId":"-"},"content":" + \"[\" + PREFIX_ADDRESS + \"ADDRESS] \"","lastModifiedDate":"2024-02-28"},{"lineNumber":51,"author":{"gitId":"eunrcn"},"content":" + \"[\" + PREFIX_JOB_DESCRIPTION + \"JOB DESCRIPTION] \"","lastModifiedDate":"2024-02-28"},{"lineNumber":52,"author":{"gitId":"eunrcn"},"content":" + \"[\" + PREFIX_INTERVIEW_DATE + \"INTERVIEW DATE] \"","lastModifiedDate":"2024-02-28"},{"lineNumber":53,"author":{"gitId":"eunrcn"},"content":" + \"[\" + PREFIX_INTERN_DURATION + \"INTERN DURATION] \"","lastModifiedDate":"2024-02-28"},{"lineNumber":54,"author":{"gitId":"eunrcn"},"content":" + \"[\" + PREFIX_SALARY + \"SALARY] \"","lastModifiedDate":"2024-02-28"},{"lineNumber":55,"author":{"gitId":"-"},"content":" + \"[\" + PREFIX_TAG + \"TAG]...\\n\"","lastModifiedDate":"2024-02-28"},{"lineNumber":56,"author":{"gitId":"-"},"content":" + \"Example: \" + COMMAND_WORD + \" 1 \"","lastModifiedDate":"2024-02-28"},{"lineNumber":57,"author":{"gitId":"-"},"content":" + PREFIX_PHONE + \"91234567 \"","lastModifiedDate":"2024-02-28"},{"lineNumber":58,"author":{"gitId":"-"},"content":" + PREFIX_EMAIL + \"johndoe@example.com\";","lastModifiedDate":"2024-02-28"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":60,"author":{"gitId":"-"},"content":" public static final String MESSAGE_EDIT_PERSON_SUCCESS \u003d \"Edited Person: %1$s\";","lastModifiedDate":"2024-02-28"},{"lineNumber":61,"author":{"gitId":"-"},"content":" public static final String MESSAGE_NOT_EDITED \u003d \"At least one field to edit must be provided.\";","lastModifiedDate":"2024-02-28"},{"lineNumber":62,"author":{"gitId":"-"},"content":" public static final String MESSAGE_DUPLICATE_PERSON \u003d \"This person already exists in the address book.\";","lastModifiedDate":"2024-02-28"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":64,"author":{"gitId":"-"},"content":" private final Index index;","lastModifiedDate":"2024-02-28"},{"lineNumber":65,"author":{"gitId":"-"},"content":" private final EditPersonDescriptor editPersonDescriptor;","lastModifiedDate":"2024-02-28"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":67,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2024-02-28"},{"lineNumber":68,"author":{"gitId":"-"},"content":" * @param index of the person in the filtered person list to edit","lastModifiedDate":"2024-02-28"},{"lineNumber":69,"author":{"gitId":"-"},"content":" * @param editPersonDescriptor details to edit the person with","lastModifiedDate":"2024-02-28"},{"lineNumber":70,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2024-02-28"},{"lineNumber":71,"author":{"gitId":"-"},"content":" public EditCommand(Index index, EditPersonDescriptor editPersonDescriptor) {","lastModifiedDate":"2024-02-28"},{"lineNumber":72,"author":{"gitId":"-"},"content":" requireNonNull(index);","lastModifiedDate":"2024-02-28"},{"lineNumber":73,"author":{"gitId":"-"},"content":" requireNonNull(editPersonDescriptor);","lastModifiedDate":"2024-02-28"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":75,"author":{"gitId":"-"},"content":" this.index \u003d index;","lastModifiedDate":"2024-02-28"},{"lineNumber":76,"author":{"gitId":"-"},"content":" this.editPersonDescriptor \u003d new EditPersonDescriptor(editPersonDescriptor);","lastModifiedDate":"2024-02-28"},{"lineNumber":77,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":78,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":79,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2024-02-28"},{"lineNumber":80,"author":{"gitId":"-"},"content":" public CommandResult execute(Model model) throws CommandException {","lastModifiedDate":"2024-02-28"},{"lineNumber":81,"author":{"gitId":"-"},"content":" requireNonNull(model);","lastModifiedDate":"2024-02-28"},{"lineNumber":82,"author":{"gitId":"-"},"content":" List\u003cPerson\u003e lastShownList \u003d model.getFilteredPersonList();","lastModifiedDate":"2024-02-28"},{"lineNumber":83,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":84,"author":{"gitId":"-"},"content":" if (index.getZeroBased() \u003e\u003d lastShownList.size()) {","lastModifiedDate":"2024-02-28"},{"lineNumber":85,"author":{"gitId":"-"},"content":" throw new CommandException(Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX);","lastModifiedDate":"2024-02-28"},{"lineNumber":86,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":87,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":88,"author":{"gitId":"-"},"content":" Person personToEdit \u003d lastShownList.get(index.getZeroBased());","lastModifiedDate":"2024-02-28"},{"lineNumber":89,"author":{"gitId":"-"},"content":" Person editedPerson \u003d createEditedPerson(personToEdit, editPersonDescriptor);","lastModifiedDate":"2024-02-28"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":91,"author":{"gitId":"-"},"content":" if (!personToEdit.isSamePerson(editedPerson) \u0026\u0026 model.hasPerson(editedPerson)) {","lastModifiedDate":"2024-02-28"},{"lineNumber":92,"author":{"gitId":"-"},"content":" throw new CommandException(MESSAGE_DUPLICATE_PERSON);","lastModifiedDate":"2024-02-28"},{"lineNumber":93,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":94,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":95,"author":{"gitId":"-"},"content":" model.setPerson(personToEdit, editedPerson);","lastModifiedDate":"2024-02-28"},{"lineNumber":96,"author":{"gitId":"-"},"content":" model.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS);","lastModifiedDate":"2024-02-28"},{"lineNumber":97,"author":{"gitId":"-"},"content":" return new CommandResult(String.format(MESSAGE_EDIT_PERSON_SUCCESS, Messages.format(editedPerson)));","lastModifiedDate":"2024-02-28"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":99,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":100,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2024-02-28"},{"lineNumber":101,"author":{"gitId":"-"},"content":" * Creates and returns a {@code Person} with the details of {@code personToEdit}","lastModifiedDate":"2024-02-28"},{"lineNumber":102,"author":{"gitId":"-"},"content":" * edited with {@code editPersonDescriptor}.","lastModifiedDate":"2024-02-28"},{"lineNumber":103,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2024-02-28"},{"lineNumber":104,"author":{"gitId":"-"},"content":" private static Person createEditedPerson(Person personToEdit, EditPersonDescriptor editPersonDescriptor) {","lastModifiedDate":"2024-02-28"},{"lineNumber":105,"author":{"gitId":"-"},"content":" assert personToEdit !\u003d null;","lastModifiedDate":"2024-02-28"},{"lineNumber":106,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":107,"author":{"gitId":"eunrcn"},"content":" Name updatedName \u003d editPersonDescriptor.getName().orElse(personToEdit.getCompanyName());","lastModifiedDate":"2024-02-28"},{"lineNumber":108,"author":{"gitId":"-"},"content":" Phone updatedPhone \u003d editPersonDescriptor.getPhone().orElse(personToEdit.getPhone());","lastModifiedDate":"2024-02-28"},{"lineNumber":109,"author":{"gitId":"-"},"content":" Email updatedEmail \u003d editPersonDescriptor.getEmail().orElse(personToEdit.getEmail());","lastModifiedDate":"2024-02-28"},{"lineNumber":110,"author":{"gitId":"-"},"content":" Address updatedAddress \u003d editPersonDescriptor.getAddress().orElse(personToEdit.getAddress());","lastModifiedDate":"2024-02-28"},{"lineNumber":111,"author":{"gitId":"Jawad280"},"content":" JobDescription updatedJobDescription \u003d editPersonDescriptor","lastModifiedDate":"2024-02-29"},{"lineNumber":112,"author":{"gitId":"Jawad280"},"content":" .getJobDescription()","lastModifiedDate":"2024-02-29"},{"lineNumber":113,"author":{"gitId":"Jawad280"},"content":" .orElse(personToEdit.getJobDescription());","lastModifiedDate":"2024-02-29"},{"lineNumber":114,"author":{"gitId":"Jawad280"},"content":" InterviewDate updatedInterviewDate \u003d editPersonDescriptor","lastModifiedDate":"2024-02-29"},{"lineNumber":115,"author":{"gitId":"Jawad280"},"content":" .getInterviewDate()","lastModifiedDate":"2024-02-29"},{"lineNumber":116,"author":{"gitId":"Jawad280"},"content":" .orElse(personToEdit.getInterviewDate());","lastModifiedDate":"2024-02-29"},{"lineNumber":117,"author":{"gitId":"Jawad280"},"content":" InternDuration updatedInternDuration \u003d editPersonDescriptor","lastModifiedDate":"2024-02-29"},{"lineNumber":118,"author":{"gitId":"Jawad280"},"content":" .getInternDuration()","lastModifiedDate":"2024-02-29"},{"lineNumber":119,"author":{"gitId":"Jawad280"},"content":" .orElse(personToEdit.getInternDuration());","lastModifiedDate":"2024-02-29"},{"lineNumber":120,"author":{"gitId":"eunrcn"},"content":" Salary updatedSalary \u003d editPersonDescriptor.getSalary().orElse(personToEdit.getSalary());","lastModifiedDate":"2024-02-28"},{"lineNumber":121,"author":{"gitId":"Jawad280"},"content":" Tag updatedTags \u003d editPersonDescriptor.getTag().orElse(personToEdit.getTag());","lastModifiedDate":"2024-02-29"},{"lineNumber":122,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":123,"author":{"gitId":"eunrcn"},"content":" return new Person(updatedName, updatedPhone, updatedEmail, updatedAddress, updatedTags,","lastModifiedDate":"2024-02-28"},{"lineNumber":124,"author":{"gitId":"eunrcn"},"content":" updatedJobDescription, updatedInterviewDate,","lastModifiedDate":"2024-02-28"},{"lineNumber":125,"author":{"gitId":"eunrcn"},"content":" updatedInternDuration, updatedSalary);","lastModifiedDate":"2024-02-28"},{"lineNumber":126,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":127,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":128,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2024-02-28"},{"lineNumber":129,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2024-02-28"},{"lineNumber":130,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2024-02-28"},{"lineNumber":131,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2024-02-28"},{"lineNumber":132,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":133,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":134,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2024-02-28"},{"lineNumber":135,"author":{"gitId":"-"},"content":" if (!(other instanceof EditCommand)) {","lastModifiedDate":"2024-02-28"},{"lineNumber":136,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2024-02-28"},{"lineNumber":137,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":138,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":139,"author":{"gitId":"-"},"content":" EditCommand otherEditCommand \u003d (EditCommand) other;","lastModifiedDate":"2024-02-28"},{"lineNumber":140,"author":{"gitId":"-"},"content":" return index.equals(otherEditCommand.index)","lastModifiedDate":"2024-02-28"},{"lineNumber":141,"author":{"gitId":"-"},"content":" \u0026\u0026 editPersonDescriptor.equals(otherEditCommand.editPersonDescriptor);","lastModifiedDate":"2024-02-28"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":143,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":144,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2024-02-28"},{"lineNumber":145,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2024-02-28"},{"lineNumber":146,"author":{"gitId":"-"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2024-02-28"},{"lineNumber":147,"author":{"gitId":"-"},"content":" .add(\"index\", index)","lastModifiedDate":"2024-02-28"},{"lineNumber":148,"author":{"gitId":"-"},"content":" .add(\"editPersonDescriptor\", editPersonDescriptor)","lastModifiedDate":"2024-02-28"},{"lineNumber":149,"author":{"gitId":"-"},"content":" .toString();","lastModifiedDate":"2024-02-28"},{"lineNumber":150,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":151,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":152,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2024-02-28"},{"lineNumber":153,"author":{"gitId":"-"},"content":" * Stores the details to edit the person with. Each non-empty field value will replace the","lastModifiedDate":"2024-02-28"},{"lineNumber":154,"author":{"gitId":"-"},"content":" * corresponding field value of the person.","lastModifiedDate":"2024-02-28"},{"lineNumber":155,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2024-02-28"},{"lineNumber":156,"author":{"gitId":"-"},"content":" public static class EditPersonDescriptor {","lastModifiedDate":"2024-02-28"},{"lineNumber":157,"author":{"gitId":"-"},"content":" private Name name;","lastModifiedDate":"2024-02-28"},{"lineNumber":158,"author":{"gitId":"-"},"content":" private Phone phone;","lastModifiedDate":"2024-02-28"},{"lineNumber":159,"author":{"gitId":"-"},"content":" private Email email;","lastModifiedDate":"2024-02-28"},{"lineNumber":160,"author":{"gitId":"-"},"content":" private Address address;","lastModifiedDate":"2024-02-28"},{"lineNumber":161,"author":{"gitId":"Jawad280"},"content":" private Tag tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":162,"author":{"gitId":"eunrcn"},"content":" private JobDescription jobDescription;","lastModifiedDate":"2024-02-28"},{"lineNumber":163,"author":{"gitId":"eunrcn"},"content":" private InternDuration internDuration;","lastModifiedDate":"2024-02-28"},{"lineNumber":164,"author":{"gitId":"eunrcn"},"content":" private InterviewDate interviewDate;","lastModifiedDate":"2024-02-28"},{"lineNumber":165,"author":{"gitId":"eunrcn"},"content":" private Salary salary;","lastModifiedDate":"2024-02-28"},{"lineNumber":166,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":167,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":168,"author":{"gitId":"-"},"content":" public EditPersonDescriptor() {}","lastModifiedDate":"2024-02-28"},{"lineNumber":169,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":170,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2024-02-28"},{"lineNumber":171,"author":{"gitId":"-"},"content":" * Copy constructor.","lastModifiedDate":"2024-02-28"},{"lineNumber":172,"author":{"gitId":"-"},"content":" * A defensive copy of {@code tags} is used internally.","lastModifiedDate":"2024-02-28"},{"lineNumber":173,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2024-02-28"},{"lineNumber":174,"author":{"gitId":"-"},"content":" public EditPersonDescriptor(EditPersonDescriptor toCopy) {","lastModifiedDate":"2024-02-28"},{"lineNumber":175,"author":{"gitId":"-"},"content":" setName(toCopy.name);","lastModifiedDate":"2024-02-28"},{"lineNumber":176,"author":{"gitId":"-"},"content":" setPhone(toCopy.phone);","lastModifiedDate":"2024-02-28"},{"lineNumber":177,"author":{"gitId":"-"},"content":" setEmail(toCopy.email);","lastModifiedDate":"2024-02-28"},{"lineNumber":178,"author":{"gitId":"-"},"content":" setAddress(toCopy.address);","lastModifiedDate":"2024-02-28"},{"lineNumber":179,"author":{"gitId":"Jawad280"},"content":" setTag(toCopy.tag);","lastModifiedDate":"2024-02-29"},{"lineNumber":180,"author":{"gitId":"eunrcn"},"content":" setJobDescription(toCopy.jobDescription);","lastModifiedDate":"2024-02-28"},{"lineNumber":181,"author":{"gitId":"eunrcn"},"content":" setInternDuration(toCopy.internDuration);","lastModifiedDate":"2024-02-28"},{"lineNumber":182,"author":{"gitId":"eunrcn"},"content":" setInterviewDate(toCopy.interviewDate);","lastModifiedDate":"2024-02-28"},{"lineNumber":183,"author":{"gitId":"eunrcn"},"content":" setSalary(toCopy.salary);","lastModifiedDate":"2024-02-28"},{"lineNumber":184,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":185,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":186,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2024-02-28"},{"lineNumber":187,"author":{"gitId":"-"},"content":" * Returns true if at least one field is edited.","lastModifiedDate":"2024-02-28"},{"lineNumber":188,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2024-02-28"},{"lineNumber":189,"author":{"gitId":"-"},"content":" public boolean isAnyFieldEdited() {","lastModifiedDate":"2024-02-28"},{"lineNumber":190,"author":{"gitId":"Jawad280"},"content":" return CollectionUtil.isAnyNonNull(","lastModifiedDate":"2024-02-29"},{"lineNumber":191,"author":{"gitId":"Jawad280"},"content":" name, phone, email, address, tag, jobDescription, interviewDate, internDuration, salary","lastModifiedDate":"2024-02-29"},{"lineNumber":192,"author":{"gitId":"Jawad280"},"content":" );","lastModifiedDate":"2024-02-29"},{"lineNumber":193,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":194,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":195,"author":{"gitId":"-"},"content":" public void setName(Name name) {","lastModifiedDate":"2024-02-28"},{"lineNumber":196,"author":{"gitId":"-"},"content":" this.name \u003d name;","lastModifiedDate":"2024-02-28"},{"lineNumber":197,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":198,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":199,"author":{"gitId":"-"},"content":" public Optional\u003cName\u003e getName() {","lastModifiedDate":"2024-02-28"},{"lineNumber":200,"author":{"gitId":"-"},"content":" return Optional.ofNullable(name);","lastModifiedDate":"2024-02-28"},{"lineNumber":201,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":202,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":203,"author":{"gitId":"-"},"content":" public void setPhone(Phone phone) {","lastModifiedDate":"2024-02-28"},{"lineNumber":204,"author":{"gitId":"-"},"content":" this.phone \u003d phone;","lastModifiedDate":"2024-02-28"},{"lineNumber":205,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":206,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":207,"author":{"gitId":"-"},"content":" public Optional\u003cPhone\u003e getPhone() {","lastModifiedDate":"2024-02-28"},{"lineNumber":208,"author":{"gitId":"-"},"content":" return Optional.ofNullable(phone);","lastModifiedDate":"2024-02-28"},{"lineNumber":209,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":210,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":211,"author":{"gitId":"-"},"content":" public void setEmail(Email email) {","lastModifiedDate":"2024-02-28"},{"lineNumber":212,"author":{"gitId":"-"},"content":" this.email \u003d email;","lastModifiedDate":"2024-02-28"},{"lineNumber":213,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":214,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":215,"author":{"gitId":"-"},"content":" public Optional\u003cEmail\u003e getEmail() {","lastModifiedDate":"2024-02-28"},{"lineNumber":216,"author":{"gitId":"-"},"content":" return Optional.ofNullable(email);","lastModifiedDate":"2024-02-28"},{"lineNumber":217,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":218,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":219,"author":{"gitId":"-"},"content":" public void setAddress(Address address) {","lastModifiedDate":"2024-02-28"},{"lineNumber":220,"author":{"gitId":"-"},"content":" this.address \u003d address;","lastModifiedDate":"2024-02-28"},{"lineNumber":221,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":222,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":223,"author":{"gitId":"-"},"content":" public Optional\u003cAddress\u003e getAddress() {","lastModifiedDate":"2024-02-28"},{"lineNumber":224,"author":{"gitId":"-"},"content":" return Optional.ofNullable(address);","lastModifiedDate":"2024-02-28"},{"lineNumber":225,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":226,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":227,"author":{"gitId":"eunrcn"},"content":" public void setJobDescription(JobDescription jobDescription) {","lastModifiedDate":"2024-02-28"},{"lineNumber":228,"author":{"gitId":"eunrcn"},"content":" this.jobDescription \u003d jobDescription;","lastModifiedDate":"2024-02-28"},{"lineNumber":229,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":230,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":231,"author":{"gitId":"eunrcn"},"content":" public Optional\u003cJobDescription\u003e getJobDescription() {","lastModifiedDate":"2024-02-28"},{"lineNumber":232,"author":{"gitId":"eunrcn"},"content":" return Optional.ofNullable(jobDescription);","lastModifiedDate":"2024-02-28"},{"lineNumber":233,"author":{"gitId":"eunrcn"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":234,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":235,"author":{"gitId":"eunrcn"},"content":" public void setInternDuration(InternDuration internDuration) {","lastModifiedDate":"2024-02-28"},{"lineNumber":236,"author":{"gitId":"eunrcn"},"content":" this.internDuration \u003d internDuration;","lastModifiedDate":"2024-02-28"},{"lineNumber":237,"author":{"gitId":"eunrcn"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":238,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":239,"author":{"gitId":"eunrcn"},"content":" public Optional\u003cInternDuration\u003e getInternDuration() {","lastModifiedDate":"2024-02-28"},{"lineNumber":240,"author":{"gitId":"eunrcn"},"content":" return Optional.ofNullable(internDuration);","lastModifiedDate":"2024-02-28"},{"lineNumber":241,"author":{"gitId":"eunrcn"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":242,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":243,"author":{"gitId":"eunrcn"},"content":" public void setInterviewDate(InterviewDate interviewDate) {","lastModifiedDate":"2024-02-28"},{"lineNumber":244,"author":{"gitId":"eunrcn"},"content":" this.interviewDate \u003d interviewDate;","lastModifiedDate":"2024-02-28"},{"lineNumber":245,"author":{"gitId":"eunrcn"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":246,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":247,"author":{"gitId":"eunrcn"},"content":" public Optional\u003cInterviewDate\u003e getInterviewDate() {","lastModifiedDate":"2024-02-28"},{"lineNumber":248,"author":{"gitId":"eunrcn"},"content":" return Optional.ofNullable(interviewDate);","lastModifiedDate":"2024-02-28"},{"lineNumber":249,"author":{"gitId":"eunrcn"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":250,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":251,"author":{"gitId":"eunrcn"},"content":" public void setSalary(Salary salary) {","lastModifiedDate":"2024-02-28"},{"lineNumber":252,"author":{"gitId":"eunrcn"},"content":" this.salary \u003d salary;","lastModifiedDate":"2024-02-28"},{"lineNumber":253,"author":{"gitId":"eunrcn"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":254,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":255,"author":{"gitId":"eunrcn"},"content":" public Optional\u003cSalary\u003e getSalary() {","lastModifiedDate":"2024-02-28"},{"lineNumber":256,"author":{"gitId":"eunrcn"},"content":" return Optional.ofNullable(salary);","lastModifiedDate":"2024-02-28"},{"lineNumber":257,"author":{"gitId":"eunrcn"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":258,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":259,"author":{"gitId":"Jawad280"},"content":" public void setTag(Tag tag) {","lastModifiedDate":"2024-02-29"},{"lineNumber":260,"author":{"gitId":"Jawad280"},"content":" this.tag \u003d tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":261,"author":{"gitId":"eunrcn"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":262,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":263,"author":{"gitId":"Jawad280"},"content":" public Optional\u003cTag\u003e getTag() {","lastModifiedDate":"2024-02-29"},{"lineNumber":264,"author":{"gitId":"Jawad280"},"content":" return Optional.ofNullable(tag);","lastModifiedDate":"2024-02-29"},{"lineNumber":265,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":266,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":267,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2024-02-28"},{"lineNumber":268,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2024-02-28"},{"lineNumber":269,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2024-02-28"},{"lineNumber":270,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2024-02-28"},{"lineNumber":271,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":272,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":273,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2024-02-28"},{"lineNumber":274,"author":{"gitId":"-"},"content":" if (!(other instanceof EditPersonDescriptor)) {","lastModifiedDate":"2024-02-28"},{"lineNumber":275,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2024-02-28"},{"lineNumber":276,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":277,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":278,"author":{"gitId":"-"},"content":" EditPersonDescriptor otherEditPersonDescriptor \u003d (EditPersonDescriptor) other;","lastModifiedDate":"2024-02-28"},{"lineNumber":279,"author":{"gitId":"-"},"content":" return Objects.equals(name, otherEditPersonDescriptor.name)","lastModifiedDate":"2024-02-28"},{"lineNumber":280,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(phone, otherEditPersonDescriptor.phone)","lastModifiedDate":"2024-02-28"},{"lineNumber":281,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(email, otherEditPersonDescriptor.email)","lastModifiedDate":"2024-02-28"},{"lineNumber":282,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(address, otherEditPersonDescriptor.address)","lastModifiedDate":"2024-02-28"},{"lineNumber":283,"author":{"gitId":"Jawad280"},"content":" \u0026\u0026 Objects.equals(tag, otherEditPersonDescriptor.tag)","lastModifiedDate":"2024-02-29"},{"lineNumber":284,"author":{"gitId":"eunrcn"},"content":" \u0026\u0026 Objects.equals(jobDescription, otherEditPersonDescriptor.jobDescription)","lastModifiedDate":"2024-02-28"},{"lineNumber":285,"author":{"gitId":"eunrcn"},"content":" \u0026\u0026 Objects.equals(internDuration, otherEditPersonDescriptor.internDuration)","lastModifiedDate":"2024-02-28"},{"lineNumber":286,"author":{"gitId":"eunrcn"},"content":" \u0026\u0026 Objects.equals(interviewDate, otherEditPersonDescriptor.interviewDate)","lastModifiedDate":"2024-02-28"},{"lineNumber":287,"author":{"gitId":"eunrcn"},"content":" \u0026\u0026 Objects.equals(salary, otherEditPersonDescriptor.salary);","lastModifiedDate":"2024-02-28"},{"lineNumber":288,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":289,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":290,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2024-02-28"},{"lineNumber":291,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2024-02-28"},{"lineNumber":292,"author":{"gitId":"-"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2024-02-28"},{"lineNumber":293,"author":{"gitId":"-"},"content":" .add(\"name\", name)","lastModifiedDate":"2024-02-28"},{"lineNumber":294,"author":{"gitId":"-"},"content":" .add(\"phone\", phone)","lastModifiedDate":"2024-02-28"},{"lineNumber":295,"author":{"gitId":"-"},"content":" .add(\"email\", email)","lastModifiedDate":"2024-02-28"},{"lineNumber":296,"author":{"gitId":"-"},"content":" .add(\"address\", address)","lastModifiedDate":"2024-02-28"},{"lineNumber":297,"author":{"gitId":"Jawad280"},"content":" .add(\"tag\", tag)","lastModifiedDate":"2024-02-29"},{"lineNumber":298,"author":{"gitId":"Jawad280"},"content":" .add(\"job description\", jobDescription)","lastModifiedDate":"2024-02-29"},{"lineNumber":299,"author":{"gitId":"Jawad280"},"content":" .add(\"intern duration\", internDuration)","lastModifiedDate":"2024-02-29"},{"lineNumber":300,"author":{"gitId":"Jawad280"},"content":" .add(\"interview date\", interviewDate)","lastModifiedDate":"2024-02-29"},{"lineNumber":301,"author":{"gitId":"Jawad280"},"content":" .add(\"salary\", salary)","lastModifiedDate":"2024-02-29"},{"lineNumber":302,"author":{"gitId":"-"},"content":" .toString();","lastModifiedDate":"2024-02-28"},{"lineNumber":303,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":304,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":305,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2024-02-28"}],"authorContributionMap":{"eunrcn":61,"Jawad280":27,"-":217}},{"path":"src/main/java/seedu/address/logic/commands/FindCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.commands;","lastModifiedDate":"2016-09-22"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-22"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2018-08-08"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.ToStringBuilder;","lastModifiedDate":"2019-02-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import seedu.address.logic.Messages;","lastModifiedDate":"2023-07-13"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import seedu.address.model.Model;","lastModifiedDate":"2018-08-08"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import seedu.address.model.person.NameContainsKeywordsPredicate;","lastModifiedDate":"2017-06-12"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-22"},{"lineNumber":10,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-09-22"},{"lineNumber":11,"author":{"gitId":"chenyixin0"},"content":" * Finds and lists all companies in address book whose name contains any of the argument keywords.","lastModifiedDate":"2024-02-29"},{"lineNumber":12,"author":{"gitId":"-"},"content":" * Keyword matching is case insensitive.","lastModifiedDate":"2018-04-01"},{"lineNumber":13,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-09-22"},{"lineNumber":14,"author":{"gitId":"-"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2016-09-22"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-22"},{"lineNumber":16,"author":{"gitId":"-"},"content":" public static final String COMMAND_WORD \u003d \"find\";","lastModifiedDate":"2016-09-22"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-22"},{"lineNumber":18,"author":{"gitId":"chenyixin0"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Finds all companies whose names contain any of \"","lastModifiedDate":"2024-02-29"},{"lineNumber":19,"author":{"gitId":"-"},"content":" + \"the specified keywords (case-insensitive) and displays them as a list with index numbers.\\n\"","lastModifiedDate":"2018-04-01"},{"lineNumber":20,"author":{"gitId":"-"},"content":" + \"Parameters: KEYWORD [MORE_KEYWORDS]...\\n\"","lastModifiedDate":"2016-09-22"},{"lineNumber":21,"author":{"gitId":"chenyixin0"},"content":" + \"Example: \" + COMMAND_WORD + \" food panda\";","lastModifiedDate":"2024-02-29"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-22"},{"lineNumber":23,"author":{"gitId":"-"},"content":" private final NameContainsKeywordsPredicate predicate;","lastModifiedDate":"2017-06-12"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-22"},{"lineNumber":25,"author":{"gitId":"-"},"content":" public FindCommand(NameContainsKeywordsPredicate predicate) {","lastModifiedDate":"2017-06-12"},{"lineNumber":26,"author":{"gitId":"-"},"content":" this.predicate \u003d predicate;","lastModifiedDate":"2017-06-12"},{"lineNumber":27,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-22"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-22"},{"lineNumber":29,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-09-22"},{"lineNumber":30,"author":{"gitId":"-"},"content":" public CommandResult execute(Model model) {","lastModifiedDate":"2019-01-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" requireNonNull(model);","lastModifiedDate":"2018-08-08"},{"lineNumber":32,"author":{"gitId":"-"},"content":" model.updateFilteredPersonList(predicate);","lastModifiedDate":"2024-03-01"},{"lineNumber":33,"author":{"gitId":"-"},"content":" return new CommandResult(","lastModifiedDate":"2018-04-01"},{"lineNumber":34,"author":{"gitId":"Jawad280"},"content":" String.format(","lastModifiedDate":"2024-03-01"},{"lineNumber":35,"author":{"gitId":"Jawad280"},"content":" Messages.MESSAGE_PERSONS_LISTED_OVERVIEW,","lastModifiedDate":"2024-03-01"},{"lineNumber":36,"author":{"gitId":"Jawad280"},"content":" model.generateNewFilteredPersonList(predicate).size()),","lastModifiedDate":"2024-03-01"},{"lineNumber":37,"author":{"gitId":"chenyixin0"},"content":" model.generateNewFilteredPersonList(predicate));","lastModifiedDate":"2024-02-29"},{"lineNumber":38,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-22"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-22"},{"lineNumber":40,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-06-27"},{"lineNumber":41,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2017-06-27"},{"lineNumber":42,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2023-07-13"},{"lineNumber":43,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2023-07-13"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-13"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-13"},{"lineNumber":46,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2023-07-13"},{"lineNumber":47,"author":{"gitId":"-"},"content":" if (!(other instanceof FindCommand)) {","lastModifiedDate":"2023-07-13"},{"lineNumber":48,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2023-07-13"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-13"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-13"},{"lineNumber":51,"author":{"gitId":"-"},"content":" FindCommand otherFindCommand \u003d (FindCommand) other;","lastModifiedDate":"2023-07-13"},{"lineNumber":52,"author":{"gitId":"-"},"content":" return predicate.equals(otherFindCommand.predicate);","lastModifiedDate":"2023-07-13"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-27"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2019-02-23"},{"lineNumber":56,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2019-02-23"},{"lineNumber":57,"author":{"gitId":"-"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2019-02-23"},{"lineNumber":58,"author":{"gitId":"-"},"content":" .add(\"predicate\", predicate)","lastModifiedDate":"2019-02-23"},{"lineNumber":59,"author":{"gitId":"-"},"content":" .toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":61,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-09-22"}],"authorContributionMap":{"chenyixin0":4,"Jawad280":3,"-":54}},{"path":"src/main/java/seedu/address/logic/commands/ViewCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Jawad280"},"content":"package seedu.address.logic.commands;","lastModifiedDate":"2024-02-26"},{"lineNumber":2,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":3,"author":{"gitId":"Jawad280"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2024-02-26"},{"lineNumber":4,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":5,"author":{"gitId":"Jawad280"},"content":"import java.util.List;","lastModifiedDate":"2024-02-26"},{"lineNumber":6,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":7,"author":{"gitId":"Jawad280"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"Jawad280"},"content":"import seedu.address.commons.util.ToStringBuilder;","lastModifiedDate":"2024-02-26"},{"lineNumber":9,"author":{"gitId":"Jawad280"},"content":"import seedu.address.logic.Messages;","lastModifiedDate":"2024-02-26"},{"lineNumber":10,"author":{"gitId":"Jawad280"},"content":"import seedu.address.logic.commands.exceptions.CommandException;","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"Jawad280"},"content":"import seedu.address.model.Model;","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"Jawad280"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":14,"author":{"gitId":"Jawad280"},"content":"/**","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"Jawad280"},"content":" * Views a person identified using it\u0027s displayed index from the address book.","lastModifiedDate":"2024-02-26"},{"lineNumber":16,"author":{"gitId":"Jawad280"},"content":" */","lastModifiedDate":"2024-02-26"},{"lineNumber":17,"author":{"gitId":"Jawad280"},"content":"public class ViewCommand extends Command {","lastModifiedDate":"2024-02-26"},{"lineNumber":18,"author":{"gitId":"Jawad280"},"content":" public static final String COMMAND_WORD \u003d \"view\";","lastModifiedDate":"2024-02-26"},{"lineNumber":19,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":20,"author":{"gitId":"Jawad280"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD","lastModifiedDate":"2024-02-26"},{"lineNumber":21,"author":{"gitId":"Jawad280"},"content":" + \": Views the person identified by the index number used in the displayed person list.\\n\"","lastModifiedDate":"2024-02-26"},{"lineNumber":22,"author":{"gitId":"Jawad280"},"content":" + \"Parameters: INDEX (must be a positive integer)\\n\"","lastModifiedDate":"2024-02-26"},{"lineNumber":23,"author":{"gitId":"Jawad280"},"content":" + \"Example: \" + COMMAND_WORD + \" 1\";","lastModifiedDate":"2024-02-26"},{"lineNumber":24,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":25,"author":{"gitId":"Jawad280"},"content":" public static final String MESSAGE_VIEW_PERSON_SUCCESS \u003d \"Viewing Person: %1$s\";","lastModifiedDate":"2024-02-26"},{"lineNumber":26,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":27,"author":{"gitId":"Jawad280"},"content":" private final Index targetIndex;","lastModifiedDate":"2024-02-26"},{"lineNumber":28,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":29,"author":{"gitId":"Jawad280"},"content":" public ViewCommand(Index targetIndex) {","lastModifiedDate":"2024-02-26"},{"lineNumber":30,"author":{"gitId":"Jawad280"},"content":" this.targetIndex \u003d targetIndex;","lastModifiedDate":"2024-02-26"},{"lineNumber":31,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":32,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":33,"author":{"gitId":"Jawad280"},"content":" @Override","lastModifiedDate":"2024-02-26"},{"lineNumber":34,"author":{"gitId":"Jawad280"},"content":" public CommandResult execute(Model model) throws CommandException {","lastModifiedDate":"2024-02-26"},{"lineNumber":35,"author":{"gitId":"Jawad280"},"content":" requireNonNull(model);","lastModifiedDate":"2024-02-26"},{"lineNumber":36,"author":{"gitId":"Jawad280"},"content":" List\u003cPerson\u003e lastShownList \u003d model.getFilteredPersonList();","lastModifiedDate":"2024-02-26"},{"lineNumber":37,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":38,"author":{"gitId":"Jawad280"},"content":" if (targetIndex.getZeroBased() \u003e\u003d lastShownList.size()) {","lastModifiedDate":"2024-02-26"},{"lineNumber":39,"author":{"gitId":"Jawad280"},"content":" throw new CommandException(Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX);","lastModifiedDate":"2024-02-26"},{"lineNumber":40,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":41,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":42,"author":{"gitId":"Jawad280"},"content":" Person personToView \u003d lastShownList.get(targetIndex.getZeroBased());","lastModifiedDate":"2024-02-26"},{"lineNumber":43,"author":{"gitId":"Jawad280"},"content":" return new CommandResult(","lastModifiedDate":"2024-02-26"},{"lineNumber":44,"author":{"gitId":"Jawad280"},"content":" String.format(MESSAGE_VIEW_PERSON_SUCCESS, Messages.format(personToView)),","lastModifiedDate":"2024-02-26"},{"lineNumber":45,"author":{"gitId":"Jawad280"},"content":" personToView);","lastModifiedDate":"2024-02-26"},{"lineNumber":46,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":47,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":48,"author":{"gitId":"Jawad280"},"content":" @Override","lastModifiedDate":"2024-02-26"},{"lineNumber":49,"author":{"gitId":"Jawad280"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2024-02-26"},{"lineNumber":50,"author":{"gitId":"Jawad280"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2024-02-26"},{"lineNumber":51,"author":{"gitId":"Jawad280"},"content":" return true;","lastModifiedDate":"2024-02-26"},{"lineNumber":52,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":53,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":54,"author":{"gitId":"Jawad280"},"content":" // instanceof handles nulls","lastModifiedDate":"2024-02-26"},{"lineNumber":55,"author":{"gitId":"Jawad280"},"content":" if (!(other instanceof ViewCommand)) {","lastModifiedDate":"2024-02-26"},{"lineNumber":56,"author":{"gitId":"Jawad280"},"content":" return false;","lastModifiedDate":"2024-02-26"},{"lineNumber":57,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":58,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":59,"author":{"gitId":"Jawad280"},"content":" ViewCommand otherViewCommand \u003d (ViewCommand) other;","lastModifiedDate":"2024-02-26"},{"lineNumber":60,"author":{"gitId":"Jawad280"},"content":" return targetIndex.equals(otherViewCommand.targetIndex);","lastModifiedDate":"2024-02-26"},{"lineNumber":61,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":62,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":63,"author":{"gitId":"Jawad280"},"content":" @Override","lastModifiedDate":"2024-02-26"},{"lineNumber":64,"author":{"gitId":"Jawad280"},"content":" public String toString() {","lastModifiedDate":"2024-02-26"},{"lineNumber":65,"author":{"gitId":"Jawad280"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2024-02-26"},{"lineNumber":66,"author":{"gitId":"Jawad280"},"content":" .add(\"targetIndex\", targetIndex)","lastModifiedDate":"2024-02-26"},{"lineNumber":67,"author":{"gitId":"Jawad280"},"content":" .toString();","lastModifiedDate":"2024-02-26"},{"lineNumber":68,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":69,"author":{"gitId":"Jawad280"},"content":"}","lastModifiedDate":"2024-02-26"}],"authorContributionMap":{"Jawad280":69}},{"path":"src/main/java/seedu/address/logic/parser/AddCommandParser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-02-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-07-13"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2017-02-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2017-02-05"},{"lineNumber":6,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INTERN_DURATION;","lastModifiedDate":"2024-02-25"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INTERVIEW_DATE;","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_JOB_DESCRIPTION;","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2017-06-06"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2017-02-05"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_SALARY;","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import java.util.stream.Stream;","lastModifiedDate":"2017-03-17"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.AddCommand;","lastModifiedDate":"2017-02-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2017-03-11"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2024-02-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2024-02-25"},{"lineNumber":20,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.InternDuration;","lastModifiedDate":"2024-02-25"},{"lineNumber":21,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.InterviewDate;","lastModifiedDate":"2024-02-25"},{"lineNumber":22,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.JobDescription;","lastModifiedDate":"2024-02-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2024-02-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2024-02-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2024-02-25"},{"lineNumber":26,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.Salary;","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-03-17"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":29,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-02-05"},{"lineNumber":30,"author":{"gitId":"-"},"content":" * Parses input arguments and creates a new AddCommand object","lastModifiedDate":"2017-02-05"},{"lineNumber":31,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":"public class AddCommandParser implements Parser\u003cAddCommand\u003e {","lastModifiedDate":"2017-07-06"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-02-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * Parses the given {@code String} of arguments in the context of the AddCommand","lastModifiedDate":"2017-02-05"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * and returns an AddCommand object for execution.","lastModifiedDate":"2017-02-05"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * @throws ParseException if the user input does not conform the expected format","lastModifiedDate":"2017-03-11"},{"lineNumber":38,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":" public AddCommand parse(String args) throws ParseException {","lastModifiedDate":"2017-03-11"},{"lineNumber":40,"author":{"gitId":"-"},"content":" ArgumentMultimap argMultimap \u003d","lastModifiedDate":"2017-03-20"},{"lineNumber":41,"author":{"gitId":"ashleygoh1"},"content":" ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS, PREFIX_TAG,","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":" PREFIX_JOB_DESCRIPTION, PREFIX_INTERVIEW_DATE, PREFIX_INTERN_DURATION, PREFIX_SALARY);","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-17"},{"lineNumber":44,"author":{"gitId":"ashleygoh1"},"content":" if (!arePrefixesPresent(argMultimap, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_TAG,","lastModifiedDate":"2024-02-26"},{"lineNumber":45,"author":{"gitId":"ashleygoh1"},"content":" PREFIX_JOB_DESCRIPTION, PREFIX_INTERN_DURATION, PREFIX_SALARY)","lastModifiedDate":"2024-02-26"},{"lineNumber":46,"author":{"gitId":"-"},"content":" || !argMultimap.getPreamble().isEmpty()) {","lastModifiedDate":"2017-12-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":" throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddCommand.MESSAGE_USAGE));","lastModifiedDate":"2017-03-11"},{"lineNumber":48,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-03-17"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-17"},{"lineNumber":50,"author":{"gitId":"ashleygoh1"},"content":" argMultimap.verifyNoDuplicatePrefixesFor(PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS,","lastModifiedDate":"2024-02-26"},{"lineNumber":51,"author":{"gitId":"ashleygoh1"},"content":" PREFIX_TAG, PREFIX_JOB_DESCRIPTION, PREFIX_INTERVIEW_DATE, PREFIX_INTERN_DURATION,","lastModifiedDate":"2024-02-26"},{"lineNumber":52,"author":{"gitId":"ashleygoh1"},"content":" PREFIX_SALARY);","lastModifiedDate":"2024-02-26"},{"lineNumber":53,"author":{"gitId":"-"},"content":" Name name \u003d ParserUtil.parseName(argMultimap.getValue(PREFIX_NAME).get());","lastModifiedDate":"2018-07-10"},{"lineNumber":54,"author":{"gitId":"-"},"content":" Phone phone \u003d ParserUtil.parsePhone(argMultimap.getValue(PREFIX_PHONE).get());","lastModifiedDate":"2018-07-10"},{"lineNumber":55,"author":{"gitId":"-"},"content":" Email email \u003d ParserUtil.parseEmail(argMultimap.getValue(PREFIX_EMAIL).get());","lastModifiedDate":"2018-07-10"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":57,"author":{"gitId":"ashleygoh1"},"content":" Address address;","lastModifiedDate":"2024-02-26"},{"lineNumber":58,"author":{"gitId":"ashleygoh1"},"content":" if (argMultimap.getValue(PREFIX_ADDRESS).isPresent()) {","lastModifiedDate":"2024-02-26"},{"lineNumber":59,"author":{"gitId":"ashleygoh1"},"content":" try {","lastModifiedDate":"2024-02-26"},{"lineNumber":60,"author":{"gitId":"ashleygoh1"},"content":" address \u003d ParserUtil.parseAddress(argMultimap.getValue(PREFIX_ADDRESS).get());","lastModifiedDate":"2024-02-26"},{"lineNumber":61,"author":{"gitId":"ashleygoh1"},"content":" } catch (ParseException e) {","lastModifiedDate":"2024-02-26"},{"lineNumber":62,"author":{"gitId":"ashleygoh1"},"content":" throw new ParseException(\"Error parsing address: \" + e.getMessage());","lastModifiedDate":"2024-02-26"},{"lineNumber":63,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":64,"author":{"gitId":"ashleygoh1"},"content":" } else {","lastModifiedDate":"2024-02-26"},{"lineNumber":65,"author":{"gitId":"ashleygoh1"},"content":" address \u003d new Address(\"\"); // Provide a default empty address if not provided","lastModifiedDate":"2024-02-26"},{"lineNumber":66,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":67,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":68,"author":{"gitId":"ashleygoh1"},"content":" Tag tag \u003d ParserUtil.parseTag(argMultimap.getValue(PREFIX_TAG).get());","lastModifiedDate":"2024-02-25"},{"lineNumber":69,"author":{"gitId":"ashleygoh1"},"content":" JobDescription jobDescription \u003d ParserUtil.parseJobDescription(","lastModifiedDate":"2024-02-25"},{"lineNumber":70,"author":{"gitId":"ashleygoh1"},"content":" argMultimap.getValue(PREFIX_JOB_DESCRIPTION).get());","lastModifiedDate":"2024-02-25"},{"lineNumber":71,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":72,"author":{"gitId":"ashleygoh1"},"content":" InterviewDate interviewDate \u003d new InterviewDate(null);","lastModifiedDate":"2024-02-26"},{"lineNumber":73,"author":{"gitId":"ashleygoh1"},"content":" if (argMultimap.getValue(PREFIX_INTERVIEW_DATE).isPresent()) {","lastModifiedDate":"2024-02-26"},{"lineNumber":74,"author":{"gitId":"ashleygoh1"},"content":" try {","lastModifiedDate":"2024-02-26"},{"lineNumber":75,"author":{"gitId":"ashleygoh1"},"content":" String givenDate \u003d argMultimap.getValue(PREFIX_INTERVIEW_DATE).get();","lastModifiedDate":"2024-02-26"},{"lineNumber":76,"author":{"gitId":"ashleygoh1"},"content":" if (!givenDate.isEmpty()) {","lastModifiedDate":"2024-02-26"},{"lineNumber":77,"author":{"gitId":"ashleygoh1"},"content":" interviewDate \u003d ParserUtil.parseInterviewDate(givenDate);","lastModifiedDate":"2024-02-26"},{"lineNumber":78,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":79,"author":{"gitId":"ashleygoh1"},"content":" } catch (ParseException e) {","lastModifiedDate":"2024-02-26"},{"lineNumber":80,"author":{"gitId":"ashleygoh1"},"content":" throw new ParseException(\"Error parsing interview date: \" + e.getMessage());","lastModifiedDate":"2024-02-26"},{"lineNumber":81,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":82,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":83,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":84,"author":{"gitId":"ashleygoh1"},"content":" InternDuration internDuration \u003d ParserUtil.parseInternDuration(","lastModifiedDate":"2024-02-25"},{"lineNumber":85,"author":{"gitId":"ashleygoh1"},"content":" argMultimap.getValue(PREFIX_INTERN_DURATION).get());","lastModifiedDate":"2024-02-25"},{"lineNumber":86,"author":{"gitId":"ashleygoh1"},"content":" Salary salary \u003d ParserUtil.parseSalary(argMultimap.getValue(PREFIX_SALARY).get());","lastModifiedDate":"2024-02-25"},{"lineNumber":87,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-17"},{"lineNumber":88,"author":{"gitId":"ashleygoh1"},"content":" Person person \u003d new Person(name, phone, email, address, tag,","lastModifiedDate":"2024-02-25"},{"lineNumber":89,"author":{"gitId":"ashleygoh1"},"content":" jobDescription, interviewDate, internDuration, salary);","lastModifiedDate":"2024-02-25"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-17"},{"lineNumber":91,"author":{"gitId":"-"},"content":" return new AddCommand(person);","lastModifiedDate":"2017-03-17"},{"lineNumber":92,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-05"},{"lineNumber":93,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":94,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-03-17"},{"lineNumber":95,"author":{"gitId":"-"},"content":" * Returns true if none of the prefixes contains empty {@code Optional} values in the given","lastModifiedDate":"2017-03-17"},{"lineNumber":96,"author":{"gitId":"-"},"content":" * {@code ArgumentMultimap}.","lastModifiedDate":"2017-03-17"},{"lineNumber":97,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-03-17"},{"lineNumber":98,"author":{"gitId":"-"},"content":" private static boolean arePrefixesPresent(ArgumentMultimap argumentMultimap, Prefix... prefixes) {","lastModifiedDate":"2017-03-17"},{"lineNumber":99,"author":{"gitId":"-"},"content":" return Stream.of(prefixes).allMatch(prefix -\u003e argumentMultimap.getValue(prefix).isPresent());","lastModifiedDate":"2017-03-17"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-03-17"},{"lineNumber":101,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-17"},{"lineNumber":102,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-02-05"}],"authorContributionMap":{"ashleygoh1":47,"-":55}},{"path":"src/main/java/seedu/address/logic/parser/AddressBookParser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2016-09-22"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-07-13"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_UNKNOWN_COMMAND;","lastModifiedDate":"2023-07-13"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-19"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-07-29"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2017-01-19"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2017-01-19"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-19"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.LogsCenter;","lastModifiedDate":"2023-07-29"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.AddCommand;","lastModifiedDate":"2017-01-18"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.ClearCommand;","lastModifiedDate":"2024-02-29"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.Command;","lastModifiedDate":"2017-01-18"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.DeleteCommand;","lastModifiedDate":"2024-03-01"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand;","lastModifiedDate":"2024-02-29"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.ExitCommand;","lastModifiedDate":"2024-02-29"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.FindCommand;","lastModifiedDate":"2024-02-29"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.HelpCommand;","lastModifiedDate":"2017-01-18"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.ListCommand;","lastModifiedDate":"2024-02-26"},{"lineNumber":20,"author":{"gitId":"Jawad280"},"content":"import seedu.address.logic.commands.ViewCommand;","lastModifiedDate":"2024-02-29"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2017-03-11"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":23,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-24"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * Parses user input.","lastModifiedDate":"2016-08-24"},{"lineNumber":25,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":26,"author":{"gitId":"-"},"content":"public class AddressBookParser {","lastModifiedDate":"2017-07-07"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":28,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-08-24"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * Used for initial separation of command word and args.","lastModifiedDate":"2016-08-24"},{"lineNumber":30,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":31,"author":{"gitId":"-"},"content":" private static final Pattern BASIC_COMMAND_FORMAT \u003d Pattern.compile(\"(?\u003ccommandWord\u003e\\\\S+)(?\u003carguments\u003e.*)\");","lastModifiedDate":"2016-09-22"},{"lineNumber":32,"author":{"gitId":"-"},"content":" private static final Logger logger \u003d LogsCenter.getLogger(AddressBookParser.class);","lastModifiedDate":"2023-07-29"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":34,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-08-24"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * Parses user input into command for execution.","lastModifiedDate":"2016-08-24"},{"lineNumber":36,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2016-08-24"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * @param userInput full user input string","lastModifiedDate":"2016-08-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":" * @return the command based on the user input","lastModifiedDate":"2016-08-24"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * @throws ParseException if the user input does not conform the expected format","lastModifiedDate":"2017-03-11"},{"lineNumber":40,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":41,"author":{"gitId":"-"},"content":" public Command parseCommand(String userInput) throws ParseException {","lastModifiedDate":"2017-03-11"},{"lineNumber":42,"author":{"gitId":"-"},"content":" final Matcher matcher \u003d BASIC_COMMAND_FORMAT.matcher(userInput.trim());","lastModifiedDate":"2016-08-24"},{"lineNumber":43,"author":{"gitId":"-"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2016-08-24"},{"lineNumber":44,"author":{"gitId":"-"},"content":" throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, HelpCommand.MESSAGE_USAGE));","lastModifiedDate":"2017-03-11"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":47,"author":{"gitId":"-"},"content":" final String commandWord \u003d matcher.group(\"commandWord\");","lastModifiedDate":"2016-08-24"},{"lineNumber":48,"author":{"gitId":"-"},"content":" final String arguments \u003d matcher.group(\"arguments\");","lastModifiedDate":"2016-08-24"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-29"},{"lineNumber":50,"author":{"gitId":"-"},"content":" // Note to developers: Change the log level in config.json to enable lower level (i.e., FINE, FINER and lower)","lastModifiedDate":"2023-07-29"},{"lineNumber":51,"author":{"gitId":"-"},"content":" // log messages such as the one below.","lastModifiedDate":"2023-07-29"},{"lineNumber":52,"author":{"gitId":"-"},"content":" // Lower level log messages are used sparingly to minimize noise in the code.","lastModifiedDate":"2023-07-29"},{"lineNumber":53,"author":{"gitId":"-"},"content":" logger.fine(\"Command word: \" + commandWord + \"; Arguments: \" + arguments);","lastModifiedDate":"2023-07-29"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-29"},{"lineNumber":55,"author":{"gitId":"-"},"content":" switch (commandWord) {","lastModifiedDate":"2016-08-24"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":57,"author":{"gitId":"-"},"content":" case AddCommand.COMMAND_WORD:","lastModifiedDate":"2016-09-21"},{"lineNumber":58,"author":{"gitId":"-"},"content":" return new AddCommandParser().parse(arguments);","lastModifiedDate":"2017-02-05"},{"lineNumber":59,"author":{"gitId":"-"},"content":" case FindCommand.COMMAND_WORD:","lastModifiedDate":"2024-02-26"},{"lineNumber":60,"author":{"gitId":"-"},"content":" return new FindCommandParser().parse(arguments);","lastModifiedDate":"2024-02-26"},{"lineNumber":61,"author":{"gitId":"-"},"content":" case ListCommand.COMMAND_WORD:","lastModifiedDate":"2024-02-26"},{"lineNumber":62,"author":{"gitId":"-"},"content":" return new ListCommand();","lastModifiedDate":"2024-02-26"},{"lineNumber":63,"author":{"gitId":"minghowC"},"content":" case DeleteCommand.COMMAND_WORD:","lastModifiedDate":"2024-03-01"},{"lineNumber":64,"author":{"gitId":"minghowC"},"content":" return new DeleteCommandParser().parse(arguments);","lastModifiedDate":"2024-03-01"},{"lineNumber":65,"author":{"gitId":"Jawad280"},"content":" case ViewCommand.COMMAND_WORD:","lastModifiedDate":"2024-02-26"},{"lineNumber":66,"author":{"gitId":"Jawad280"},"content":" return new ViewCommandParser().parse(arguments);","lastModifiedDate":"2024-02-26"},{"lineNumber":67,"author":{"gitId":"eunrcn"},"content":" case EditCommand.COMMAND_WORD:","lastModifiedDate":"2024-02-28"},{"lineNumber":68,"author":{"gitId":"eunrcn"},"content":" return new EditCommandParser().parse(arguments);","lastModifiedDate":"2024-02-28"},{"lineNumber":69,"author":{"gitId":"ashleygoh1"},"content":" case ClearCommand.COMMAND_WORD:","lastModifiedDate":"2024-02-27"},{"lineNumber":70,"author":{"gitId":"ashleygoh1"},"content":" return new ClearCommand();","lastModifiedDate":"2024-02-27"},{"lineNumber":71,"author":{"gitId":"-"},"content":" case ExitCommand.COMMAND_WORD:","lastModifiedDate":"2024-02-27"},{"lineNumber":72,"author":{"gitId":"-"},"content":" return new ExitCommand();","lastModifiedDate":"2024-02-27"},{"lineNumber":73,"author":{"gitId":"-"},"content":" case HelpCommand.COMMAND_WORD:","lastModifiedDate":"2024-02-27"},{"lineNumber":74,"author":{"gitId":"-"},"content":" return new HelpCommand();","lastModifiedDate":"2024-02-27"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":76,"author":{"gitId":"-"},"content":" default:","lastModifiedDate":"2016-08-26"},{"lineNumber":77,"author":{"gitId":"-"},"content":" logger.finer(\"This user input caused a ParseException: \" + userInput);","lastModifiedDate":"2023-07-29"},{"lineNumber":78,"author":{"gitId":"-"},"content":" throw new ParseException(MESSAGE_UNKNOWN_COMMAND);","lastModifiedDate":"2017-03-11"},{"lineNumber":79,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":80,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":81,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":82,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-24"}],"authorContributionMap":{"eunrcn":2,"minghowC":2,"Jawad280":3,"ashleygoh1":2,"-":73}},{"path":"src/main/java/seedu/address/logic/parser/CliSyntax.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-02-11"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":3,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-02-11"},{"lineNumber":4,"author":{"gitId":"-"},"content":" * Contains Command Line Interface (CLI) syntax definitions common to multiple commands","lastModifiedDate":"2017-02-11"},{"lineNumber":5,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-11"},{"lineNumber":6,"author":{"gitId":"-"},"content":"public class CliSyntax {","lastModifiedDate":"2017-02-11"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":8,"author":{"gitId":"-"},"content":" /* Prefix definitions */","lastModifiedDate":"2017-02-11"},{"lineNumber":9,"author":{"gitId":"eunrcn"},"content":" public static final Prefix PREFIX_INDEX \u003d new Prefix(\"i/\");","lastModifiedDate":"2024-02-28"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":" public static final Prefix PREFIX_NAME \u003d new Prefix(\"c/\");","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":" public static final Prefix PREFIX_PHONE \u003d new Prefix(\"p/\");","lastModifiedDate":"2017-02-11"},{"lineNumber":12,"author":{"gitId":"-"},"content":" public static final Prefix PREFIX_EMAIL \u003d new Prefix(\"e/\");","lastModifiedDate":"2017-02-11"},{"lineNumber":13,"author":{"gitId":"-"},"content":" public static final Prefix PREFIX_ADDRESS \u003d new Prefix(\"a/\");","lastModifiedDate":"2017-02-11"},{"lineNumber":14,"author":{"gitId":"-"},"content":" public static final Prefix PREFIX_TAG \u003d new Prefix(\"t/\");","lastModifiedDate":"2017-02-11"},{"lineNumber":15,"author":{"gitId":"ashleygoh1"},"content":" public static final Prefix PREFIX_JOB_DESCRIPTION \u003d new Prefix(\"jd/\");","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"ashleygoh1"},"content":" public static final Prefix PREFIX_INTERVIEW_DATE \u003d new Prefix(\"d/\");","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"ashleygoh1"},"content":" public static final Prefix PREFIX_INTERN_DURATION \u003d new Prefix(\"id/\");","lastModifiedDate":"2024-02-25"},{"lineNumber":18,"author":{"gitId":"ashleygoh1"},"content":" public static final Prefix PREFIX_SALARY \u003d new Prefix(\"s/\");","lastModifiedDate":"2024-02-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":20,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-02-11"}],"authorContributionMap":{"eunrcn":1,"ashleygoh1":5,"-":14}},{"path":"src/main/java/seedu/address/logic/parser/EditCommandParser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2024-02-28"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2024-02-28"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2024-02-28"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2024-02-28"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2024-02-28"},{"lineNumber":7,"author":{"gitId":"eunrcn"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INTERN_DURATION;","lastModifiedDate":"2024-02-28"},{"lineNumber":8,"author":{"gitId":"eunrcn"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INTERVIEW_DATE;","lastModifiedDate":"2024-02-28"},{"lineNumber":9,"author":{"gitId":"eunrcn"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_JOB_DESCRIPTION;","lastModifiedDate":"2024-02-28"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2024-02-28"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2024-02-28"},{"lineNumber":12,"author":{"gitId":"eunrcn"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_SALARY;","lastModifiedDate":"2024-02-28"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2024-02-28"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import java.util.Collection;","lastModifiedDate":"2024-02-28"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import java.util.Collections;","lastModifiedDate":"2024-02-28"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import java.util.Optional;","lastModifiedDate":"2024-02-28"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2024-02-28"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2024-02-28"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand;","lastModifiedDate":"2024-02-28"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand.EditPersonDescriptor;","lastModifiedDate":"2024-02-28"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2024-02-28"},{"lineNumber":24,"author":{"gitId":"Jawad280"},"content":"import seedu.address.model.person.InterviewDate;","lastModifiedDate":"2024-02-29"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2024-02-28"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":27,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":28,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2024-02-28"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * Parses input arguments and creates a new EditCommand object","lastModifiedDate":"2024-02-28"},{"lineNumber":30,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2024-02-28"},{"lineNumber":31,"author":{"gitId":"-"},"content":"public class EditCommandParser implements Parser\u003cEditCommand\u003e {","lastModifiedDate":"2024-02-28"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":33,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2024-02-28"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * Parses the given {@code String} of arguments in the context of the EditCommand","lastModifiedDate":"2024-02-28"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * and returns an EditCommand object for execution.","lastModifiedDate":"2024-02-28"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * @throws ParseException if the user input does not conform the expected format","lastModifiedDate":"2024-02-28"},{"lineNumber":37,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2024-02-28"},{"lineNumber":38,"author":{"gitId":"-"},"content":" public EditCommand parse(String args) throws ParseException {","lastModifiedDate":"2024-02-28"},{"lineNumber":39,"author":{"gitId":"-"},"content":" requireNonNull(args);","lastModifiedDate":"2024-02-28"},{"lineNumber":40,"author":{"gitId":"-"},"content":" ArgumentMultimap argMultimap \u003d","lastModifiedDate":"2024-02-28"},{"lineNumber":41,"author":{"gitId":"eunrcn"},"content":" ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS, PREFIX_TAG,","lastModifiedDate":"2024-02-28"},{"lineNumber":42,"author":{"gitId":"eunrcn"},"content":" PREFIX_JOB_DESCRIPTION, PREFIX_INTERVIEW_DATE, PREFIX_INTERN_DURATION, PREFIX_SALARY);","lastModifiedDate":"2024-02-28"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":44,"author":{"gitId":"-"},"content":" Index index;","lastModifiedDate":"2024-02-28"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":46,"author":{"gitId":"-"},"content":" try {","lastModifiedDate":"2024-02-28"},{"lineNumber":47,"author":{"gitId":"-"},"content":" index \u003d ParserUtil.parseIndex(argMultimap.getPreamble());","lastModifiedDate":"2024-02-28"},{"lineNumber":48,"author":{"gitId":"-"},"content":" } catch (ParseException pe) {","lastModifiedDate":"2024-02-28"},{"lineNumber":49,"author":{"gitId":"-"},"content":" throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, EditCommand.MESSAGE_USAGE), pe);","lastModifiedDate":"2024-02-28"},{"lineNumber":50,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":52,"author":{"gitId":"eunrcn"},"content":" argMultimap.verifyNoDuplicatePrefixesFor(PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS,","lastModifiedDate":"2024-02-28"},{"lineNumber":53,"author":{"gitId":"eunrcn"},"content":" PREFIX_TAG, PREFIX_JOB_DESCRIPTION, PREFIX_INTERVIEW_DATE, PREFIX_INTERN_DURATION,","lastModifiedDate":"2024-02-28"},{"lineNumber":54,"author":{"gitId":"eunrcn"},"content":" PREFIX_SALARY);","lastModifiedDate":"2024-02-28"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":56,"author":{"gitId":"-"},"content":" EditPersonDescriptor editPersonDescriptor \u003d new EditPersonDescriptor();","lastModifiedDate":"2024-02-28"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":58,"author":{"gitId":"-"},"content":" if (argMultimap.getValue(PREFIX_NAME).isPresent()) {","lastModifiedDate":"2024-02-28"},{"lineNumber":59,"author":{"gitId":"-"},"content":" editPersonDescriptor.setName(ParserUtil.parseName(argMultimap.getValue(PREFIX_NAME).get()));","lastModifiedDate":"2024-02-28"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":61,"author":{"gitId":"-"},"content":" if (argMultimap.getValue(PREFIX_PHONE).isPresent()) {","lastModifiedDate":"2024-02-28"},{"lineNumber":62,"author":{"gitId":"-"},"content":" editPersonDescriptor.setPhone(ParserUtil.parsePhone(argMultimap.getValue(PREFIX_PHONE).get()));","lastModifiedDate":"2024-02-28"},{"lineNumber":63,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":64,"author":{"gitId":"-"},"content":" if (argMultimap.getValue(PREFIX_EMAIL).isPresent()) {","lastModifiedDate":"2024-02-28"},{"lineNumber":65,"author":{"gitId":"-"},"content":" editPersonDescriptor.setEmail(ParserUtil.parseEmail(argMultimap.getValue(PREFIX_EMAIL).get()));","lastModifiedDate":"2024-02-28"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":67,"author":{"gitId":"-"},"content":" if (argMultimap.getValue(PREFIX_ADDRESS).isPresent()) {","lastModifiedDate":"2024-02-28"},{"lineNumber":68,"author":{"gitId":"-"},"content":" editPersonDescriptor.setAddress(ParserUtil.parseAddress(argMultimap.getValue(PREFIX_ADDRESS).get()));","lastModifiedDate":"2024-02-28"},{"lineNumber":69,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":70,"author":{"gitId":"eunrcn"},"content":" if (argMultimap.getValue(PREFIX_JOB_DESCRIPTION).isPresent()) {","lastModifiedDate":"2024-02-28"},{"lineNumber":71,"author":{"gitId":"Jawad280"},"content":" editPersonDescriptor.setJobDescription(","lastModifiedDate":"2024-02-29"},{"lineNumber":72,"author":{"gitId":"Jawad280"},"content":" ParserUtil.parseJobDescription(argMultimap.getValue(PREFIX_JOB_DESCRIPTION).get())","lastModifiedDate":"2024-02-29"},{"lineNumber":73,"author":{"gitId":"Jawad280"},"content":" );","lastModifiedDate":"2024-02-29"},{"lineNumber":74,"author":{"gitId":"eunrcn"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":75,"author":{"gitId":"eunrcn"},"content":" if (argMultimap.getValue(PREFIX_INTERVIEW_DATE).isPresent()) {","lastModifiedDate":"2024-02-28"},{"lineNumber":76,"author":{"gitId":"Jawad280"},"content":" String givenDate \u003d argMultimap.getValue(PREFIX_INTERVIEW_DATE).get();","lastModifiedDate":"2024-02-29"},{"lineNumber":77,"author":{"gitId":"Jawad280"},"content":" if (!givenDate.isEmpty()) {","lastModifiedDate":"2024-02-29"},{"lineNumber":78,"author":{"gitId":"Jawad280"},"content":" editPersonDescriptor.setInterviewDate(","lastModifiedDate":"2024-02-29"},{"lineNumber":79,"author":{"gitId":"Jawad280"},"content":" ParserUtil.parseInterviewDate(argMultimap.getValue(PREFIX_INTERVIEW_DATE).get())","lastModifiedDate":"2024-02-29"},{"lineNumber":80,"author":{"gitId":"Jawad280"},"content":" );","lastModifiedDate":"2024-02-29"},{"lineNumber":81,"author":{"gitId":"Jawad280"},"content":" } else {","lastModifiedDate":"2024-02-29"},{"lineNumber":82,"author":{"gitId":"Jawad280"},"content":" editPersonDescriptor.setInterviewDate(new InterviewDate(null));","lastModifiedDate":"2024-02-29"},{"lineNumber":83,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":84,"author":{"gitId":"eunrcn"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":85,"author":{"gitId":"eunrcn"},"content":" if (argMultimap.getValue(PREFIX_INTERN_DURATION).isPresent()) {","lastModifiedDate":"2024-02-28"},{"lineNumber":86,"author":{"gitId":"Jawad280"},"content":" editPersonDescriptor.setInternDuration(","lastModifiedDate":"2024-02-29"},{"lineNumber":87,"author":{"gitId":"Jawad280"},"content":" ParserUtil.parseInternDuration(argMultimap.getValue(PREFIX_INTERN_DURATION).get())","lastModifiedDate":"2024-02-29"},{"lineNumber":88,"author":{"gitId":"Jawad280"},"content":" );","lastModifiedDate":"2024-02-29"},{"lineNumber":89,"author":{"gitId":"eunrcn"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":90,"author":{"gitId":"eunrcn"},"content":" if (argMultimap.getValue(PREFIX_SALARY).isPresent()) {","lastModifiedDate":"2024-02-28"},{"lineNumber":91,"author":{"gitId":"eunrcn"},"content":" editPersonDescriptor.setSalary(ParserUtil.parseSalary(argMultimap.getValue(PREFIX_SALARY).get()));","lastModifiedDate":"2024-02-28"},{"lineNumber":92,"author":{"gitId":"eunrcn"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":93,"author":{"gitId":"eunrcn"},"content":" if (argMultimap.getValue(PREFIX_TAG).isPresent()) {","lastModifiedDate":"2024-02-28"},{"lineNumber":94,"author":{"gitId":"Jawad280"},"content":" editPersonDescriptor.setTag(ParserUtil.parseTag(argMultimap.getValue(PREFIX_TAG).get()));","lastModifiedDate":"2024-02-29"},{"lineNumber":95,"author":{"gitId":"eunrcn"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":96,"author":{"gitId":"-"},"content":" if (!editPersonDescriptor.isAnyFieldEdited()) {","lastModifiedDate":"2024-02-28"},{"lineNumber":97,"author":{"gitId":"-"},"content":" throw new ParseException(EditCommand.MESSAGE_NOT_EDITED);","lastModifiedDate":"2024-02-28"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":99,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":100,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":101,"author":{"gitId":"-"},"content":" return new EditCommand(index, editPersonDescriptor);","lastModifiedDate":"2024-02-28"},{"lineNumber":102,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":104,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2024-02-28"},{"lineNumber":105,"author":{"gitId":"-"},"content":" * Parses {@code Collection\u003cString\u003e tags} into a {@code Set\u003cTag\u003e} if {@code tags} is non-empty.","lastModifiedDate":"2024-02-28"},{"lineNumber":106,"author":{"gitId":"-"},"content":" * If {@code tags} contain only one element which is an empty string, it will be parsed into a","lastModifiedDate":"2024-02-28"},{"lineNumber":107,"author":{"gitId":"-"},"content":" * {@code Set\u003cTag\u003e} containing zero tags.","lastModifiedDate":"2024-02-28"},{"lineNumber":108,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2024-02-28"},{"lineNumber":109,"author":{"gitId":"-"},"content":" private Optional\u003cSet\u003cTag\u003e\u003e parseTagsForEdit(Collection\u003cString\u003e tags) throws ParseException {","lastModifiedDate":"2024-02-28"},{"lineNumber":110,"author":{"gitId":"-"},"content":" assert tags !\u003d null;","lastModifiedDate":"2024-02-28"},{"lineNumber":111,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":112,"author":{"gitId":"-"},"content":" if (tags.isEmpty()) {","lastModifiedDate":"2024-02-28"},{"lineNumber":113,"author":{"gitId":"-"},"content":" return Optional.empty();","lastModifiedDate":"2024-02-28"},{"lineNumber":114,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":115,"author":{"gitId":"-"},"content":" Collection\u003cString\u003e tagSet \u003d tags.size() \u003d\u003d 1 \u0026\u0026 tags.contains(\"\") ? Collections.emptySet() : tags;","lastModifiedDate":"2024-02-28"},{"lineNumber":116,"author":{"gitId":"-"},"content":" return Optional.of(ParserUtil.parseTags(tagSet));","lastModifiedDate":"2024-02-28"},{"lineNumber":117,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":118,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":119,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2024-02-28"}],"authorContributionMap":{"eunrcn":22,"Jawad280":16,"-":81}},{"path":"src/main/java/seedu/address/logic/parser/ParserUtil.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-02-11"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2017-05-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.Collection;","lastModifiedDate":"2024-02-29"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.HashSet;","lastModifiedDate":"2024-02-29"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2024-02-29"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2017-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.StringUtil;","lastModifiedDate":"2017-02-11"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2018-07-10"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.InternDuration;","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.InterviewDate;","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.JobDescription;","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2024-02-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2024-02-25"},{"lineNumber":19,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.Salary;","lastModifiedDate":"2024-02-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-02-11"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":22,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-02-11"},{"lineNumber":23,"author":{"gitId":"-"},"content":" * Contains utility methods used for parsing strings in the various *Parser classes.","lastModifiedDate":"2017-07-18"},{"lineNumber":24,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-11"},{"lineNumber":25,"author":{"gitId":"-"},"content":"public class ParserUtil {","lastModifiedDate":"2017-02-11"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":27,"author":{"gitId":"-"},"content":" public static final String MESSAGE_INVALID_INDEX \u003d \"Index is not a non-zero unsigned integer.\";","lastModifiedDate":"2017-06-02"},{"lineNumber":28,"author":{"gitId":"ashleygoh1"},"content":" public static final String MESSAGE_INVALID_NUMBER_OF_PEOPLE \u003d","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"ashleygoh1"},"content":" \"Number of people is not a non-zero unsigned integer.\";","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"ashleygoh1"},"content":" public static final String MESSAGE_INVALID_DATE_TIME_FORMAT \u003d","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"ashleygoh1"},"content":" \"Date time is wrongly formatted. You need to input a date in yyyy-mm-dd or dd-mm-yyyy \"","lastModifiedDate":"2024-02-25"},{"lineNumber":32,"author":{"gitId":"ashleygoh1"},"content":" + \"format and a time in HH:mm or HHmm (24hr clock) format (eg: 1800 or 18:00 for 6 pm). \"","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"ashleygoh1"},"content":" + \"You can choose to entire enter a date first or time first in any of the formats mentioned\";","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-02"},{"lineNumber":35,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-02-11"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * Parses {@code oneBasedIndex} into an {@code Index} and returns it. Leading and trailing whitespaces will be","lastModifiedDate":"2017-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * trimmed.","lastModifiedDate":"2017-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" * @throws ParseException if the specified index is invalid (not non-zero unsigned integer).","lastModifiedDate":"2018-07-10"},{"lineNumber":39,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-11"},{"lineNumber":40,"author":{"gitId":"-"},"content":" public static Index parseIndex(String oneBasedIndex) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":41,"author":{"gitId":"-"},"content":" String trimmedIndex \u003d oneBasedIndex.trim();","lastModifiedDate":"2017-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" if (!StringUtil.isNonZeroUnsignedInteger(trimmedIndex)) {","lastModifiedDate":"2017-06-02"},{"lineNumber":43,"author":{"gitId":"-"},"content":" throw new ParseException(MESSAGE_INVALID_INDEX);","lastModifiedDate":"2018-07-10"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-11"},{"lineNumber":45,"author":{"gitId":"-"},"content":" return Index.fromOneBased(Integer.parseInt(trimmedIndex));","lastModifiedDate":"2017-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-11"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":48,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-29"},{"lineNumber":49,"author":{"gitId":"-"},"content":" * Parses a {@code String name} into a {@code Name}.","lastModifiedDate":"2017-05-29"},{"lineNumber":50,"author":{"gitId":"-"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2017-05-29"},{"lineNumber":51,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2017-05-29"},{"lineNumber":52,"author":{"gitId":"-"},"content":" * @throws ParseException if the given {@code name} is invalid.","lastModifiedDate":"2018-07-10"},{"lineNumber":53,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-29"},{"lineNumber":54,"author":{"gitId":"-"},"content":" public static Name parseName(String name) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":55,"author":{"gitId":"-"},"content":" requireNonNull(name);","lastModifiedDate":"2017-05-29"},{"lineNumber":56,"author":{"gitId":"-"},"content":" String trimmedName \u003d name.trim();","lastModifiedDate":"2017-05-29"},{"lineNumber":57,"author":{"gitId":"-"},"content":" if (!Name.isValidName(trimmedName)) {","lastModifiedDate":"2017-05-30"},{"lineNumber":58,"author":{"gitId":"-"},"content":" throw new ParseException(Name.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":59,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":60,"author":{"gitId":"-"},"content":" return new Name(trimmedName);","lastModifiedDate":"2017-05-29"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-29"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-29"},{"lineNumber":63,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-30"},{"lineNumber":64,"author":{"gitId":"-"},"content":" * Parses a {@code String phone} into a {@code Phone}.","lastModifiedDate":"2017-05-30"},{"lineNumber":65,"author":{"gitId":"-"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2017-05-30"},{"lineNumber":66,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2017-05-30"},{"lineNumber":67,"author":{"gitId":"-"},"content":" * @throws ParseException if the given {@code phone} is invalid.","lastModifiedDate":"2018-07-10"},{"lineNumber":68,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-30"},{"lineNumber":69,"author":{"gitId":"-"},"content":" public static Phone parsePhone(String phone) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":70,"author":{"gitId":"-"},"content":" requireNonNull(phone);","lastModifiedDate":"2017-05-30"},{"lineNumber":71,"author":{"gitId":"-"},"content":" String trimmedPhone \u003d phone.trim();","lastModifiedDate":"2017-05-30"},{"lineNumber":72,"author":{"gitId":"-"},"content":" if (!Phone.isValidPhone(trimmedPhone)) {","lastModifiedDate":"2017-05-30"},{"lineNumber":73,"author":{"gitId":"-"},"content":" throw new ParseException(Phone.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":74,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":75,"author":{"gitId":"-"},"content":" return new Phone(trimmedPhone);","lastModifiedDate":"2017-05-30"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":78,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-30"},{"lineNumber":79,"author":{"gitId":"-"},"content":" * Parses a {@code String address} into an {@code Address}.","lastModifiedDate":"2017-05-30"},{"lineNumber":80,"author":{"gitId":"-"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2017-05-30"},{"lineNumber":81,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2017-05-30"},{"lineNumber":82,"author":{"gitId":"-"},"content":" * @throws ParseException if the given {@code address} is invalid.","lastModifiedDate":"2018-07-10"},{"lineNumber":83,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-30"},{"lineNumber":84,"author":{"gitId":"-"},"content":" public static Address parseAddress(String address) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":85,"author":{"gitId":"-"},"content":" String trimmedAddress \u003d address.trim();","lastModifiedDate":"2017-05-30"},{"lineNumber":86,"author":{"gitId":"-"},"content":" return new Address(trimmedAddress);","lastModifiedDate":"2017-05-30"},{"lineNumber":87,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":89,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-30"},{"lineNumber":90,"author":{"gitId":"-"},"content":" * Parses a {@code String email} into an {@code Email}.","lastModifiedDate":"2017-05-30"},{"lineNumber":91,"author":{"gitId":"-"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2017-05-30"},{"lineNumber":92,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2017-05-30"},{"lineNumber":93,"author":{"gitId":"-"},"content":" * @throws ParseException if the given {@code email} is invalid.","lastModifiedDate":"2018-07-10"},{"lineNumber":94,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-30"},{"lineNumber":95,"author":{"gitId":"-"},"content":" public static Email parseEmail(String email) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":96,"author":{"gitId":"-"},"content":" requireNonNull(email);","lastModifiedDate":"2017-05-30"},{"lineNumber":97,"author":{"gitId":"-"},"content":" String trimmedEmail \u003d email.trim();","lastModifiedDate":"2017-05-30"},{"lineNumber":98,"author":{"gitId":"-"},"content":" if (!Email.isValidEmail(trimmedEmail)) {","lastModifiedDate":"2017-05-30"},{"lineNumber":99,"author":{"gitId":"-"},"content":" throw new ParseException(Email.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":101,"author":{"gitId":"-"},"content":" return new Email(trimmedEmail);","lastModifiedDate":"2017-05-30"},{"lineNumber":102,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":104,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-30"},{"lineNumber":105,"author":{"gitId":"-"},"content":" * Parses a {@code String tag} into a {@code Tag}.","lastModifiedDate":"2017-05-30"},{"lineNumber":106,"author":{"gitId":"-"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2017-05-30"},{"lineNumber":107,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2017-05-30"},{"lineNumber":108,"author":{"gitId":"-"},"content":" * @throws ParseException if the given {@code tag} is invalid.","lastModifiedDate":"2018-07-10"},{"lineNumber":109,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-30"},{"lineNumber":110,"author":{"gitId":"-"},"content":" public static Tag parseTag(String tag) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":111,"author":{"gitId":"-"},"content":" requireNonNull(tag);","lastModifiedDate":"2017-05-30"},{"lineNumber":112,"author":{"gitId":"-"},"content":" String trimmedTag \u003d tag.trim();","lastModifiedDate":"2017-05-30"},{"lineNumber":113,"author":{"gitId":"-"},"content":" if (!Tag.isValidTagName(trimmedTag)) {","lastModifiedDate":"2017-05-30"},{"lineNumber":114,"author":{"gitId":"-"},"content":" throw new ParseException(Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":116,"author":{"gitId":"-"},"content":" return new Tag(trimmedTag);","lastModifiedDate":"2017-05-30"},{"lineNumber":117,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":118,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":119,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-02-11"},{"lineNumber":120,"author":{"gitId":"ashleygoh1"},"content":" * Parses a {@code String jobDescription} into an {@code jobDescription}.","lastModifiedDate":"2024-02-25"},{"lineNumber":121,"author":{"gitId":"ashleygoh1"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2024-02-25"},{"lineNumber":122,"author":{"gitId":"ashleygoh1"},"content":" *","lastModifiedDate":"2024-02-25"},{"lineNumber":123,"author":{"gitId":"ashleygoh1"},"content":" * @throws ParseException if the given {@code jobDescription} is invalid.","lastModifiedDate":"2024-02-25"},{"lineNumber":124,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":125,"author":{"gitId":"ashleygoh1"},"content":" public static JobDescription parseJobDescription(String jobDescription) throws ParseException {","lastModifiedDate":"2024-02-25"},{"lineNumber":126,"author":{"gitId":"ashleygoh1"},"content":" requireNonNull(jobDescription);","lastModifiedDate":"2024-02-25"},{"lineNumber":127,"author":{"gitId":"ashleygoh1"},"content":" String trimmedJobDescription \u003d jobDescription.trim();","lastModifiedDate":"2024-02-25"},{"lineNumber":128,"author":{"gitId":"ashleygoh1"},"content":" if (!JobDescription.isValidJobDescription(trimmedJobDescription)) {","lastModifiedDate":"2024-02-25"},{"lineNumber":129,"author":{"gitId":"ashleygoh1"},"content":" throw new ParseException(JobDescription.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":130,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":131,"author":{"gitId":"ashleygoh1"},"content":" return new JobDescription(trimmedJobDescription);","lastModifiedDate":"2024-02-25"},{"lineNumber":132,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":133,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":134,"author":{"gitId":"ashleygoh1"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":135,"author":{"gitId":"ashleygoh1"},"content":" * Parses {@code dateTime} into a {@code LocalDateTime} object.","lastModifiedDate":"2024-02-25"},{"lineNumber":136,"author":{"gitId":"ashleygoh1"},"content":" * @throws ParseException if {@code dateTime} is of invalid format.","lastModifiedDate":"2024-02-25"},{"lineNumber":137,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":138,"author":{"gitId":"ashleygoh1"},"content":" public static InterviewDate parseInterviewDate(String interviewDate) throws ParseException {","lastModifiedDate":"2024-02-25"},{"lineNumber":139,"author":{"gitId":"ashleygoh1"},"content":" String trimmedDateTime \u003d interviewDate.trim();","lastModifiedDate":"2024-02-25"},{"lineNumber":140,"author":{"gitId":"ashleygoh1"},"content":" return new InterviewDate(trimmedDateTime);","lastModifiedDate":"2024-02-25"},{"lineNumber":141,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":142,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":143,"author":{"gitId":"ashleygoh1"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":144,"author":{"gitId":"ashleygoh1"},"content":" * Parses a {@code String internDuration} into an {@code internDuration}.","lastModifiedDate":"2024-02-25"},{"lineNumber":145,"author":{"gitId":"ashleygoh1"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2024-02-25"},{"lineNumber":146,"author":{"gitId":"ashleygoh1"},"content":" *","lastModifiedDate":"2024-02-25"},{"lineNumber":147,"author":{"gitId":"ashleygoh1"},"content":" * @throws ParseException if the given {@code internDuration} is invalid.","lastModifiedDate":"2024-02-25"},{"lineNumber":148,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":149,"author":{"gitId":"ashleygoh1"},"content":" public static InternDuration parseInternDuration(String internDuration) throws ParseException {","lastModifiedDate":"2024-02-25"},{"lineNumber":150,"author":{"gitId":"ashleygoh1"},"content":" String trimmedInternDuration \u003d internDuration.trim();","lastModifiedDate":"2024-02-25"},{"lineNumber":151,"author":{"gitId":"ashleygoh1"},"content":" if (!InternDuration.isValidInternDuration(trimmedInternDuration)) {","lastModifiedDate":"2024-02-25"},{"lineNumber":152,"author":{"gitId":"ashleygoh1"},"content":" throw new ParseException(InternDuration.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":153,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":154,"author":{"gitId":"ashleygoh1"},"content":" return new InternDuration(trimmedInternDuration);","lastModifiedDate":"2024-02-25"},{"lineNumber":155,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":156,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":157,"author":{"gitId":"ashleygoh1"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":158,"author":{"gitId":"ashleygoh1"},"content":" * Parses a {@code String salary} into an {@code salary}.","lastModifiedDate":"2024-02-25"},{"lineNumber":159,"author":{"gitId":"ashleygoh1"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2024-02-25"},{"lineNumber":160,"author":{"gitId":"ashleygoh1"},"content":" *","lastModifiedDate":"2024-02-25"},{"lineNumber":161,"author":{"gitId":"ashleygoh1"},"content":" * @throws ParseException if the given {@code salary} is invalid.","lastModifiedDate":"2024-02-25"},{"lineNumber":162,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-11"},{"lineNumber":163,"author":{"gitId":"ashleygoh1"},"content":" public static Salary parseSalary(String salary) throws ParseException {","lastModifiedDate":"2024-02-25"},{"lineNumber":164,"author":{"gitId":"ashleygoh1"},"content":" String trimmedSalary \u003d salary.trim();","lastModifiedDate":"2024-02-25"},{"lineNumber":165,"author":{"gitId":"ashleygoh1"},"content":" if (!Salary.isValidSalary(trimmedSalary)) {","lastModifiedDate":"2024-02-25"},{"lineNumber":166,"author":{"gitId":"ashleygoh1"},"content":" throw new ParseException(Salary.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":167,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-11"},{"lineNumber":168,"author":{"gitId":"ashleygoh1"},"content":" return new Salary(trimmedSalary);","lastModifiedDate":"2024-02-25"},{"lineNumber":169,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-11"},{"lineNumber":170,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":171,"author":{"gitId":"eunrcn"},"content":" /**","lastModifiedDate":"2024-02-28"},{"lineNumber":172,"author":{"gitId":"eunrcn"},"content":" * Parses a collection of {@code String tags} into a {@code Set\u003cTag\u003e}.","lastModifiedDate":"2024-02-28"},{"lineNumber":173,"author":{"gitId":"eunrcn"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2024-02-28"},{"lineNumber":174,"author":{"gitId":"eunrcn"},"content":" *","lastModifiedDate":"2024-02-28"},{"lineNumber":175,"author":{"gitId":"eunrcn"},"content":" * @throws ParseException if any of the given {@code tags} is invalid.","lastModifiedDate":"2024-02-28"},{"lineNumber":176,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2024-02-28"},{"lineNumber":177,"author":{"gitId":"-"},"content":" public static Set\u003cTag\u003e parseTags(Collection\u003cString\u003e tags) throws ParseException {","lastModifiedDate":"2024-02-28"},{"lineNumber":178,"author":{"gitId":"-"},"content":" requireNonNull(tags);","lastModifiedDate":"2024-02-28"},{"lineNumber":179,"author":{"gitId":"eunrcn"},"content":" Set\u003cTag\u003e tagSet \u003d new HashSet\u003c\u003e();","lastModifiedDate":"2024-02-28"},{"lineNumber":180,"author":{"gitId":"eunrcn"},"content":" for (String tag : tags) {","lastModifiedDate":"2024-02-28"},{"lineNumber":181,"author":{"gitId":"eunrcn"},"content":" String trimmedTag \u003d tag.trim();","lastModifiedDate":"2024-02-28"},{"lineNumber":182,"author":{"gitId":"eunrcn"},"content":" if (!Tag.isValidTagName(trimmedTag)) {","lastModifiedDate":"2024-02-28"},{"lineNumber":183,"author":{"gitId":"eunrcn"},"content":" throw new ParseException(Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-28"},{"lineNumber":184,"author":{"gitId":"eunrcn"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":185,"author":{"gitId":"eunrcn"},"content":" tagSet.add(new Tag(trimmedTag));","lastModifiedDate":"2024-02-28"},{"lineNumber":186,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":187,"author":{"gitId":"-"},"content":" return tagSet;","lastModifiedDate":"2024-02-28"},{"lineNumber":188,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":189,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":190,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-02-11"}],"authorContributionMap":{"eunrcn":14,"ashleygoh1":57,"-":119}},{"path":"src/main/java/seedu/address/logic/parser/ViewCommandParser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Jawad280"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2024-02-26"},{"lineNumber":2,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":3,"author":{"gitId":"Jawad280"},"content":"import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2024-02-26"},{"lineNumber":4,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":5,"author":{"gitId":"Jawad280"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2024-02-26"},{"lineNumber":6,"author":{"gitId":"Jawad280"},"content":"import seedu.address.logic.commands.ViewCommand;","lastModifiedDate":"2024-02-26"},{"lineNumber":7,"author":{"gitId":"Jawad280"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":9,"author":{"gitId":"Jawad280"},"content":"/**","lastModifiedDate":"2024-02-26"},{"lineNumber":10,"author":{"gitId":"Jawad280"},"content":" * Parses input arguments and creates a new ViewCommand object","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"Jawad280"},"content":" */","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"Jawad280"},"content":"public class ViewCommandParser {","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"Jawad280"},"content":" /**","lastModifiedDate":"2024-02-26"},{"lineNumber":14,"author":{"gitId":"Jawad280"},"content":" * Parses the given {@code String} of arguments in the context of the ViewCommand","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"Jawad280"},"content":" * and returns a ViewCommand object for execution.","lastModifiedDate":"2024-02-26"},{"lineNumber":16,"author":{"gitId":"Jawad280"},"content":" * @throws ParseException if the user input does not conform the expected format","lastModifiedDate":"2024-02-26"},{"lineNumber":17,"author":{"gitId":"Jawad280"},"content":" */","lastModifiedDate":"2024-02-26"},{"lineNumber":18,"author":{"gitId":"Jawad280"},"content":" public ViewCommand parse(String args) throws ParseException {","lastModifiedDate":"2024-02-26"},{"lineNumber":19,"author":{"gitId":"Jawad280"},"content":" try {","lastModifiedDate":"2024-02-26"},{"lineNumber":20,"author":{"gitId":"Jawad280"},"content":" Index index \u003d ParserUtil.parseIndex(args);","lastModifiedDate":"2024-02-26"},{"lineNumber":21,"author":{"gitId":"Jawad280"},"content":" return new ViewCommand(index);","lastModifiedDate":"2024-02-26"},{"lineNumber":22,"author":{"gitId":"Jawad280"},"content":" } catch (ParseException pe) {","lastModifiedDate":"2024-02-26"},{"lineNumber":23,"author":{"gitId":"Jawad280"},"content":" throw new ParseException(","lastModifiedDate":"2024-02-26"},{"lineNumber":24,"author":{"gitId":"Jawad280"},"content":" String.format(MESSAGE_INVALID_COMMAND_FORMAT, ViewCommand.MESSAGE_USAGE), pe);","lastModifiedDate":"2024-02-26"},{"lineNumber":25,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":26,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":27,"author":{"gitId":"Jawad280"},"content":"}","lastModifiedDate":"2024-02-26"}],"authorContributionMap":{"Jawad280":27}},{"path":"src/main/java/seedu/address/model/AddressBook.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model;","lastModifiedDate":"2016-09-21"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2017-05-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2017-01-19"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-19"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2017-01-19"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.ToStringBuilder;","lastModifiedDate":"2019-02-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2016-08-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import seedu.address.model.person.UniquePersonList;","lastModifiedDate":"2016-08-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":12,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-08"},{"lineNumber":13,"author":{"gitId":"-"},"content":" * Wraps all data at the address-book level","lastModifiedDate":"2016-08-08"},{"lineNumber":14,"author":{"gitId":"-"},"content":" * Duplicates are not allowed (by .isSamePerson comparison)","lastModifiedDate":"2018-04-19"},{"lineNumber":15,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-08"},{"lineNumber":16,"author":{"gitId":"-"},"content":"public class AddressBook implements ReadOnlyAddressBook {","lastModifiedDate":"2016-08-08"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":18,"author":{"gitId":"-"},"content":" private final UniquePersonList persons;","lastModifiedDate":"2016-08-26"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":20,"author":{"gitId":"-"},"content":" /*","lastModifiedDate":"2016-10-19"},{"lineNumber":21,"author":{"gitId":"-"},"content":" * The \u0027unusual\u0027 code block below is a non-static initialization block, sometimes used to avoid duplication","lastModifiedDate":"2019-05-11"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * between constructors. See https://docs.oracle.com/javase/tutorial/java/javaOO/initial.html","lastModifiedDate":"2016-10-19"},{"lineNumber":23,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2016-10-19"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * Note that non-static init blocks are not recommended to use. There are other ways to avoid duplication","lastModifiedDate":"2016-10-19"},{"lineNumber":25,"author":{"gitId":"-"},"content":" * among constructors.","lastModifiedDate":"2016-10-19"},{"lineNumber":26,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-10-19"},{"lineNumber":27,"author":{"gitId":"-"},"content":" {","lastModifiedDate":"2016-08-08"},{"lineNumber":28,"author":{"gitId":"-"},"content":" persons \u003d new UniquePersonList();","lastModifiedDate":"2016-08-26"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-08"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":31,"author":{"gitId":"-"},"content":" public AddressBook() {}","lastModifiedDate":"2016-08-08"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":33,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-08-08"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * Creates an AddressBook using the Persons in the {@code toBeCopied}","lastModifiedDate":"2018-03-29"},{"lineNumber":35,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-08"},{"lineNumber":36,"author":{"gitId":"-"},"content":" public AddressBook(ReadOnlyAddressBook toBeCopied) {","lastModifiedDate":"2016-08-08"},{"lineNumber":37,"author":{"gitId":"-"},"content":" this();","lastModifiedDate":"2016-12-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":" resetData(toBeCopied);","lastModifiedDate":"2016-12-24"},{"lineNumber":39,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-22"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-22"},{"lineNumber":41,"author":{"gitId":"-"},"content":" //// list overwrite operations","lastModifiedDate":"2016-08-08"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":43,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-07"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * Replaces the contents of the person list with {@code persons}.","lastModifiedDate":"2018-08-07"},{"lineNumber":45,"author":{"gitId":"-"},"content":" * {@code persons} must not contain duplicate persons.","lastModifiedDate":"2018-08-07"},{"lineNumber":46,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-07"},{"lineNumber":47,"author":{"gitId":"-"},"content":" public void setPersons(List\u003cPerson\u003e persons) {","lastModifiedDate":"2018-08-07"},{"lineNumber":48,"author":{"gitId":"-"},"content":" this.persons.setPersons(persons);","lastModifiedDate":"2016-10-19"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-08"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":51,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-08-16"},{"lineNumber":52,"author":{"gitId":"-"},"content":" * Resets the existing data of this {@code AddressBook} with {@code newData}.","lastModifiedDate":"2017-08-16"},{"lineNumber":53,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-08-16"},{"lineNumber":54,"author":{"gitId":"-"},"content":" public void resetData(ReadOnlyAddressBook newData) {","lastModifiedDate":"2016-08-08"},{"lineNumber":55,"author":{"gitId":"-"},"content":" requireNonNull(newData);","lastModifiedDate":"2017-05-15"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-20"},{"lineNumber":57,"author":{"gitId":"-"},"content":" setPersons(newData.getPersonList());","lastModifiedDate":"2018-03-29"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-08"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":60,"author":{"gitId":"-"},"content":" //// person-level operations","lastModifiedDate":"2016-08-08"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":62,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-06"},{"lineNumber":63,"author":{"gitId":"-"},"content":" * Returns true if a person with the same identity as {@code person} exists in the address book.","lastModifiedDate":"2018-08-06"},{"lineNumber":64,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-06"},{"lineNumber":65,"author":{"gitId":"-"},"content":" public boolean hasPerson(Person person) {","lastModifiedDate":"2018-08-06"},{"lineNumber":66,"author":{"gitId":"-"},"content":" requireNonNull(person);","lastModifiedDate":"2018-08-06"},{"lineNumber":67,"author":{"gitId":"-"},"content":" return persons.contains(person);","lastModifiedDate":"2018-08-06"},{"lineNumber":68,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-06"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-06"},{"lineNumber":70,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-09-21"},{"lineNumber":71,"author":{"gitId":"-"},"content":" * Adds a person to the address book.","lastModifiedDate":"2016-09-21"},{"lineNumber":72,"author":{"gitId":"-"},"content":" * The person must not already exist in the address book.","lastModifiedDate":"2018-08-07"},{"lineNumber":73,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-09-21"},{"lineNumber":74,"author":{"gitId":"-"},"content":" public void addPerson(Person p) {","lastModifiedDate":"2018-08-07"},{"lineNumber":75,"author":{"gitId":"-"},"content":" persons.add(p);","lastModifiedDate":"2018-03-29"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-08"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":78,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-12-13"},{"lineNumber":79,"author":{"gitId":"-"},"content":" * Replaces the given person {@code target} in the list with {@code editedPerson}.","lastModifiedDate":"2018-01-10"},{"lineNumber":80,"author":{"gitId":"-"},"content":" * {@code target} must exist in the address book.","lastModifiedDate":"2018-08-07"},{"lineNumber":81,"author":{"gitId":"-"},"content":" * The person identity of {@code editedPerson} must not be the same as another existing person in the address book.","lastModifiedDate":"2018-08-07"},{"lineNumber":82,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-13"},{"lineNumber":83,"author":{"gitId":"-"},"content":" public void setPerson(Person target, Person editedPerson) {","lastModifiedDate":"2018-08-17"},{"lineNumber":84,"author":{"gitId":"-"},"content":" requireNonNull(editedPerson);","lastModifiedDate":"2018-01-10"},{"lineNumber":85,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-13"},{"lineNumber":86,"author":{"gitId":"-"},"content":" persons.setPerson(target, editedPerson);","lastModifiedDate":"2018-03-29"},{"lineNumber":87,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-21"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":89,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-08-16"},{"lineNumber":90,"author":{"gitId":"-"},"content":" * Removes {@code key} from this {@code AddressBook}.","lastModifiedDate":"2017-08-16"},{"lineNumber":91,"author":{"gitId":"-"},"content":" * {@code key} must exist in the address book.","lastModifiedDate":"2018-08-07"},{"lineNumber":92,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-08-16"},{"lineNumber":93,"author":{"gitId":"-"},"content":" public void removePerson(Person key) {","lastModifiedDate":"2018-08-07"},{"lineNumber":94,"author":{"gitId":"-"},"content":" persons.remove(key);","lastModifiedDate":"2018-02-28"},{"lineNumber":95,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-08"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":97,"author":{"gitId":"-"},"content":" //// util methods","lastModifiedDate":"2016-08-08"},{"lineNumber":98,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":99,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-08"},{"lineNumber":100,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2016-08-08"},{"lineNumber":101,"author":{"gitId":"-"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2019-02-23"},{"lineNumber":102,"author":{"gitId":"-"},"content":" .add(\"persons\", persons)","lastModifiedDate":"2019-02-23"},{"lineNumber":103,"author":{"gitId":"-"},"content":" .toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":104,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-08"},{"lineNumber":105,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":106,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-08"},{"lineNumber":107,"author":{"gitId":"-"},"content":" public ObservableList\u003cPerson\u003e getPersonList() {","lastModifiedDate":"2018-01-10"},{"lineNumber":108,"author":{"gitId":"Jawad280"},"content":" ObservableList\u003cPerson\u003e personList \u003d persons.asUnmodifiableObservableList();","lastModifiedDate":"2024-02-26"},{"lineNumber":109,"author":{"gitId":"Jawad280"},"content":" // Sort the list","lastModifiedDate":"2024-02-26"},{"lineNumber":110,"author":{"gitId":"Jawad280"},"content":" personList \u003d personList.sorted();","lastModifiedDate":"2024-02-26"},{"lineNumber":111,"author":{"gitId":"Jawad280"},"content":" return personList;","lastModifiedDate":"2024-02-26"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-01"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-01"},{"lineNumber":114,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-09-21"},{"lineNumber":115,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2016-09-21"},{"lineNumber":116,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2023-07-13"},{"lineNumber":117,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2023-07-13"},{"lineNumber":118,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-13"},{"lineNumber":119,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-13"},{"lineNumber":120,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2023-07-13"},{"lineNumber":121,"author":{"gitId":"-"},"content":" if (!(other instanceof AddressBook)) {","lastModifiedDate":"2023-07-13"},{"lineNumber":122,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2023-07-13"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-13"},{"lineNumber":124,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-13"},{"lineNumber":125,"author":{"gitId":"-"},"content":" AddressBook otherAddressBook \u003d (AddressBook) other;","lastModifiedDate":"2023-07-13"},{"lineNumber":126,"author":{"gitId":"-"},"content":" return persons.equals(otherAddressBook.persons);","lastModifiedDate":"2023-07-13"},{"lineNumber":127,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-21"},{"lineNumber":128,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":129,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-09-21"},{"lineNumber":130,"author":{"gitId":"-"},"content":" public int hashCode() {","lastModifiedDate":"2016-09-21"},{"lineNumber":131,"author":{"gitId":"-"},"content":" return persons.hashCode();","lastModifiedDate":"2018-03-29"},{"lineNumber":132,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-21"},{"lineNumber":133,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"}],"authorContributionMap":{"Jawad280":4,"-":129}},{"path":"src/main/java/seedu/address/model/Model.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model;","lastModifiedDate":"2016-09-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.nio.file.Path;","lastModifiedDate":"2018-11-27"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.function.Predicate;","lastModifiedDate":"2017-06-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-19"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2017-09-01"},{"lineNumber":7,"author":{"gitId":"chenyixin0"},"content":"import javafx.collections.transformation.FilteredList;","lastModifiedDate":"2024-02-29"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.GuiSettings;","lastModifiedDate":"2018-11-27"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-01-10"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-09-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" * The API of the Model component.","lastModifiedDate":"2016-09-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-09-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"public interface Model {","lastModifiedDate":"2016-09-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":" /** {@code Predicate} that always evaluate to true */","lastModifiedDate":"2017-08-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":" Predicate\u003cPerson\u003e PREDICATE_SHOW_ALL_PERSONS \u003d unused -\u003e true;","lastModifiedDate":"2018-01-10"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-08-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-11-27"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * Replaces user prefs data with the data in {@code userPrefs}.","lastModifiedDate":"2018-12-06"},{"lineNumber":20,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-11-27"},{"lineNumber":21,"author":{"gitId":"-"},"content":" void setUserPrefs(ReadOnlyUserPrefs userPrefs);","lastModifiedDate":"2018-12-06"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":23,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-11-27"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * Returns the user prefs.","lastModifiedDate":"2018-11-27"},{"lineNumber":25,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-11-27"},{"lineNumber":26,"author":{"gitId":"-"},"content":" ReadOnlyUserPrefs getUserPrefs();","lastModifiedDate":"2018-11-27"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":28,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-11-27"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * Returns the user prefs\u0027 GUI settings.","lastModifiedDate":"2018-11-27"},{"lineNumber":30,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-11-27"},{"lineNumber":31,"author":{"gitId":"-"},"content":" GuiSettings getGuiSettings();","lastModifiedDate":"2018-11-27"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":33,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-11-27"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * Sets the user prefs\u0027 GUI settings.","lastModifiedDate":"2018-11-27"},{"lineNumber":35,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-11-27"},{"lineNumber":36,"author":{"gitId":"-"},"content":" void setGuiSettings(GuiSettings guiSettings);","lastModifiedDate":"2018-11-27"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":38,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-11-27"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * Returns the user prefs\u0027 address book file path.","lastModifiedDate":"2018-11-27"},{"lineNumber":40,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-11-27"},{"lineNumber":41,"author":{"gitId":"-"},"content":" Path getAddressBookFilePath();","lastModifiedDate":"2018-11-27"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":43,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-11-27"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * Sets the user prefs\u0027 address book file path.","lastModifiedDate":"2018-11-27"},{"lineNumber":45,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-11-27"},{"lineNumber":46,"author":{"gitId":"-"},"content":" void setAddressBookFilePath(Path addressBookFilePath);","lastModifiedDate":"2018-11-27"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":48,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-11-27"},{"lineNumber":49,"author":{"gitId":"-"},"content":" * Replaces address book data with the data in {@code addressBook}.","lastModifiedDate":"2018-11-27"},{"lineNumber":50,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-11-27"},{"lineNumber":51,"author":{"gitId":"-"},"content":" void setAddressBook(ReadOnlyAddressBook addressBook);","lastModifiedDate":"2018-11-27"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" /** Returns the AddressBook */","lastModifiedDate":"2016-09-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" ReadOnlyAddressBook getAddressBook();","lastModifiedDate":"2016-09-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-06"},{"lineNumber":57,"author":{"gitId":"-"},"content":" * Returns true if a person with the same identity as {@code person} exists in the address book.","lastModifiedDate":"2018-08-06"},{"lineNumber":58,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-06"},{"lineNumber":59,"author":{"gitId":"-"},"content":" boolean hasPerson(Person person);","lastModifiedDate":"2018-08-06"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-06"},{"lineNumber":61,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-07"},{"lineNumber":62,"author":{"gitId":"-"},"content":" * Deletes the given person.","lastModifiedDate":"2018-08-07"},{"lineNumber":63,"author":{"gitId":"-"},"content":" * The person must exist in the address book.","lastModifiedDate":"2018-08-07"},{"lineNumber":64,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-07"},{"lineNumber":65,"author":{"gitId":"-"},"content":" void deletePerson(Person target);","lastModifiedDate":"2018-08-07"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-07"},{"lineNumber":68,"author":{"gitId":"-"},"content":" * Adds the given person.","lastModifiedDate":"2018-08-07"},{"lineNumber":69,"author":{"gitId":"-"},"content":" * {@code person} must not already exist in the address book.","lastModifiedDate":"2018-08-07"},{"lineNumber":70,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-07"},{"lineNumber":71,"author":{"gitId":"-"},"content":" void addPerson(Person person);","lastModifiedDate":"2018-08-07"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-25"},{"lineNumber":73,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-12-13"},{"lineNumber":74,"author":{"gitId":"-"},"content":" * Replaces the given person {@code target} with {@code editedPerson}.","lastModifiedDate":"2017-06-07"},{"lineNumber":75,"author":{"gitId":"-"},"content":" * {@code target} must exist in the address book.","lastModifiedDate":"2018-08-07"},{"lineNumber":76,"author":{"gitId":"-"},"content":" * The person identity of {@code editedPerson} must not be the same as another existing person in the address book.","lastModifiedDate":"2018-08-07"},{"lineNumber":77,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-13"},{"lineNumber":78,"author":{"gitId":"-"},"content":" void setPerson(Person target, Person editedPerson);","lastModifiedDate":"2018-08-17"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-13"},{"lineNumber":80,"author":{"gitId":"-"},"content":" /** Returns an unmodifiable view of the filtered person list */","lastModifiedDate":"2017-09-01"},{"lineNumber":81,"author":{"gitId":"-"},"content":" ObservableList\u003cPerson\u003e getFilteredPersonList();","lastModifiedDate":"2018-01-10"},{"lineNumber":82,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-25"},{"lineNumber":83,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-08-05"},{"lineNumber":84,"author":{"gitId":"-"},"content":" * Updates the filter of the filtered person list to filter by the given {@code predicate}.","lastModifiedDate":"2017-08-05"},{"lineNumber":85,"author":{"gitId":"-"},"content":" * @throws NullPointerException if {@code predicate} is null.","lastModifiedDate":"2017-08-05"},{"lineNumber":86,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-08-05"},{"lineNumber":87,"author":{"gitId":"-"},"content":" void updateFilteredPersonList(Predicate\u003cPerson\u003e predicate);","lastModifiedDate":"2018-01-10"},{"lineNumber":88,"author":{"gitId":"Jawad280"},"content":" Person choosePersonToView(Predicate\u003cPerson\u003e predicate);","lastModifiedDate":"2024-02-26"},{"lineNumber":89,"author":{"gitId":"chenyixin0"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":90,"author":{"gitId":"chenyixin0"},"content":" FilteredList\u003cPerson\u003e generateNewFilteredPersonList(Predicate\u003cPerson\u003e predicate);","lastModifiedDate":"2024-02-29"},{"lineNumber":91,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-09-25"}],"authorContributionMap":{"chenyixin0":3,"Jawad280":1,"-":87}},{"path":"src/main/java/seedu/address/model/ModelManager.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model;","lastModifiedDate":"2016-08-08"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2017-08-05"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.commons.util.CollectionUtil.requireAllNonNull;","lastModifiedDate":"2017-05-19"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-15"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.nio.file.Path;","lastModifiedDate":"2018-11-27"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.function.Predicate;","lastModifiedDate":"2017-06-12"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2017-01-19"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-19"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2017-09-01"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import javafx.collections.transformation.FilteredList;","lastModifiedDate":"2016-08-26"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.GuiSettings;","lastModifiedDate":"2018-11-27"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.LogsCenter;","lastModifiedDate":"2016-09-23"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-01-10"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":16,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-08"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * Represents the in-memory model of the address book data.","lastModifiedDate":"2016-08-08"},{"lineNumber":18,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-08"},{"lineNumber":19,"author":{"gitId":"-"},"content":"public class ModelManager implements Model {","lastModifiedDate":"2018-12-09"},{"lineNumber":20,"author":{"gitId":"-"},"content":" private static final Logger logger \u003d LogsCenter.getLogger(ModelManager.class);","lastModifiedDate":"2016-09-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":22,"author":{"gitId":"-"},"content":" private final AddressBook addressBook;","lastModifiedDate":"2019-01-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" private final UserPrefs userPrefs;","lastModifiedDate":"2018-12-06"},{"lineNumber":24,"author":{"gitId":"-"},"content":" private final FilteredList\u003cPerson\u003e filteredPersons;","lastModifiedDate":"2018-01-10"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":26,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-08-08"},{"lineNumber":27,"author":{"gitId":"-"},"content":" * Initializes a ModelManager with the given addressBook and userPrefs.","lastModifiedDate":"2016-12-24"},{"lineNumber":28,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-08"},{"lineNumber":29,"author":{"gitId":"-"},"content":" public ModelManager(ReadOnlyAddressBook addressBook, ReadOnlyUserPrefs userPrefs) {","lastModifiedDate":"2018-12-06"},{"lineNumber":30,"author":{"gitId":"-"},"content":" requireAllNonNull(addressBook, userPrefs);","lastModifiedDate":"2017-05-19"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" logger.fine(\"Initializing with address book: \" + addressBook + \" and user prefs \" + userPrefs);","lastModifiedDate":"2016-12-24"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":34,"author":{"gitId":"-"},"content":" this.addressBook \u003d new AddressBook(addressBook);","lastModifiedDate":"2019-01-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" this.userPrefs \u003d new UserPrefs(userPrefs);","lastModifiedDate":"2018-12-06"},{"lineNumber":36,"author":{"gitId":"-"},"content":" filteredPersons \u003d new FilteredList\u003c\u003e(this.addressBook.getPersonList());","lastModifiedDate":"2019-01-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-08"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":39,"author":{"gitId":"-"},"content":" public ModelManager() {","lastModifiedDate":"2016-09-22"},{"lineNumber":40,"author":{"gitId":"-"},"content":" this(new AddressBook(), new UserPrefs());","lastModifiedDate":"2016-09-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-08"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":43,"author":{"gitId":"-"},"content":" //\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d UserPrefs \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\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":"2018-11-27"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":45,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":46,"author":{"gitId":"-"},"content":" public void setUserPrefs(ReadOnlyUserPrefs userPrefs) {","lastModifiedDate":"2018-12-06"},{"lineNumber":47,"author":{"gitId":"-"},"content":" requireNonNull(userPrefs);","lastModifiedDate":"2018-11-27"},{"lineNumber":48,"author":{"gitId":"-"},"content":" this.userPrefs.resetData(userPrefs);","lastModifiedDate":"2018-12-06"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":51,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":52,"author":{"gitId":"-"},"content":" public ReadOnlyUserPrefs getUserPrefs() {","lastModifiedDate":"2018-11-27"},{"lineNumber":53,"author":{"gitId":"-"},"content":" return userPrefs;","lastModifiedDate":"2018-11-27"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":56,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":57,"author":{"gitId":"-"},"content":" public GuiSettings getGuiSettings() {","lastModifiedDate":"2018-11-27"},{"lineNumber":58,"author":{"gitId":"-"},"content":" return userPrefs.getGuiSettings();","lastModifiedDate":"2018-11-27"},{"lineNumber":59,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":61,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":62,"author":{"gitId":"-"},"content":" public void setGuiSettings(GuiSettings guiSettings) {","lastModifiedDate":"2018-11-27"},{"lineNumber":63,"author":{"gitId":"-"},"content":" requireNonNull(guiSettings);","lastModifiedDate":"2018-11-27"},{"lineNumber":64,"author":{"gitId":"-"},"content":" userPrefs.setGuiSettings(guiSettings);","lastModifiedDate":"2018-11-27"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":67,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":68,"author":{"gitId":"-"},"content":" public Path getAddressBookFilePath() {","lastModifiedDate":"2018-11-27"},{"lineNumber":69,"author":{"gitId":"-"},"content":" return userPrefs.getAddressBookFilePath();","lastModifiedDate":"2018-11-27"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":72,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":73,"author":{"gitId":"-"},"content":" public void setAddressBookFilePath(Path addressBookFilePath) {","lastModifiedDate":"2018-11-27"},{"lineNumber":74,"author":{"gitId":"-"},"content":" requireNonNull(addressBookFilePath);","lastModifiedDate":"2018-11-27"},{"lineNumber":75,"author":{"gitId":"-"},"content":" userPrefs.setAddressBookFilePath(addressBookFilePath);","lastModifiedDate":"2018-11-27"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":78,"author":{"gitId":"-"},"content":" //\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d AddressBook \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\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":"2018-11-27"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":80,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-09-25"},{"lineNumber":81,"author":{"gitId":"-"},"content":" public void setAddressBook(ReadOnlyAddressBook addressBook) {","lastModifiedDate":"2018-11-27"},{"lineNumber":82,"author":{"gitId":"-"},"content":" this.addressBook.resetData(addressBook);","lastModifiedDate":"2019-01-25"},{"lineNumber":83,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-08"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":85,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-09-25"},{"lineNumber":86,"author":{"gitId":"-"},"content":" public ReadOnlyAddressBook getAddressBook() {","lastModifiedDate":"2016-09-21"},{"lineNumber":87,"author":{"gitId":"-"},"content":" return addressBook;","lastModifiedDate":"2019-01-25"},{"lineNumber":88,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-21"},{"lineNumber":89,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":90,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-08-06"},{"lineNumber":91,"author":{"gitId":"-"},"content":" public boolean hasPerson(Person person) {","lastModifiedDate":"2018-08-15"},{"lineNumber":92,"author":{"gitId":"-"},"content":" requireNonNull(person);","lastModifiedDate":"2018-08-06"},{"lineNumber":93,"author":{"gitId":"-"},"content":" return addressBook.hasPerson(person);","lastModifiedDate":"2019-01-25"},{"lineNumber":94,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-06"},{"lineNumber":95,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-06"},{"lineNumber":96,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-09-25"},{"lineNumber":97,"author":{"gitId":"-"},"content":" public void deletePerson(Person target) {","lastModifiedDate":"2018-08-15"},{"lineNumber":98,"author":{"gitId":"-"},"content":" addressBook.removePerson(target);","lastModifiedDate":"2019-01-25"},{"lineNumber":99,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-08"},{"lineNumber":100,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":101,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-09-25"},{"lineNumber":102,"author":{"gitId":"-"},"content":" public void addPerson(Person person) {","lastModifiedDate":"2018-08-15"},{"lineNumber":103,"author":{"gitId":"-"},"content":" addressBook.addPerson(person);","lastModifiedDate":"2019-01-25"},{"lineNumber":104,"author":{"gitId":"-"},"content":" updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS);","lastModifiedDate":"2017-08-05"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-26"},{"lineNumber":106,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-26"},{"lineNumber":107,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-12-13"},{"lineNumber":108,"author":{"gitId":"-"},"content":" public void setPerson(Person target, Person editedPerson) {","lastModifiedDate":"2018-08-17"},{"lineNumber":109,"author":{"gitId":"-"},"content":" requireAllNonNull(target, editedPerson);","lastModifiedDate":"2017-06-07"},{"lineNumber":110,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-13"},{"lineNumber":111,"author":{"gitId":"-"},"content":" addressBook.setPerson(target, editedPerson);","lastModifiedDate":"2019-01-25"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-13"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-13"},{"lineNumber":114,"author":{"gitId":"-"},"content":" //\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d Filtered Person List Accessors \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\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":"2016-10-12"},{"lineNumber":115,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":116,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-19"},{"lineNumber":117,"author":{"gitId":"-"},"content":" * Returns an unmodifiable view of the list of {@code Person} backed by the internal list of","lastModifiedDate":"2018-01-10"},{"lineNumber":118,"author":{"gitId":"-"},"content":" * {@code versionedAddressBook}","lastModifiedDate":"2018-06-11"},{"lineNumber":119,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-19"},{"lineNumber":120,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-09-25"},{"lineNumber":121,"author":{"gitId":"-"},"content":" public ObservableList\u003cPerson\u003e getFilteredPersonList() {","lastModifiedDate":"2018-01-10"},{"lineNumber":122,"author":{"gitId":"-"},"content":" return filteredPersons;","lastModifiedDate":"2018-12-09"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-22"},{"lineNumber":124,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-22"},{"lineNumber":125,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-09-25"},{"lineNumber":126,"author":{"gitId":"-"},"content":" public void updateFilteredPersonList(Predicate\u003cPerson\u003e predicate) {","lastModifiedDate":"2018-01-10"},{"lineNumber":127,"author":{"gitId":"-"},"content":" requireNonNull(predicate);","lastModifiedDate":"2017-08-05"},{"lineNumber":128,"author":{"gitId":"-"},"content":" filteredPersons.setPredicate(predicate);","lastModifiedDate":"2017-06-12"},{"lineNumber":129,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-22"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":131,"author":{"gitId":"chenyixin0"},"content":" @Override","lastModifiedDate":"2024-02-29"},{"lineNumber":132,"author":{"gitId":"chenyixin0"},"content":" public FilteredList\u003cPerson\u003e generateNewFilteredPersonList(Predicate\u003cPerson\u003e predicate) {","lastModifiedDate":"2024-02-29"},{"lineNumber":133,"author":{"gitId":"chenyixin0"},"content":" requireNonNull(predicate);","lastModifiedDate":"2024-02-29"},{"lineNumber":134,"author":{"gitId":"chenyixin0"},"content":" return new FilteredList\u003c\u003e(filteredPersons, predicate);","lastModifiedDate":"2024-02-29"},{"lineNumber":135,"author":{"gitId":"chenyixin0"},"content":" //return filteredPersons;","lastModifiedDate":"2024-02-29"},{"lineNumber":136,"author":{"gitId":"chenyixin0"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":137,"author":{"gitId":"chenyixin0"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":138,"author":{"gitId":"Jawad280"},"content":" @Override","lastModifiedDate":"2024-02-26"},{"lineNumber":139,"author":{"gitId":"Jawad280"},"content":" public Person choosePersonToView(Predicate\u003cPerson\u003e predicate) {","lastModifiedDate":"2024-02-26"},{"lineNumber":140,"author":{"gitId":"Jawad280"},"content":" requireNonNull(predicate);","lastModifiedDate":"2024-02-26"},{"lineNumber":141,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":142,"author":{"gitId":"Jawad280"},"content":" for (Person p : filteredPersons) {","lastModifiedDate":"2024-02-26"},{"lineNumber":143,"author":{"gitId":"Jawad280"},"content":" if (predicate.test(p)) {","lastModifiedDate":"2024-02-26"},{"lineNumber":144,"author":{"gitId":"Jawad280"},"content":" return p;","lastModifiedDate":"2024-02-26"},{"lineNumber":145,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":146,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":147,"author":{"gitId":"Jawad280"},"content":" return null;","lastModifiedDate":"2024-02-26"},{"lineNumber":148,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":149,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-22"},{"lineNumber":150,"author":{"gitId":"chenyixin0"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":151,"author":{"gitId":"chenyixin0"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":152,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-05-31"},{"lineNumber":153,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-07-13"},{"lineNumber":154,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2023-07-13"},{"lineNumber":155,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2017-05-31"},{"lineNumber":156,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-31"},{"lineNumber":157,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":158,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2017-05-31"},{"lineNumber":159,"author":{"gitId":"-"},"content":" if (!(other instanceof ModelManager)) {","lastModifiedDate":"2023-07-13"},{"lineNumber":160,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2017-05-31"},{"lineNumber":161,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-31"},{"lineNumber":162,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":163,"author":{"gitId":"-"},"content":" ModelManager otherModelManager \u003d (ModelManager) other;","lastModifiedDate":"2023-07-13"},{"lineNumber":164,"author":{"gitId":"-"},"content":" return addressBook.equals(otherModelManager.addressBook)","lastModifiedDate":"2023-07-13"},{"lineNumber":165,"author":{"gitId":"-"},"content":" \u0026\u0026 userPrefs.equals(otherModelManager.userPrefs)","lastModifiedDate":"2023-07-13"},{"lineNumber":166,"author":{"gitId":"-"},"content":" \u0026\u0026 filteredPersons.equals(otherModelManager.filteredPersons);","lastModifiedDate":"2023-07-13"},{"lineNumber":167,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-31"},{"lineNumber":168,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"}],"authorContributionMap":{"chenyixin0":9,"Jawad280":11,"-":148}},{"path":"src/main/java/seedu/address/model/person/Address.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model.person;","lastModifiedDate":"2016-08-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.commons.util.AppUtil.checkArgument;","lastModifiedDate":"2024-02-26"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":5,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":" * Represents a Person\u0027s address in the address book.","lastModifiedDate":"2016-08-24"},{"lineNumber":7,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":"public class Address {","lastModifiedDate":"2016-09-21"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":" public static final String MESSAGE_CONSTRAINTS \u003d \"Addresses can take any values, and it should not be blank\";","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"-"},"content":" /*","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"-"},"content":" * The first character of the address must not be a whitespace,","lastModifiedDate":"2024-02-26"},{"lineNumber":14,"author":{"gitId":"-"},"content":" * otherwise \" \" (a blank string) becomes a valid input.","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2024-02-26"},{"lineNumber":16,"author":{"gitId":"-"},"content":" public static final String VALIDATION_REGEX \u003d \"[^\\\\s].*\";","lastModifiedDate":"2024-02-26"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":18,"author":{"gitId":"-"},"content":" public final String value;","lastModifiedDate":"2016-08-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":20,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-08-24"},{"lineNumber":21,"author":{"gitId":"-"},"content":" * Constructs an {@code Address}.","lastModifiedDate":"2017-05-30"},{"lineNumber":22,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2016-08-24"},{"lineNumber":23,"author":{"gitId":"-"},"content":" * @param address A valid address.","lastModifiedDate":"2017-05-30"},{"lineNumber":24,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":25,"author":{"gitId":"-"},"content":" public Address(String address) {","lastModifiedDate":"2017-05-30"},{"lineNumber":26,"author":{"gitId":"ashleygoh1"},"content":" if (address.isEmpty()) {","lastModifiedDate":"2024-02-26"},{"lineNumber":27,"author":{"gitId":"-"},"content":" value \u003d address;","lastModifiedDate":"2018-08-14"},{"lineNumber":28,"author":{"gitId":"ashleygoh1"},"content":" } else {","lastModifiedDate":"2024-02-26"},{"lineNumber":29,"author":{"gitId":"ashleygoh1"},"content":" checkArgument(isValidAddress(address), MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-26"},{"lineNumber":30,"author":{"gitId":"ashleygoh1"},"content":" value \u003d address;","lastModifiedDate":"2024-02-26"},{"lineNumber":31,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":34,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2024-02-26"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * Returns true if a given string is a valid email.","lastModifiedDate":"2024-02-26"},{"lineNumber":36,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2024-02-26"},{"lineNumber":37,"author":{"gitId":"-"},"content":" public static boolean isValidAddress(String test) {","lastModifiedDate":"2024-02-26"},{"lineNumber":38,"author":{"gitId":"-"},"content":" return test.matches(VALIDATION_REGEX);","lastModifiedDate":"2024-02-26"},{"lineNumber":39,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":41,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":42,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2016-08-24"},{"lineNumber":43,"author":{"gitId":"-"},"content":" return value;","lastModifiedDate":"2016-08-24"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":46,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":47,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2016-08-24"},{"lineNumber":48,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2023-07-13"},{"lineNumber":49,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2023-07-13"},{"lineNumber":50,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-13"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-13"},{"lineNumber":52,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2023-07-13"},{"lineNumber":53,"author":{"gitId":"-"},"content":" if (!(other instanceof Address)) {","lastModifiedDate":"2023-07-13"},{"lineNumber":54,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2023-07-13"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-13"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-13"},{"lineNumber":57,"author":{"gitId":"-"},"content":" Address otherAddress \u003d (Address) other;","lastModifiedDate":"2023-07-13"},{"lineNumber":58,"author":{"gitId":"-"},"content":" return value.equals(otherAddress.value);","lastModifiedDate":"2023-07-13"},{"lineNumber":59,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":61,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":62,"author":{"gitId":"-"},"content":" public int hashCode() {","lastModifiedDate":"2016-08-24"},{"lineNumber":63,"author":{"gitId":"-"},"content":" return value.hashCode();","lastModifiedDate":"2016-08-24"},{"lineNumber":64,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":66,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-24"}],"authorContributionMap":{"ashleygoh1":5,"-":61}},{"path":"src/main/java/seedu/address/model/person/InternDuration.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ashleygoh1"},"content":"package seedu.address.model.person;","lastModifiedDate":"2024-02-25"},{"lineNumber":2,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":3,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.commons.util.AppUtil.checkArgument;","lastModifiedDate":"2024-02-25"},{"lineNumber":4,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":5,"author":{"gitId":"ashleygoh1"},"content":"/**","lastModifiedDate":"2024-02-25"},{"lineNumber":6,"author":{"gitId":"ashleygoh1"},"content":" * Represents a Person\u0027s Intern Duration in the address book.","lastModifiedDate":"2024-02-25"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":" * Guarantees: immutable; is valid as declared in {@link #isValidInternDuration(String)}","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"ashleygoh1"},"content":"public class InternDuration {","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":" public static final String MESSAGE_CONSTRAINTS \u003d \"Intern Duration can take any values, and it should not be blank\";","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"ashleygoh1"},"content":" /*","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"ashleygoh1"},"content":" * The first character of the intern duration must not be a whitespace,","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"ashleygoh1"},"content":" * otherwise \" \" (a blank string) becomes a valid input.","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"ashleygoh1"},"content":" public static final String VALIDATION_REGEX \u003d \"[^\\\\s].*\";","lastModifiedDate":"2024-02-25"},{"lineNumber":18,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":19,"author":{"gitId":"ashleygoh1"},"content":" public final String value;","lastModifiedDate":"2024-02-25"},{"lineNumber":20,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":21,"author":{"gitId":"ashleygoh1"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":22,"author":{"gitId":"ashleygoh1"},"content":" * Constructs an {@code internDuration}.","lastModifiedDate":"2024-02-25"},{"lineNumber":23,"author":{"gitId":"ashleygoh1"},"content":" *","lastModifiedDate":"2024-02-25"},{"lineNumber":24,"author":{"gitId":"ashleygoh1"},"content":" * @param internDuration A valid intern duration.","lastModifiedDate":"2024-02-25"},{"lineNumber":25,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":26,"author":{"gitId":"ashleygoh1"},"content":" public InternDuration(String internDuration) {","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"ashleygoh1"},"content":" checkArgument(isValidInternDuration(internDuration), MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"ashleygoh1"},"content":" value \u003d internDuration;","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"ashleygoh1"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":32,"author":{"gitId":"ashleygoh1"},"content":" * Returns true if a given string is a valid intern duration.","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":" public static boolean isValidInternDuration(String test) {","lastModifiedDate":"2024-02-25"},{"lineNumber":35,"author":{"gitId":"ashleygoh1"},"content":" return test.matches(VALIDATION_REGEX);","lastModifiedDate":"2024-02-25"},{"lineNumber":36,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"ashleygoh1"},"content":" @Override","lastModifiedDate":"2024-02-25"},{"lineNumber":39,"author":{"gitId":"ashleygoh1"},"content":" public String toString() {","lastModifiedDate":"2024-02-25"},{"lineNumber":40,"author":{"gitId":"ashleygoh1"},"content":" return value;","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"ashleygoh1"},"content":" @Override","lastModifiedDate":"2024-02-25"},{"lineNumber":44,"author":{"gitId":"ashleygoh1"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2024-02-25"},{"lineNumber":45,"author":{"gitId":"ashleygoh1"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2024-02-25"},{"lineNumber":46,"author":{"gitId":"ashleygoh1"},"content":" return true;","lastModifiedDate":"2024-02-25"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":48,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":49,"author":{"gitId":"ashleygoh1"},"content":" // instanceof handles nulls","lastModifiedDate":"2024-02-25"},{"lineNumber":50,"author":{"gitId":"ashleygoh1"},"content":" if (!(other instanceof InternDuration)) {","lastModifiedDate":"2024-02-25"},{"lineNumber":51,"author":{"gitId":"ashleygoh1"},"content":" return false;","lastModifiedDate":"2024-02-25"},{"lineNumber":52,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":53,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":54,"author":{"gitId":"ashleygoh1"},"content":" InternDuration otherInternDuration \u003d (InternDuration) other;","lastModifiedDate":"2024-02-25"},{"lineNumber":55,"author":{"gitId":"ashleygoh1"},"content":" return value.equals(otherInternDuration.value);","lastModifiedDate":"2024-02-25"},{"lineNumber":56,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":57,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":58,"author":{"gitId":"ashleygoh1"},"content":" @Override","lastModifiedDate":"2024-02-25"},{"lineNumber":59,"author":{"gitId":"ashleygoh1"},"content":" public int hashCode() {","lastModifiedDate":"2024-02-25"},{"lineNumber":60,"author":{"gitId":"ashleygoh1"},"content":" return value.hashCode();","lastModifiedDate":"2024-02-25"},{"lineNumber":61,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":62,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":63,"author":{"gitId":"ashleygoh1"},"content":"}","lastModifiedDate":"2024-02-25"}],"authorContributionMap":{"ashleygoh1":63}},{"path":"src/main/java/seedu/address/model/person/InterviewDate.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ashleygoh1"},"content":"package seedu.address.model.person;","lastModifiedDate":"2024-02-25"},{"lineNumber":2,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":3,"author":{"gitId":"ashleygoh1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-02-25"},{"lineNumber":4,"author":{"gitId":"ashleygoh1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-02-25"},{"lineNumber":5,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":6,"author":{"gitId":"ashleygoh1"},"content":"/**","lastModifiedDate":"2024-02-25"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":" * Represents a Person\u0027s interview date in the address book.","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"ashleygoh1"},"content":"public class InterviewDate {","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":" public final LocalDateTime value;","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"ashleygoh1"},"content":" private DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\");","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"ashleygoh1"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"ashleygoh1"},"content":" * Constructs an {@code interview date}.","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"ashleygoh1"},"content":" *","lastModifiedDate":"2024-02-25"},{"lineNumber":18,"author":{"gitId":"ashleygoh1"},"content":" * @param interviewDate A valid interview date.","lastModifiedDate":"2024-02-25"},{"lineNumber":19,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":20,"author":{"gitId":"ashleygoh1"},"content":" public InterviewDate(String interviewDate) {","lastModifiedDate":"2024-02-25"},{"lineNumber":21,"author":{"gitId":"ashleygoh1"},"content":" if (interviewDate \u003d\u003d null) {","lastModifiedDate":"2024-02-26"},{"lineNumber":22,"author":{"gitId":"ashleygoh1"},"content":" value \u003d null;","lastModifiedDate":"2024-02-26"},{"lineNumber":23,"author":{"gitId":"ashleygoh1"},"content":" } else {","lastModifiedDate":"2024-02-26"},{"lineNumber":24,"author":{"gitId":"ashleygoh1"},"content":" value \u003d LocalDateTime.parse(interviewDate, formatter);","lastModifiedDate":"2024-02-25"},{"lineNumber":25,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":26,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"ashleygoh1"},"content":" @Override","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"ashleygoh1"},"content":" public String toString() {","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"ashleygoh1"},"content":" String str \u003d \"\";","lastModifiedDate":"2024-02-26"},{"lineNumber":31,"author":{"gitId":"ashleygoh1"},"content":" if (value !\u003d null) {","lastModifiedDate":"2024-02-26"},{"lineNumber":32,"author":{"gitId":"ashleygoh1"},"content":" str \u003d value.format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\"));","lastModifiedDate":"2024-02-26"},{"lineNumber":33,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":" return str;","lastModifiedDate":"2024-02-26"},{"lineNumber":35,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":36,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"ashleygoh1"},"content":" @Override","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"ashleygoh1"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2024-02-25"},{"lineNumber":39,"author":{"gitId":"ashleygoh1"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2024-02-25"},{"lineNumber":40,"author":{"gitId":"ashleygoh1"},"content":" return true;","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"ashleygoh1"},"content":" // instanceof handles nulls","lastModifiedDate":"2024-02-25"},{"lineNumber":44,"author":{"gitId":"ashleygoh1"},"content":" // if (!(other instanceof InterviewDate)) {","lastModifiedDate":"2024-02-26"},{"lineNumber":45,"author":{"gitId":"ashleygoh1"},"content":" // return false;","lastModifiedDate":"2024-02-26"},{"lineNumber":46,"author":{"gitId":"ashleygoh1"},"content":" // }","lastModifiedDate":"2024-02-26"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":48,"author":{"gitId":"ashleygoh1"},"content":" if (other \u003d\u003d null || getClass() !\u003d other.getClass()) {","lastModifiedDate":"2024-02-26"},{"lineNumber":49,"author":{"gitId":"ashleygoh1"},"content":" return false;","lastModifiedDate":"2024-02-26"},{"lineNumber":50,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":51,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":52,"author":{"gitId":"ashleygoh1"},"content":" InterviewDate otherInterviewDate \u003d (InterviewDate) other;","lastModifiedDate":"2024-02-25"},{"lineNumber":53,"author":{"gitId":"ashleygoh1"},"content":" if (value \u003d\u003d null) {","lastModifiedDate":"2024-02-26"},{"lineNumber":54,"author":{"gitId":"ashleygoh1"},"content":" return otherInterviewDate.value \u003d\u003d null;","lastModifiedDate":"2024-02-26"},{"lineNumber":55,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":56,"author":{"gitId":"ashleygoh1"},"content":" return value.equals(otherInterviewDate.value);","lastModifiedDate":"2024-02-25"},{"lineNumber":57,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":58,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":59,"author":{"gitId":"ashleygoh1"},"content":" @Override","lastModifiedDate":"2024-02-25"},{"lineNumber":60,"author":{"gitId":"ashleygoh1"},"content":" public int hashCode() {","lastModifiedDate":"2024-02-25"},{"lineNumber":61,"author":{"gitId":"ashleygoh1"},"content":" return value.hashCode();","lastModifiedDate":"2024-02-25"},{"lineNumber":62,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":63,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":64,"author":{"gitId":"ashleygoh1"},"content":"}","lastModifiedDate":"2024-02-25"}],"authorContributionMap":{"ashleygoh1":64}},{"path":"src/main/java/seedu/address/model/person/JobDescription.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ashleygoh1"},"content":"package seedu.address.model.person;","lastModifiedDate":"2024-02-25"},{"lineNumber":2,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":3,"author":{"gitId":"ashleygoh1"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2024-02-25"},{"lineNumber":4,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.commons.util.AppUtil.checkArgument;","lastModifiedDate":"2024-02-25"},{"lineNumber":5,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":6,"author":{"gitId":"ashleygoh1"},"content":"/**","lastModifiedDate":"2024-02-25"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":" * Represents a Person\u0027s job description in the address book.","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"ashleygoh1"},"content":" * Guarantees: immutable; is valid as declared in {@link #isValidJobDescription(String)}","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":"public class JobDescription {","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"ashleygoh1"},"content":" public static final String MESSAGE_CONSTRAINTS \u003d \"Job Description can take any values, and it should not be blank\";","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"ashleygoh1"},"content":" /*","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"ashleygoh1"},"content":" * The first character of the job description must not be a whitespace,","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"ashleygoh1"},"content":" * otherwise \" \" (a blank string) becomes a valid input.","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":18,"author":{"gitId":"ashleygoh1"},"content":" public static final String VALIDATION_REGEX \u003d \"\\\\S.*\";","lastModifiedDate":"2024-02-25"},{"lineNumber":19,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":20,"author":{"gitId":"ashleygoh1"},"content":" public final String value;","lastModifiedDate":"2024-02-25"},{"lineNumber":21,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":22,"author":{"gitId":"ashleygoh1"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":23,"author":{"gitId":"ashleygoh1"},"content":" * Constructs an {@code Job Description}.","lastModifiedDate":"2024-02-25"},{"lineNumber":24,"author":{"gitId":"ashleygoh1"},"content":" *","lastModifiedDate":"2024-02-25"},{"lineNumber":25,"author":{"gitId":"ashleygoh1"},"content":" * @param jobDescription A valid Job Description.","lastModifiedDate":"2024-02-25"},{"lineNumber":26,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"ashleygoh1"},"content":" public JobDescription(String jobDescription) {","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"ashleygoh1"},"content":" requireNonNull(jobDescription);","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"ashleygoh1"},"content":" checkArgument(isValidJobDescription(jobDescription), MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"ashleygoh1"},"content":" value \u003d jobDescription;","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":32,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"ashleygoh1"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":" * Returns true if a given string is a valid job description.","lastModifiedDate":"2024-02-25"},{"lineNumber":35,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":36,"author":{"gitId":"ashleygoh1"},"content":" public static boolean isValidJobDescription(String test) {","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"ashleygoh1"},"content":" return test.matches(VALIDATION_REGEX);","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":39,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":40,"author":{"gitId":"ashleygoh1"},"content":" @Override","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"ashleygoh1"},"content":" public String toString() {","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":" return value;","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":44,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":45,"author":{"gitId":"ashleygoh1"},"content":" @Override","lastModifiedDate":"2024-02-25"},{"lineNumber":46,"author":{"gitId":"ashleygoh1"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2024-02-25"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2024-02-25"},{"lineNumber":48,"author":{"gitId":"ashleygoh1"},"content":" return true;","lastModifiedDate":"2024-02-25"},{"lineNumber":49,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":50,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":51,"author":{"gitId":"ashleygoh1"},"content":" // instanceof handles nulls","lastModifiedDate":"2024-02-25"},{"lineNumber":52,"author":{"gitId":"ashleygoh1"},"content":" if (!(other instanceof JobDescription)) {","lastModifiedDate":"2024-02-25"},{"lineNumber":53,"author":{"gitId":"ashleygoh1"},"content":" return false;","lastModifiedDate":"2024-02-25"},{"lineNumber":54,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":55,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":56,"author":{"gitId":"ashleygoh1"},"content":" JobDescription otherJobDescription \u003d (JobDescription) other;","lastModifiedDate":"2024-02-25"},{"lineNumber":57,"author":{"gitId":"ashleygoh1"},"content":" return value.equals(otherJobDescription.value);","lastModifiedDate":"2024-02-25"},{"lineNumber":58,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":59,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":60,"author":{"gitId":"ashleygoh1"},"content":" @Override","lastModifiedDate":"2024-02-25"},{"lineNumber":61,"author":{"gitId":"ashleygoh1"},"content":" public int hashCode() {","lastModifiedDate":"2024-02-25"},{"lineNumber":62,"author":{"gitId":"ashleygoh1"},"content":" return value.hashCode();","lastModifiedDate":"2024-02-25"},{"lineNumber":63,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":64,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":65,"author":{"gitId":"ashleygoh1"},"content":"}","lastModifiedDate":"2024-02-25"}],"authorContributionMap":{"ashleygoh1":65}},{"path":"src/main/java/seedu/address/model/person/NameContainsKeywordsPredicate.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model.person;","lastModifiedDate":"2017-06-12"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2017-06-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.function.Predicate;","lastModifiedDate":"2017-06-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-12"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.StringUtil;","lastModifiedDate":"2017-06-12"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.ToStringBuilder;","lastModifiedDate":"2019-02-23"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-12"},{"lineNumber":9,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-06-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":" * Tests that a {@code Person}\u0027s {@code Name} matches any of the keywords given.","lastModifiedDate":"2018-01-10"},{"lineNumber":11,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-06-12"},{"lineNumber":12,"author":{"gitId":"-"},"content":"public class NameContainsKeywordsPredicate implements Predicate\u003cPerson\u003e {","lastModifiedDate":"2018-01-10"},{"lineNumber":13,"author":{"gitId":"-"},"content":" private final List\u003cString\u003e keywords;","lastModifiedDate":"2017-06-12"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-12"},{"lineNumber":15,"author":{"gitId":"-"},"content":" public NameContainsKeywordsPredicate(List\u003cString\u003e keywords) {","lastModifiedDate":"2017-06-12"},{"lineNumber":16,"author":{"gitId":"-"},"content":" this.keywords \u003d keywords;","lastModifiedDate":"2017-06-12"},{"lineNumber":17,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-12"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-12"},{"lineNumber":19,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-06-12"},{"lineNumber":20,"author":{"gitId":"-"},"content":" public boolean test(Person person) {","lastModifiedDate":"2018-01-10"},{"lineNumber":21,"author":{"gitId":"-"},"content":" return keywords.stream()","lastModifiedDate":"2017-06-12"},{"lineNumber":22,"author":{"gitId":"ashleygoh1"},"content":" .anyMatch(keyword -\u003e StringUtil.containsWordIgnoreCase(person.getCompanyName().fullName, keyword));","lastModifiedDate":"2024-02-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-12"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-12"},{"lineNumber":25,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-06-12"},{"lineNumber":26,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2017-06-12"},{"lineNumber":27,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2023-07-13"},{"lineNumber":28,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2023-07-13"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-13"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-13"},{"lineNumber":31,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2023-07-13"},{"lineNumber":32,"author":{"gitId":"-"},"content":" if (!(other instanceof NameContainsKeywordsPredicate)) {","lastModifiedDate":"2023-07-13"},{"lineNumber":33,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2023-07-13"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-13"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-13"},{"lineNumber":36,"author":{"gitId":"-"},"content":" NameContainsKeywordsPredicate otherNameContainsKeywordsPredicate \u003d (NameContainsKeywordsPredicate) other;","lastModifiedDate":"2023-07-13"},{"lineNumber":37,"author":{"gitId":"-"},"content":" return keywords.equals(otherNameContainsKeywordsPredicate.keywords);","lastModifiedDate":"2023-07-13"},{"lineNumber":38,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-12"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-12"},{"lineNumber":40,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2019-02-23"},{"lineNumber":41,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2019-02-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":" return new ToStringBuilder(this).add(\"keywords\", keywords).toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-06-12"}],"authorContributionMap":{"ashleygoh1":1,"-":43}},{"path":"src/main/java/seedu/address/model/person/Person.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model.person;","lastModifiedDate":"2016-08-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.commons.util.CollectionUtil.requireAllNonNull;","lastModifiedDate":"2017-05-19"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.Objects;","lastModifiedDate":"2017-01-19"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-19"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.ToStringBuilder;","lastModifiedDate":"2019-02-23"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-03-07"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":" * Represents a Person in the address book.","lastModifiedDate":"2016-08-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":" * Guarantees: details are present and not null, field values are validated, immutable.","lastModifiedDate":"2017-12-20"},{"lineNumber":13,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":14,"author":{"gitId":"Jawad280"},"content":"public class Person implements Comparable\u003cPerson\u003e {","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":16,"author":{"gitId":"-"},"content":" // Identity fields","lastModifiedDate":"2018-04-19"},{"lineNumber":17,"author":{"gitId":"ashleygoh1"},"content":" private final Name companyName;","lastModifiedDate":"2024-02-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" private final Phone phone;","lastModifiedDate":"2017-12-20"},{"lineNumber":19,"author":{"gitId":"-"},"content":" private final Email email;","lastModifiedDate":"2017-12-20"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":21,"author":{"gitId":"-"},"content":" // Data fields","lastModifiedDate":"2018-04-19"},{"lineNumber":22,"author":{"gitId":"-"},"content":" private final Address address;","lastModifiedDate":"2018-04-19"},{"lineNumber":23,"author":{"gitId":"ashleygoh1"},"content":" private final Tag tag;","lastModifiedDate":"2024-02-25"},{"lineNumber":24,"author":{"gitId":"ashleygoh1"},"content":" private final JobDescription jobDescription;","lastModifiedDate":"2024-02-25"},{"lineNumber":25,"author":{"gitId":"ashleygoh1"},"content":" private final InterviewDate interviewDate;","lastModifiedDate":"2024-02-25"},{"lineNumber":26,"author":{"gitId":"ashleygoh1"},"content":" private final InternDuration internDuration;","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"ashleygoh1"},"content":" private final Salary salary;","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":29,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-08-24"},{"lineNumber":30,"author":{"gitId":"-"},"content":" * Every field must be present and not null.","lastModifiedDate":"2016-08-24"},{"lineNumber":31,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":32,"author":{"gitId":"ashleygoh1"},"content":" public Person(Name companyName, Phone phone, Email email, Address address, Tag tag,","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"ashleygoh1"},"content":" JobDescription jobDescription, InterviewDate interviewDate,","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":" InternDuration internDuration, Salary salary) {","lastModifiedDate":"2024-02-25"},{"lineNumber":35,"author":{"gitId":"ashleygoh1"},"content":" requireAllNonNull(companyName, phone, email, tag, jobDescription);","lastModifiedDate":"2024-02-26"},{"lineNumber":36,"author":{"gitId":"ashleygoh1"},"content":" this.companyName \u003d companyName;","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" this.phone \u003d phone;","lastModifiedDate":"2017-12-20"},{"lineNumber":38,"author":{"gitId":"-"},"content":" this.email \u003d email;","lastModifiedDate":"2017-12-20"},{"lineNumber":39,"author":{"gitId":"-"},"content":" this.address \u003d address;","lastModifiedDate":"2017-12-20"},{"lineNumber":40,"author":{"gitId":"ashleygoh1"},"content":" this.tag \u003d tag;","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"ashleygoh1"},"content":" this.jobDescription \u003d jobDescription;","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":" this.interviewDate \u003d interviewDate;","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"ashleygoh1"},"content":" this.internDuration \u003d internDuration;","lastModifiedDate":"2024-02-25"},{"lineNumber":44,"author":{"gitId":"ashleygoh1"},"content":" this.salary \u003d salary;","lastModifiedDate":"2024-02-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":" public Name getCompanyName() {","lastModifiedDate":"2024-02-25"},{"lineNumber":48,"author":{"gitId":"ashleygoh1"},"content":" return companyName;","lastModifiedDate":"2024-02-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":51,"author":{"gitId":"-"},"content":" public Phone getPhone() {","lastModifiedDate":"2017-07-12"},{"lineNumber":52,"author":{"gitId":"-"},"content":" return phone;","lastModifiedDate":"2017-12-20"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":55,"author":{"gitId":"-"},"content":" public Email getEmail() {","lastModifiedDate":"2017-07-12"},{"lineNumber":56,"author":{"gitId":"-"},"content":" return email;","lastModifiedDate":"2017-12-20"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":59,"author":{"gitId":"-"},"content":" public Address getAddress() {","lastModifiedDate":"2017-07-12"},{"lineNumber":60,"author":{"gitId":"-"},"content":" return address;","lastModifiedDate":"2017-12-20"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-07-12"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-12"},{"lineNumber":63,"author":{"gitId":"ashleygoh1"},"content":" public Tag getTag() {","lastModifiedDate":"2024-02-25"},{"lineNumber":64,"author":{"gitId":"ashleygoh1"},"content":" return tag;","lastModifiedDate":"2024-02-25"},{"lineNumber":65,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":66,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":67,"author":{"gitId":"ashleygoh1"},"content":" public JobDescription getJobDescription() {","lastModifiedDate":"2024-02-25"},{"lineNumber":68,"author":{"gitId":"ashleygoh1"},"content":" return jobDescription;","lastModifiedDate":"2024-02-25"},{"lineNumber":69,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":70,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":71,"author":{"gitId":"ashleygoh1"},"content":" public InterviewDate getInterviewDate() {","lastModifiedDate":"2024-02-25"},{"lineNumber":72,"author":{"gitId":"ashleygoh1"},"content":" return interviewDate;","lastModifiedDate":"2024-02-25"},{"lineNumber":73,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":74,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":75,"author":{"gitId":"ashleygoh1"},"content":" public InternDuration getInternDuration() {","lastModifiedDate":"2024-02-25"},{"lineNumber":76,"author":{"gitId":"ashleygoh1"},"content":" return internDuration;","lastModifiedDate":"2024-02-25"},{"lineNumber":77,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":78,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":79,"author":{"gitId":"ashleygoh1"},"content":" public Salary getSalary() {","lastModifiedDate":"2024-02-25"},{"lineNumber":80,"author":{"gitId":"ashleygoh1"},"content":" return salary;","lastModifiedDate":"2024-02-25"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-21"},{"lineNumber":82,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":83,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-04-19"},{"lineNumber":84,"author":{"gitId":"ashleygoh1"},"content":" * Returns true if both inputs have the same company name and job description.","lastModifiedDate":"2024-02-25"},{"lineNumber":85,"author":{"gitId":"ashleygoh1"},"content":" * This defines a weaker notion of equality between two inputs.","lastModifiedDate":"2024-02-25"},{"lineNumber":86,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-04-19"},{"lineNumber":87,"author":{"gitId":"-"},"content":" public boolean isSamePerson(Person otherPerson) {","lastModifiedDate":"2018-04-19"},{"lineNumber":88,"author":{"gitId":"-"},"content":" if (otherPerson \u003d\u003d this) {","lastModifiedDate":"2018-04-19"},{"lineNumber":89,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2018-04-19"},{"lineNumber":90,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-04-19"},{"lineNumber":91,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":92,"author":{"gitId":"-"},"content":" return otherPerson !\u003d null","lastModifiedDate":"2018-04-19"},{"lineNumber":93,"author":{"gitId":"ashleygoh1"},"content":" \u0026\u0026 otherPerson.getCompanyName().equals(getCompanyName())","lastModifiedDate":"2024-02-25"},{"lineNumber":94,"author":{"gitId":"ashleygoh1"},"content":" \u0026\u0026 otherPerson.getJobDescription().equals(getJobDescription());","lastModifiedDate":"2024-02-25"},{"lineNumber":95,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-04-19"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":97,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-04-19"},{"lineNumber":98,"author":{"gitId":"ashleygoh1"},"content":" * Returns true if both inputs have the same identity and data fields.","lastModifiedDate":"2024-02-25"},{"lineNumber":99,"author":{"gitId":"ashleygoh1"},"content":" * This defines a stronger notion of equality between two inputs.","lastModifiedDate":"2024-02-25"},{"lineNumber":100,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-04-19"},{"lineNumber":101,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":102,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2016-08-24"},{"lineNumber":103,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2018-01-10"},{"lineNumber":104,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2018-01-10"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-01-10"},{"lineNumber":106,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-01-10"},{"lineNumber":107,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2023-07-13"},{"lineNumber":108,"author":{"gitId":"-"},"content":" if (!(other instanceof Person)) {","lastModifiedDate":"2018-01-10"},{"lineNumber":109,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2018-01-10"},{"lineNumber":110,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-01-10"},{"lineNumber":111,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-01-10"},{"lineNumber":112,"author":{"gitId":"-"},"content":" Person otherPerson \u003d (Person) other;","lastModifiedDate":"2018-01-10"},{"lineNumber":113,"author":{"gitId":"ashleygoh1"},"content":" return companyName.equals(otherPerson.companyName)","lastModifiedDate":"2024-02-25"},{"lineNumber":114,"author":{"gitId":"-"},"content":" \u0026\u0026 phone.equals(otherPerson.phone)","lastModifiedDate":"2023-07-13"},{"lineNumber":115,"author":{"gitId":"-"},"content":" \u0026\u0026 email.equals(otherPerson.email)","lastModifiedDate":"2023-07-13"},{"lineNumber":116,"author":{"gitId":"-"},"content":" \u0026\u0026 address.equals(otherPerson.address)","lastModifiedDate":"2023-07-13"},{"lineNumber":117,"author":{"gitId":"ashleygoh1"},"content":" \u0026\u0026 tag.equals(otherPerson.tag)","lastModifiedDate":"2024-02-25"},{"lineNumber":118,"author":{"gitId":"ashleygoh1"},"content":" \u0026\u0026 jobDescription.equals(otherPerson.jobDescription)","lastModifiedDate":"2024-02-25"},{"lineNumber":119,"author":{"gitId":"ashleygoh1"},"content":" \u0026\u0026 interviewDate.equals(otherPerson.interviewDate)","lastModifiedDate":"2024-02-25"},{"lineNumber":120,"author":{"gitId":"ashleygoh1"},"content":" \u0026\u0026 internDuration.equals(otherPerson.internDuration)","lastModifiedDate":"2024-02-25"},{"lineNumber":121,"author":{"gitId":"ashleygoh1"},"content":" \u0026\u0026 salary.equals(otherPerson.salary);","lastModifiedDate":"2024-02-25"},{"lineNumber":122,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":123,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":124,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":125,"author":{"gitId":"-"},"content":" public int hashCode() {","lastModifiedDate":"2016-08-24"},{"lineNumber":126,"author":{"gitId":"-"},"content":" // use this method for custom fields hashing instead of implementing your own","lastModifiedDate":"2016-08-24"},{"lineNumber":127,"author":{"gitId":"ashleygoh1"},"content":" return Objects.hash(companyName, phone, email, address, tag,","lastModifiedDate":"2024-02-25"},{"lineNumber":128,"author":{"gitId":"ashleygoh1"},"content":" jobDescription, interviewDate, internDuration, salary);","lastModifiedDate":"2024-02-25"},{"lineNumber":129,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":131,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":132,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2016-08-24"},{"lineNumber":133,"author":{"gitId":"-"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2019-02-23"},{"lineNumber":134,"author":{"gitId":"ashleygoh1"},"content":" .add(\"name\", companyName)","lastModifiedDate":"2024-02-25"},{"lineNumber":135,"author":{"gitId":"-"},"content":" .add(\"phone\", phone)","lastModifiedDate":"2019-02-23"},{"lineNumber":136,"author":{"gitId":"-"},"content":" .add(\"email\", email)","lastModifiedDate":"2019-02-23"},{"lineNumber":137,"author":{"gitId":"-"},"content":" .add(\"address\", address)","lastModifiedDate":"2019-02-23"},{"lineNumber":138,"author":{"gitId":"ashleygoh1"},"content":" .add(\"tag\", tag)","lastModifiedDate":"2024-02-25"},{"lineNumber":139,"author":{"gitId":"ashleygoh1"},"content":" .add(\"job description\", jobDescription)","lastModifiedDate":"2024-02-25"},{"lineNumber":140,"author":{"gitId":"ashleygoh1"},"content":" .add(\"interview date\", interviewDate)","lastModifiedDate":"2024-02-25"},{"lineNumber":141,"author":{"gitId":"ashleygoh1"},"content":" .add(\"intern duration\", internDuration)","lastModifiedDate":"2024-02-25"},{"lineNumber":142,"author":{"gitId":"ashleygoh1"},"content":" .add(\"salary\", salary)","lastModifiedDate":"2024-02-25"},{"lineNumber":143,"author":{"gitId":"-"},"content":" .toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":144,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":145,"author":{"gitId":"Jawad280"},"content":" @Override","lastModifiedDate":"2024-02-26"},{"lineNumber":146,"author":{"gitId":"Jawad280"},"content":" public int compareTo(Person otherPerson) {","lastModifiedDate":"2024-02-26"},{"lineNumber":147,"author":{"gitId":"Jawad280"},"content":" if (this.interviewDate.value !\u003d null \u0026\u0026 otherPerson.getInterviewDate().value !\u003d null) {","lastModifiedDate":"2024-02-26"},{"lineNumber":148,"author":{"gitId":"Jawad280"},"content":" return this.interviewDate.value.compareTo(otherPerson.getInterviewDate().value);","lastModifiedDate":"2024-02-26"},{"lineNumber":149,"author":{"gitId":"Jawad280"},"content":" } else if (this.interviewDate.value !\u003d null) {","lastModifiedDate":"2024-02-26"},{"lineNumber":150,"author":{"gitId":"Jawad280"},"content":" return -1;","lastModifiedDate":"2024-02-26"},{"lineNumber":151,"author":{"gitId":"Jawad280"},"content":" } else if (otherPerson.getInterviewDate().value !\u003d null) {","lastModifiedDate":"2024-02-26"},{"lineNumber":152,"author":{"gitId":"Jawad280"},"content":" return 1;","lastModifiedDate":"2024-02-26"},{"lineNumber":153,"author":{"gitId":"Jawad280"},"content":" } else {","lastModifiedDate":"2024-02-26"},{"lineNumber":154,"author":{"gitId":"Jawad280"},"content":" return 0;","lastModifiedDate":"2024-02-26"},{"lineNumber":155,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":156,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":157,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":158,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-24"}],"authorContributionMap":{"Jawad280":13,"ashleygoh1":56,"-":89}},{"path":"src/main/java/seedu/address/model/person/Salary.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ashleygoh1"},"content":"package seedu.address.model.person;","lastModifiedDate":"2024-02-25"},{"lineNumber":2,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":3,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.commons.util.AppUtil.checkArgument;","lastModifiedDate":"2024-02-25"},{"lineNumber":4,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":5,"author":{"gitId":"ashleygoh1"},"content":"/**","lastModifiedDate":"2024-02-25"},{"lineNumber":6,"author":{"gitId":"ashleygoh1"},"content":" * Represents a Person\u0027s salary in the address book.","lastModifiedDate":"2024-02-25"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":" * Guarantees: immutable; is valid as declared in {@link #isValidSalary(String)}","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"ashleygoh1"},"content":"public class Salary {","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"ashleygoh1"},"content":" public static final String MESSAGE_CONSTRAINTS \u003d \"Salary should only contain numbers\";","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"ashleygoh1"},"content":" public static final String VALIDATION_REGEX \u003d \"[1-9]\\\\d*\";","lastModifiedDate":"2024-02-26"},{"lineNumber":14,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"ashleygoh1"},"content":" public final String value;","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"ashleygoh1"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":18,"author":{"gitId":"ashleygoh1"},"content":" * Constructs a {@code Salary}.","lastModifiedDate":"2024-02-25"},{"lineNumber":19,"author":{"gitId":"ashleygoh1"},"content":" *","lastModifiedDate":"2024-02-25"},{"lineNumber":20,"author":{"gitId":"ashleygoh1"},"content":" * @param salary A valid salary.","lastModifiedDate":"2024-02-25"},{"lineNumber":21,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":22,"author":{"gitId":"ashleygoh1"},"content":" public Salary(String salary) {","lastModifiedDate":"2024-02-25"},{"lineNumber":23,"author":{"gitId":"ashleygoh1"},"content":" checkArgument(isValidSalary(salary), MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":24,"author":{"gitId":"ashleygoh1"},"content":" value \u003d salary;","lastModifiedDate":"2024-02-25"},{"lineNumber":25,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":26,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"ashleygoh1"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"ashleygoh1"},"content":" * Returns true if a given string is a valid phone number.","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"ashleygoh1"},"content":" public static boolean isValidSalary(String test) {","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"ashleygoh1"},"content":" return test.matches(VALIDATION_REGEX);","lastModifiedDate":"2024-02-25"},{"lineNumber":32,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":" @Override","lastModifiedDate":"2024-02-25"},{"lineNumber":35,"author":{"gitId":"ashleygoh1"},"content":" public String toString() {","lastModifiedDate":"2024-02-25"},{"lineNumber":36,"author":{"gitId":"ashleygoh1"},"content":" return value;","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":39,"author":{"gitId":"ashleygoh1"},"content":" @Override","lastModifiedDate":"2024-02-25"},{"lineNumber":40,"author":{"gitId":"ashleygoh1"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"ashleygoh1"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":" return true;","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":44,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":45,"author":{"gitId":"ashleygoh1"},"content":" // instanceof handles nulls","lastModifiedDate":"2024-02-25"},{"lineNumber":46,"author":{"gitId":"ashleygoh1"},"content":" if (!(other instanceof Salary)) {","lastModifiedDate":"2024-02-25"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":" return false;","lastModifiedDate":"2024-02-25"},{"lineNumber":48,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":49,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":50,"author":{"gitId":"ashleygoh1"},"content":" Salary otherSalary \u003d (Salary) other;","lastModifiedDate":"2024-02-25"},{"lineNumber":51,"author":{"gitId":"ashleygoh1"},"content":" return value.equals(otherSalary.value);","lastModifiedDate":"2024-02-25"},{"lineNumber":52,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":53,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":54,"author":{"gitId":"ashleygoh1"},"content":" @Override","lastModifiedDate":"2024-02-25"},{"lineNumber":55,"author":{"gitId":"ashleygoh1"},"content":" public int hashCode() {","lastModifiedDate":"2024-02-25"},{"lineNumber":56,"author":{"gitId":"ashleygoh1"},"content":" return value.hashCode();","lastModifiedDate":"2024-02-25"},{"lineNumber":57,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":58,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":59,"author":{"gitId":"ashleygoh1"},"content":"}","lastModifiedDate":"2024-02-25"}],"authorContributionMap":{"ashleygoh1":59}},{"path":"src/main/java/seedu/address/model/util/SampleDataUtil.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model.util;","lastModifiedDate":"2016-12-20"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-20"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.Arrays;","lastModifiedDate":"2018-01-21"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-03-14"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2018-01-21"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-14"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import seedu.address.model.AddressBook;","lastModifiedDate":"2016-12-20"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import seedu.address.model.ReadOnlyAddressBook;","lastModifiedDate":"2016-12-20"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.InternDuration;","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.InterviewDate;","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.JobDescription;","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.Salary;","lastModifiedDate":"2024-02-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-03-14"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-20"},{"lineNumber":20,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-08-16"},{"lineNumber":21,"author":{"gitId":"-"},"content":" * Contains utility methods for populating {@code AddressBook} with sample data.","lastModifiedDate":"2017-08-16"},{"lineNumber":22,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-08-16"},{"lineNumber":23,"author":{"gitId":"-"},"content":"public class SampleDataUtil {","lastModifiedDate":"2016-12-20"},{"lineNumber":24,"author":{"gitId":"-"},"content":" public static Person[] getSamplePersons() {","lastModifiedDate":"2016-12-20"},{"lineNumber":25,"author":{"gitId":"-"},"content":" return new Person[] {","lastModifiedDate":"2016-12-20"},{"lineNumber":26,"author":{"gitId":"ashleygoh1"},"content":" new Person(new Name(\"FoodPanda\"), new Phone(\"12345678\"), new Email(\"panda@food.com\"),","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"ashleygoh1"},"content":" new Address(\"CBD\"), new Tag(\"F\"), new JobDescription(\"Front End Intern\"),","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"ashleygoh1"},"content":" new InterviewDate(\"15-04-2024 0900\"), new InternDuration(\"6 months\"), new Salary(\"500\"))","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" };","lastModifiedDate":"2016-12-20"},{"lineNumber":30,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-20"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-20"},{"lineNumber":32,"author":{"gitId":"-"},"content":" public static ReadOnlyAddressBook getSampleAddressBook() {","lastModifiedDate":"2016-12-20"},{"lineNumber":33,"author":{"gitId":"-"},"content":" AddressBook sampleAb \u003d new AddressBook();","lastModifiedDate":"2017-04-07"},{"lineNumber":34,"author":{"gitId":"-"},"content":" for (Person samplePerson : getSamplePersons()) {","lastModifiedDate":"2016-12-20"},{"lineNumber":35,"author":{"gitId":"-"},"content":" sampleAb.addPerson(samplePerson);","lastModifiedDate":"2017-04-07"},{"lineNumber":36,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-20"},{"lineNumber":37,"author":{"gitId":"-"},"content":" return sampleAb;","lastModifiedDate":"2017-04-07"},{"lineNumber":38,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-20"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-14"},{"lineNumber":40,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-03-14"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * Returns a tag set containing the list of strings given.","lastModifiedDate":"2017-03-14"},{"lineNumber":42,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-03-14"},{"lineNumber":43,"author":{"gitId":"-"},"content":" public static Set\u003cTag\u003e getTagSet(String... strings) {","lastModifiedDate":"2017-05-30"},{"lineNumber":44,"author":{"gitId":"-"},"content":" return Arrays.stream(strings)","lastModifiedDate":"2018-01-21"},{"lineNumber":45,"author":{"gitId":"-"},"content":" .map(Tag::new)","lastModifiedDate":"2018-01-21"},{"lineNumber":46,"author":{"gitId":"-"},"content":" .collect(Collectors.toSet());","lastModifiedDate":"2018-01-21"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-03-14"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-14"},{"lineNumber":49,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-12-20"}],"authorContributionMap":{"ashleygoh1":7,"-":42}},{"path":"src/main/java/seedu/address/storage/JsonAdaptedPerson.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.storage;","lastModifiedDate":"2018-08-13"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import com.fasterxml.jackson.annotation.JsonCreator;","lastModifiedDate":"2018-08-13"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import com.fasterxml.jackson.annotation.JsonProperty;","lastModifiedDate":"2018-08-13"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import seedu.address.commons.exceptions.IllegalValueException;","lastModifiedDate":"2018-08-13"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.InternDuration;","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.InterviewDate;","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.JobDescription;","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.Salary;","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2018-08-13"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":18,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2018-08-13"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * Jackson-friendly version of {@link Person}.","lastModifiedDate":"2018-08-13"},{"lineNumber":20,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-13"},{"lineNumber":21,"author":{"gitId":"-"},"content":"class JsonAdaptedPerson {","lastModifiedDate":"2018-12-03"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":23,"author":{"gitId":"-"},"content":" public static final String MISSING_FIELD_MESSAGE_FORMAT \u003d \"Person\u0027s %s field is missing!\";","lastModifiedDate":"2018-08-13"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":25,"author":{"gitId":"ashleygoh1"},"content":" private final String companyName;","lastModifiedDate":"2024-02-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" private final String phone;","lastModifiedDate":"2018-08-13"},{"lineNumber":27,"author":{"gitId":"-"},"content":" private final String email;","lastModifiedDate":"2018-08-13"},{"lineNumber":28,"author":{"gitId":"-"},"content":" private final String address;","lastModifiedDate":"2018-08-13"},{"lineNumber":29,"author":{"gitId":"ashleygoh1"},"content":" private final String tag;","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"ashleygoh1"},"content":" private final String jobDescription;","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"ashleygoh1"},"content":" private final String interviewDate;","lastModifiedDate":"2024-02-25"},{"lineNumber":32,"author":{"gitId":"ashleygoh1"},"content":" private final String internDuration;","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"ashleygoh1"},"content":" private final String salary;","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":36,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-13"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * Constructs a {@code JsonAdaptedPerson} with the given person details.","lastModifiedDate":"2018-08-13"},{"lineNumber":38,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-13"},{"lineNumber":39,"author":{"gitId":"-"},"content":" @JsonCreator","lastModifiedDate":"2018-08-13"},{"lineNumber":40,"author":{"gitId":"ashleygoh1"},"content":" public JsonAdaptedPerson(@JsonProperty(\"companyName\") String name, @JsonProperty(\"phone\") String phone,","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" @JsonProperty(\"email\") String email, @JsonProperty(\"address\") String address,","lastModifiedDate":"2018-08-13"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":" @JsonProperty(\"tag\") String tag, @JsonProperty(\"jobDescription\") String jobDescription,","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"ashleygoh1"},"content":" @JsonProperty(\"interviewDate\") String interviewDate,","lastModifiedDate":"2024-02-25"},{"lineNumber":44,"author":{"gitId":"ashleygoh1"},"content":" @JsonProperty(\"internDuration\") String internDuration,","lastModifiedDate":"2024-02-25"},{"lineNumber":45,"author":{"gitId":"ashleygoh1"},"content":" @JsonProperty(\"salary\") String salary) {","lastModifiedDate":"2024-02-25"},{"lineNumber":46,"author":{"gitId":"ashleygoh1"},"content":" this.companyName \u003d name;","lastModifiedDate":"2024-02-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" this.phone \u003d phone;","lastModifiedDate":"2018-08-13"},{"lineNumber":48,"author":{"gitId":"-"},"content":" this.email \u003d email;","lastModifiedDate":"2018-08-13"},{"lineNumber":49,"author":{"gitId":"-"},"content":" this.address \u003d address;","lastModifiedDate":"2018-08-13"},{"lineNumber":50,"author":{"gitId":"ashleygoh1"},"content":" this.tag \u003d tag;","lastModifiedDate":"2024-02-25"},{"lineNumber":51,"author":{"gitId":"ashleygoh1"},"content":" this.jobDescription \u003d jobDescription;","lastModifiedDate":"2024-02-25"},{"lineNumber":52,"author":{"gitId":"ashleygoh1"},"content":" this.interviewDate \u003d interviewDate;","lastModifiedDate":"2024-02-25"},{"lineNumber":53,"author":{"gitId":"ashleygoh1"},"content":" this.internDuration \u003d internDuration;","lastModifiedDate":"2024-02-25"},{"lineNumber":54,"author":{"gitId":"ashleygoh1"},"content":" this.salary \u003d salary;","lastModifiedDate":"2024-02-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":57,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-13"},{"lineNumber":58,"author":{"gitId":"-"},"content":" * Converts a given {@code Person} into this class for Jackson use.","lastModifiedDate":"2018-08-13"},{"lineNumber":59,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-13"},{"lineNumber":60,"author":{"gitId":"-"},"content":" public JsonAdaptedPerson(Person source) {","lastModifiedDate":"2018-08-13"},{"lineNumber":61,"author":{"gitId":"ashleygoh1"},"content":" companyName \u003d source.getCompanyName().fullName;","lastModifiedDate":"2024-02-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" phone \u003d source.getPhone().value;","lastModifiedDate":"2018-08-13"},{"lineNumber":63,"author":{"gitId":"-"},"content":" email \u003d source.getEmail().value;","lastModifiedDate":"2018-08-13"},{"lineNumber":64,"author":{"gitId":"-"},"content":" address \u003d source.getAddress().value;","lastModifiedDate":"2018-08-13"},{"lineNumber":65,"author":{"gitId":"ashleygoh1"},"content":" tag \u003d source.getTag().tagName;","lastModifiedDate":"2024-02-25"},{"lineNumber":66,"author":{"gitId":"ashleygoh1"},"content":" jobDescription \u003d source.getJobDescription().value;","lastModifiedDate":"2024-02-25"},{"lineNumber":67,"author":{"gitId":"ashleygoh1"},"content":" interviewDate \u003d source.getInterviewDate().toString();","lastModifiedDate":"2024-02-25"},{"lineNumber":68,"author":{"gitId":"ashleygoh1"},"content":" internDuration \u003d source.getInternDuration().value;","lastModifiedDate":"2024-02-25"},{"lineNumber":69,"author":{"gitId":"ashleygoh1"},"content":" salary \u003d source.getSalary().value;","lastModifiedDate":"2024-02-25"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":72,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-13"},{"lineNumber":73,"author":{"gitId":"-"},"content":" * Converts this Jackson-friendly adapted person object into the model\u0027s {@code Person} object.","lastModifiedDate":"2018-08-13"},{"lineNumber":74,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2018-08-13"},{"lineNumber":75,"author":{"gitId":"-"},"content":" * @throws IllegalValueException if there were any data constraints violated in the adapted person.","lastModifiedDate":"2018-08-13"},{"lineNumber":76,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-13"},{"lineNumber":77,"author":{"gitId":"-"},"content":" public Person toModelType() throws IllegalValueException {","lastModifiedDate":"2018-08-13"},{"lineNumber":78,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":79,"author":{"gitId":"ashleygoh1"},"content":" if (companyName \u003d\u003d null) {","lastModifiedDate":"2024-02-25"},{"lineNumber":80,"author":{"gitId":"-"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Name.class.getSimpleName()));","lastModifiedDate":"2018-08-13"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":82,"author":{"gitId":"ashleygoh1"},"content":" if (!Name.isValidName(companyName)) {","lastModifiedDate":"2024-02-25"},{"lineNumber":83,"author":{"gitId":"-"},"content":" throw new IllegalValueException(Name.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-08-13"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":85,"author":{"gitId":"ashleygoh1"},"content":" final Name modelCompanyName \u003d new Name(companyName);","lastModifiedDate":"2024-02-25"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":87,"author":{"gitId":"-"},"content":" if (phone \u003d\u003d null) {","lastModifiedDate":"2018-08-13"},{"lineNumber":88,"author":{"gitId":"-"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Phone.class.getSimpleName()));","lastModifiedDate":"2018-08-13"},{"lineNumber":89,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":90,"author":{"gitId":"-"},"content":" if (!Phone.isValidPhone(phone)) {","lastModifiedDate":"2018-08-13"},{"lineNumber":91,"author":{"gitId":"-"},"content":" throw new IllegalValueException(Phone.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-08-13"},{"lineNumber":92,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":93,"author":{"gitId":"-"},"content":" final Phone modelPhone \u003d new Phone(phone);","lastModifiedDate":"2018-08-13"},{"lineNumber":94,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":95,"author":{"gitId":"-"},"content":" if (email \u003d\u003d null) {","lastModifiedDate":"2018-08-13"},{"lineNumber":96,"author":{"gitId":"-"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Email.class.getSimpleName()));","lastModifiedDate":"2018-08-13"},{"lineNumber":97,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":98,"author":{"gitId":"-"},"content":" if (!Email.isValidEmail(email)) {","lastModifiedDate":"2018-08-13"},{"lineNumber":99,"author":{"gitId":"-"},"content":" throw new IllegalValueException(Email.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-08-13"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":101,"author":{"gitId":"-"},"content":" final Email modelEmail \u003d new Email(email);","lastModifiedDate":"2018-08-13"},{"lineNumber":102,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":103,"author":{"gitId":"-"},"content":" if (address \u003d\u003d null) {","lastModifiedDate":"2018-08-13"},{"lineNumber":104,"author":{"gitId":"-"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Address.class.getSimpleName()));","lastModifiedDate":"2018-08-13"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":106,"author":{"gitId":"-"},"content":" final Address modelAddress \u003d new Address(address);","lastModifiedDate":"2018-08-13"},{"lineNumber":107,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":108,"author":{"gitId":"ashleygoh1"},"content":" if (tag \u003d\u003d null) {","lastModifiedDate":"2024-02-25"},{"lineNumber":109,"author":{"gitId":"ashleygoh1"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Tag.class.getSimpleName()));","lastModifiedDate":"2024-02-25"},{"lineNumber":110,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":111,"author":{"gitId":"ashleygoh1"},"content":" if (!Tag.isValidTagName(tag)) {","lastModifiedDate":"2024-02-25"},{"lineNumber":112,"author":{"gitId":"ashleygoh1"},"content":" throw new IllegalValueException(Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-26"},{"lineNumber":113,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":114,"author":{"gitId":"ashleygoh1"},"content":" final Tag modelTag \u003d new Tag(tag);","lastModifiedDate":"2024-02-25"},{"lineNumber":115,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":116,"author":{"gitId":"ashleygoh1"},"content":" if (jobDescription \u003d\u003d null) {","lastModifiedDate":"2024-02-25"},{"lineNumber":117,"author":{"gitId":"ashleygoh1"},"content":" throw new IllegalValueException(","lastModifiedDate":"2024-02-25"},{"lineNumber":118,"author":{"gitId":"ashleygoh1"},"content":" String.format(MISSING_FIELD_MESSAGE_FORMAT, JobDescription.class.getSimpleName()));","lastModifiedDate":"2024-02-25"},{"lineNumber":119,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":120,"author":{"gitId":"ashleygoh1"},"content":" if (!JobDescription.isValidJobDescription(jobDescription)) {","lastModifiedDate":"2024-02-25"},{"lineNumber":121,"author":{"gitId":"ashleygoh1"},"content":" throw new IllegalValueException(JobDescription.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":122,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":123,"author":{"gitId":"ashleygoh1"},"content":" final JobDescription modelJobDescription \u003d new JobDescription(jobDescription);","lastModifiedDate":"2024-02-25"},{"lineNumber":124,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":125,"author":{"gitId":"ashleygoh1"},"content":" final InterviewDate modelInterviewDate;","lastModifiedDate":"2024-02-26"},{"lineNumber":126,"author":{"gitId":"ashleygoh1"},"content":" if (interviewDate.isEmpty()) {","lastModifiedDate":"2024-02-26"},{"lineNumber":127,"author":{"gitId":"ashleygoh1"},"content":" modelInterviewDate \u003d new InterviewDate(null);","lastModifiedDate":"2024-02-26"},{"lineNumber":128,"author":{"gitId":"ashleygoh1"},"content":" } else {","lastModifiedDate":"2024-02-26"},{"lineNumber":129,"author":{"gitId":"ashleygoh1"},"content":" modelInterviewDate \u003d new InterviewDate(interviewDate);","lastModifiedDate":"2024-02-26"},{"lineNumber":130,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":131,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":132,"author":{"gitId":"ashleygoh1"},"content":" if (internDuration \u003d\u003d null) {","lastModifiedDate":"2024-02-25"},{"lineNumber":133,"author":{"gitId":"ashleygoh1"},"content":" throw new IllegalValueException(","lastModifiedDate":"2024-02-25"},{"lineNumber":134,"author":{"gitId":"ashleygoh1"},"content":" String.format(MISSING_FIELD_MESSAGE_FORMAT, InternDuration.class.getSimpleName()));","lastModifiedDate":"2024-02-25"},{"lineNumber":135,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":136,"author":{"gitId":"ashleygoh1"},"content":" if (!InternDuration.isValidInternDuration(internDuration)) {","lastModifiedDate":"2024-02-26"},{"lineNumber":137,"author":{"gitId":"ashleygoh1"},"content":" throw new IllegalValueException(InternDuration.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":138,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":139,"author":{"gitId":"ashleygoh1"},"content":" final InternDuration modelInternDuration \u003d new InternDuration(internDuration);","lastModifiedDate":"2024-02-25"},{"lineNumber":140,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":141,"author":{"gitId":"ashleygoh1"},"content":" if (salary \u003d\u003d null) {","lastModifiedDate":"2024-02-25"},{"lineNumber":142,"author":{"gitId":"ashleygoh1"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Salary.class.getSimpleName()));","lastModifiedDate":"2024-02-25"},{"lineNumber":143,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":144,"author":{"gitId":"ashleygoh1"},"content":" if (!Salary.isValidSalary(salary)) {","lastModifiedDate":"2024-02-25"},{"lineNumber":145,"author":{"gitId":"ashleygoh1"},"content":" throw new IllegalValueException(Salary.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-26"},{"lineNumber":146,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":147,"author":{"gitId":"ashleygoh1"},"content":" final Salary modelSalary \u003d new Salary(salary);","lastModifiedDate":"2024-02-25"},{"lineNumber":148,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":149,"author":{"gitId":"ashleygoh1"},"content":" return new Person(modelCompanyName, modelPhone, modelEmail, modelAddress, modelTag,","lastModifiedDate":"2024-02-25"},{"lineNumber":150,"author":{"gitId":"ashleygoh1"},"content":" modelJobDescription, modelInterviewDate, modelInternDuration, modelSalary);","lastModifiedDate":"2024-02-25"},{"lineNumber":151,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":152,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":153,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2018-08-13"}],"authorContributionMap":{"ashleygoh1":74,"-":79}},{"path":"src/main/java/seedu/address/ui/MainWindow.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.ui;","lastModifiedDate":"2016-09-22"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-18"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2017-06-16"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-16"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import javafx.event.ActionEvent;","lastModifiedDate":"2016-12-18"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2016-08-26"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import javafx.scene.control.MenuItem;","lastModifiedDate":"2016-08-26"},{"lineNumber":8,"author":{"gitId":"chenyixin0"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2024-02-29"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import javafx.scene.control.TextInputControl;","lastModifiedDate":"2016-12-18"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import javafx.scene.input.KeyCombination;","lastModifiedDate":"2016-08-26"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import javafx.scene.input.KeyEvent;","lastModifiedDate":"2016-12-18"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import javafx.scene.layout.StackPane;","lastModifiedDate":"2017-05-09"},{"lineNumber":13,"author":{"gitId":"Jawad280"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2024-02-26"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2016-08-18"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.GuiSettings;","lastModifiedDate":"2016-09-28"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.LogsCenter;","lastModifiedDate":"2017-06-16"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.logic.Logic;","lastModifiedDate":"2016-09-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.CommandResult;","lastModifiedDate":"2018-12-09"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.exceptions.CommandException;","lastModifiedDate":"2018-12-09"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2018-12-09"},{"lineNumber":21,"author":{"gitId":"Jawad280"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2024-02-26"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-09"},{"lineNumber":23,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-18"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * The Main Window. Provides the basic application layout containing","lastModifiedDate":"2016-08-18"},{"lineNumber":25,"author":{"gitId":"-"},"content":" * a menu bar and space where other JavaFX elements can be placed.","lastModifiedDate":"2016-08-18"},{"lineNumber":26,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-18"},{"lineNumber":27,"author":{"gitId":"-"},"content":"public class MainWindow extends UiPart\u003cStage\u003e {","lastModifiedDate":"2017-11-29"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-28"},{"lineNumber":29,"author":{"gitId":"-"},"content":" private static final String FXML \u003d \"MainWindow.fxml\";","lastModifiedDate":"2016-08-18"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-18"},{"lineNumber":31,"author":{"gitId":"-"},"content":" private final Logger logger \u003d LogsCenter.getLogger(getClass());","lastModifiedDate":"2018-08-14"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-16"},{"lineNumber":33,"author":{"gitId":"-"},"content":" private Stage primaryStage;","lastModifiedDate":"2016-12-02"},{"lineNumber":34,"author":{"gitId":"-"},"content":" private Logic logic;","lastModifiedDate":"2016-09-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-18"},{"lineNumber":36,"author":{"gitId":"-"},"content":" // Independent Ui parts residing in this Ui container","lastModifiedDate":"2016-08-18"},{"lineNumber":37,"author":{"gitId":"-"},"content":" private PersonListPanel personListPanel;","lastModifiedDate":"2016-08-18"},{"lineNumber":38,"author":{"gitId":"-"},"content":" private ResultDisplay resultDisplay;","lastModifiedDate":"2018-12-09"},{"lineNumber":39,"author":{"gitId":"-"},"content":" private HelpWindow helpWindow;","lastModifiedDate":"2018-03-15"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-18"},{"lineNumber":41,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2016-09-21"},{"lineNumber":42,"author":{"gitId":"-"},"content":" private StackPane commandBoxPlaceholder;","lastModifiedDate":"2017-05-09"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-18"},{"lineNumber":44,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2016-08-18"},{"lineNumber":45,"author":{"gitId":"-"},"content":" private MenuItem helpMenuItem;","lastModifiedDate":"2016-08-18"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-18"},{"lineNumber":47,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2016-09-21"},{"lineNumber":48,"author":{"gitId":"-"},"content":" private StackPane personListPanelPlaceholder;","lastModifiedDate":"2017-05-09"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":50,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2016-09-21"},{"lineNumber":51,"author":{"gitId":"-"},"content":" private StackPane resultDisplayPlaceholder;","lastModifiedDate":"2017-05-09"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":53,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2016-09-21"},{"lineNumber":54,"author":{"gitId":"-"},"content":" private StackPane statusbarPlaceholder;","lastModifiedDate":"2017-05-09"},{"lineNumber":55,"author":{"gitId":"Jawad280"},"content":" @FXML","lastModifiedDate":"2024-02-26"},{"lineNumber":56,"author":{"gitId":"chenyixin0"},"content":" private ScrollPane viewPanelPlaceHolder;","lastModifiedDate":"2024-02-29"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":58,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2020-05-27"},{"lineNumber":59,"author":{"gitId":"-"},"content":" * Creates a {@code MainWindow} with the given {@code Stage} and {@code Logic}.","lastModifiedDate":"2020-05-27"},{"lineNumber":60,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2020-05-27"},{"lineNumber":61,"author":{"gitId":"-"},"content":" public MainWindow(Stage primaryStage, Logic logic) {","lastModifiedDate":"2018-12-08"},{"lineNumber":62,"author":{"gitId":"-"},"content":" super(FXML, primaryStage);","lastModifiedDate":"2017-11-29"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":64,"author":{"gitId":"-"},"content":" // Set dependencies","lastModifiedDate":"2016-09-21"},{"lineNumber":65,"author":{"gitId":"-"},"content":" this.primaryStage \u003d primaryStage;","lastModifiedDate":"2016-12-02"},{"lineNumber":66,"author":{"gitId":"-"},"content":" this.logic \u003d logic;","lastModifiedDate":"2016-09-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":68,"author":{"gitId":"-"},"content":" // Configure the UI","lastModifiedDate":"2016-09-21"},{"lineNumber":69,"author":{"gitId":"-"},"content":" setWindowDefaultSize(logic.getGuiSettings());","lastModifiedDate":"2018-11-27"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-18"},{"lineNumber":71,"author":{"gitId":"-"},"content":" setAccelerators();","lastModifiedDate":"2016-09-21"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-03-15"},{"lineNumber":73,"author":{"gitId":"-"},"content":" helpWindow \u003d new HelpWindow();","lastModifiedDate":"2018-03-15"},{"lineNumber":74,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-18"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-18"},{"lineNumber":76,"author":{"gitId":"-"},"content":" public Stage getPrimaryStage() {","lastModifiedDate":"2016-12-24"},{"lineNumber":77,"author":{"gitId":"-"},"content":" return primaryStage;","lastModifiedDate":"2016-12-24"},{"lineNumber":78,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-24"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-24"},{"lineNumber":80,"author":{"gitId":"-"},"content":" private void setAccelerators() {","lastModifiedDate":"2016-09-21"},{"lineNumber":81,"author":{"gitId":"-"},"content":" setAccelerator(helpMenuItem, KeyCombination.valueOf(\"F1\"));","lastModifiedDate":"2016-12-18"},{"lineNumber":82,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-18"},{"lineNumber":83,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-18"},{"lineNumber":84,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-12-18"},{"lineNumber":85,"author":{"gitId":"-"},"content":" * Sets the accelerator of a MenuItem.","lastModifiedDate":"2016-12-18"},{"lineNumber":86,"author":{"gitId":"-"},"content":" * @param keyCombination the KeyCombination value of the accelerator","lastModifiedDate":"2016-12-18"},{"lineNumber":87,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-18"},{"lineNumber":88,"author":{"gitId":"-"},"content":" private void setAccelerator(MenuItem menuItem, KeyCombination keyCombination) {","lastModifiedDate":"2016-12-18"},{"lineNumber":89,"author":{"gitId":"-"},"content":" menuItem.setAccelerator(keyCombination);","lastModifiedDate":"2016-12-18"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-18"},{"lineNumber":91,"author":{"gitId":"-"},"content":" /*","lastModifiedDate":"2016-12-18"},{"lineNumber":92,"author":{"gitId":"-"},"content":" * TODO: the code below can be removed once the bug reported here","lastModifiedDate":"2016-12-18"},{"lineNumber":93,"author":{"gitId":"-"},"content":" * https://bugs.openjdk.java.net/browse/JDK-8131666","lastModifiedDate":"2016-12-18"},{"lineNumber":94,"author":{"gitId":"-"},"content":" * is fixed in later version of SDK.","lastModifiedDate":"2016-12-18"},{"lineNumber":95,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2016-12-18"},{"lineNumber":96,"author":{"gitId":"-"},"content":" * According to the bug report, TextInputControl (TextField, TextArea) will","lastModifiedDate":"2016-12-18"},{"lineNumber":97,"author":{"gitId":"-"},"content":" * consume function-key events. Because CommandBox contains a TextField, and","lastModifiedDate":"2016-12-18"},{"lineNumber":98,"author":{"gitId":"-"},"content":" * ResultDisplay contains a TextArea, thus some accelerators (e.g F1) will","lastModifiedDate":"2016-12-18"},{"lineNumber":99,"author":{"gitId":"-"},"content":" * not work when the focus is in them because the key event is consumed by","lastModifiedDate":"2016-12-18"},{"lineNumber":100,"author":{"gitId":"-"},"content":" * the TextInputControl(s).","lastModifiedDate":"2016-12-18"},{"lineNumber":101,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2016-12-18"},{"lineNumber":102,"author":{"gitId":"-"},"content":" * For now, we add following event filter to capture such key events and open","lastModifiedDate":"2016-12-18"},{"lineNumber":103,"author":{"gitId":"-"},"content":" * help window purposely so to support accelerators even when focus is","lastModifiedDate":"2016-12-18"},{"lineNumber":104,"author":{"gitId":"-"},"content":" * in CommandBox or ResultDisplay.","lastModifiedDate":"2016-12-18"},{"lineNumber":105,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-18"},{"lineNumber":106,"author":{"gitId":"-"},"content":" getRoot().addEventFilter(KeyEvent.KEY_PRESSED, event -\u003e {","lastModifiedDate":"2016-12-24"},{"lineNumber":107,"author":{"gitId":"-"},"content":" if (event.getTarget() instanceof TextInputControl \u0026\u0026 keyCombination.match(event)) {","lastModifiedDate":"2016-12-18"},{"lineNumber":108,"author":{"gitId":"-"},"content":" menuItem.getOnAction().handle(new ActionEvent());","lastModifiedDate":"2016-12-18"},{"lineNumber":109,"author":{"gitId":"-"},"content":" event.consume();","lastModifiedDate":"2016-12-18"},{"lineNumber":110,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-18"},{"lineNumber":111,"author":{"gitId":"-"},"content":" });","lastModifiedDate":"2016-12-18"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-21"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":114,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-08-16"},{"lineNumber":115,"author":{"gitId":"-"},"content":" * Fills up all the placeholders of this window.","lastModifiedDate":"2017-08-16"},{"lineNumber":116,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-08-16"},{"lineNumber":117,"author":{"gitId":"-"},"content":" void fillInnerParts() {","lastModifiedDate":"2016-09-21"},{"lineNumber":118,"author":{"gitId":"-"},"content":" personListPanel \u003d new PersonListPanel(logic.getFilteredPersonList());","lastModifiedDate":"2019-01-25"},{"lineNumber":119,"author":{"gitId":"-"},"content":" personListPanelPlaceholder.getChildren().add(personListPanel.getRoot());","lastModifiedDate":"2017-06-14"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-14"},{"lineNumber":121,"author":{"gitId":"-"},"content":" resultDisplay \u003d new ResultDisplay();","lastModifiedDate":"2018-12-09"},{"lineNumber":122,"author":{"gitId":"-"},"content":" resultDisplayPlaceholder.getChildren().add(resultDisplay.getRoot());","lastModifiedDate":"2017-06-14"},{"lineNumber":123,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-14"},{"lineNumber":124,"author":{"gitId":"-"},"content":" StatusBarFooter statusBarFooter \u003d new StatusBarFooter(logic.getAddressBookFilePath());","lastModifiedDate":"2019-01-25"},{"lineNumber":125,"author":{"gitId":"-"},"content":" statusbarPlaceholder.getChildren().add(statusBarFooter.getRoot());","lastModifiedDate":"2017-06-14"},{"lineNumber":126,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-14"},{"lineNumber":127,"author":{"gitId":"-"},"content":" CommandBox commandBox \u003d new CommandBox(this::executeCommand);","lastModifiedDate":"2019-01-25"},{"lineNumber":128,"author":{"gitId":"-"},"content":" commandBoxPlaceholder.getChildren().add(commandBox.getRoot());","lastModifiedDate":"2017-06-14"},{"lineNumber":129,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-18"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-18"},{"lineNumber":131,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-08-18"},{"lineNumber":132,"author":{"gitId":"-"},"content":" * Sets the default size based on {@code guiSettings}.","lastModifiedDate":"2018-11-27"},{"lineNumber":133,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-18"},{"lineNumber":134,"author":{"gitId":"-"},"content":" private void setWindowDefaultSize(GuiSettings guiSettings) {","lastModifiedDate":"2018-11-27"},{"lineNumber":135,"author":{"gitId":"-"},"content":" primaryStage.setHeight(guiSettings.getWindowHeight());","lastModifiedDate":"2018-11-27"},{"lineNumber":136,"author":{"gitId":"-"},"content":" primaryStage.setWidth(guiSettings.getWindowWidth());","lastModifiedDate":"2018-11-27"},{"lineNumber":137,"author":{"gitId":"-"},"content":" if (guiSettings.getWindowCoordinates() !\u003d null) {","lastModifiedDate":"2018-11-27"},{"lineNumber":138,"author":{"gitId":"-"},"content":" primaryStage.setX(guiSettings.getWindowCoordinates().getX());","lastModifiedDate":"2018-11-27"},{"lineNumber":139,"author":{"gitId":"-"},"content":" primaryStage.setY(guiSettings.getWindowCoordinates().getY());","lastModifiedDate":"2018-11-27"},{"lineNumber":140,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-18"},{"lineNumber":141,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-18"},{"lineNumber":142,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-18"},{"lineNumber":143,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-08-16"},{"lineNumber":144,"author":{"gitId":"-"},"content":" * Opens the help window or focuses on it if it\u0027s already opened.","lastModifiedDate":"2018-03-15"},{"lineNumber":145,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-08-16"},{"lineNumber":146,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2016-08-18"},{"lineNumber":147,"author":{"gitId":"-"},"content":" public void handleHelp() {","lastModifiedDate":"2016-08-31"},{"lineNumber":148,"author":{"gitId":"-"},"content":" if (!helpWindow.isShowing()) {","lastModifiedDate":"2018-03-15"},{"lineNumber":149,"author":{"gitId":"-"},"content":" helpWindow.show();","lastModifiedDate":"2016-08-18"},{"lineNumber":150,"author":{"gitId":"-"},"content":" } else {","lastModifiedDate":"2018-03-15"},{"lineNumber":151,"author":{"gitId":"-"},"content":" helpWindow.focus();","lastModifiedDate":"2018-03-15"},{"lineNumber":152,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-03-15"},{"lineNumber":153,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-18"},{"lineNumber":154,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-18"},{"lineNumber":155,"author":{"gitId":"-"},"content":" void show() {","lastModifiedDate":"2016-10-15"},{"lineNumber":156,"author":{"gitId":"-"},"content":" primaryStage.show();","lastModifiedDate":"2016-08-18"},{"lineNumber":157,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-18"},{"lineNumber":158,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-18"},{"lineNumber":159,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-08-18"},{"lineNumber":160,"author":{"gitId":"-"},"content":" * Closes the application.","lastModifiedDate":"2016-08-18"},{"lineNumber":161,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-18"},{"lineNumber":162,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2016-08-18"},{"lineNumber":163,"author":{"gitId":"-"},"content":" private void handleExit() {","lastModifiedDate":"2016-08-18"},{"lineNumber":164,"author":{"gitId":"-"},"content":" GuiSettings guiSettings \u003d new GuiSettings(primaryStage.getWidth(), primaryStage.getHeight(),","lastModifiedDate":"2018-12-08"},{"lineNumber":165,"author":{"gitId":"-"},"content":" (int) primaryStage.getX(), (int) primaryStage.getY());","lastModifiedDate":"2018-12-08"},{"lineNumber":166,"author":{"gitId":"-"},"content":" logic.setGuiSettings(guiSettings);","lastModifiedDate":"2018-12-08"},{"lineNumber":167,"author":{"gitId":"-"},"content":" helpWindow.hide();","lastModifiedDate":"2018-12-08"},{"lineNumber":168,"author":{"gitId":"-"},"content":" primaryStage.hide();","lastModifiedDate":"2018-12-08"},{"lineNumber":169,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-18"},{"lineNumber":170,"author":{"gitId":"Jawad280"},"content":" /**","lastModifiedDate":"2024-02-26"},{"lineNumber":171,"author":{"gitId":"Jawad280"},"content":" * Views the person on the View Panel.","lastModifiedDate":"2024-02-26"},{"lineNumber":172,"author":{"gitId":"Jawad280"},"content":" */","lastModifiedDate":"2024-02-26"},{"lineNumber":173,"author":{"gitId":"Jawad280"},"content":" @FXML","lastModifiedDate":"2024-02-26"},{"lineNumber":174,"author":{"gitId":"chenyixin0"},"content":" // private void handleView(Person p, int displayIndex) {","lastModifiedDate":"2024-02-29"},{"lineNumber":175,"author":{"gitId":"chenyixin0"},"content":" // PersonCard viewPanel \u003d new PersonCard(p, displayIndex);","lastModifiedDate":"2024-02-29"},{"lineNumber":176,"author":{"gitId":"chenyixin0"},"content":" // //ViewPanel viewPanel \u003d new ViewPanel(p);","lastModifiedDate":"2024-02-29"},{"lineNumber":177,"author":{"gitId":"chenyixin0"},"content":" // //viewPanelPlaceHolder.getChildren().clear();","lastModifiedDate":"2024-02-29"},{"lineNumber":178,"author":{"gitId":"chenyixin0"},"content":" // viewPanelPlaceHolder.getChildren().add(viewPanel.getRoot());","lastModifiedDate":"2024-02-29"},{"lineNumber":179,"author":{"gitId":"chenyixin0"},"content":" // }","lastModifiedDate":"2024-02-29"},{"lineNumber":180,"author":{"gitId":"chenyixin0"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":181,"author":{"gitId":"chenyixin0"},"content":" private void handleView(Person p) {","lastModifiedDate":"2024-02-29"},{"lineNumber":182,"author":{"gitId":"chenyixin0"},"content":" ViewPanel viewPanel \u003d new ViewPanel(p);","lastModifiedDate":"2024-02-29"},{"lineNumber":183,"author":{"gitId":"chenyixin0"},"content":" //viewPanelPlaceHolder.getChildren().clear();","lastModifiedDate":"2024-02-29"},{"lineNumber":184,"author":{"gitId":"chenyixin0"},"content":" VBox holder \u003d viewPanelPlaceHolder.getContent() \u003d\u003d null ? new VBox()","lastModifiedDate":"2024-02-29"},{"lineNumber":185,"author":{"gitId":"chenyixin0"},"content":" : (VBox) viewPanelPlaceHolder.getContent();","lastModifiedDate":"2024-02-29"},{"lineNumber":186,"author":{"gitId":"chenyixin0"},"content":" holder.getChildren().add(viewPanel.getRoot());","lastModifiedDate":"2024-02-29"},{"lineNumber":187,"author":{"gitId":"chenyixin0"},"content":" viewPanelPlaceHolder.setContent(holder);","lastModifiedDate":"2024-02-29"},{"lineNumber":188,"author":{"gitId":"chenyixin0"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":189,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":190,"author":{"gitId":"-"},"content":" public PersonListPanel getPersonListPanel() {","lastModifiedDate":"2016-08-25"},{"lineNumber":191,"author":{"gitId":"-"},"content":" return personListPanel;","lastModifiedDate":"2018-08-14"},{"lineNumber":192,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-25"},{"lineNumber":193,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":194,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-12-09"},{"lineNumber":195,"author":{"gitId":"-"},"content":" * Executes the command and returns the result.","lastModifiedDate":"2018-12-09"},{"lineNumber":196,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2018-12-09"},{"lineNumber":197,"author":{"gitId":"-"},"content":" * @see seedu.address.logic.Logic#execute(String)","lastModifiedDate":"2018-12-09"},{"lineNumber":198,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-12-09"},{"lineNumber":199,"author":{"gitId":"-"},"content":" private CommandResult executeCommand(String commandText) throws CommandException, ParseException {","lastModifiedDate":"2018-12-09"},{"lineNumber":200,"author":{"gitId":"-"},"content":" try {","lastModifiedDate":"2018-12-09"},{"lineNumber":201,"author":{"gitId":"chenyixin0"},"content":" viewPanelPlaceHolder.setContent(null);","lastModifiedDate":"2024-02-29"},{"lineNumber":202,"author":{"gitId":"-"},"content":" CommandResult commandResult \u003d logic.execute(commandText);","lastModifiedDate":"2018-12-09"},{"lineNumber":203,"author":{"gitId":"-"},"content":" logger.info(\"Result: \" + commandResult.getFeedbackToUser());","lastModifiedDate":"2018-12-09"},{"lineNumber":204,"author":{"gitId":"-"},"content":" resultDisplay.setFeedbackToUser(commandResult.getFeedbackToUser());","lastModifiedDate":"2018-12-09"},{"lineNumber":205,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":206,"author":{"gitId":"-"},"content":" if (commandResult.isShowHelp()) {","lastModifiedDate":"2018-12-09"},{"lineNumber":207,"author":{"gitId":"-"},"content":" handleHelp();","lastModifiedDate":"2018-12-09"},{"lineNumber":208,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":209,"author":{"gitId":"Jawad280"},"content":" if (commandResult.getViewPerson() !\u003d null) {","lastModifiedDate":"2024-02-26"},{"lineNumber":210,"author":{"gitId":"Jawad280"},"content":" Person p \u003d commandResult.getViewPerson();","lastModifiedDate":"2024-02-26"},{"lineNumber":211,"author":{"gitId":"chenyixin0"},"content":" handleView(p);","lastModifiedDate":"2024-02-29"},{"lineNumber":212,"author":{"gitId":"chenyixin0"},"content":" //handleView(p, 1);","lastModifiedDate":"2024-02-29"},{"lineNumber":213,"author":{"gitId":"chenyixin0"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":214,"author":{"gitId":"chenyixin0"},"content":" if (commandResult.getViewList() !\u003d null) {","lastModifiedDate":"2024-02-29"},{"lineNumber":215,"author":{"gitId":"chenyixin0"},"content":" //int index \u003d 1;","lastModifiedDate":"2024-02-29"},{"lineNumber":216,"author":{"gitId":"chenyixin0"},"content":" for (Person p : commandResult.getViewList()) {","lastModifiedDate":"2024-02-29"},{"lineNumber":217,"author":{"gitId":"chenyixin0"},"content":" handleView(p);","lastModifiedDate":"2024-02-29"},{"lineNumber":218,"author":{"gitId":"chenyixin0"},"content":" //handleView(p, index);","lastModifiedDate":"2024-02-29"},{"lineNumber":219,"author":{"gitId":"chenyixin0"},"content":" //index++;","lastModifiedDate":"2024-02-29"},{"lineNumber":220,"author":{"gitId":"chenyixin0"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":221,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":222,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":223,"author":{"gitId":"-"},"content":" if (commandResult.isExit()) {","lastModifiedDate":"2018-12-09"},{"lineNumber":224,"author":{"gitId":"-"},"content":" handleExit();","lastModifiedDate":"2018-12-09"},{"lineNumber":225,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":226,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":227,"author":{"gitId":"-"},"content":" return commandResult;","lastModifiedDate":"2018-12-09"},{"lineNumber":228,"author":{"gitId":"-"},"content":" } catch (CommandException | ParseException e) {","lastModifiedDate":"2018-12-09"},{"lineNumber":229,"author":{"gitId":"-"},"content":" logger.info(\"An error occurred while executing command: \" + commandText);","lastModifiedDate":"2023-06-13"},{"lineNumber":230,"author":{"gitId":"-"},"content":" resultDisplay.setFeedbackToUser(e.getMessage());","lastModifiedDate":"2018-12-09"},{"lineNumber":231,"author":{"gitId":"-"},"content":" throw e;","lastModifiedDate":"2018-12-09"},{"lineNumber":232,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":233,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":234,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-18"}],"authorContributionMap":{"chenyixin0":28,"Jawad280":10,"-":196}},{"path":"src/main/java/seedu/address/ui/PersonCard.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.ui;","lastModifiedDate":"2016-09-22"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2016-09-21"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2016-09-21"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2016-09-21"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2016-12-24"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-01-10"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":9,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-08-16"},{"lineNumber":10,"author":{"gitId":"-"},"content":" * An UI component that displays information of a {@code Person}.","lastModifiedDate":"2017-08-16"},{"lineNumber":11,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-08-16"},{"lineNumber":12,"author":{"gitId":"-"},"content":"public class PersonCard extends UiPart\u003cRegion\u003e {","lastModifiedDate":"2016-12-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":14,"author":{"gitId":"-"},"content":" private static final String FXML \u003d \"PersonListCard.fxml\";","lastModifiedDate":"2016-09-21"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":16,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-03-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * Note: Certain keywords such as \"location\" and \"resources\" are reserved keywords in JavaFX.","lastModifiedDate":"2017-03-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * As a consequence, UI elements\u0027 variable names cannot be set to such keywords","lastModifiedDate":"2017-03-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * or an exception will be thrown by JavaFX during runtime.","lastModifiedDate":"2017-03-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2017-03-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" * @see \u003ca href\u003d\"https://github.com/se-edu/addressbook-level4/issues/336\"\u003eThe issue on AddressBook level 4\u003c/a\u003e","lastModifiedDate":"2017-03-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-03-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" public final Person person;","lastModifiedDate":"2018-01-10"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-12"},{"lineNumber":26,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2016-09-21"},{"lineNumber":27,"author":{"gitId":"-"},"content":" private HBox cardPane;","lastModifiedDate":"2016-09-21"},{"lineNumber":28,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2016-09-21"},{"lineNumber":29,"author":{"gitId":"-"},"content":" private Label name;","lastModifiedDate":"2016-09-21"},{"lineNumber":30,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2016-09-21"},{"lineNumber":31,"author":{"gitId":"-"},"content":" private Label id;","lastModifiedDate":"2016-09-21"},{"lineNumber":32,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2016-09-21"},{"lineNumber":33,"author":{"gitId":"-"},"content":" private Label phone;","lastModifiedDate":"2016-09-21"},{"lineNumber":34,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2016-09-21"},{"lineNumber":35,"author":{"gitId":"-"},"content":" private Label address;","lastModifiedDate":"2016-09-21"},{"lineNumber":36,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2016-09-21"},{"lineNumber":37,"author":{"gitId":"-"},"content":" private Label email;","lastModifiedDate":"2016-09-21"},{"lineNumber":38,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2016-09-21"},{"lineNumber":39,"author":{"gitId":"ashleygoh1"},"content":" private Label tags;","lastModifiedDate":"2024-02-25"},{"lineNumber":40,"author":{"gitId":"ashleygoh1"},"content":" @FXML","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"ashleygoh1"},"content":" private Label jobDescription;","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":" @FXML","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"ashleygoh1"},"content":" private Label interviewDate;","lastModifiedDate":"2024-02-25"},{"lineNumber":44,"author":{"gitId":"ashleygoh1"},"content":" @FXML","lastModifiedDate":"2024-02-25"},{"lineNumber":45,"author":{"gitId":"ashleygoh1"},"content":" private Label internDuration;","lastModifiedDate":"2024-02-25"},{"lineNumber":46,"author":{"gitId":"ashleygoh1"},"content":" @FXML","lastModifiedDate":"2024-02-25"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":" private Label salary;","lastModifiedDate":"2024-02-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":49,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2020-05-27"},{"lineNumber":50,"author":{"gitId":"-"},"content":" * Creates a {@code PersonCode} with the given {@code Person} and index to display.","lastModifiedDate":"2020-05-27"},{"lineNumber":51,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2020-05-27"},{"lineNumber":52,"author":{"gitId":"-"},"content":" public PersonCard(Person person, int displayedIndex) {","lastModifiedDate":"2018-01-10"},{"lineNumber":53,"author":{"gitId":"-"},"content":" super(FXML);","lastModifiedDate":"2016-12-24"},{"lineNumber":54,"author":{"gitId":"-"},"content":" this.person \u003d person;","lastModifiedDate":"2017-07-12"},{"lineNumber":55,"author":{"gitId":"-"},"content":" id.setText(displayedIndex + \". \");","lastModifiedDate":"2016-09-21"},{"lineNumber":56,"author":{"gitId":"ashleygoh1"},"content":" name.setText(person.getCompanyName().fullName);","lastModifiedDate":"2024-02-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" phone.setText(person.getPhone().value);","lastModifiedDate":"2017-12-20"},{"lineNumber":58,"author":{"gitId":"-"},"content":" address.setText(person.getAddress().value);","lastModifiedDate":"2017-12-20"},{"lineNumber":59,"author":{"gitId":"-"},"content":" email.setText(person.getEmail().value);","lastModifiedDate":"2017-12-20"},{"lineNumber":60,"author":{"gitId":"ashleygoh1"},"content":" tags.setText(person.getTag().tagName);","lastModifiedDate":"2024-02-25"},{"lineNumber":61,"author":{"gitId":"ashleygoh1"},"content":" jobDescription.setText(person.getJobDescription().value);","lastModifiedDate":"2024-02-25"},{"lineNumber":62,"author":{"gitId":"ashleygoh1"},"content":" interviewDate.setText(person.getInterviewDate().toString());","lastModifiedDate":"2024-02-25"},{"lineNumber":63,"author":{"gitId":"ashleygoh1"},"content":" internDuration.setText(person.getInternDuration().value);","lastModifiedDate":"2024-02-25"},{"lineNumber":64,"author":{"gitId":"ashleygoh1"},"content":" salary.setText(person.getSalary().value);","lastModifiedDate":"2024-02-25"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-18"},{"lineNumber":66,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-09-21"}],"authorContributionMap":{"ashleygoh1":15,"-":51}},{"path":"src/main/java/seedu/address/ui/ViewPanel.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Jawad280"},"content":"package seedu.address.ui;","lastModifiedDate":"2024-02-26"},{"lineNumber":2,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":3,"author":{"gitId":"Jawad280"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2024-02-26"},{"lineNumber":4,"author":{"gitId":"Jawad280"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2024-02-26"},{"lineNumber":5,"author":{"gitId":"Jawad280"},"content":"import javafx.scene.layout.FlowPane;","lastModifiedDate":"2024-02-26"},{"lineNumber":6,"author":{"gitId":"Jawad280"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2024-02-26"},{"lineNumber":7,"author":{"gitId":"Jawad280"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"Jawad280"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2024-02-26"},{"lineNumber":9,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":10,"author":{"gitId":"Jawad280"},"content":"/**","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"Jawad280"},"content":" * A UI component that displays information of a {@code Person}.","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"Jawad280"},"content":" */","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"Jawad280"},"content":"public class ViewPanel extends UiPart\u003cRegion\u003e {","lastModifiedDate":"2024-02-26"},{"lineNumber":14,"author":{"gitId":"Jawad280"},"content":" private static final String FXML \u003d \"ViewPanel.fxml\";","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":16,"author":{"gitId":"Jawad280"},"content":" public final Person person;","lastModifiedDate":"2024-02-26"},{"lineNumber":17,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":18,"author":{"gitId":"Jawad280"},"content":" @FXML","lastModifiedDate":"2024-02-26"},{"lineNumber":19,"author":{"gitId":"Jawad280"},"content":" private VBox viewPanel;","lastModifiedDate":"2024-02-26"},{"lineNumber":20,"author":{"gitId":"Jawad280"},"content":" @FXML","lastModifiedDate":"2024-02-26"},{"lineNumber":21,"author":{"gitId":"Jawad280"},"content":" private Label companyName;","lastModifiedDate":"2024-02-26"},{"lineNumber":22,"author":{"gitId":"Jawad280"},"content":" @FXML","lastModifiedDate":"2024-02-26"},{"lineNumber":23,"author":{"gitId":"Jawad280"},"content":" private Label phone;","lastModifiedDate":"2024-02-26"},{"lineNumber":24,"author":{"gitId":"Jawad280"},"content":" @FXML","lastModifiedDate":"2024-02-26"},{"lineNumber":25,"author":{"gitId":"Jawad280"},"content":" private Label address;","lastModifiedDate":"2024-02-26"},{"lineNumber":26,"author":{"gitId":"Jawad280"},"content":" @FXML","lastModifiedDate":"2024-02-26"},{"lineNumber":27,"author":{"gitId":"Jawad280"},"content":" private Label email;","lastModifiedDate":"2024-02-26"},{"lineNumber":28,"author":{"gitId":"Jawad280"},"content":" @FXML","lastModifiedDate":"2024-02-26"},{"lineNumber":29,"author":{"gitId":"Jawad280"},"content":" private FlowPane tag;","lastModifiedDate":"2024-02-26"},{"lineNumber":30,"author":{"gitId":"Jawad280"},"content":" @FXML","lastModifiedDate":"2024-02-26"},{"lineNumber":31,"author":{"gitId":"Jawad280"},"content":" private Label interviewDate;","lastModifiedDate":"2024-02-26"},{"lineNumber":32,"author":{"gitId":"Jawad280"},"content":" @FXML","lastModifiedDate":"2024-02-26"},{"lineNumber":33,"author":{"gitId":"Jawad280"},"content":" private Label internDuration;","lastModifiedDate":"2024-02-26"},{"lineNumber":34,"author":{"gitId":"Jawad280"},"content":" @FXML","lastModifiedDate":"2024-02-26"},{"lineNumber":35,"author":{"gitId":"Jawad280"},"content":" private Label salary;","lastModifiedDate":"2024-02-26"},{"lineNumber":36,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":37,"author":{"gitId":"Jawad280"},"content":" /**","lastModifiedDate":"2024-02-26"},{"lineNumber":38,"author":{"gitId":"Jawad280"},"content":" * Creates a {@code PersonCode} with the given {@code Person} to display.","lastModifiedDate":"2024-02-26"},{"lineNumber":39,"author":{"gitId":"Jawad280"},"content":" */","lastModifiedDate":"2024-02-26"},{"lineNumber":40,"author":{"gitId":"Jawad280"},"content":" public ViewPanel(Person person) {","lastModifiedDate":"2024-02-26"},{"lineNumber":41,"author":{"gitId":"Jawad280"},"content":" super(FXML);","lastModifiedDate":"2024-02-26"},{"lineNumber":42,"author":{"gitId":"Jawad280"},"content":" this.person \u003d person;","lastModifiedDate":"2024-02-26"},{"lineNumber":43,"author":{"gitId":"Jawad280"},"content":" companyName.setText(person.getCompanyName().fullName);","lastModifiedDate":"2024-02-26"},{"lineNumber":44,"author":{"gitId":"Jawad280"},"content":" phone.setText(person.getPhone().value);","lastModifiedDate":"2024-02-26"},{"lineNumber":45,"author":{"gitId":"Jawad280"},"content":" address.setText(person.getAddress().value);","lastModifiedDate":"2024-02-26"},{"lineNumber":46,"author":{"gitId":"Jawad280"},"content":" email.setText(person.getEmail().value);","lastModifiedDate":"2024-02-26"},{"lineNumber":47,"author":{"gitId":"Jawad280"},"content":" interviewDate.setText(person.getInterviewDate().toString());","lastModifiedDate":"2024-02-26"},{"lineNumber":48,"author":{"gitId":"Jawad280"},"content":" tag.getChildren().add(new Label(person.getTag().tagName));","lastModifiedDate":"2024-02-26"},{"lineNumber":49,"author":{"gitId":"Jawad280"},"content":" internDuration.setText(person.getInternDuration().value);","lastModifiedDate":"2024-02-26"},{"lineNumber":50,"author":{"gitId":"Jawad280"},"content":" salary.setText(person.getSalary().value);","lastModifiedDate":"2024-02-26"},{"lineNumber":51,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":52,"author":{"gitId":"Jawad280"},"content":"}","lastModifiedDate":"2024-02-26"}],"authorContributionMap":{"Jawad280":52}},{"path":"src/main/resources/view/DarkTheme.css","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":".background {","lastModifiedDate":"2016-08-08"},{"lineNumber":2,"author":{"gitId":"-"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2016-08-15"},{"lineNumber":3,"author":{"gitId":"-"},"content":" background-color: #383838; /* Used in the default.html file */","lastModifiedDate":"2017-03-02"},{"lineNumber":4,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":6,"author":{"gitId":"-"},"content":".label {","lastModifiedDate":"2016-08-08"},{"lineNumber":7,"author":{"gitId":"-"},"content":" -fx-font-size: 11pt;","lastModifiedDate":"2016-08-08"},{"lineNumber":8,"author":{"gitId":"-"},"content":" -fx-font-family: \"Segoe UI Semibold\";","lastModifiedDate":"2022-01-13"},{"lineNumber":9,"author":{"gitId":"-"},"content":" -fx-text-fill: #555555;","lastModifiedDate":"2016-08-15"},{"lineNumber":10,"author":{"gitId":"-"},"content":" -fx-opacity: 0.9;","lastModifiedDate":"2016-08-08"},{"lineNumber":11,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":13,"author":{"gitId":"-"},"content":".label-bright {","lastModifiedDate":"2016-08-08"},{"lineNumber":14,"author":{"gitId":"-"},"content":" -fx-font-size: 11pt;","lastModifiedDate":"2016-08-08"},{"lineNumber":15,"author":{"gitId":"-"},"content":" -fx-font-family: \"Segoe UI Semibold\";","lastModifiedDate":"2022-01-13"},{"lineNumber":16,"author":{"gitId":"-"},"content":" -fx-text-fill: white;","lastModifiedDate":"2016-08-08"},{"lineNumber":17,"author":{"gitId":"-"},"content":" -fx-opacity: 1;","lastModifiedDate":"2016-08-08"},{"lineNumber":18,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":20,"author":{"gitId":"-"},"content":".label-header {","lastModifiedDate":"2016-08-08"},{"lineNumber":21,"author":{"gitId":"-"},"content":" -fx-font-size: 32pt;","lastModifiedDate":"2016-08-08"},{"lineNumber":22,"author":{"gitId":"-"},"content":" -fx-font-family: \"Segoe UI Light\";","lastModifiedDate":"2022-01-13"},{"lineNumber":23,"author":{"gitId":"-"},"content":" -fx-text-fill: white;","lastModifiedDate":"2016-08-08"},{"lineNumber":24,"author":{"gitId":"-"},"content":" -fx-opacity: 1;","lastModifiedDate":"2016-08-08"},{"lineNumber":25,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":27,"author":{"gitId":"-"},"content":".text-field {","lastModifiedDate":"2016-08-08"},{"lineNumber":28,"author":{"gitId":"-"},"content":" -fx-font-size: 12pt;","lastModifiedDate":"2016-08-08"},{"lineNumber":29,"author":{"gitId":"-"},"content":" -fx-font-family: \"Segoe UI Semibold\";","lastModifiedDate":"2022-01-13"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":32,"author":{"gitId":"-"},"content":".tab-pane {","lastModifiedDate":"2016-08-08"},{"lineNumber":33,"author":{"gitId":"-"},"content":" -fx-padding: 0 0 0 1;","lastModifiedDate":"2016-08-08"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":36,"author":{"gitId":"-"},"content":".tab-pane .tab-header-area {","lastModifiedDate":"2016-08-08"},{"lineNumber":37,"author":{"gitId":"-"},"content":" -fx-padding: 0 0 0 0;","lastModifiedDate":"2016-08-08"},{"lineNumber":38,"author":{"gitId":"-"},"content":" -fx-min-height: 0;","lastModifiedDate":"2016-08-08"},{"lineNumber":39,"author":{"gitId":"-"},"content":" -fx-max-height: 0;","lastModifiedDate":"2016-08-08"},{"lineNumber":40,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":42,"author":{"gitId":"-"},"content":".table-view {","lastModifiedDate":"2016-08-08"},{"lineNumber":43,"author":{"gitId":"-"},"content":" -fx-base: #1d1d1d;","lastModifiedDate":"2016-08-15"},{"lineNumber":44,"author":{"gitId":"-"},"content":" -fx-control-inner-background: #1d1d1d;","lastModifiedDate":"2016-08-15"},{"lineNumber":45,"author":{"gitId":"-"},"content":" -fx-background-color: #1d1d1d;","lastModifiedDate":"2016-08-15"},{"lineNumber":46,"author":{"gitId":"-"},"content":" -fx-table-cell-border-color: transparent;","lastModifiedDate":"2016-08-08"},{"lineNumber":47,"author":{"gitId":"-"},"content":" -fx-table-header-border-color: transparent;","lastModifiedDate":"2016-08-08"},{"lineNumber":48,"author":{"gitId":"-"},"content":" -fx-padding: 5;","lastModifiedDate":"2016-08-08"},{"lineNumber":49,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":51,"author":{"gitId":"-"},"content":".table-view .column-header-background {","lastModifiedDate":"2016-08-08"},{"lineNumber":52,"author":{"gitId":"-"},"content":" -fx-background-color: transparent;","lastModifiedDate":"2016-08-08"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":55,"author":{"gitId":"-"},"content":".table-view .column-header, .table-view .filler {","lastModifiedDate":"2016-08-08"},{"lineNumber":56,"author":{"gitId":"-"},"content":" -fx-size: 35;","lastModifiedDate":"2016-08-08"},{"lineNumber":57,"author":{"gitId":"-"},"content":" -fx-border-width: 0 0 1 0;","lastModifiedDate":"2016-08-08"},{"lineNumber":58,"author":{"gitId":"-"},"content":" -fx-background-color: transparent;","lastModifiedDate":"2016-08-08"},{"lineNumber":59,"author":{"gitId":"-"},"content":" -fx-border-color:","lastModifiedDate":"2016-08-08"},{"lineNumber":60,"author":{"gitId":"-"},"content":" transparent","lastModifiedDate":"2016-08-08"},{"lineNumber":61,"author":{"gitId":"-"},"content":" transparent","lastModifiedDate":"2016-08-08"},{"lineNumber":62,"author":{"gitId":"-"},"content":" derive(-fx-base, 80%)","lastModifiedDate":"2016-08-08"},{"lineNumber":63,"author":{"gitId":"-"},"content":" transparent;","lastModifiedDate":"2016-08-08"},{"lineNumber":64,"author":{"gitId":"-"},"content":" -fx-border-insets: 0 10 1 0;","lastModifiedDate":"2016-08-08"},{"lineNumber":65,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":67,"author":{"gitId":"-"},"content":".table-view .column-header .label {","lastModifiedDate":"2016-08-08"},{"lineNumber":68,"author":{"gitId":"-"},"content":" -fx-font-size: 20pt;","lastModifiedDate":"2016-08-08"},{"lineNumber":69,"author":{"gitId":"-"},"content":" -fx-font-family: \"Segoe UI Light\";","lastModifiedDate":"2022-01-13"},{"lineNumber":70,"author":{"gitId":"-"},"content":" -fx-text-fill: white;","lastModifiedDate":"2016-08-08"},{"lineNumber":71,"author":{"gitId":"-"},"content":" -fx-alignment: center-left;","lastModifiedDate":"2016-08-08"},{"lineNumber":72,"author":{"gitId":"-"},"content":" -fx-opacity: 1;","lastModifiedDate":"2016-08-08"},{"lineNumber":73,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":75,"author":{"gitId":"-"},"content":".table-view:focused .table-row-cell:filled:focused:selected {","lastModifiedDate":"2016-08-08"},{"lineNumber":76,"author":{"gitId":"-"},"content":" -fx-background-color: -fx-focus-color;","lastModifiedDate":"2016-08-08"},{"lineNumber":77,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":78,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":79,"author":{"gitId":"-"},"content":".split-pane:horizontal .split-pane-divider {","lastModifiedDate":"2016-08-08"},{"lineNumber":80,"author":{"gitId":"-"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2017-03-02"},{"lineNumber":81,"author":{"gitId":"-"},"content":" -fx-border-color: transparent transparent transparent #4d4d4d;","lastModifiedDate":"2017-03-02"},{"lineNumber":82,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-15"},{"lineNumber":83,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-15"},{"lineNumber":84,"author":{"gitId":"-"},"content":".split-pane {","lastModifiedDate":"2016-08-15"},{"lineNumber":85,"author":{"gitId":"-"},"content":" -fx-border-radius: 1;","lastModifiedDate":"2016-08-15"},{"lineNumber":86,"author":{"gitId":"-"},"content":" -fx-border-width: 1;","lastModifiedDate":"2016-08-15"},{"lineNumber":87,"author":{"gitId":"-"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2016-08-15"},{"lineNumber":88,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":89,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":90,"author":{"gitId":"-"},"content":".list-view {","lastModifiedDate":"2017-03-02"},{"lineNumber":91,"author":{"gitId":"-"},"content":" -fx-background-insets: 0;","lastModifiedDate":"2017-03-02"},{"lineNumber":92,"author":{"gitId":"-"},"content":" -fx-padding: 0;","lastModifiedDate":"2017-03-02"},{"lineNumber":93,"author":{"gitId":"-"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2018-01-10"},{"lineNumber":94,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-03-02"},{"lineNumber":95,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-02"},{"lineNumber":96,"author":{"gitId":"-"},"content":".list-cell {","lastModifiedDate":"2016-08-08"},{"lineNumber":97,"author":{"gitId":"-"},"content":" -fx-label-padding: 0 0 0 0;","lastModifiedDate":"2016-08-08"},{"lineNumber":98,"author":{"gitId":"-"},"content":" -fx-graphic-text-gap : 0;","lastModifiedDate":"2016-08-08"},{"lineNumber":99,"author":{"gitId":"-"},"content":" -fx-padding: 0 0 0 0;","lastModifiedDate":"2016-08-08"},{"lineNumber":100,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":101,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":102,"author":{"gitId":"-"},"content":".list-cell:filled:even {","lastModifiedDate":"2017-03-02"},{"lineNumber":103,"author":{"gitId":"-"},"content":" -fx-background-color: #3c3e3f;","lastModifiedDate":"2017-03-02"},{"lineNumber":104,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-03-02"},{"lineNumber":105,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-02"},{"lineNumber":106,"author":{"gitId":"-"},"content":".list-cell:filled:odd {","lastModifiedDate":"2017-03-02"},{"lineNumber":107,"author":{"gitId":"-"},"content":" -fx-background-color: #515658;","lastModifiedDate":"2017-03-02"},{"lineNumber":108,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-03-02"},{"lineNumber":109,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-02"},{"lineNumber":110,"author":{"gitId":"-"},"content":".list-cell:filled:selected {","lastModifiedDate":"2017-03-02"},{"lineNumber":111,"author":{"gitId":"-"},"content":" -fx-background-color: #424d5f;","lastModifiedDate":"2017-03-02"},{"lineNumber":112,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-03-02"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-02"},{"lineNumber":114,"author":{"gitId":"-"},"content":".list-cell:filled:selected #cardPane {","lastModifiedDate":"2017-03-02"},{"lineNumber":115,"author":{"gitId":"-"},"content":" -fx-border-color: #3e7b91;","lastModifiedDate":"2017-03-02"},{"lineNumber":116,"author":{"gitId":"-"},"content":" -fx-border-width: 1;","lastModifiedDate":"2017-03-02"},{"lineNumber":117,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-03-02"},{"lineNumber":118,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-02"},{"lineNumber":119,"author":{"gitId":"-"},"content":".list-cell .label {","lastModifiedDate":"2016-08-08"},{"lineNumber":120,"author":{"gitId":"-"},"content":" -fx-text-fill: white;","lastModifiedDate":"2017-03-02"},{"lineNumber":121,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":122,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":123,"author":{"gitId":"-"},"content":".cell_big_label {","lastModifiedDate":"2016-08-08"},{"lineNumber":124,"author":{"gitId":"-"},"content":" -fx-font-family: \"Segoe UI Semibold\";","lastModifiedDate":"2022-01-13"},{"lineNumber":125,"author":{"gitId":"-"},"content":" -fx-font-size: 16px;","lastModifiedDate":"2016-08-08"},{"lineNumber":126,"author":{"gitId":"-"},"content":" -fx-text-fill: #010504;","lastModifiedDate":"2016-08-08"},{"lineNumber":127,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":128,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":129,"author":{"gitId":"-"},"content":".cell_small_label {","lastModifiedDate":"2016-08-08"},{"lineNumber":130,"author":{"gitId":"-"},"content":" -fx-font-family: \"Segoe UI\";","lastModifiedDate":"2022-01-13"},{"lineNumber":131,"author":{"gitId":"-"},"content":" -fx-font-size: 13px;","lastModifiedDate":"2017-03-02"},{"lineNumber":132,"author":{"gitId":"-"},"content":" -fx-text-fill: #010504;","lastModifiedDate":"2016-08-08"},{"lineNumber":133,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":134,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":135,"author":{"gitId":"Jawad280"},"content":".cell_custom {","lastModifiedDate":"2024-02-26"},{"lineNumber":136,"author":{"gitId":"Jawad280"},"content":" -fx-font-family: \"Segoe UI Semibold\";","lastModifiedDate":"2024-02-26"},{"lineNumber":137,"author":{"gitId":"Jawad280"},"content":" -fx-font-size: 24px;","lastModifiedDate":"2024-02-26"},{"lineNumber":138,"author":{"gitId":"Jawad280"},"content":" -fx-text-fill: #360078;","lastModifiedDate":"2024-02-26"},{"lineNumber":139,"author":{"gitId":"Jawad280"},"content":"}","lastModifiedDate":"2024-02-26"},{"lineNumber":140,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":141,"author":{"gitId":"-"},"content":".stack-pane {","lastModifiedDate":"2018-04-01"},{"lineNumber":142,"author":{"gitId":"-"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2016-08-15"},{"lineNumber":143,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":144,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":145,"author":{"gitId":"-"},"content":".pane-with-border {","lastModifiedDate":"2017-05-15"},{"lineNumber":146,"author":{"gitId":"-"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2017-05-09"},{"lineNumber":147,"author":{"gitId":"-"},"content":" -fx-border-color: derive(#1d1d1d, 10%);","lastModifiedDate":"2017-05-09"},{"lineNumber":148,"author":{"gitId":"-"},"content":" -fx-border-top-width: 1px;","lastModifiedDate":"2017-05-09"},{"lineNumber":149,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-05-09"},{"lineNumber":150,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-09"},{"lineNumber":151,"author":{"gitId":"-"},"content":".status-bar {","lastModifiedDate":"2016-08-08"},{"lineNumber":152,"author":{"gitId":"-"},"content":" -fx-background-color: derive(#1d1d1d, 30%);","lastModifiedDate":"2018-12-08"},{"lineNumber":153,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-09-14"},{"lineNumber":154,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-14"},{"lineNumber":155,"author":{"gitId":"-"},"content":".result-display {","lastModifiedDate":"2016-09-14"},{"lineNumber":156,"author":{"gitId":"-"},"content":" -fx-background-color: transparent;","lastModifiedDate":"2017-03-02"},{"lineNumber":157,"author":{"gitId":"-"},"content":" -fx-font-family: \"Segoe UI Light\";","lastModifiedDate":"2022-01-13"},{"lineNumber":158,"author":{"gitId":"-"},"content":" -fx-font-size: 13pt;","lastModifiedDate":"2017-03-02"},{"lineNumber":159,"author":{"gitId":"-"},"content":" -fx-text-fill: white;","lastModifiedDate":"2017-03-02"},{"lineNumber":160,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-09-14"},{"lineNumber":161,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-14"},{"lineNumber":162,"author":{"gitId":"-"},"content":".result-display .label {","lastModifiedDate":"2016-09-14"},{"lineNumber":163,"author":{"gitId":"-"},"content":" -fx-text-fill: black !important;","lastModifiedDate":"2016-09-14"},{"lineNumber":164,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":165,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":166,"author":{"gitId":"-"},"content":".status-bar .label {","lastModifiedDate":"2016-08-08"},{"lineNumber":167,"author":{"gitId":"-"},"content":" -fx-font-family: \"Segoe UI Light\";","lastModifiedDate":"2022-01-13"},{"lineNumber":168,"author":{"gitId":"-"},"content":" -fx-text-fill: white;","lastModifiedDate":"2016-08-08"},{"lineNumber":169,"author":{"gitId":"-"},"content":" -fx-padding: 4px;","lastModifiedDate":"2018-12-08"},{"lineNumber":170,"author":{"gitId":"-"},"content":" -fx-pref-height: 30px;","lastModifiedDate":"2018-12-08"},{"lineNumber":171,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":172,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":173,"author":{"gitId":"-"},"content":".status-bar-with-border {","lastModifiedDate":"2016-08-08"},{"lineNumber":174,"author":{"gitId":"-"},"content":" -fx-background-color: derive(#1d1d1d, 30%);","lastModifiedDate":"2016-08-15"},{"lineNumber":175,"author":{"gitId":"-"},"content":" -fx-border-color: derive(#1d1d1d, 25%);","lastModifiedDate":"2016-08-15"},{"lineNumber":176,"author":{"gitId":"-"},"content":" -fx-border-width: 1px;","lastModifiedDate":"2016-08-08"},{"lineNumber":177,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":178,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":179,"author":{"gitId":"-"},"content":".status-bar-with-border .label {","lastModifiedDate":"2016-08-08"},{"lineNumber":180,"author":{"gitId":"-"},"content":" -fx-text-fill: white;","lastModifiedDate":"2016-08-08"},{"lineNumber":181,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":182,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":183,"author":{"gitId":"-"},"content":".grid-pane {","lastModifiedDate":"2016-08-08"},{"lineNumber":184,"author":{"gitId":"-"},"content":" -fx-background-color: derive(#1d1d1d, 30%);","lastModifiedDate":"2016-08-15"},{"lineNumber":185,"author":{"gitId":"-"},"content":" -fx-border-color: derive(#1d1d1d, 30%);","lastModifiedDate":"2016-08-15"},{"lineNumber":186,"author":{"gitId":"-"},"content":" -fx-border-width: 1px;","lastModifiedDate":"2016-08-08"},{"lineNumber":187,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":188,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":189,"author":{"gitId":"-"},"content":".grid-pane .stack-pane {","lastModifiedDate":"2018-04-01"},{"lineNumber":190,"author":{"gitId":"-"},"content":" -fx-background-color: derive(#1d1d1d, 30%);","lastModifiedDate":"2016-08-15"},{"lineNumber":191,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":192,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":193,"author":{"gitId":"-"},"content":".context-menu {","lastModifiedDate":"2016-08-08"},{"lineNumber":194,"author":{"gitId":"-"},"content":" -fx-background-color: derive(#1d1d1d, 50%);","lastModifiedDate":"2016-08-15"},{"lineNumber":195,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":196,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":197,"author":{"gitId":"-"},"content":".context-menu .label {","lastModifiedDate":"2016-08-08"},{"lineNumber":198,"author":{"gitId":"-"},"content":" -fx-text-fill: white;","lastModifiedDate":"2016-08-08"},{"lineNumber":199,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":200,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":201,"author":{"gitId":"-"},"content":".menu-bar {","lastModifiedDate":"2016-08-08"},{"lineNumber":202,"author":{"gitId":"-"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2016-08-15"},{"lineNumber":203,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":204,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":205,"author":{"gitId":"-"},"content":".menu-bar .label {","lastModifiedDate":"2016-08-08"},{"lineNumber":206,"author":{"gitId":"-"},"content":" -fx-font-size: 14pt;","lastModifiedDate":"2016-08-08"},{"lineNumber":207,"author":{"gitId":"-"},"content":" -fx-font-family: \"Segoe UI Light\";","lastModifiedDate":"2022-01-13"},{"lineNumber":208,"author":{"gitId":"-"},"content":" -fx-text-fill: white;","lastModifiedDate":"2016-08-08"},{"lineNumber":209,"author":{"gitId":"-"},"content":" -fx-opacity: 0.9;","lastModifiedDate":"2016-08-08"},{"lineNumber":210,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":211,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":212,"author":{"gitId":"-"},"content":".menu .left-container {","lastModifiedDate":"2016-08-08"},{"lineNumber":213,"author":{"gitId":"-"},"content":" -fx-background-color: black;","lastModifiedDate":"2016-08-08"},{"lineNumber":214,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":215,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":216,"author":{"gitId":"-"},"content":"/*","lastModifiedDate":"2016-08-08"},{"lineNumber":217,"author":{"gitId":"-"},"content":" * Metro style Push Button","lastModifiedDate":"2016-08-08"},{"lineNumber":218,"author":{"gitId":"-"},"content":" * Author: Pedro Duque Vieira","lastModifiedDate":"2016-08-08"},{"lineNumber":219,"author":{"gitId":"-"},"content":" * http://pixelduke.wordpress.com/2012/10/23/jmetro-windows-8-controls-on-java/","lastModifiedDate":"2016-08-08"},{"lineNumber":220,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-08"},{"lineNumber":221,"author":{"gitId":"-"},"content":".button {","lastModifiedDate":"2016-08-08"},{"lineNumber":222,"author":{"gitId":"-"},"content":" -fx-padding: 5 22 5 22;","lastModifiedDate":"2016-08-08"},{"lineNumber":223,"author":{"gitId":"-"},"content":" -fx-border-color: #e2e2e2;","lastModifiedDate":"2016-08-08"},{"lineNumber":224,"author":{"gitId":"-"},"content":" -fx-border-width: 2;","lastModifiedDate":"2016-08-08"},{"lineNumber":225,"author":{"gitId":"-"},"content":" -fx-background-radius: 0;","lastModifiedDate":"2016-08-08"},{"lineNumber":226,"author":{"gitId":"-"},"content":" -fx-background-color: #1d1d1d;","lastModifiedDate":"2016-08-15"},{"lineNumber":227,"author":{"gitId":"-"},"content":" -fx-font-family: \"Segoe UI\", Helvetica, Arial, sans-serif;","lastModifiedDate":"2022-01-13"},{"lineNumber":228,"author":{"gitId":"-"},"content":" -fx-font-size: 11pt;","lastModifiedDate":"2016-08-08"},{"lineNumber":229,"author":{"gitId":"-"},"content":" -fx-text-fill: #d8d8d8;","lastModifiedDate":"2016-08-08"},{"lineNumber":230,"author":{"gitId":"-"},"content":" -fx-background-insets: 0 0 0 0, 0, 1, 2;","lastModifiedDate":"2016-08-08"},{"lineNumber":231,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":232,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":233,"author":{"gitId":"-"},"content":".button:hover {","lastModifiedDate":"2016-08-08"},{"lineNumber":234,"author":{"gitId":"-"},"content":" -fx-background-color: #3a3a3a;","lastModifiedDate":"2016-08-08"},{"lineNumber":235,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":236,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":237,"author":{"gitId":"-"},"content":".button:pressed, .button:default:hover:pressed {","lastModifiedDate":"2016-08-08"},{"lineNumber":238,"author":{"gitId":"-"},"content":" -fx-background-color: white;","lastModifiedDate":"2016-08-08"},{"lineNumber":239,"author":{"gitId":"-"},"content":" -fx-text-fill: #1d1d1d;","lastModifiedDate":"2016-08-15"},{"lineNumber":240,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":241,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":242,"author":{"gitId":"-"},"content":".button:focused {","lastModifiedDate":"2016-08-08"},{"lineNumber":243,"author":{"gitId":"-"},"content":" -fx-border-color: white, white;","lastModifiedDate":"2016-08-08"},{"lineNumber":244,"author":{"gitId":"-"},"content":" -fx-border-width: 1, 1;","lastModifiedDate":"2016-08-08"},{"lineNumber":245,"author":{"gitId":"-"},"content":" -fx-border-style: solid, segments(1, 1);","lastModifiedDate":"2016-08-08"},{"lineNumber":246,"author":{"gitId":"-"},"content":" -fx-border-radius: 0, 0;","lastModifiedDate":"2016-08-08"},{"lineNumber":247,"author":{"gitId":"-"},"content":" -fx-border-insets: 1 1 1 1, 0;","lastModifiedDate":"2016-08-08"},{"lineNumber":248,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":249,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":250,"author":{"gitId":"-"},"content":".button:disabled, .button:default:disabled {","lastModifiedDate":"2016-08-08"},{"lineNumber":251,"author":{"gitId":"-"},"content":" -fx-opacity: 0.4;","lastModifiedDate":"2016-08-08"},{"lineNumber":252,"author":{"gitId":"-"},"content":" -fx-background-color: #1d1d1d;","lastModifiedDate":"2016-08-15"},{"lineNumber":253,"author":{"gitId":"-"},"content":" -fx-text-fill: white;","lastModifiedDate":"2016-08-08"},{"lineNumber":254,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":255,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":256,"author":{"gitId":"-"},"content":".button:default {","lastModifiedDate":"2016-08-08"},{"lineNumber":257,"author":{"gitId":"-"},"content":" -fx-background-color: -fx-focus-color;","lastModifiedDate":"2016-08-08"},{"lineNumber":258,"author":{"gitId":"-"},"content":" -fx-text-fill: #ffffff;","lastModifiedDate":"2016-08-08"},{"lineNumber":259,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":260,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":261,"author":{"gitId":"-"},"content":".button:default:hover {","lastModifiedDate":"2016-08-08"},{"lineNumber":262,"author":{"gitId":"-"},"content":" -fx-background-color: derive(-fx-focus-color, 30%);","lastModifiedDate":"2016-08-08"},{"lineNumber":263,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":264,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":265,"author":{"gitId":"-"},"content":".dialog-pane {","lastModifiedDate":"2016-08-08"},{"lineNumber":266,"author":{"gitId":"-"},"content":" -fx-background-color: #1d1d1d;","lastModifiedDate":"2016-08-15"},{"lineNumber":267,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":268,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":269,"author":{"gitId":"-"},"content":".dialog-pane \u003e *.button-bar \u003e *.container {","lastModifiedDate":"2016-08-08"},{"lineNumber":270,"author":{"gitId":"-"},"content":" -fx-background-color: #1d1d1d;","lastModifiedDate":"2016-08-15"},{"lineNumber":271,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":272,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":273,"author":{"gitId":"-"},"content":".dialog-pane \u003e *.label.content {","lastModifiedDate":"2016-08-08"},{"lineNumber":274,"author":{"gitId":"-"},"content":" -fx-font-size: 14px;","lastModifiedDate":"2016-08-08"},{"lineNumber":275,"author":{"gitId":"-"},"content":" -fx-font-weight: bold;","lastModifiedDate":"2016-08-08"},{"lineNumber":276,"author":{"gitId":"-"},"content":" -fx-text-fill: white;","lastModifiedDate":"2016-08-08"},{"lineNumber":277,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":278,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":279,"author":{"gitId":"-"},"content":".dialog-pane:header *.header-panel {","lastModifiedDate":"2016-08-08"},{"lineNumber":280,"author":{"gitId":"-"},"content":" -fx-background-color: derive(#1d1d1d, 25%);","lastModifiedDate":"2016-08-15"},{"lineNumber":281,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":282,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":283,"author":{"gitId":"-"},"content":".dialog-pane:header *.header-panel *.label {","lastModifiedDate":"2016-08-08"},{"lineNumber":284,"author":{"gitId":"-"},"content":" -fx-font-size: 18px;","lastModifiedDate":"2016-08-08"},{"lineNumber":285,"author":{"gitId":"-"},"content":" -fx-font-style: italic;","lastModifiedDate":"2016-08-08"},{"lineNumber":286,"author":{"gitId":"-"},"content":" -fx-fill: white;","lastModifiedDate":"2016-08-08"},{"lineNumber":287,"author":{"gitId":"-"},"content":" -fx-text-fill: white;","lastModifiedDate":"2016-08-08"},{"lineNumber":288,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":289,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":290,"author":{"gitId":"-"},"content":".scroll-bar {","lastModifiedDate":"2017-03-02"},{"lineNumber":291,"author":{"gitId":"-"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2017-03-02"},{"lineNumber":292,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-03-02"},{"lineNumber":293,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-02"},{"lineNumber":294,"author":{"gitId":"-"},"content":".scroll-bar .thumb {","lastModifiedDate":"2016-08-15"},{"lineNumber":295,"author":{"gitId":"-"},"content":" -fx-background-color: derive(#1d1d1d, 50%);","lastModifiedDate":"2016-08-15"},{"lineNumber":296,"author":{"gitId":"-"},"content":" -fx-background-insets: 3;","lastModifiedDate":"2016-08-15"},{"lineNumber":297,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-15"},{"lineNumber":298,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-15"},{"lineNumber":299,"author":{"gitId":"-"},"content":".scroll-bar .increment-button, .scroll-bar .decrement-button {","lastModifiedDate":"2016-08-15"},{"lineNumber":300,"author":{"gitId":"-"},"content":" -fx-background-color: transparent;","lastModifiedDate":"2016-08-15"},{"lineNumber":301,"author":{"gitId":"-"},"content":" -fx-padding: 0 0 0 0;","lastModifiedDate":"2016-08-15"},{"lineNumber":302,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-15"},{"lineNumber":303,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-15"},{"lineNumber":304,"author":{"gitId":"-"},"content":".scroll-bar .increment-arrow, .scroll-bar .decrement-arrow {","lastModifiedDate":"2016-08-15"},{"lineNumber":305,"author":{"gitId":"-"},"content":" -fx-shape: \" \";","lastModifiedDate":"2016-08-15"},{"lineNumber":306,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-18"},{"lineNumber":307,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-18"},{"lineNumber":308,"author":{"gitId":"-"},"content":".scroll-bar:vertical .increment-arrow, .scroll-bar:vertical .decrement-arrow {","lastModifiedDate":"2016-08-18"},{"lineNumber":309,"author":{"gitId":"-"},"content":" -fx-padding: 1 8 1 8;","lastModifiedDate":"2016-08-15"},{"lineNumber":310,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-15"},{"lineNumber":311,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-15"},{"lineNumber":312,"author":{"gitId":"-"},"content":".scroll-bar:horizontal .increment-arrow, .scroll-bar:horizontal .decrement-arrow {","lastModifiedDate":"2016-08-18"},{"lineNumber":313,"author":{"gitId":"-"},"content":" -fx-padding: 8 1 8 1;","lastModifiedDate":"2016-08-18"},{"lineNumber":314,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-18"},{"lineNumber":315,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-18"},{"lineNumber":316,"author":{"gitId":"-"},"content":"#cardPane {","lastModifiedDate":"2016-08-08"},{"lineNumber":317,"author":{"gitId":"-"},"content":" -fx-background-color: transparent;","lastModifiedDate":"2016-08-08"},{"lineNumber":318,"author":{"gitId":"-"},"content":" -fx-border-width: 0;","lastModifiedDate":"2017-03-02"},{"lineNumber":319,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":320,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":321,"author":{"gitId":"-"},"content":"#commandTypeLabel {","lastModifiedDate":"2016-08-08"},{"lineNumber":322,"author":{"gitId":"-"},"content":" -fx-font-size: 11px;","lastModifiedDate":"2016-08-08"},{"lineNumber":323,"author":{"gitId":"-"},"content":" -fx-text-fill: #F70D1A;","lastModifiedDate":"2016-08-08"},{"lineNumber":324,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":325,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":326,"author":{"gitId":"-"},"content":"#commandTextField {","lastModifiedDate":"2017-03-02"},{"lineNumber":327,"author":{"gitId":"-"},"content":" -fx-background-color: transparent #383838 transparent #383838;","lastModifiedDate":"2017-03-02"},{"lineNumber":328,"author":{"gitId":"-"},"content":" -fx-background-insets: 0;","lastModifiedDate":"2017-03-02"},{"lineNumber":329,"author":{"gitId":"-"},"content":" -fx-border-color: #383838 #383838 #ffffff #383838;","lastModifiedDate":"2017-03-02"},{"lineNumber":330,"author":{"gitId":"-"},"content":" -fx-border-insets: 0;","lastModifiedDate":"2017-03-02"},{"lineNumber":331,"author":{"gitId":"-"},"content":" -fx-border-width: 1;","lastModifiedDate":"2017-03-02"},{"lineNumber":332,"author":{"gitId":"-"},"content":" -fx-font-family: \"Segoe UI Light\";","lastModifiedDate":"2022-01-13"},{"lineNumber":333,"author":{"gitId":"-"},"content":" -fx-font-size: 13pt;","lastModifiedDate":"2017-03-02"},{"lineNumber":334,"author":{"gitId":"-"},"content":" -fx-text-fill: white;","lastModifiedDate":"2017-03-02"},{"lineNumber":335,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-03-02"},{"lineNumber":336,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-02"},{"lineNumber":337,"author":{"gitId":"-"},"content":"#filterField, #personListPanel, #personWebpage {","lastModifiedDate":"2016-08-15"},{"lineNumber":338,"author":{"gitId":"-"},"content":" -fx-effect: innershadow(gaussian, black, 10, 0, 0, 0);","lastModifiedDate":"2016-08-15"},{"lineNumber":339,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":340,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-18"},{"lineNumber":341,"author":{"gitId":"-"},"content":"#resultDisplay .content {","lastModifiedDate":"2017-03-02"},{"lineNumber":342,"author":{"gitId":"-"},"content":" -fx-background-color: transparent, #383838, transparent, #383838;","lastModifiedDate":"2017-03-02"},{"lineNumber":343,"author":{"gitId":"-"},"content":" -fx-background-radius: 0;","lastModifiedDate":"2017-03-02"},{"lineNumber":344,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-03-02"},{"lineNumber":345,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-02"},{"lineNumber":346,"author":{"gitId":"-"},"content":"#tags {","lastModifiedDate":"2016-12-18"},{"lineNumber":347,"author":{"gitId":"-"},"content":" -fx-hgap: 7;","lastModifiedDate":"2016-12-18"},{"lineNumber":348,"author":{"gitId":"-"},"content":" -fx-vgap: 3;","lastModifiedDate":"2016-12-18"},{"lineNumber":349,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-12-18"},{"lineNumber":350,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-18"},{"lineNumber":351,"author":{"gitId":"-"},"content":"#tags .label {","lastModifiedDate":"2016-12-18"},{"lineNumber":352,"author":{"gitId":"-"},"content":" -fx-text-fill: white;","lastModifiedDate":"2016-12-18"},{"lineNumber":353,"author":{"gitId":"-"},"content":" -fx-background-color: #3e7b91;","lastModifiedDate":"2017-03-02"},{"lineNumber":354,"author":{"gitId":"-"},"content":" -fx-padding: 1 3 1 3;","lastModifiedDate":"2016-12-18"},{"lineNumber":355,"author":{"gitId":"-"},"content":" -fx-border-radius: 2;","lastModifiedDate":"2016-12-18"},{"lineNumber":356,"author":{"gitId":"-"},"content":" -fx-background-radius: 2;","lastModifiedDate":"2016-12-18"},{"lineNumber":357,"author":{"gitId":"-"},"content":" -fx-font-size: 11;","lastModifiedDate":"2016-12-18"},{"lineNumber":358,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-12-18"}],"authorContributionMap":{"Jawad280":6,"-":352}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003c?import java.net.URL?\u003e","lastModifiedDate":"2016-08-26"},{"lineNumber":4,"author":{"gitId":"-"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2017-03-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003c?import javafx.scene.Scene?\u003e","lastModifiedDate":"2017-11-29"},{"lineNumber":6,"author":{"gitId":"-"},"content":"\u003c?import javafx.scene.control.Menu?\u003e","lastModifiedDate":"2017-03-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"\u003c?import javafx.scene.control.MenuBar?\u003e","lastModifiedDate":"2017-03-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"\u003c?import javafx.scene.control.MenuItem?\u003e","lastModifiedDate":"2017-03-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c?import javafx.scene.control.SplitPane?\u003e","lastModifiedDate":"2017-03-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003c?import javafx.scene.image.Image?\u003e","lastModifiedDate":"2017-11-29"},{"lineNumber":11,"author":{"gitId":"-"},"content":"\u003c?import javafx.scene.layout.StackPane?\u003e","lastModifiedDate":"2017-05-09"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2017-03-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-25"},{"lineNumber":14,"author":{"gitId":"Jawad280"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"chenyixin0"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2024-02-29"},{"lineNumber":16,"author":{"gitId":"-"},"content":"\u003cfx:root type\u003d\"javafx.stage.Stage\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"","lastModifiedDate":"2023-07-27"},{"lineNumber":17,"author":{"gitId":"-"},"content":" title\u003d\"Address App\" minWidth\u003d\"450\" minHeight\u003d\"600\" onCloseRequest\u003d\"#handleExit\"\u003e","lastModifiedDate":"2018-12-08"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003cicons\u003e","lastModifiedDate":"2017-11-29"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003cImage url\u003d\"@/images/address_book_32.png\" /\u003e","lastModifiedDate":"2017-11-29"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003c/icons\u003e","lastModifiedDate":"2017-11-29"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003cscene\u003e","lastModifiedDate":"2017-11-29"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003cScene\u003e","lastModifiedDate":"2017-11-29"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003cstylesheets\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003cURL value\u003d\"@DarkTheme.css\" /\u003e","lastModifiedDate":"2016-08-20"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003cURL value\u003d\"@Extensions.css\" /\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003c/stylesheets\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003cVBox\u003e","lastModifiedDate":"2017-11-29"},{"lineNumber":29,"author":{"gitId":"-"},"content":" \u003cMenuBar fx:id\u003d\"menuBar\" VBox.vgrow\u003d\"NEVER\"\u003e","lastModifiedDate":"2017-06-13"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \u003cMenu mnemonicParsing\u003d\"false\" text\u003d\"File\"\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \u003cMenuItem mnemonicParsing\u003d\"false\" onAction\u003d\"#handleExit\" text\u003d\"Exit\" /\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u003c/Menu\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003cMenu mnemonicParsing\u003d\"false\" text\u003d\"Help\"\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003cMenuItem fx:id\u003d\"helpMenuItem\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleHelp\" text\u003d\"Help\" /\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003c/Menu\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":36,"author":{"gitId":"-"},"content":" \u003c/MenuBar\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" \u003cStackPane VBox.vgrow\u003d\"NEVER\" fx:id\u003d\"commandBoxPlaceholder\" styleClass\u003d\"pane-with-border\"\u003e","lastModifiedDate":"2017-05-15"},{"lineNumber":39,"author":{"gitId":"-"},"content":" \u003cpadding\u003e","lastModifiedDate":"2016-09-14"},{"lineNumber":40,"author":{"gitId":"-"},"content":" \u003cInsets top\u003d\"5\" right\u003d\"10\" bottom\u003d\"5\" left\u003d\"10\" /\u003e","lastModifiedDate":"2017-03-27"},{"lineNumber":41,"author":{"gitId":"-"},"content":" \u003c/padding\u003e","lastModifiedDate":"2016-09-14"},{"lineNumber":42,"author":{"gitId":"-"},"content":" \u003c/StackPane\u003e","lastModifiedDate":"2017-05-09"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" \u003cStackPane VBox.vgrow\u003d\"NEVER\" fx:id\u003d\"resultDisplayPlaceholder\" styleClass\u003d\"pane-with-border\"","lastModifiedDate":"2017-05-15"},{"lineNumber":45,"author":{"gitId":"-"},"content":" minHeight\u003d\"100\" prefHeight\u003d\"100\" maxHeight\u003d\"100\"\u003e","lastModifiedDate":"2017-03-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" \u003cpadding\u003e","lastModifiedDate":"2016-09-14"},{"lineNumber":47,"author":{"gitId":"-"},"content":" \u003cInsets top\u003d\"5\" right\u003d\"10\" bottom\u003d\"5\" left\u003d\"10\" /\u003e","lastModifiedDate":"2017-03-27"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003c/padding\u003e","lastModifiedDate":"2016-09-14"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003c/StackPane\u003e","lastModifiedDate":"2017-05-09"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-25"},{"lineNumber":51,"author":{"gitId":"Jawad280"},"content":" \u003cSplitPane VBox.vgrow\u003d\"ALWAYS\" HBox.hgrow\u003d\"ALWAYS\"\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":52,"author":{"gitId":"Jawad280"},"content":" \u003cVBox fx:id\u003d\"personList\" styleClass\u003d\"pane-with-border\" minWidth\u003d\"300\" prefWidth\u003d\"400\" VBox.vgrow\u003d\"ALWAYS\"\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003cpadding\u003e","lastModifiedDate":"2016-08-15"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003cInsets top\u003d\"10\" right\u003d\"10\" bottom\u003d\"10\" left\u003d\"10\" /\u003e","lastModifiedDate":"2017-03-27"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003c/padding\u003e","lastModifiedDate":"2016-08-15"},{"lineNumber":56,"author":{"gitId":"-"},"content":" \u003cStackPane fx:id\u003d\"personListPanelPlaceholder\" VBox.vgrow\u003d\"ALWAYS\"/\u003e","lastModifiedDate":"2017-06-21"},{"lineNumber":57,"author":{"gitId":"-"},"content":" \u003c/VBox\u003e","lastModifiedDate":"2016-08-15"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-25"},{"lineNumber":59,"author":{"gitId":"Jawad280"},"content":" \u003cVBox styleClass\u003d\"pane-with-border\" VBox.vgrow\u003d\"ALWAYS\" HBox.hgrow\u003d\"ALWAYS\" minWidth\u003d\"300\"\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":60,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":61,"author":{"gitId":"chenyixin0"},"content":" \u003cScrollPane fx:id\u003d\"viewPanelPlaceHolder\"\u003e","lastModifiedDate":"2024-02-29"},{"lineNumber":62,"author":{"gitId":"chenyixin0"},"content":" \u003ccontent\u003e","lastModifiedDate":"2024-02-29"},{"lineNumber":63,"author":{"gitId":"chenyixin0"},"content":" \u003cVBox\u003e","lastModifiedDate":"2024-02-29"},{"lineNumber":64,"author":{"gitId":"chenyixin0"},"content":" \u003c!-- Add padding to the VBox --\u003e","lastModifiedDate":"2024-02-29"},{"lineNumber":65,"author":{"gitId":"Jawad280"},"content":" \u003cpadding\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":66,"author":{"gitId":"Jawad280"},"content":" \u003cInsets top\u003d\"10\" right\u003d\"10\" bottom\u003d\"10\" left\u003d\"10\" /\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":67,"author":{"gitId":"Jawad280"},"content":" \u003c/padding\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":68,"author":{"gitId":"Jawad280"},"content":" \u003c/VBox\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":69,"author":{"gitId":"chenyixin0"},"content":" \u003c/content\u003e","lastModifiedDate":"2024-02-29"},{"lineNumber":70,"author":{"gitId":"chenyixin0"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2024-02-29"},{"lineNumber":71,"author":{"gitId":"chenyixin0"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":72,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":73,"author":{"gitId":"Jawad280"},"content":" \u003c/VBox\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":74,"author":{"gitId":"Jawad280"},"content":" \u003c/SplitPane\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":76,"author":{"gitId":"-"},"content":" \u003cStackPane fx:id\u003d\"statusbarPlaceholder\" VBox.vgrow\u003d\"NEVER\" /\u003e","lastModifiedDate":"2017-05-09"},{"lineNumber":77,"author":{"gitId":"-"},"content":" \u003c/VBox\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":78,"author":{"gitId":"-"},"content":" \u003c/Scene\u003e","lastModifiedDate":"2017-11-29"},{"lineNumber":79,"author":{"gitId":"-"},"content":" \u003c/scene\u003e","lastModifiedDate":"2017-11-29"},{"lineNumber":80,"author":{"gitId":"-"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2017-11-29"}],"authorContributionMap":{"chenyixin0":8,"Jawad280":12,"-":60}},{"path":"src/main/resources/view/PersonListCard.fxml","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2016-12-18"},{"lineNumber":4,"author":{"gitId":"-"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2016-12-18"},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003c?import javafx.scene.layout.ColumnConstraints?\u003e","lastModifiedDate":"2016-12-18"},{"lineNumber":6,"author":{"gitId":"-"},"content":"\u003c?import javafx.scene.layout.FlowPane?\u003e","lastModifiedDate":"2016-12-18"},{"lineNumber":7,"author":{"gitId":"-"},"content":"\u003c?import javafx.scene.layout.GridPane?\u003e","lastModifiedDate":"2016-12-18"},{"lineNumber":8,"author":{"gitId":"-"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2016-12-18"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c?import javafx.scene.layout.Region?\u003e","lastModifiedDate":"2017-03-20"},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2016-12-18"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-18"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003cHBox id\u003d\"cardPane\" fx:id\u003d\"cardPane\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-07-27"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003cGridPane HBox.hgrow\u003d\"ALWAYS\"\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003ccolumnConstraints\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003cColumnConstraints hgrow\u003d\"SOMETIMES\" minWidth\u003d\"10\" prefWidth\u003d\"150\" /\u003e","lastModifiedDate":"2017-03-28"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003c/columnConstraints\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003cVBox alignment\u003d\"CENTER_LEFT\" minHeight\u003d\"105\" GridPane.columnIndex\u003d\"0\"\u003e","lastModifiedDate":"2017-03-28"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003cpadding\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003cInsets top\u003d\"5\" right\u003d\"5\" bottom\u003d\"5\" left\u003d\"15\" /\u003e","lastModifiedDate":"2017-03-27"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003c/padding\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003cHBox spacing\u003d\"5\" alignment\u003d\"CENTER_LEFT\"\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003cLabel fx:id\u003d\"id\" styleClass\u003d\"cell_big_label\"\u003e","lastModifiedDate":"2017-03-20"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003cminWidth\u003e","lastModifiedDate":"2017-03-20"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003c!-- Ensures that the label text is never truncated --\u003e","lastModifiedDate":"2017-03-20"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003cRegion fx:constant\u003d\"USE_PREF_SIZE\" /\u003e","lastModifiedDate":"2017-03-20"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003c/minWidth\u003e","lastModifiedDate":"2017-03-20"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003c/Label\u003e","lastModifiedDate":"2017-03-20"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003cLabel fx:id\u003d\"name\" text\u003d\"\\$first\" styleClass\u003d\"cell_big_label\" /\u003e","lastModifiedDate":"2016-08-24"},{"lineNumber":29,"author":{"gitId":"-"},"content":" \u003c/HBox\u003e","lastModifiedDate":"2016-09-03"},{"lineNumber":30,"author":{"gitId":"ashleygoh1"},"content":" \u003cLabel fx:id\u003d\"tags\" /\u003e","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \u003cLabel fx:id\u003d\"phone\" styleClass\u003d\"cell_small_label\" text\u003d\"\\$phone\" /\u003e","lastModifiedDate":"2016-08-24"},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u003cLabel fx:id\u003d\"address\" styleClass\u003d\"cell_small_label\" text\u003d\"\\$address\" /\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003cLabel fx:id\u003d\"email\" styleClass\u003d\"cell_small_label\" text\u003d\"\\$email\" /\u003e","lastModifiedDate":"2016-08-24"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":" \u003cLabel fx:id\u003d\"jobDescription\" styleClass\u003d\"cell_small_label\" text\u003d\"\\$job description\" /\u003e","lastModifiedDate":"2024-02-25"},{"lineNumber":35,"author":{"gitId":"ashleygoh1"},"content":" \u003cLabel fx:id\u003d\"interviewDate\" styleClass\u003d\"cell_small_label\" text\u003d\"\\$interview date\" /\u003e","lastModifiedDate":"2024-02-25"},{"lineNumber":36,"author":{"gitId":"ashleygoh1"},"content":" \u003cLabel fx:id\u003d\"internDuration\" styleClass\u003d\"cell_small_label\" text\u003d\"\\$intern duration\" /\u003e","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"ashleygoh1"},"content":" \u003cLabel fx:id\u003d\"salary\" styleClass\u003d\"cell_small_label\" text\u003d\"\\$salary\" /\u003e","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" \u003c/VBox\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":39,"author":{"gitId":"-"},"content":" \u003c/GridPane\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":40,"author":{"gitId":"-"},"content":"\u003c/HBox\u003e","lastModifiedDate":"2016-08-08"}],"authorContributionMap":{"ashleygoh1":5,"-":35}},{"path":"src/main/resources/view/ViewPanel.fxml","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Jawad280"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":2,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":3,"author":{"gitId":"Jawad280"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":4,"author":{"gitId":"Jawad280"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":5,"author":{"gitId":"Jawad280"},"content":"\u003c?import javafx.scene.layout.FlowPane?\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":6,"author":{"gitId":"Jawad280"},"content":"\u003c?import javafx.scene.layout.GridPane?\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":7,"author":{"gitId":"Jawad280"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":9,"author":{"gitId":"Jawad280"},"content":"\u003cVBox id\u003d\"viewPanel\" fx:id\u003d\"ViewPanel\" xmlns\u003d\"http://javafx.com/javafx/21\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":10,"author":{"gitId":"Jawad280"},"content":" \u003cVBox alignment\u003d\"CENTER_LEFT\" style\u003d\"-fx-background-color: #FFFEEF;\" GridPane.columnIndex\u003d\"0\"\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"Jawad280"},"content":" \u003cpadding\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"Jawad280"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"15.0\" right\u003d\"15.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"Jawad280"},"content":" \u003c/padding\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":14,"author":{"gitId":"Jawad280"},"content":" \u003cFlowPane fx:id\u003d\"tag\" /\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"Jawad280"},"content":" \u003cLabel fx:id\u003d\"companyName\" text\u003d\"\\$first\" styleClass\u003d\"cell_custom\" /\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":16,"author":{"gitId":"Jawad280"},"content":" \u003cLabel fx:id\u003d\"phone\" styleClass\u003d\"cell_custom\" text\u003d\"\\$phone\" /\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":17,"author":{"gitId":"Jawad280"},"content":" \u003cLabel fx:id\u003d\"address\" styleClass\u003d\"cell_custom\" text\u003d\"\\$address\" /\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":18,"author":{"gitId":"Jawad280"},"content":" \u003cLabel fx:id\u003d\"email\" styleClass\u003d\"cell_custom\" text\u003d\"\\$email\" /\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":19,"author":{"gitId":"Jawad280"},"content":" \u003cLabel fx:id\u003d\"interviewDate\" styleClass\u003d\"cell_custom\" text\u003d\"\\$interviewDate\" /\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":20,"author":{"gitId":"Jawad280"},"content":" \u003cLabel fx:id\u003d\"internDuration\" styleClass\u003d\"cell_custom\" text\u003d\"\\$internDuration\" /\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":21,"author":{"gitId":"Jawad280"},"content":" \u003cLabel fx:id\u003d\"salary\" styleClass\u003d\"cell_custom\" text\u003d\"\\$salary\" /\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":22,"author":{"gitId":"Jawad280"},"content":" \u003c/VBox\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":23,"author":{"gitId":"Jawad280"},"content":"\u003c/VBox\u003e","lastModifiedDate":"2024-02-26"}],"authorContributionMap":{"Jawad280":23}},{"path":"src/test/java/seedu/address/logic/LogicManagerTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic;","lastModifiedDate":"2016-09-21"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-03-15"},{"lineNumber":4,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX;","lastModifiedDate":"2024-02-26"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_UNKNOWN_COMMAND;","lastModifiedDate":"2023-07-13"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.ADDRESS_DESC_AMY;","lastModifiedDate":"2018-12-09"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.EMAIL_DESC_AMY;","lastModifiedDate":"2018-12-09"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.NAME_DESC_AMY;","lastModifiedDate":"2018-12-09"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.PHONE_DESC_AMY;","lastModifiedDate":"2018-12-09"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.TAG_DESC_NO_REPLY;","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-14"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.AMY;","lastModifiedDate":"2018-12-09"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-19"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import java.io.IOException;","lastModifiedDate":"2018-12-09"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import java.nio.file.AccessDeniedException;","lastModifiedDate":"2023-06-13"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import java.nio.file.Path;","lastModifiedDate":"2018-12-09"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2019-04-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2019-04-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-19"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.AddCommand;","lastModifiedDate":"2018-12-09"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.CommandResult;","lastModifiedDate":"2017-01-18"},{"lineNumber":24,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.logic.commands.ListCommand;","lastModifiedDate":"2024-02-26"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.exceptions.CommandException;","lastModifiedDate":"2017-02-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2017-03-11"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import seedu.address.model.Model;","lastModifiedDate":"2016-09-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import seedu.address.model.ModelManager;","lastModifiedDate":"2016-09-21"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import seedu.address.model.ReadOnlyAddressBook;","lastModifiedDate":"2018-12-09"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import seedu.address.model.UserPrefs;","lastModifiedDate":"2017-05-31"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-12-09"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import seedu.address.storage.JsonAddressBookStorage;","lastModifiedDate":"2018-12-09"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import seedu.address.storage.JsonUserPrefsStorage;","lastModifiedDate":"2018-12-09"},{"lineNumber":34,"author":{"gitId":"-"},"content":"import seedu.address.storage.StorageManager;","lastModifiedDate":"2018-12-09"},{"lineNumber":35,"author":{"gitId":"-"},"content":"import seedu.address.testutil.PersonBuilder;","lastModifiedDate":"2018-12-09"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":37,"author":{"gitId":"-"},"content":"public class LogicManagerTest {","lastModifiedDate":"2016-09-22"},{"lineNumber":38,"author":{"gitId":"-"},"content":" private static final IOException DUMMY_IO_EXCEPTION \u003d new IOException(\"dummy IO exception\");","lastModifiedDate":"2023-06-13"},{"lineNumber":39,"author":{"gitId":"-"},"content":" private static final IOException DUMMY_AD_EXCEPTION \u003d new AccessDeniedException(\"dummy access denied exception\");","lastModifiedDate":"2023-06-13"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":41,"author":{"gitId":"-"},"content":" @TempDir","lastModifiedDate":"2019-04-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" public Path temporaryFolder;","lastModifiedDate":"2019-04-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":44,"author":{"gitId":"-"},"content":" private Model model \u003d new ModelManager();","lastModifiedDate":"2017-06-20"},{"lineNumber":45,"author":{"gitId":"-"},"content":" private Logic logic;","lastModifiedDate":"2018-12-09"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":47,"author":{"gitId":"-"},"content":" @BeforeEach","lastModifiedDate":"2019-04-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" public void setUp() {","lastModifiedDate":"2019-04-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" JsonAddressBookStorage addressBookStorage \u003d","lastModifiedDate":"2019-04-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":" new JsonAddressBookStorage(temporaryFolder.resolve(\"addressBook.json\"));","lastModifiedDate":"2019-04-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" JsonUserPrefsStorage userPrefsStorage \u003d new JsonUserPrefsStorage(temporaryFolder.resolve(\"userPrefs.json\"));","lastModifiedDate":"2019-04-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" StorageManager storage \u003d new StorageManager(addressBookStorage, userPrefsStorage);","lastModifiedDate":"2018-12-09"},{"lineNumber":53,"author":{"gitId":"-"},"content":" logic \u003d new LogicManager(model, storage);","lastModifiedDate":"2018-12-09"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":56,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-20"},{"lineNumber":57,"author":{"gitId":"-"},"content":" public void execute_invalidCommandFormat_throwsParseException() {","lastModifiedDate":"2017-08-15"},{"lineNumber":58,"author":{"gitId":"-"},"content":" String invalidCommand \u003d \"uicfhmowqewca\";","lastModifiedDate":"2017-06-20"},{"lineNumber":59,"author":{"gitId":"-"},"content":" assertParseException(invalidCommand, MESSAGE_UNKNOWN_COMMAND);","lastModifiedDate":"2017-06-20"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-20"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-20"},{"lineNumber":62,"author":{"gitId":"ashleygoh1"},"content":" // @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":63,"author":{"gitId":"ashleygoh1"},"content":" // public void execute_commandExecutionError_throwsCommandException() {","lastModifiedDate":"2024-02-26"},{"lineNumber":64,"author":{"gitId":"ashleygoh1"},"content":" // String deleteCommand \u003d \"delete 9\";","lastModifiedDate":"2024-02-26"},{"lineNumber":65,"author":{"gitId":"ashleygoh1"},"content":" // assertCommandException(deleteCommand, MESSAGE_INVALID_PERSON_DISPLAYED_INDEX);","lastModifiedDate":"2024-02-26"},{"lineNumber":66,"author":{"gitId":"ashleygoh1"},"content":" // }","lastModifiedDate":"2024-02-26"},{"lineNumber":67,"author":{"gitId":"ashleygoh1"},"content":" //","lastModifiedDate":"2024-02-26"},{"lineNumber":68,"author":{"gitId":"ashleygoh1"},"content":" // @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":69,"author":{"gitId":"ashleygoh1"},"content":" // public void execute_validCommand_success() throws Exception {","lastModifiedDate":"2024-02-26"},{"lineNumber":70,"author":{"gitId":"ashleygoh1"},"content":" // String listCommand \u003d ListCommand.COMMAND_WORD;","lastModifiedDate":"2024-02-26"},{"lineNumber":71,"author":{"gitId":"ashleygoh1"},"content":" // assertCommandSuccess(listCommand, ListCommand.MESSAGE_SUCCESS, model);","lastModifiedDate":"2024-02-26"},{"lineNumber":72,"author":{"gitId":"ashleygoh1"},"content":" // }","lastModifiedDate":"2024-02-26"},{"lineNumber":73,"author":{"gitId":"ashleygoh1"},"content":" //","lastModifiedDate":"2024-02-26"},{"lineNumber":74,"author":{"gitId":"ashleygoh1"},"content":" // @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":75,"author":{"gitId":"ashleygoh1"},"content":" // public void execute_storageThrowsIoException_throwsCommandException() {","lastModifiedDate":"2024-02-26"},{"lineNumber":76,"author":{"gitId":"ashleygoh1"},"content":" // assertCommandFailureForExceptionFromStorage(DUMMY_IO_EXCEPTION, String.format(","lastModifiedDate":"2024-02-26"},{"lineNumber":77,"author":{"gitId":"ashleygoh1"},"content":" // LogicManager.FILE_OPS_ERROR_FORMAT, DUMMY_IO_EXCEPTION.getMessage()));","lastModifiedDate":"2024-02-26"},{"lineNumber":78,"author":{"gitId":"ashleygoh1"},"content":" // }","lastModifiedDate":"2024-02-26"},{"lineNumber":79,"author":{"gitId":"ashleygoh1"},"content":" //","lastModifiedDate":"2024-02-26"},{"lineNumber":80,"author":{"gitId":"ashleygoh1"},"content":" // @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":81,"author":{"gitId":"ashleygoh1"},"content":" // public void execute_storageThrowsAdException_throwsCommandException() {","lastModifiedDate":"2024-02-26"},{"lineNumber":82,"author":{"gitId":"ashleygoh1"},"content":" // assertCommandFailureForExceptionFromStorage(DUMMY_AD_EXCEPTION, String.format(","lastModifiedDate":"2024-02-26"},{"lineNumber":83,"author":{"gitId":"ashleygoh1"},"content":" // LogicManager.FILE_OPS_PERMISSION_ERROR_FORMAT, DUMMY_AD_EXCEPTION.getMessage()));","lastModifiedDate":"2024-02-26"},{"lineNumber":84,"author":{"gitId":"ashleygoh1"},"content":" // }","lastModifiedDate":"2024-02-26"},{"lineNumber":85,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":86,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-09-01"},{"lineNumber":87,"author":{"gitId":"-"},"content":" public void getFilteredPersonList_modifyList_throwsUnsupportedOperationException() {","lastModifiedDate":"2017-09-01"},{"lineNumber":88,"author":{"gitId":"-"},"content":" assertThrows(UnsupportedOperationException.class, () -\u003e logic.getFilteredPersonList().remove(0));","lastModifiedDate":"2019-03-23"},{"lineNumber":89,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-09-01"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":91,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-09-21"},{"lineNumber":92,"author":{"gitId":"-"},"content":" * Executes the command and confirms that","lastModifiedDate":"2019-03-14"},{"lineNumber":93,"author":{"gitId":"-"},"content":" * - no exceptions are thrown \u003cbr\u003e","lastModifiedDate":"2019-03-14"},{"lineNumber":94,"author":{"gitId":"-"},"content":" * - the feedback message is equal to {@code expectedMessage} \u003cbr\u003e","lastModifiedDate":"2019-03-14"},{"lineNumber":95,"author":{"gitId":"-"},"content":" * - the internal model manager state is the same as that in {@code expectedModel} \u003cbr\u003e","lastModifiedDate":"2019-03-14"},{"lineNumber":96,"author":{"gitId":"-"},"content":" * @see #assertCommandFailure(String, Class, String, Model)","lastModifiedDate":"2019-03-14"},{"lineNumber":97,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-09-21"},{"lineNumber":98,"author":{"gitId":"-"},"content":" private void assertCommandSuccess(String inputCommand, String expectedMessage,","lastModifiedDate":"2019-03-14"},{"lineNumber":99,"author":{"gitId":"-"},"content":" Model expectedModel) throws CommandException, ParseException {","lastModifiedDate":"2019-03-14"},{"lineNumber":100,"author":{"gitId":"-"},"content":" CommandResult result \u003d logic.execute(inputCommand);","lastModifiedDate":"2019-03-14"},{"lineNumber":101,"author":{"gitId":"-"},"content":" assertEquals(expectedMessage, result.getFeedbackToUser());","lastModifiedDate":"2019-03-14"},{"lineNumber":102,"author":{"gitId":"-"},"content":" assertEquals(expectedModel, model);","lastModifiedDate":"2019-03-14"},{"lineNumber":103,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-21"},{"lineNumber":104,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":105,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-03-11"},{"lineNumber":106,"author":{"gitId":"-"},"content":" * Executes the command, confirms that a ParseException is thrown and that the result message is correct.","lastModifiedDate":"2017-03-11"},{"lineNumber":107,"author":{"gitId":"-"},"content":" * @see #assertCommandFailure(String, Class, String, Model)","lastModifiedDate":"2019-03-14"},{"lineNumber":108,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-03-11"},{"lineNumber":109,"author":{"gitId":"-"},"content":" private void assertParseException(String inputCommand, String expectedMessage) {","lastModifiedDate":"2017-03-11"},{"lineNumber":110,"author":{"gitId":"-"},"content":" assertCommandFailure(inputCommand, ParseException.class, expectedMessage);","lastModifiedDate":"2017-03-11"},{"lineNumber":111,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-03-11"},{"lineNumber":112,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-11"},{"lineNumber":113,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-06-14"},{"lineNumber":114,"author":{"gitId":"-"},"content":" * Executes the command, confirms that a CommandException is thrown and that the result message is correct.","lastModifiedDate":"2017-06-14"},{"lineNumber":115,"author":{"gitId":"-"},"content":" * @see #assertCommandFailure(String, Class, String, Model)","lastModifiedDate":"2019-03-14"},{"lineNumber":116,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-06-14"},{"lineNumber":117,"author":{"gitId":"-"},"content":" private void assertCommandException(String inputCommand, String expectedMessage) {","lastModifiedDate":"2017-06-14"},{"lineNumber":118,"author":{"gitId":"-"},"content":" assertCommandFailure(inputCommand, CommandException.class, expectedMessage);","lastModifiedDate":"2017-06-14"},{"lineNumber":119,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-14"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-14"},{"lineNumber":121,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-03-11"},{"lineNumber":122,"author":{"gitId":"-"},"content":" * Executes the command, confirms that the exception is thrown and that the result message is correct.","lastModifiedDate":"2017-03-11"},{"lineNumber":123,"author":{"gitId":"-"},"content":" * @see #assertCommandFailure(String, Class, String, Model)","lastModifiedDate":"2019-03-14"},{"lineNumber":124,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-03-11"},{"lineNumber":125,"author":{"gitId":"-"},"content":" private void assertCommandFailure(String inputCommand, Class\u003c? extends Throwable\u003e expectedException,","lastModifiedDate":"2019-03-14"},{"lineNumber":126,"author":{"gitId":"-"},"content":" String expectedMessage) {","lastModifiedDate":"2019-03-14"},{"lineNumber":127,"author":{"gitId":"-"},"content":" Model expectedModel \u003d new ModelManager(model.getAddressBook(), new UserPrefs());","lastModifiedDate":"2017-05-31"},{"lineNumber":128,"author":{"gitId":"-"},"content":" assertCommandFailure(inputCommand, expectedException, expectedMessage, expectedModel);","lastModifiedDate":"2019-03-14"},{"lineNumber":129,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-05"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":131,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-02-05"},{"lineNumber":132,"author":{"gitId":"-"},"content":" * Executes the command and confirms that","lastModifiedDate":"2019-03-14"},{"lineNumber":133,"author":{"gitId":"-"},"content":" * - the {@code expectedException} is thrown \u003cbr\u003e","lastModifiedDate":"2019-03-14"},{"lineNumber":134,"author":{"gitId":"-"},"content":" * - the resulting error message is equal to {@code expectedMessage} \u003cbr\u003e","lastModifiedDate":"2019-03-14"},{"lineNumber":135,"author":{"gitId":"-"},"content":" * - the internal model manager state is the same as that in {@code expectedModel} \u003cbr\u003e","lastModifiedDate":"2019-03-14"},{"lineNumber":136,"author":{"gitId":"-"},"content":" * @see #assertCommandSuccess(String, String, Model)","lastModifiedDate":"2019-03-14"},{"lineNumber":137,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-09-21"},{"lineNumber":138,"author":{"gitId":"-"},"content":" private void assertCommandFailure(String inputCommand, Class\u003c? extends Throwable\u003e expectedException,","lastModifiedDate":"2019-03-14"},{"lineNumber":139,"author":{"gitId":"-"},"content":" String expectedMessage, Model expectedModel) {","lastModifiedDate":"2017-05-31"},{"lineNumber":140,"author":{"gitId":"-"},"content":" assertThrows(expectedException, expectedMessage, () -\u003e logic.execute(inputCommand));","lastModifiedDate":"2019-03-14"},{"lineNumber":141,"author":{"gitId":"-"},"content":" assertEquals(expectedModel, model);","lastModifiedDate":"2017-05-31"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-21"},{"lineNumber":143,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-19"},{"lineNumber":144,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-12-09"},{"lineNumber":145,"author":{"gitId":"-"},"content":" * Tests the Logic component\u0027s handling of an {@code IOException} thrown by the Storage component.","lastModifiedDate":"2023-06-13"},{"lineNumber":146,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2023-06-13"},{"lineNumber":147,"author":{"gitId":"-"},"content":" * @param e the exception to be thrown by the Storage component","lastModifiedDate":"2023-06-13"},{"lineNumber":148,"author":{"gitId":"-"},"content":" * @param expectedMessage the message expected inside exception thrown by the Logic component","lastModifiedDate":"2023-06-13"},{"lineNumber":149,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-12-09"},{"lineNumber":150,"author":{"gitId":"-"},"content":" private void assertCommandFailureForExceptionFromStorage(IOException e, String expectedMessage) {","lastModifiedDate":"2023-06-13"},{"lineNumber":151,"author":{"gitId":"-"},"content":" Path prefPath \u003d temporaryFolder.resolve(\"ExceptionUserPrefs.json\");","lastModifiedDate":"2023-06-13"},{"lineNumber":152,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":153,"author":{"gitId":"-"},"content":" // Inject LogicManager with an AddressBookStorage that throws the IOException e when saving","lastModifiedDate":"2023-06-13"},{"lineNumber":154,"author":{"gitId":"-"},"content":" JsonAddressBookStorage addressBookStorage \u003d new JsonAddressBookStorage(prefPath) {","lastModifiedDate":"2023-06-13"},{"lineNumber":155,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-12-09"},{"lineNumber":156,"author":{"gitId":"-"},"content":" public void saveAddressBook(ReadOnlyAddressBook addressBook, Path filePath)","lastModifiedDate":"2023-06-13"},{"lineNumber":157,"author":{"gitId":"-"},"content":" throws IOException {","lastModifiedDate":"2023-06-13"},{"lineNumber":158,"author":{"gitId":"-"},"content":" throw e;","lastModifiedDate":"2023-06-13"},{"lineNumber":159,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":160,"author":{"gitId":"-"},"content":" };","lastModifiedDate":"2023-06-13"},{"lineNumber":161,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-06-13"},{"lineNumber":162,"author":{"gitId":"-"},"content":" JsonUserPrefsStorage userPrefsStorage \u003d","lastModifiedDate":"2023-06-13"},{"lineNumber":163,"author":{"gitId":"-"},"content":" new JsonUserPrefsStorage(temporaryFolder.resolve(\"ExceptionUserPrefs.json\"));","lastModifiedDate":"2023-06-13"},{"lineNumber":164,"author":{"gitId":"-"},"content":" StorageManager storage \u003d new StorageManager(addressBookStorage, userPrefsStorage);","lastModifiedDate":"2023-06-13"},{"lineNumber":165,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-06-13"},{"lineNumber":166,"author":{"gitId":"-"},"content":" logic \u003d new LogicManager(model, storage);","lastModifiedDate":"2023-06-13"},{"lineNumber":167,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-06-13"},{"lineNumber":168,"author":{"gitId":"-"},"content":" // Triggers the saveAddressBook method by executing an add command","lastModifiedDate":"2023-06-13"},{"lineNumber":169,"author":{"gitId":"-"},"content":" String addCommand \u003d AddCommand.COMMAND_WORD + NAME_DESC_AMY + PHONE_DESC_AMY","lastModifiedDate":"2023-06-13"},{"lineNumber":170,"author":{"gitId":"-"},"content":" + EMAIL_DESC_AMY + ADDRESS_DESC_AMY;","lastModifiedDate":"2023-06-13"},{"lineNumber":171,"author":{"gitId":"ashleygoh1"},"content":" Person expectedPerson \u003d new PersonBuilder(AMY).withTags(TAG_DESC_NO_REPLY).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":172,"author":{"gitId":"-"},"content":" ModelManager expectedModel \u003d new ModelManager();","lastModifiedDate":"2023-06-13"},{"lineNumber":173,"author":{"gitId":"-"},"content":" expectedModel.addPerson(expectedPerson);","lastModifiedDate":"2023-06-13"},{"lineNumber":174,"author":{"gitId":"-"},"content":" assertCommandFailure(addCommand, CommandException.class, expectedMessage, expectedModel);","lastModifiedDate":"2023-06-13"},{"lineNumber":175,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":176,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-09-21"}],"authorContributionMap":{"ashleygoh1":27,"-":149}},{"path":"src/test/java/seedu/address/logic/commands/AddCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.commands;","lastModifiedDate":"2017-05-12"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2018-01-10"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-03-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2019-03-15"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2019-03-15"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-23"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.ALICE;","lastModifiedDate":"2019-02-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import java.nio.file.Path;","lastModifiedDate":"2018-11-27"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import java.util.ArrayList;","lastModifiedDate":"2017-05-12"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import java.util.Arrays;","lastModifiedDate":"2017-05-12"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import java.util.function.Predicate;","lastModifiedDate":"2017-06-12"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2017-09-01"},{"lineNumber":18,"author":{"gitId":"Jawad280"},"content":"import javafx.collections.transformation.FilteredList;","lastModifiedDate":"2024-03-01"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.GuiSettings;","lastModifiedDate":"2018-11-27"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.logic.Messages;","lastModifiedDate":"2023-07-13"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.exceptions.CommandException;","lastModifiedDate":"2017-05-12"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import seedu.address.model.AddressBook;","lastModifiedDate":"2017-05-04"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import seedu.address.model.Model;","lastModifiedDate":"2017-05-12"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import seedu.address.model.ReadOnlyAddressBook;","lastModifiedDate":"2017-05-12"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import seedu.address.model.ReadOnlyUserPrefs;","lastModifiedDate":"2018-11-27"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2017-05-12"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import seedu.address.testutil.PersonBuilder;","lastModifiedDate":"2017-05-12"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":29,"author":{"gitId":"-"},"content":"public class AddCommandTest {","lastModifiedDate":"2017-05-12"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":31,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-12"},{"lineNumber":32,"author":{"gitId":"-"},"content":" public void constructor_nullPerson_throwsNullPointerException() {","lastModifiedDate":"2017-08-15"},{"lineNumber":33,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e new AddCommand(null));","lastModifiedDate":"2019-03-23"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-12"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":36,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-12"},{"lineNumber":37,"author":{"gitId":"-"},"content":" public void execute_personAcceptedByModel_addSuccessful() throws Exception {","lastModifiedDate":"2017-05-12"},{"lineNumber":38,"author":{"gitId":"-"},"content":" ModelStubAcceptingPersonAdded modelStub \u003d new ModelStubAcceptingPersonAdded();","lastModifiedDate":"2017-05-12"},{"lineNumber":39,"author":{"gitId":"-"},"content":" Person validPerson \u003d new PersonBuilder().build();","lastModifiedDate":"2017-05-12"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":41,"author":{"gitId":"-"},"content":" CommandResult commandResult \u003d new AddCommand(validPerson).execute(modelStub);","lastModifiedDate":"2019-01-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":43,"author":{"gitId":"-"},"content":" assertEquals(String.format(AddCommand.MESSAGE_SUCCESS, Messages.format(validPerson)),","lastModifiedDate":"2019-02-23"},{"lineNumber":44,"author":{"gitId":"-"},"content":" commandResult.getFeedbackToUser());","lastModifiedDate":"2019-02-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":" assertEquals(Arrays.asList(validPerson), modelStub.personsAdded);","lastModifiedDate":"2017-05-12"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-12"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":48,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-12"},{"lineNumber":49,"author":{"gitId":"-"},"content":" public void execute_duplicatePerson_throwsCommandException() {","lastModifiedDate":"2019-03-23"},{"lineNumber":50,"author":{"gitId":"-"},"content":" Person validPerson \u003d new PersonBuilder().build();","lastModifiedDate":"2017-05-12"},{"lineNumber":51,"author":{"gitId":"-"},"content":" AddCommand addCommand \u003d new AddCommand(validPerson);","lastModifiedDate":"2018-08-08"},{"lineNumber":52,"author":{"gitId":"-"},"content":" ModelStub modelStub \u003d new ModelStubWithPerson(validPerson);","lastModifiedDate":"2018-08-07"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":54,"author":{"gitId":"-"},"content":" assertThrows(CommandException.class, AddCommand.MESSAGE_DUPLICATE_PERSON, () -\u003e addCommand.execute(modelStub));","lastModifiedDate":"2019-05-03"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-12"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":57,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-22"},{"lineNumber":58,"author":{"gitId":"-"},"content":" public void equals() {","lastModifiedDate":"2017-08-15"},{"lineNumber":59,"author":{"gitId":"-"},"content":" Person alice \u003d new PersonBuilder().withName(\"Alice\").build();","lastModifiedDate":"2017-06-22"},{"lineNumber":60,"author":{"gitId":"-"},"content":" Person bob \u003d new PersonBuilder().withName(\"Bob\").build();","lastModifiedDate":"2017-06-22"},{"lineNumber":61,"author":{"gitId":"-"},"content":" AddCommand addAliceCommand \u003d new AddCommand(alice);","lastModifiedDate":"2017-06-22"},{"lineNumber":62,"author":{"gitId":"-"},"content":" AddCommand addBobCommand \u003d new AddCommand(bob);","lastModifiedDate":"2017-06-22"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-22"},{"lineNumber":64,"author":{"gitId":"-"},"content":" // same object -\u003e returns true","lastModifiedDate":"2017-06-22"},{"lineNumber":65,"author":{"gitId":"-"},"content":" assertTrue(addAliceCommand.equals(addAliceCommand));","lastModifiedDate":"2017-06-22"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-22"},{"lineNumber":67,"author":{"gitId":"-"},"content":" // same values -\u003e returns true","lastModifiedDate":"2017-06-22"},{"lineNumber":68,"author":{"gitId":"-"},"content":" AddCommand addAliceCommandCopy \u003d new AddCommand(alice);","lastModifiedDate":"2017-06-22"},{"lineNumber":69,"author":{"gitId":"-"},"content":" assertTrue(addAliceCommand.equals(addAliceCommandCopy));","lastModifiedDate":"2017-06-22"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-22"},{"lineNumber":71,"author":{"gitId":"-"},"content":" // different types -\u003e returns false","lastModifiedDate":"2017-06-22"},{"lineNumber":72,"author":{"gitId":"-"},"content":" assertFalse(addAliceCommand.equals(1));","lastModifiedDate":"2017-06-22"},{"lineNumber":73,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-22"},{"lineNumber":74,"author":{"gitId":"-"},"content":" // null -\u003e returns false","lastModifiedDate":"2017-06-22"},{"lineNumber":75,"author":{"gitId":"-"},"content":" assertFalse(addAliceCommand.equals(null));","lastModifiedDate":"2017-06-22"},{"lineNumber":76,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-22"},{"lineNumber":77,"author":{"gitId":"-"},"content":" // different person -\u003e returns false","lastModifiedDate":"2017-06-22"},{"lineNumber":78,"author":{"gitId":"-"},"content":" assertFalse(addAliceCommand.equals(addBobCommand));","lastModifiedDate":"2017-06-22"},{"lineNumber":79,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-22"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-22"},{"lineNumber":81,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2019-02-23"},{"lineNumber":82,"author":{"gitId":"-"},"content":" public void toStringMethod() {","lastModifiedDate":"2019-02-23"},{"lineNumber":83,"author":{"gitId":"-"},"content":" AddCommand addCommand \u003d new AddCommand(ALICE);","lastModifiedDate":"2019-02-23"},{"lineNumber":84,"author":{"gitId":"-"},"content":" String expected \u003d AddCommand.class.getCanonicalName() + \"{toAdd\u003d\" + ALICE + \"}\";","lastModifiedDate":"2019-02-23"},{"lineNumber":85,"author":{"gitId":"-"},"content":" assertEquals(expected, addCommand.toString());","lastModifiedDate":"2019-02-23"},{"lineNumber":86,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":87,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":88,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-12"},{"lineNumber":89,"author":{"gitId":"-"},"content":" * A default model stub that have all of the methods failing.","lastModifiedDate":"2017-05-12"},{"lineNumber":90,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-12"},{"lineNumber":91,"author":{"gitId":"-"},"content":" private class ModelStub implements Model {","lastModifiedDate":"2017-05-12"},{"lineNumber":92,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":93,"author":{"gitId":"-"},"content":" public void setUserPrefs(ReadOnlyUserPrefs userPrefs) {","lastModifiedDate":"2018-12-06"},{"lineNumber":94,"author":{"gitId":"-"},"content":" throw new AssertionError(\"This method should not be called.\");","lastModifiedDate":"2018-11-27"},{"lineNumber":95,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":97,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":98,"author":{"gitId":"-"},"content":" public ReadOnlyUserPrefs getUserPrefs() {","lastModifiedDate":"2018-11-27"},{"lineNumber":99,"author":{"gitId":"-"},"content":" throw new AssertionError(\"This method should not be called.\");","lastModifiedDate":"2018-11-27"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":101,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":102,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":103,"author":{"gitId":"-"},"content":" public GuiSettings getGuiSettings() {","lastModifiedDate":"2018-11-27"},{"lineNumber":104,"author":{"gitId":"-"},"content":" throw new AssertionError(\"This method should not be called.\");","lastModifiedDate":"2018-11-27"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":106,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":107,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":108,"author":{"gitId":"-"},"content":" public void setGuiSettings(GuiSettings guiSettings) {","lastModifiedDate":"2018-11-27"},{"lineNumber":109,"author":{"gitId":"-"},"content":" throw new AssertionError(\"This method should not be called.\");","lastModifiedDate":"2018-11-27"},{"lineNumber":110,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":111,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":112,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":113,"author":{"gitId":"-"},"content":" public Path getAddressBookFilePath() {","lastModifiedDate":"2018-11-27"},{"lineNumber":114,"author":{"gitId":"-"},"content":" throw new AssertionError(\"This method should not be called.\");","lastModifiedDate":"2018-11-27"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":116,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":117,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":118,"author":{"gitId":"-"},"content":" public void setAddressBookFilePath(Path addressBookFilePath) {","lastModifiedDate":"2018-11-27"},{"lineNumber":119,"author":{"gitId":"-"},"content":" throw new AssertionError(\"This method should not be called.\");","lastModifiedDate":"2018-11-27"},{"lineNumber":120,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":121,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":122,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-05-12"},{"lineNumber":123,"author":{"gitId":"-"},"content":" public void addPerson(Person person) {","lastModifiedDate":"2018-08-07"},{"lineNumber":124,"author":{"gitId":"-"},"content":" throw new AssertionError(\"This method should not be called.\");","lastModifiedDate":"2018-08-06"},{"lineNumber":125,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-12"},{"lineNumber":126,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":127,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-05-12"},{"lineNumber":128,"author":{"gitId":"-"},"content":" public void setAddressBook(ReadOnlyAddressBook newData) {","lastModifiedDate":"2018-11-27"},{"lineNumber":129,"author":{"gitId":"-"},"content":" throw new AssertionError(\"This method should not be called.\");","lastModifiedDate":"2018-08-06"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-12"},{"lineNumber":131,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":132,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-05-12"},{"lineNumber":133,"author":{"gitId":"-"},"content":" public ReadOnlyAddressBook getAddressBook() {","lastModifiedDate":"2017-05-12"},{"lineNumber":134,"author":{"gitId":"-"},"content":" throw new AssertionError(\"This method should not be called.\");","lastModifiedDate":"2018-08-06"},{"lineNumber":135,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-12"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":137,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-08-06"},{"lineNumber":138,"author":{"gitId":"-"},"content":" public boolean hasPerson(Person person) {","lastModifiedDate":"2018-08-06"},{"lineNumber":139,"author":{"gitId":"-"},"content":" throw new AssertionError(\"This method should not be called.\");","lastModifiedDate":"2018-08-06"},{"lineNumber":140,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-06"},{"lineNumber":141,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-06"},{"lineNumber":142,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-05-12"},{"lineNumber":143,"author":{"gitId":"-"},"content":" public void deletePerson(Person target) {","lastModifiedDate":"2018-08-08"},{"lineNumber":144,"author":{"gitId":"-"},"content":" throw new AssertionError(\"This method should not be called.\");","lastModifiedDate":"2018-08-06"},{"lineNumber":145,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-12"},{"lineNumber":146,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":147,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-05-12"},{"lineNumber":148,"author":{"gitId":"-"},"content":" public void setPerson(Person target, Person editedPerson) {","lastModifiedDate":"2018-08-17"},{"lineNumber":149,"author":{"gitId":"-"},"content":" throw new AssertionError(\"This method should not be called.\");","lastModifiedDate":"2018-08-06"},{"lineNumber":150,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-12"},{"lineNumber":151,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":152,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-05-12"},{"lineNumber":153,"author":{"gitId":"-"},"content":" public ObservableList\u003cPerson\u003e getFilteredPersonList() {","lastModifiedDate":"2018-01-10"},{"lineNumber":154,"author":{"gitId":"-"},"content":" throw new AssertionError(\"This method should not be called.\");","lastModifiedDate":"2018-08-06"},{"lineNumber":155,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-12"},{"lineNumber":156,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":157,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-05-12"},{"lineNumber":158,"author":{"gitId":"-"},"content":" public void updateFilteredPersonList(Predicate\u003cPerson\u003e predicate) {","lastModifiedDate":"2018-01-10"},{"lineNumber":159,"author":{"gitId":"-"},"content":" throw new AssertionError(\"This method should not be called.\");","lastModifiedDate":"2018-08-06"},{"lineNumber":160,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-12"},{"lineNumber":161,"author":{"gitId":"Jawad280"},"content":" @Override","lastModifiedDate":"2024-02-29"},{"lineNumber":162,"author":{"gitId":"Jawad280"},"content":" public Person choosePersonToView(Predicate\u003cPerson\u003e predicate) {","lastModifiedDate":"2024-02-29"},{"lineNumber":163,"author":{"gitId":"Jawad280"},"content":" throw new AssertionError(\"This method should not be called.\");","lastModifiedDate":"2024-02-29"},{"lineNumber":164,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":165,"author":{"gitId":"Jawad280"},"content":" @Override","lastModifiedDate":"2024-03-01"},{"lineNumber":166,"author":{"gitId":"Jawad280"},"content":" public FilteredList\u003cPerson\u003e generateNewFilteredPersonList(Predicate\u003cPerson\u003e predicate) {","lastModifiedDate":"2024-03-01"},{"lineNumber":167,"author":{"gitId":"Jawad280"},"content":" throw new AssertionError(\"This method should not be called.\");","lastModifiedDate":"2024-03-01"},{"lineNumber":168,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":169,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-12"},{"lineNumber":170,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":171,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-12"},{"lineNumber":172,"author":{"gitId":"-"},"content":" * A Model stub that contains a single person.","lastModifiedDate":"2018-08-07"},{"lineNumber":173,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-12"},{"lineNumber":174,"author":{"gitId":"-"},"content":" private class ModelStubWithPerson extends ModelStub {","lastModifiedDate":"2018-08-07"},{"lineNumber":175,"author":{"gitId":"-"},"content":" private final Person person;","lastModifiedDate":"2018-08-07"},{"lineNumber":176,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-07"},{"lineNumber":177,"author":{"gitId":"-"},"content":" ModelStubWithPerson(Person person) {","lastModifiedDate":"2018-08-07"},{"lineNumber":178,"author":{"gitId":"-"},"content":" requireNonNull(person);","lastModifiedDate":"2018-08-07"},{"lineNumber":179,"author":{"gitId":"-"},"content":" this.person \u003d person;","lastModifiedDate":"2018-08-07"},{"lineNumber":180,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-12"},{"lineNumber":181,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":182,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-05-04"},{"lineNumber":183,"author":{"gitId":"-"},"content":" public boolean hasPerson(Person person) {","lastModifiedDate":"2018-08-07"},{"lineNumber":184,"author":{"gitId":"-"},"content":" requireNonNull(person);","lastModifiedDate":"2018-08-07"},{"lineNumber":185,"author":{"gitId":"-"},"content":" return this.person.isSamePerson(person);","lastModifiedDate":"2018-08-07"},{"lineNumber":186,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":187,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-12"},{"lineNumber":188,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":189,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-12"},{"lineNumber":190,"author":{"gitId":"-"},"content":" * A Model stub that always accept the person being added.","lastModifiedDate":"2017-05-12"},{"lineNumber":191,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-12"},{"lineNumber":192,"author":{"gitId":"-"},"content":" private class ModelStubAcceptingPersonAdded extends ModelStub {","lastModifiedDate":"2017-05-12"},{"lineNumber":193,"author":{"gitId":"-"},"content":" final ArrayList\u003cPerson\u003e personsAdded \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2017-05-12"},{"lineNumber":194,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":195,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-08-07"},{"lineNumber":196,"author":{"gitId":"-"},"content":" public boolean hasPerson(Person person) {","lastModifiedDate":"2018-08-07"},{"lineNumber":197,"author":{"gitId":"-"},"content":" requireNonNull(person);","lastModifiedDate":"2018-08-07"},{"lineNumber":198,"author":{"gitId":"-"},"content":" return personsAdded.stream().anyMatch(person::isSamePerson);","lastModifiedDate":"2018-08-07"},{"lineNumber":199,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-07"},{"lineNumber":200,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-07"},{"lineNumber":201,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-05-12"},{"lineNumber":202,"author":{"gitId":"-"},"content":" public void addPerson(Person person) {","lastModifiedDate":"2018-08-08"},{"lineNumber":203,"author":{"gitId":"-"},"content":" requireNonNull(person);","lastModifiedDate":"2018-01-10"},{"lineNumber":204,"author":{"gitId":"-"},"content":" personsAdded.add(person);","lastModifiedDate":"2018-01-10"},{"lineNumber":205,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-12"},{"lineNumber":206,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":207,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-05-04"},{"lineNumber":208,"author":{"gitId":"-"},"content":" public ReadOnlyAddressBook getAddressBook() {","lastModifiedDate":"2017-05-04"},{"lineNumber":209,"author":{"gitId":"-"},"content":" return new AddressBook();","lastModifiedDate":"2017-05-04"},{"lineNumber":210,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":211,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-12"},{"lineNumber":212,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":213,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-05-12"}],"authorContributionMap":{"Jawad280":9,"-":204}},{"path":"src/test/java/seedu/address/logic/commands/CommandTestUtil.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.commands;","lastModifiedDate":"2017-06-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-03-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2019-03-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2017-07-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2017-07-05"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INTERN_DURATION;","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INTERVIEW_DATE;","lastModifiedDate":"2024-02-26"},{"lineNumber":9,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_JOB_DESCRIPTION;","lastModifiedDate":"2024-02-26"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2017-07-05"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2017-07-05"},{"lineNumber":12,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_SALARY;","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2017-07-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-23"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import java.util.ArrayList;","lastModifiedDate":"2017-06-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import java.util.Arrays;","lastModifiedDate":"2017-07-20"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2017-06-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2018-01-31"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.exceptions.CommandException;","lastModifiedDate":"2017-06-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import seedu.address.model.AddressBook;","lastModifiedDate":"2017-06-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import seedu.address.model.Model;","lastModifiedDate":"2017-06-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import seedu.address.model.person.NameContainsKeywordsPredicate;","lastModifiedDate":"2017-07-20"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-01-10"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":27,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-06-05"},{"lineNumber":28,"author":{"gitId":"-"},"content":" * Contains helper methods for testing commands.","lastModifiedDate":"2017-06-05"},{"lineNumber":29,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-06-05"},{"lineNumber":30,"author":{"gitId":"-"},"content":"public class CommandTestUtil {","lastModifiedDate":"2017-06-05"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":" public static final String VALID_NAME_AMY \u003d \"Amy Bee\";","lastModifiedDate":"2017-07-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":" public static final String VALID_NAME_BOB \u003d \"Bob Choo\";","lastModifiedDate":"2017-07-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":" public static final String VALID_PHONE_AMY \u003d \"11111111\";","lastModifiedDate":"2017-07-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":" public static final String VALID_PHONE_BOB \u003d \"22222222\";","lastModifiedDate":"2017-07-05"},{"lineNumber":36,"author":{"gitId":"-"},"content":" public static final String VALID_EMAIL_AMY \u003d \"amy@example.com\";","lastModifiedDate":"2017-07-05"},{"lineNumber":37,"author":{"gitId":"-"},"content":" public static final String VALID_EMAIL_BOB \u003d \"bob@example.com\";","lastModifiedDate":"2017-07-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":" public static final String VALID_ADDRESS_AMY \u003d \"Block 312, Amy Street 1\";","lastModifiedDate":"2017-07-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":" public static final String VALID_ADDRESS_BOB \u003d \"Block 123, Bobby Street 3\";","lastModifiedDate":"2017-07-05"},{"lineNumber":40,"author":{"gitId":"ashleygoh1"},"content":" public static final String VALID_TAG_NO_REPLY \u003d \"NR\";","lastModifiedDate":"2024-02-26"},{"lineNumber":41,"author":{"gitId":"ashleygoh1"},"content":" public static final String VALID_TAG_FIRST_INTERVIEW \u003d \"F\";","lastModifiedDate":"2024-02-26"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":" public static final String VALID_JOB_DESCRIPTION_AMY \u003d \"Data Science intern\";","lastModifiedDate":"2024-02-26"},{"lineNumber":43,"author":{"gitId":"ashleygoh1"},"content":" public static final String VALID_JOB_DESCRIPTION_BOB \u003d \"Front end developer intern\";","lastModifiedDate":"2024-02-26"},{"lineNumber":44,"author":{"gitId":"ashleygoh1"},"content":" public static final String VALID_INTERVIEW_DATE_AMY \u003d \"15-04-2024 0900\";","lastModifiedDate":"2024-02-26"},{"lineNumber":45,"author":{"gitId":"ashleygoh1"},"content":" public static final String VALID_INTERVIEW_DATE_BOB \u003d \"15-04-2024 1200\";","lastModifiedDate":"2024-02-26"},{"lineNumber":46,"author":{"gitId":"ashleygoh1"},"content":" public static final String VALID_INTERN_DURATION_AMY \u003d \"6 months\";","lastModifiedDate":"2024-02-26"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":" public static final String VALID_INTERN_DURATION_BOB \u003d \"3 months\";","lastModifiedDate":"2024-02-26"},{"lineNumber":48,"author":{"gitId":"ashleygoh1"},"content":" public static final String VALID_SALARY_AMY \u003d \"500\";","lastModifiedDate":"2024-02-26"},{"lineNumber":49,"author":{"gitId":"ashleygoh1"},"content":" public static final String VALID_SALARY_BOB \u003d \"1000\";","lastModifiedDate":"2024-02-26"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-05"},{"lineNumber":51,"author":{"gitId":"-"},"content":" public static final String NAME_DESC_AMY \u003d \" \" + PREFIX_NAME + VALID_NAME_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":52,"author":{"gitId":"-"},"content":" public static final String NAME_DESC_BOB \u003d \" \" + PREFIX_NAME + VALID_NAME_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":53,"author":{"gitId":"-"},"content":" public static final String PHONE_DESC_AMY \u003d \" \" + PREFIX_PHONE + VALID_PHONE_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":" public static final String PHONE_DESC_BOB \u003d \" \" + PREFIX_PHONE + VALID_PHONE_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":55,"author":{"gitId":"-"},"content":" public static final String EMAIL_DESC_AMY \u003d \" \" + PREFIX_EMAIL + VALID_EMAIL_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":56,"author":{"gitId":"-"},"content":" public static final String EMAIL_DESC_BOB \u003d \" \" + PREFIX_EMAIL + VALID_EMAIL_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":57,"author":{"gitId":"-"},"content":" public static final String ADDRESS_DESC_AMY \u003d \" \" + PREFIX_ADDRESS + VALID_ADDRESS_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":58,"author":{"gitId":"-"},"content":" public static final String ADDRESS_DESC_BOB \u003d \" \" + PREFIX_ADDRESS + VALID_ADDRESS_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":59,"author":{"gitId":"ashleygoh1"},"content":" public static final String TAG_DESC_NO_REPLY \u003d \" \" + PREFIX_TAG + VALID_TAG_NO_REPLY;","lastModifiedDate":"2024-02-26"},{"lineNumber":60,"author":{"gitId":"ashleygoh1"},"content":" public static final String TAG_DESC_FIRST_INTERVIEW \u003d \" \" + PREFIX_TAG + VALID_TAG_FIRST_INTERVIEW;","lastModifiedDate":"2024-02-26"},{"lineNumber":61,"author":{"gitId":"ashleygoh1"},"content":" public static final String JOB_DESCRIPTION_DESC_AMY \u003d \" \" + PREFIX_JOB_DESCRIPTION + VALID_JOB_DESCRIPTION_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":62,"author":{"gitId":"ashleygoh1"},"content":" public static final String JOB_DESCRIPTION_DESC_BOB \u003d \" \" + PREFIX_JOB_DESCRIPTION + VALID_JOB_DESCRIPTION_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":63,"author":{"gitId":"ashleygoh1"},"content":" public static final String INTERVIEW_DATE_DESC_AMY \u003d \" \" + PREFIX_INTERVIEW_DATE + VALID_INTERVIEW_DATE_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":64,"author":{"gitId":"ashleygoh1"},"content":" public static final String INTERVIEW_DATE_DESC_BOB \u003d \" \" + PREFIX_INTERVIEW_DATE + VALID_INTERVIEW_DATE_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":65,"author":{"gitId":"ashleygoh1"},"content":" public static final String INTERN_DURATION_DESC_AMY \u003d \" \" + PREFIX_INTERN_DURATION + VALID_INTERN_DURATION_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":66,"author":{"gitId":"ashleygoh1"},"content":" public static final String INTERN_DURATION_DESC_BOB \u003d \" \" + PREFIX_INTERN_DURATION + VALID_INTERN_DURATION_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":67,"author":{"gitId":"ashleygoh1"},"content":" public static final String SALARY_DESC_AMY \u003d \" \" + PREFIX_SALARY + VALID_SALARY_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":68,"author":{"gitId":"ashleygoh1"},"content":" public static final String SALARY_DESC_BOB \u003d \" \" + PREFIX_SALARY + VALID_SALARY_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-05"},{"lineNumber":70,"author":{"gitId":"-"},"content":" public static final String INVALID_NAME_DESC \u003d \" \" + PREFIX_NAME + \"James\u0026\"; // \u0027\u0026\u0027 not allowed in names","lastModifiedDate":"2017-07-05"},{"lineNumber":71,"author":{"gitId":"-"},"content":" public static final String INVALID_PHONE_DESC \u003d \" \" + PREFIX_PHONE + \"911a\"; // \u0027a\u0027 not allowed in phones","lastModifiedDate":"2017-07-05"},{"lineNumber":72,"author":{"gitId":"-"},"content":" public static final String INVALID_EMAIL_DESC \u003d \" \" + PREFIX_EMAIL + \"bob!yahoo\"; // missing \u0027@\u0027 symbol","lastModifiedDate":"2017-07-05"},{"lineNumber":73,"author":{"gitId":"-"},"content":" public static final String INVALID_ADDRESS_DESC \u003d \" \" + PREFIX_ADDRESS; // empty string not allowed for addresses","lastModifiedDate":"2017-07-05"},{"lineNumber":74,"author":{"gitId":"ashleygoh1"},"content":" public static final String INVALID_TAG_DESC \u003d \" \" + PREFIX_TAG + \"*\"; // \u0027*\u0027 not allowed in tags","lastModifiedDate":"2024-02-26"},{"lineNumber":75,"author":{"gitId":"ashleygoh1"},"content":" public static final String INVALID_JOB_DESCRIPTION_DESC \u003d \" \" + PREFIX_JOB_DESCRIPTION;","lastModifiedDate":"2024-02-26"},{"lineNumber":76,"author":{"gitId":"ashleygoh1"},"content":" // empty string not allowed for job description","lastModifiedDate":"2024-02-26"},{"lineNumber":77,"author":{"gitId":"ashleygoh1"},"content":" public static final String INVALID_INTERN_DURATION_DESC \u003d \" \" + PREFIX_INTERN_DURATION;","lastModifiedDate":"2024-02-26"},{"lineNumber":78,"author":{"gitId":"ashleygoh1"},"content":" // empty string not allowed for intern duration","lastModifiedDate":"2024-02-26"},{"lineNumber":79,"author":{"gitId":"ashleygoh1"},"content":" public static final String INVALID_SALARY_DESC \u003d \" \" + PREFIX_SALARY + \"0\";","lastModifiedDate":"2024-02-26"},{"lineNumber":80,"author":{"gitId":"ashleygoh1"},"content":" // salary need to be above 0 dollar","lastModifiedDate":"2024-02-26"},{"lineNumber":81,"author":{"gitId":"-"},"content":" public static final String PREAMBLE_WHITESPACE \u003d \"\\t \\r \\n\";","lastModifiedDate":"2017-12-23"},{"lineNumber":82,"author":{"gitId":"-"},"content":" public static final String PREAMBLE_NON_EMPTY \u003d \"NonEmptyPreamble\";","lastModifiedDate":"2017-12-23"},{"lineNumber":83,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-23"},{"lineNumber":84,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-06-05"},{"lineNumber":85,"author":{"gitId":"-"},"content":" * Executes the given {@code command}, confirms that \u003cbr\u003e","lastModifiedDate":"2017-06-05"},{"lineNumber":86,"author":{"gitId":"-"},"content":" * - the returned {@link CommandResult} matches {@code expectedCommandResult} \u003cbr\u003e","lastModifiedDate":"2018-12-09"},{"lineNumber":87,"author":{"gitId":"-"},"content":" * - the {@code actualModel} matches {@code expectedModel}","lastModifiedDate":"2019-01-25"},{"lineNumber":88,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-06-05"},{"lineNumber":89,"author":{"gitId":"-"},"content":" public static void assertCommandSuccess(Command command, Model actualModel, CommandResult expectedCommandResult,","lastModifiedDate":"2019-01-25"},{"lineNumber":90,"author":{"gitId":"-"},"content":" Model expectedModel) {","lastModifiedDate":"2019-01-25"},{"lineNumber":91,"author":{"gitId":"-"},"content":" try {","lastModifiedDate":"2017-08-15"},{"lineNumber":92,"author":{"gitId":"-"},"content":" CommandResult result \u003d command.execute(actualModel);","lastModifiedDate":"2019-01-25"},{"lineNumber":93,"author":{"gitId":"-"},"content":" assertEquals(expectedCommandResult, result);","lastModifiedDate":"2018-12-09"},{"lineNumber":94,"author":{"gitId":"-"},"content":" assertEquals(expectedModel, actualModel);","lastModifiedDate":"2017-06-05"},{"lineNumber":95,"author":{"gitId":"-"},"content":" } catch (CommandException ce) {","lastModifiedDate":"2017-08-15"},{"lineNumber":96,"author":{"gitId":"-"},"content":" throw new AssertionError(\"Execution of command should not fail.\", ce);","lastModifiedDate":"2017-08-15"},{"lineNumber":97,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-08-15"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-05"},{"lineNumber":99,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":100,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-12-09"},{"lineNumber":101,"author":{"gitId":"-"},"content":" * Convenience wrapper to {@link #assertCommandSuccess(Command, Model, CommandResult, Model)}","lastModifiedDate":"2019-01-25"},{"lineNumber":102,"author":{"gitId":"-"},"content":" * that takes a string {@code expectedMessage}.","lastModifiedDate":"2018-12-09"},{"lineNumber":103,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-12-09"},{"lineNumber":104,"author":{"gitId":"-"},"content":" public static void assertCommandSuccess(Command command, Model actualModel, String expectedMessage,","lastModifiedDate":"2019-01-25"},{"lineNumber":105,"author":{"gitId":"-"},"content":" Model expectedModel) {","lastModifiedDate":"2019-01-25"},{"lineNumber":106,"author":{"gitId":"-"},"content":" CommandResult expectedCommandResult \u003d new CommandResult(expectedMessage);","lastModifiedDate":"2018-12-09"},{"lineNumber":107,"author":{"gitId":"-"},"content":" assertCommandSuccess(command, actualModel, expectedCommandResult, expectedModel);","lastModifiedDate":"2019-01-25"},{"lineNumber":108,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":109,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":110,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-06-05"},{"lineNumber":111,"author":{"gitId":"-"},"content":" * Executes the given {@code command}, confirms that \u003cbr\u003e","lastModifiedDate":"2017-06-05"},{"lineNumber":112,"author":{"gitId":"-"},"content":" * - a {@code CommandException} is thrown \u003cbr\u003e","lastModifiedDate":"2017-06-05"},{"lineNumber":113,"author":{"gitId":"-"},"content":" * - the CommandException message matches {@code expectedMessage} \u003cbr\u003e","lastModifiedDate":"2017-06-05"},{"lineNumber":114,"author":{"gitId":"-"},"content":" * - the address book, filtered person list and selected person in {@code actualModel} remain unchanged","lastModifiedDate":"2019-01-25"},{"lineNumber":115,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-06-05"},{"lineNumber":116,"author":{"gitId":"-"},"content":" public static void assertCommandFailure(Command command, Model actualModel, String expectedMessage) {","lastModifiedDate":"2019-01-25"},{"lineNumber":117,"author":{"gitId":"-"},"content":" // we are unable to defensively copy the model for comparison later, so we can","lastModifiedDate":"2017-06-05"},{"lineNumber":118,"author":{"gitId":"-"},"content":" // only do so by copying its components.","lastModifiedDate":"2017-06-05"},{"lineNumber":119,"author":{"gitId":"-"},"content":" AddressBook expectedAddressBook \u003d new AddressBook(actualModel.getAddressBook());","lastModifiedDate":"2017-06-05"},{"lineNumber":120,"author":{"gitId":"-"},"content":" List\u003cPerson\u003e expectedFilteredList \u003d new ArrayList\u003c\u003e(actualModel.getFilteredPersonList());","lastModifiedDate":"2018-01-10"},{"lineNumber":121,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":122,"author":{"gitId":"-"},"content":" assertThrows(CommandException.class, expectedMessage, () -\u003e command.execute(actualModel));","lastModifiedDate":"2019-05-03"},{"lineNumber":123,"author":{"gitId":"-"},"content":" assertEquals(expectedAddressBook, actualModel.getAddressBook());","lastModifiedDate":"2017-06-05"},{"lineNumber":124,"author":{"gitId":"-"},"content":" assertEquals(expectedFilteredList, actualModel.getFilteredPersonList());","lastModifiedDate":"2017-06-05"},{"lineNumber":125,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-05"},{"lineNumber":126,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-20"},{"lineNumber":127,"author":{"gitId":"-"},"content":" * Updates {@code model}\u0027s filtered list to show only the person at the given {@code targetIndex} in the","lastModifiedDate":"2018-01-31"},{"lineNumber":128,"author":{"gitId":"-"},"content":" * {@code model}\u0027s address book.","lastModifiedDate":"2018-01-31"},{"lineNumber":129,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-20"},{"lineNumber":130,"author":{"gitId":"-"},"content":" public static void showPersonAtIndex(Model model, Index targetIndex) {","lastModifiedDate":"2018-01-31"},{"lineNumber":131,"author":{"gitId":"-"},"content":" assertTrue(targetIndex.getZeroBased() \u003c model.getFilteredPersonList().size());","lastModifiedDate":"2018-01-31"},{"lineNumber":132,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-01-31"},{"lineNumber":133,"author":{"gitId":"-"},"content":" Person person \u003d model.getFilteredPersonList().get(targetIndex.getZeroBased());","lastModifiedDate":"2018-01-31"},{"lineNumber":134,"author":{"gitId":"ashleygoh1"},"content":" final String[] splitName \u003d person.getCompanyName().fullName.split(\"\\\\s+\");","lastModifiedDate":"2024-02-25"},{"lineNumber":135,"author":{"gitId":"-"},"content":" model.updateFilteredPersonList(new NameContainsKeywordsPredicate(Arrays.asList(splitName[0])));","lastModifiedDate":"2017-07-20"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-20"},{"lineNumber":137,"author":{"gitId":"-"},"content":" assertEquals(1, model.getFilteredPersonList().size());","lastModifiedDate":"2018-02-08"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-07-20"},{"lineNumber":139,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":140,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-06-05"}],"authorContributionMap":{"ashleygoh1":32,"-":108}},{"path":"src/test/java/seedu/address/logic/commands/EditCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ashleygoh1"},"content":"//package seedu.address.logic.commands;","lastModifiedDate":"2024-02-26"},{"lineNumber":2,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":3,"author":{"gitId":"ashleygoh1"},"content":"//import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2024-02-26"},{"lineNumber":4,"author":{"gitId":"ashleygoh1"},"content":"//import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2024-02-26"},{"lineNumber":5,"author":{"gitId":"ashleygoh1"},"content":"//import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2024-02-26"},{"lineNumber":6,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.DESC_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.DESC_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":9,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND;","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.assertCommandFailure;","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.assertCommandSuccess;","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.showPersonAtIndex;","lastModifiedDate":"2024-02-26"},{"lineNumber":14,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON;","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.testutil.TypicalIndexes.INDEX_SECOND_PERSON;","lastModifiedDate":"2024-02-26"},{"lineNumber":16,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook;","lastModifiedDate":"2024-02-26"},{"lineNumber":17,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":18,"author":{"gitId":"ashleygoh1"},"content":"//import org.junit.jupiter.api.Test;","lastModifiedDate":"2024-02-26"},{"lineNumber":19,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":20,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.commons.core.index.Index;","lastModifiedDate":"2024-02-26"},{"lineNumber":21,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.logic.Messages;","lastModifiedDate":"2024-02-26"},{"lineNumber":22,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.logic.commands.EditCommand.EditPersonDescriptor;","lastModifiedDate":"2024-02-26"},{"lineNumber":23,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.AddressBook;","lastModifiedDate":"2024-02-26"},{"lineNumber":24,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.Model;","lastModifiedDate":"2024-02-26"},{"lineNumber":25,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.ModelManager;","lastModifiedDate":"2024-02-26"},{"lineNumber":26,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.UserPrefs;","lastModifiedDate":"2024-02-26"},{"lineNumber":27,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.person.Person;","lastModifiedDate":"2024-02-26"},{"lineNumber":28,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.testutil.EditPersonDescriptorBuilder;","lastModifiedDate":"2024-02-26"},{"lineNumber":29,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.testutil.PersonBuilder;","lastModifiedDate":"2024-02-26"},{"lineNumber":30,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":31,"author":{"gitId":"ashleygoh1"},"content":"///**","lastModifiedDate":"2024-02-26"},{"lineNumber":32,"author":{"gitId":"ashleygoh1"},"content":"// * Contains integration tests (interaction with the Model) and unit tests for EditCommand.","lastModifiedDate":"2024-02-26"},{"lineNumber":33,"author":{"gitId":"ashleygoh1"},"content":"// */","lastModifiedDate":"2024-02-26"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":"//public class EditCommandTest {","lastModifiedDate":"2024-02-26"},{"lineNumber":35,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":36,"author":{"gitId":"ashleygoh1"},"content":"// private Model model \u003d new ModelManager(getTypicalAddressBook(), new UserPrefs());","lastModifiedDate":"2024-02-26"},{"lineNumber":37,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":38,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":39,"author":{"gitId":"ashleygoh1"},"content":"// public void execute_allFieldsSpecifiedUnfilteredList_success() {","lastModifiedDate":"2024-02-26"},{"lineNumber":40,"author":{"gitId":"ashleygoh1"},"content":"// Person editedPerson \u003d new PersonBuilder().build();","lastModifiedDate":"2024-02-26"},{"lineNumber":41,"author":{"gitId":"ashleygoh1"},"content":"// EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder(editedPerson).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":"// EditCommand editCommand \u003d new EditCommand(INDEX_FIRST_PERSON, descriptor);","lastModifiedDate":"2024-02-26"},{"lineNumber":43,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":44,"author":{"gitId":"ashleygoh1"},"content":"// String expectedMessage \u003d String.format(EditCommand.MESSAGE_EDIT_PERSON_SUCCESS,","lastModifiedDate":"2024-02-26"},{"lineNumber":45,"author":{"gitId":"ashleygoh1"},"content":"// Messages.format(editedPerson));","lastModifiedDate":"2024-02-26"},{"lineNumber":46,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":"// Model expectedModel \u003d new ModelManager(new AddressBook(model.getAddressBook()), new UserPrefs());","lastModifiedDate":"2024-02-26"},{"lineNumber":48,"author":{"gitId":"ashleygoh1"},"content":"// expectedModel.setPerson(model.getFilteredPersonList().get(0), editedPerson);","lastModifiedDate":"2024-02-26"},{"lineNumber":49,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":50,"author":{"gitId":"ashleygoh1"},"content":"// assertCommandSuccess(editCommand, model, expectedMessage, expectedModel);","lastModifiedDate":"2024-02-26"},{"lineNumber":51,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":52,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":53,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":54,"author":{"gitId":"ashleygoh1"},"content":"// public void execute_someFieldsSpecifiedUnfilteredList_success() {","lastModifiedDate":"2024-02-26"},{"lineNumber":55,"author":{"gitId":"ashleygoh1"},"content":"// Index indexLastPerson \u003d Index.fromOneBased(model.getFilteredPersonList().size());","lastModifiedDate":"2024-02-26"},{"lineNumber":56,"author":{"gitId":"ashleygoh1"},"content":"// Person lastPerson \u003d model.getFilteredPersonList().get(indexLastPerson.getZeroBased());","lastModifiedDate":"2024-02-26"},{"lineNumber":57,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":58,"author":{"gitId":"ashleygoh1"},"content":"// PersonBuilder personInList \u003d new PersonBuilder(lastPerson);","lastModifiedDate":"2024-02-26"},{"lineNumber":59,"author":{"gitId":"ashleygoh1"},"content":"// Person editedPerson \u003d personInList.withName(VALID_NAME_BOB).withPhone(VALID_PHONE_BOB)","lastModifiedDate":"2024-02-26"},{"lineNumber":60,"author":{"gitId":"ashleygoh1"},"content":"// .withTags(VALID_TAG_HUSBAND).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":61,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":62,"author":{"gitId":"ashleygoh1"},"content":"// EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder().withName(VALID_NAME_BOB)","lastModifiedDate":"2024-02-26"},{"lineNumber":63,"author":{"gitId":"ashleygoh1"},"content":"// .withPhone(VALID_PHONE_BOB).withTags(VALID_TAG_HUSBAND).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":64,"author":{"gitId":"ashleygoh1"},"content":"// EditCommand editCommand \u003d new EditCommand(indexLastPerson, descriptor);","lastModifiedDate":"2024-02-26"},{"lineNumber":65,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":66,"author":{"gitId":"ashleygoh1"},"content":"// String expectedMessage \u003d String.format(EditCommand.MESSAGE_EDIT_PERSON_SUCCESS,","lastModifiedDate":"2024-02-26"},{"lineNumber":67,"author":{"gitId":"ashleygoh1"},"content":"// Messages.format(editedPerson));","lastModifiedDate":"2024-02-26"},{"lineNumber":68,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":69,"author":{"gitId":"ashleygoh1"},"content":"// Model expectedModel \u003d new ModelManager(new AddressBook(model.getAddressBook()), new UserPrefs());","lastModifiedDate":"2024-02-26"},{"lineNumber":70,"author":{"gitId":"ashleygoh1"},"content":"// expectedModel.setPerson(lastPerson, editedPerson);","lastModifiedDate":"2024-02-26"},{"lineNumber":71,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":72,"author":{"gitId":"ashleygoh1"},"content":"// assertCommandSuccess(editCommand, model, expectedMessage, expectedModel);","lastModifiedDate":"2024-02-26"},{"lineNumber":73,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":74,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":75,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":76,"author":{"gitId":"ashleygoh1"},"content":"// public void execute_noFieldSpecifiedUnfilteredList_success() {","lastModifiedDate":"2024-02-26"},{"lineNumber":77,"author":{"gitId":"ashleygoh1"},"content":"// EditCommand editCommand \u003d new EditCommand(INDEX_FIRST_PERSON, new EditPersonDescriptor());","lastModifiedDate":"2024-02-26"},{"lineNumber":78,"author":{"gitId":"ashleygoh1"},"content":"// Person editedPerson \u003d model.getFilteredPersonList().get(INDEX_FIRST_PERSON.getZeroBased());","lastModifiedDate":"2024-02-26"},{"lineNumber":79,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":80,"author":{"gitId":"ashleygoh1"},"content":"// String expectedMessage \u003d String.format(EditCommand.MESSAGE_EDIT_PERSON_SUCCESS,","lastModifiedDate":"2024-02-26"},{"lineNumber":81,"author":{"gitId":"ashleygoh1"},"content":"// Messages.format(editedPerson));","lastModifiedDate":"2024-02-26"},{"lineNumber":82,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":83,"author":{"gitId":"ashleygoh1"},"content":"// Model expectedModel \u003d new ModelManager(new AddressBook(model.getAddressBook()), new UserPrefs());","lastModifiedDate":"2024-02-26"},{"lineNumber":84,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":85,"author":{"gitId":"ashleygoh1"},"content":"// assertCommandSuccess(editCommand, model, expectedMessage, expectedModel);","lastModifiedDate":"2024-02-26"},{"lineNumber":86,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":87,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":88,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":89,"author":{"gitId":"ashleygoh1"},"content":"// public void execute_filteredList_success() {","lastModifiedDate":"2024-02-26"},{"lineNumber":90,"author":{"gitId":"ashleygoh1"},"content":"// showPersonAtIndex(model, INDEX_FIRST_PERSON);","lastModifiedDate":"2024-02-26"},{"lineNumber":91,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":92,"author":{"gitId":"ashleygoh1"},"content":"// Person personInFilteredList \u003d model.getFilteredPersonList().get(INDEX_FIRST_PERSON.getZeroBased());","lastModifiedDate":"2024-02-26"},{"lineNumber":93,"author":{"gitId":"ashleygoh1"},"content":"// Person editedPerson \u003d new PersonBuilder(personInFilteredList).withName(VALID_NAME_BOB).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":94,"author":{"gitId":"ashleygoh1"},"content":"// EditCommand editCommand \u003d new EditCommand(INDEX_FIRST_PERSON,","lastModifiedDate":"2024-02-26"},{"lineNumber":95,"author":{"gitId":"ashleygoh1"},"content":"// new EditPersonDescriptorBuilder().withName(VALID_NAME_BOB).build());","lastModifiedDate":"2024-02-26"},{"lineNumber":96,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":97,"author":{"gitId":"ashleygoh1"},"content":"// String expectedMessage \u003d String.format(EditCommand.MESSAGE_EDIT_PERSON_SUCCESS,","lastModifiedDate":"2024-02-26"},{"lineNumber":98,"author":{"gitId":"ashleygoh1"},"content":"// Messages.format(editedPerson));","lastModifiedDate":"2024-02-26"},{"lineNumber":99,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":100,"author":{"gitId":"ashleygoh1"},"content":"// Model expectedModel \u003d new ModelManager(new AddressBook(model.getAddressBook()), new UserPrefs());","lastModifiedDate":"2024-02-26"},{"lineNumber":101,"author":{"gitId":"ashleygoh1"},"content":"// expectedModel.setPerson(model.getFilteredPersonList().get(0), editedPerson);","lastModifiedDate":"2024-02-26"},{"lineNumber":102,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":103,"author":{"gitId":"ashleygoh1"},"content":"// assertCommandSuccess(editCommand, model, expectedMessage, expectedModel);","lastModifiedDate":"2024-02-26"},{"lineNumber":104,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":105,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":106,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":107,"author":{"gitId":"ashleygoh1"},"content":"// public void execute_duplicatePersonUnfilteredList_failure() {","lastModifiedDate":"2024-02-26"},{"lineNumber":108,"author":{"gitId":"ashleygoh1"},"content":"// Person firstPerson \u003d model.getFilteredPersonList().get(INDEX_FIRST_PERSON.getZeroBased());","lastModifiedDate":"2024-02-26"},{"lineNumber":109,"author":{"gitId":"ashleygoh1"},"content":"// EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder(firstPerson).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":110,"author":{"gitId":"ashleygoh1"},"content":"// EditCommand editCommand \u003d new EditCommand(INDEX_SECOND_PERSON, descriptor);","lastModifiedDate":"2024-02-26"},{"lineNumber":111,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":112,"author":{"gitId":"ashleygoh1"},"content":"// assertCommandFailure(editCommand, model, EditCommand.MESSAGE_DUPLICATE_PERSON);","lastModifiedDate":"2024-02-26"},{"lineNumber":113,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":114,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":115,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":116,"author":{"gitId":"ashleygoh1"},"content":"// public void execute_duplicatePersonFilteredList_failure() {","lastModifiedDate":"2024-02-26"},{"lineNumber":117,"author":{"gitId":"ashleygoh1"},"content":"// showPersonAtIndex(model, INDEX_FIRST_PERSON);","lastModifiedDate":"2024-02-26"},{"lineNumber":118,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":119,"author":{"gitId":"ashleygoh1"},"content":"// // edit person in filtered list into a duplicate in address book","lastModifiedDate":"2024-02-26"},{"lineNumber":120,"author":{"gitId":"ashleygoh1"},"content":"// Person personInList \u003d model.getAddressBook().getPersonList().get(INDEX_SECOND_PERSON.getZeroBased());","lastModifiedDate":"2024-02-26"},{"lineNumber":121,"author":{"gitId":"ashleygoh1"},"content":"// EditCommand editCommand \u003d new EditCommand(INDEX_FIRST_PERSON,","lastModifiedDate":"2024-02-26"},{"lineNumber":122,"author":{"gitId":"ashleygoh1"},"content":"// new EditPersonDescriptorBuilder(personInList).build());","lastModifiedDate":"2024-02-26"},{"lineNumber":123,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":124,"author":{"gitId":"ashleygoh1"},"content":"// assertCommandFailure(editCommand, model, EditCommand.MESSAGE_DUPLICATE_PERSON);","lastModifiedDate":"2024-02-26"},{"lineNumber":125,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":126,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":127,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":128,"author":{"gitId":"ashleygoh1"},"content":"// public void execute_invalidPersonIndexUnfilteredList_failure() {","lastModifiedDate":"2024-02-26"},{"lineNumber":129,"author":{"gitId":"ashleygoh1"},"content":"// Index outOfBoundIndex \u003d Index.fromOneBased(model.getFilteredPersonList().size() + 1);","lastModifiedDate":"2024-02-26"},{"lineNumber":130,"author":{"gitId":"ashleygoh1"},"content":"// EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder().withName(VALID_NAME_BOB).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":131,"author":{"gitId":"ashleygoh1"},"content":"// EditCommand editCommand \u003d new EditCommand(outOfBoundIndex, descriptor);","lastModifiedDate":"2024-02-26"},{"lineNumber":132,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":133,"author":{"gitId":"ashleygoh1"},"content":"// assertCommandFailure(editCommand, model, Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX);","lastModifiedDate":"2024-02-26"},{"lineNumber":134,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":135,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":136,"author":{"gitId":"ashleygoh1"},"content":"// /**","lastModifiedDate":"2024-02-26"},{"lineNumber":137,"author":{"gitId":"ashleygoh1"},"content":"// * Edit filtered list where index is larger than size of filtered list,","lastModifiedDate":"2024-02-26"},{"lineNumber":138,"author":{"gitId":"ashleygoh1"},"content":"// * but smaller than size of address book","lastModifiedDate":"2024-02-26"},{"lineNumber":139,"author":{"gitId":"ashleygoh1"},"content":"// */","lastModifiedDate":"2024-02-26"},{"lineNumber":140,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":141,"author":{"gitId":"ashleygoh1"},"content":"// public void execute_invalidPersonIndexFilteredList_failure() {","lastModifiedDate":"2024-02-26"},{"lineNumber":142,"author":{"gitId":"ashleygoh1"},"content":"// showPersonAtIndex(model, INDEX_FIRST_PERSON);","lastModifiedDate":"2024-02-26"},{"lineNumber":143,"author":{"gitId":"ashleygoh1"},"content":"// Index outOfBoundIndex \u003d INDEX_SECOND_PERSON;","lastModifiedDate":"2024-02-26"},{"lineNumber":144,"author":{"gitId":"ashleygoh1"},"content":"// // ensures that outOfBoundIndex is still in bounds of address book list","lastModifiedDate":"2024-02-26"},{"lineNumber":145,"author":{"gitId":"ashleygoh1"},"content":"// assertTrue(outOfBoundIndex.getZeroBased() \u003c model.getAddressBook().getPersonList().size());","lastModifiedDate":"2024-02-26"},{"lineNumber":146,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":147,"author":{"gitId":"ashleygoh1"},"content":"// EditCommand editCommand \u003d new EditCommand(outOfBoundIndex,","lastModifiedDate":"2024-02-26"},{"lineNumber":148,"author":{"gitId":"ashleygoh1"},"content":"// new EditPersonDescriptorBuilder().withName(VALID_NAME_BOB).build());","lastModifiedDate":"2024-02-26"},{"lineNumber":149,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":150,"author":{"gitId":"ashleygoh1"},"content":"// assertCommandFailure(editCommand, model, Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX);","lastModifiedDate":"2024-02-26"},{"lineNumber":151,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":152,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":153,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":154,"author":{"gitId":"ashleygoh1"},"content":"// public void equals() {","lastModifiedDate":"2024-02-26"},{"lineNumber":155,"author":{"gitId":"ashleygoh1"},"content":"// final EditCommand standardCommand \u003d new EditCommand(INDEX_FIRST_PERSON, DESC_AMY);","lastModifiedDate":"2024-02-26"},{"lineNumber":156,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":157,"author":{"gitId":"ashleygoh1"},"content":"// // same values -\u003e returns true","lastModifiedDate":"2024-02-26"},{"lineNumber":158,"author":{"gitId":"ashleygoh1"},"content":"// EditPersonDescriptor copyDescriptor \u003d new EditPersonDescriptor(DESC_AMY);","lastModifiedDate":"2024-02-26"},{"lineNumber":159,"author":{"gitId":"ashleygoh1"},"content":"// EditCommand commandWithSameValues \u003d new EditCommand(INDEX_FIRST_PERSON, copyDescriptor);","lastModifiedDate":"2024-02-26"},{"lineNumber":160,"author":{"gitId":"ashleygoh1"},"content":"// assertTrue(standardCommand.equals(commandWithSameValues));","lastModifiedDate":"2024-02-26"},{"lineNumber":161,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":162,"author":{"gitId":"ashleygoh1"},"content":"// // same object -\u003e returns true","lastModifiedDate":"2024-02-26"},{"lineNumber":163,"author":{"gitId":"ashleygoh1"},"content":"// assertTrue(standardCommand.equals(standardCommand));","lastModifiedDate":"2024-02-26"},{"lineNumber":164,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":165,"author":{"gitId":"ashleygoh1"},"content":"// // null -\u003e returns false","lastModifiedDate":"2024-02-26"},{"lineNumber":166,"author":{"gitId":"ashleygoh1"},"content":"// assertFalse(standardCommand.equals(null));","lastModifiedDate":"2024-02-26"},{"lineNumber":167,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":168,"author":{"gitId":"ashleygoh1"},"content":"// // different types -\u003e returns false","lastModifiedDate":"2024-02-26"},{"lineNumber":169,"author":{"gitId":"ashleygoh1"},"content":"// assertFalse(standardCommand.equals(new ClearCommand()));","lastModifiedDate":"2024-02-26"},{"lineNumber":170,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":171,"author":{"gitId":"ashleygoh1"},"content":"// // different index -\u003e returns false","lastModifiedDate":"2024-02-26"},{"lineNumber":172,"author":{"gitId":"ashleygoh1"},"content":"// assertFalse(standardCommand.equals(new EditCommand(INDEX_SECOND_PERSON, DESC_AMY)));","lastModifiedDate":"2024-02-26"},{"lineNumber":173,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":174,"author":{"gitId":"ashleygoh1"},"content":"// // different descriptor -\u003e returns false","lastModifiedDate":"2024-02-26"},{"lineNumber":175,"author":{"gitId":"ashleygoh1"},"content":"// assertFalse(standardCommand.equals(new EditCommand(INDEX_FIRST_PERSON, DESC_BOB)));","lastModifiedDate":"2024-02-26"},{"lineNumber":176,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":177,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":178,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":179,"author":{"gitId":"ashleygoh1"},"content":"// public void toStringMethod() {","lastModifiedDate":"2024-02-26"},{"lineNumber":180,"author":{"gitId":"ashleygoh1"},"content":"// Index index \u003d Index.fromOneBased(1);","lastModifiedDate":"2024-02-26"},{"lineNumber":181,"author":{"gitId":"ashleygoh1"},"content":"// EditPersonDescriptor editPersonDescriptor \u003d new EditPersonDescriptor();","lastModifiedDate":"2024-02-26"},{"lineNumber":182,"author":{"gitId":"ashleygoh1"},"content":"// EditCommand editCommand \u003d new EditCommand(index, editPersonDescriptor);","lastModifiedDate":"2024-02-26"},{"lineNumber":183,"author":{"gitId":"ashleygoh1"},"content":"// String expected \u003d EditCommand.class.getCanonicalName() + \"{index\u003d\" + index + \", editPersonDescriptor\u003d\"","lastModifiedDate":"2024-02-26"},{"lineNumber":184,"author":{"gitId":"ashleygoh1"},"content":"// + editPersonDescriptor + \"}\";","lastModifiedDate":"2024-02-26"},{"lineNumber":185,"author":{"gitId":"ashleygoh1"},"content":"// assertEquals(expected, editCommand.toString());","lastModifiedDate":"2024-02-26"},{"lineNumber":186,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":187,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":188,"author":{"gitId":"ashleygoh1"},"content":"//}","lastModifiedDate":"2024-02-26"}],"authorContributionMap":{"ashleygoh1":188}},{"path":"src/test/java/seedu/address/logic/commands/EditPersonDescriptorTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ashleygoh1"},"content":"//package seedu.address.logic.commands;","lastModifiedDate":"2024-02-26"},{"lineNumber":2,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":3,"author":{"gitId":"ashleygoh1"},"content":"//import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2024-02-26"},{"lineNumber":4,"author":{"gitId":"ashleygoh1"},"content":"//import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2024-02-26"},{"lineNumber":5,"author":{"gitId":"ashleygoh1"},"content":"//import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2024-02-26"},{"lineNumber":6,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.DESC_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.DESC_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":9,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND;","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":14,"author":{"gitId":"ashleygoh1"},"content":"//import org.junit.jupiter.api.Test;","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":16,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.logic.commands.EditCommand.EditPersonDescriptor;","lastModifiedDate":"2024-02-26"},{"lineNumber":17,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.testutil.EditPersonDescriptorBuilder;","lastModifiedDate":"2024-02-26"},{"lineNumber":18,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":19,"author":{"gitId":"ashleygoh1"},"content":"//public class EditPersonDescriptorTest {","lastModifiedDate":"2024-02-26"},{"lineNumber":20,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":21,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":22,"author":{"gitId":"ashleygoh1"},"content":"// public void equals() {","lastModifiedDate":"2024-02-26"},{"lineNumber":23,"author":{"gitId":"ashleygoh1"},"content":"// // same values -\u003e returns true","lastModifiedDate":"2024-02-26"},{"lineNumber":24,"author":{"gitId":"ashleygoh1"},"content":"// EditPersonDescriptor descriptorWithSameValues \u003d new EditPersonDescriptor(DESC_AMY);","lastModifiedDate":"2024-02-26"},{"lineNumber":25,"author":{"gitId":"ashleygoh1"},"content":"// assertTrue(DESC_AMY.equals(descriptorWithSameValues));","lastModifiedDate":"2024-02-26"},{"lineNumber":26,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":27,"author":{"gitId":"ashleygoh1"},"content":"// // same object -\u003e returns true","lastModifiedDate":"2024-02-26"},{"lineNumber":28,"author":{"gitId":"ashleygoh1"},"content":"// assertTrue(DESC_AMY.equals(DESC_AMY));","lastModifiedDate":"2024-02-26"},{"lineNumber":29,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":30,"author":{"gitId":"ashleygoh1"},"content":"// // null -\u003e returns false","lastModifiedDate":"2024-02-26"},{"lineNumber":31,"author":{"gitId":"ashleygoh1"},"content":"// assertFalse(DESC_AMY.equals(null));","lastModifiedDate":"2024-02-26"},{"lineNumber":32,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":33,"author":{"gitId":"ashleygoh1"},"content":"// // different types -\u003e returns false","lastModifiedDate":"2024-02-26"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":"// assertFalse(DESC_AMY.equals(5));","lastModifiedDate":"2024-02-26"},{"lineNumber":35,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":36,"author":{"gitId":"ashleygoh1"},"content":"// // different values -\u003e returns false","lastModifiedDate":"2024-02-26"},{"lineNumber":37,"author":{"gitId":"ashleygoh1"},"content":"// assertFalse(DESC_AMY.equals(DESC_BOB));","lastModifiedDate":"2024-02-26"},{"lineNumber":38,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":39,"author":{"gitId":"ashleygoh1"},"content":"// // different name -\u003e returns false","lastModifiedDate":"2024-02-26"},{"lineNumber":40,"author":{"gitId":"ashleygoh1"},"content":"// EditPersonDescriptor editedAmy \u003d new EditPersonDescriptorBuilder(DESC_AMY).withName(VALID_NAME_BOB).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":41,"author":{"gitId":"ashleygoh1"},"content":"// assertFalse(DESC_AMY.equals(editedAmy));","lastModifiedDate":"2024-02-26"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":43,"author":{"gitId":"ashleygoh1"},"content":"// // different phone -\u003e returns false","lastModifiedDate":"2024-02-26"},{"lineNumber":44,"author":{"gitId":"ashleygoh1"},"content":"// editedAmy \u003d new EditPersonDescriptorBuilder(DESC_AMY).withPhone(VALID_PHONE_BOB).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":45,"author":{"gitId":"ashleygoh1"},"content":"// assertFalse(DESC_AMY.equals(editedAmy));","lastModifiedDate":"2024-02-26"},{"lineNumber":46,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":"// // different email -\u003e returns false","lastModifiedDate":"2024-02-26"},{"lineNumber":48,"author":{"gitId":"ashleygoh1"},"content":"// editedAmy \u003d new EditPersonDescriptorBuilder(DESC_AMY).withEmail(VALID_EMAIL_BOB).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":49,"author":{"gitId":"ashleygoh1"},"content":"// assertFalse(DESC_AMY.equals(editedAmy));","lastModifiedDate":"2024-02-26"},{"lineNumber":50,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":51,"author":{"gitId":"ashleygoh1"},"content":"// // different address -\u003e returns false","lastModifiedDate":"2024-02-26"},{"lineNumber":52,"author":{"gitId":"ashleygoh1"},"content":"// editedAmy \u003d new EditPersonDescriptorBuilder(DESC_AMY).withAddress(VALID_ADDRESS_BOB).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":53,"author":{"gitId":"ashleygoh1"},"content":"// assertFalse(DESC_AMY.equals(editedAmy));","lastModifiedDate":"2024-02-26"},{"lineNumber":54,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":55,"author":{"gitId":"ashleygoh1"},"content":"// // different tags -\u003e returns false","lastModifiedDate":"2024-02-26"},{"lineNumber":56,"author":{"gitId":"ashleygoh1"},"content":"// editedAmy \u003d new EditPersonDescriptorBuilder(DESC_AMY).withTags(VALID_TAG_HUSBAND).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":57,"author":{"gitId":"ashleygoh1"},"content":"// assertFalse(DESC_AMY.equals(editedAmy));","lastModifiedDate":"2024-02-26"},{"lineNumber":58,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":59,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":60,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":61,"author":{"gitId":"ashleygoh1"},"content":"// public void toStringMethod() {","lastModifiedDate":"2024-02-26"},{"lineNumber":62,"author":{"gitId":"ashleygoh1"},"content":"// EditPersonDescriptor editPersonDescriptor \u003d new EditPersonDescriptor();","lastModifiedDate":"2024-02-26"},{"lineNumber":63,"author":{"gitId":"ashleygoh1"},"content":"// String expected \u003d EditPersonDescriptor.class.getCanonicalName() + \"{name\u003d\"","lastModifiedDate":"2024-02-26"},{"lineNumber":64,"author":{"gitId":"ashleygoh1"},"content":"// + editPersonDescriptor.getName().orElse(null) + \", phone\u003d\"","lastModifiedDate":"2024-02-26"},{"lineNumber":65,"author":{"gitId":"ashleygoh1"},"content":"// + editPersonDescriptor.getPhone().orElse(null) + \", email\u003d\"","lastModifiedDate":"2024-02-26"},{"lineNumber":66,"author":{"gitId":"ashleygoh1"},"content":"// + editPersonDescriptor.getEmail().orElse(null) + \", address\u003d\"","lastModifiedDate":"2024-02-26"},{"lineNumber":67,"author":{"gitId":"ashleygoh1"},"content":"// + editPersonDescriptor.getAddress().orElse(null) + \", tags\u003d\"","lastModifiedDate":"2024-02-26"},{"lineNumber":68,"author":{"gitId":"ashleygoh1"},"content":"// + editPersonDescriptor.getTags().orElse(null) + \"}\";","lastModifiedDate":"2024-02-26"},{"lineNumber":69,"author":{"gitId":"ashleygoh1"},"content":"// assertEquals(expected, editPersonDescriptor.toString());","lastModifiedDate":"2024-02-26"},{"lineNumber":70,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":71,"author":{"gitId":"ashleygoh1"},"content":"//}","lastModifiedDate":"2024-02-26"}],"authorContributionMap":{"ashleygoh1":71}},{"path":"src/test/java/seedu/address/logic/parser/AddCommandParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-06-15"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-07-13"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.ADDRESS_DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.ADDRESS_DESC_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.EMAIL_DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.EMAIL_DESC_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":8,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INTERN_DURATION_DESC_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":9,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INTERN_DURATION_DESC_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INTERVIEW_DATE_DESC_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INTERVIEW_DATE_DESC_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_ADDRESS_DESC;","lastModifiedDate":"2017-07-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_EMAIL_DESC;","lastModifiedDate":"2017-07-05"},{"lineNumber":14,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_INTERN_DURATION_DESC;","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_JOB_DESCRIPTION_DESC;","lastModifiedDate":"2024-02-26"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_NAME_DESC;","lastModifiedDate":"2017-07-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_PHONE_DESC;","lastModifiedDate":"2017-07-05"},{"lineNumber":18,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_SALARY_DESC;","lastModifiedDate":"2024-02-26"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_TAG_DESC;","lastModifiedDate":"2017-07-05"},{"lineNumber":20,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.JOB_DESCRIPTION_DESC_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":21,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.JOB_DESCRIPTION_DESC_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.NAME_DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.NAME_DESC_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.PHONE_DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.PHONE_DESC_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.PREAMBLE_NON_EMPTY;","lastModifiedDate":"2017-12-23"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.PREAMBLE_WHITESPACE;","lastModifiedDate":"2017-12-23"},{"lineNumber":28,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.SALARY_DESC_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":29,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.SALARY_DESC_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":30,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.TAG_DESC_FIRST_INTERVIEW;","lastModifiedDate":"2024-02-26"},{"lineNumber":31,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.TAG_DESC_NO_REPLY;","lastModifiedDate":"2024-02-26"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_INTERN_DURATION_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":35,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_INTERVIEW_DATE_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":36,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_JOB_DESCRIPTION_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":37,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2023-07-14"},{"lineNumber":40,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2023-07-14"},{"lineNumber":41,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INTERN_DURATION;","lastModifiedDate":"2024-02-26"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INTERVIEW_DATE;","lastModifiedDate":"2024-02-26"},{"lineNumber":43,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_JOB_DESCRIPTION;","lastModifiedDate":"2024-02-26"},{"lineNumber":44,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2023-07-14"},{"lineNumber":45,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2023-07-14"},{"lineNumber":46,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_SALARY;","lastModifiedDate":"2024-02-26"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2024-02-26"},{"lineNumber":48,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CommandParserTestUtil.assertParseFailure;","lastModifiedDate":"2017-07-06"},{"lineNumber":49,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CommandParserTestUtil.assertParseSuccess;","lastModifiedDate":"2017-07-06"},{"lineNumber":50,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.BOB;","lastModifiedDate":"2018-07-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":52,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":54,"author":{"gitId":"-"},"content":"import seedu.address.logic.Messages;","lastModifiedDate":"2023-07-14"},{"lineNumber":55,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.AddCommand;","lastModifiedDate":"2017-06-15"},{"lineNumber":56,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2017-06-15"},{"lineNumber":57,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.InternDuration;","lastModifiedDate":"2024-02-26"},{"lineNumber":58,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.JobDescription;","lastModifiedDate":"2024-02-26"},{"lineNumber":59,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2017-06-15"},{"lineNumber":60,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2017-06-15"},{"lineNumber":61,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2017-06-15"},{"lineNumber":62,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.Salary;","lastModifiedDate":"2024-02-26"},{"lineNumber":63,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-06-15"},{"lineNumber":64,"author":{"gitId":"-"},"content":"import seedu.address.testutil.PersonBuilder;","lastModifiedDate":"2017-06-15"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":66,"author":{"gitId":"-"},"content":"public class AddCommandParserTest {","lastModifiedDate":"2017-06-15"},{"lineNumber":67,"author":{"gitId":"-"},"content":" private AddCommandParser parser \u003d new AddCommandParser();","lastModifiedDate":"2017-06-15"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":69,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-15"},{"lineNumber":70,"author":{"gitId":"-"},"content":" public void parse_allFieldsPresent_success() {","lastModifiedDate":"2017-08-15"},{"lineNumber":71,"author":{"gitId":"ashleygoh1"},"content":" Person expectedPerson \u003d new PersonBuilder(BOB).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":73,"author":{"gitId":"-"},"content":" // whitespace only preamble","lastModifiedDate":"2017-12-23"},{"lineNumber":74,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, PREAMBLE_WHITESPACE + NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB","lastModifiedDate":"2017-12-23"},{"lineNumber":75,"author":{"gitId":"ashleygoh1"},"content":" + ADDRESS_DESC_BOB + TAG_DESC_FIRST_INTERVIEW","lastModifiedDate":"2024-02-26"},{"lineNumber":76,"author":{"gitId":"ashleygoh1"},"content":" + JOB_DESCRIPTION_DESC_BOB + INTERVIEW_DATE_DESC_BOB","lastModifiedDate":"2024-02-26"},{"lineNumber":77,"author":{"gitId":"ashleygoh1"},"content":" + INTERN_DURATION_DESC_BOB + SALARY_DESC_BOB, new AddCommand(expectedPerson));","lastModifiedDate":"2024-02-26"},{"lineNumber":78,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-23"},{"lineNumber":79,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-14"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":81,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-07-14"},{"lineNumber":82,"author":{"gitId":"-"},"content":" public void parse_repeatedNonTagValue_failure() {","lastModifiedDate":"2023-07-14"},{"lineNumber":83,"author":{"gitId":"-"},"content":" String validExpectedPersonString \u003d NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB","lastModifiedDate":"2023-07-14"},{"lineNumber":84,"author":{"gitId":"ashleygoh1"},"content":" + ADDRESS_DESC_BOB + TAG_DESC_FIRST_INTERVIEW","lastModifiedDate":"2024-02-26"},{"lineNumber":85,"author":{"gitId":"ashleygoh1"},"content":" + JOB_DESCRIPTION_DESC_BOB + INTERVIEW_DATE_DESC_BOB","lastModifiedDate":"2024-02-26"},{"lineNumber":86,"author":{"gitId":"ashleygoh1"},"content":" + INTERN_DURATION_DESC_BOB + SALARY_DESC_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":87,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":88,"author":{"gitId":"-"},"content":" // multiple names","lastModifiedDate":"2023-07-14"},{"lineNumber":89,"author":{"gitId":"-"},"content":" assertParseFailure(parser, NAME_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":90,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_NAME));","lastModifiedDate":"2023-07-14"},{"lineNumber":91,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":92,"author":{"gitId":"-"},"content":" // multiple phones","lastModifiedDate":"2023-07-14"},{"lineNumber":93,"author":{"gitId":"-"},"content":" assertParseFailure(parser, PHONE_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":94,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE));","lastModifiedDate":"2023-07-14"},{"lineNumber":95,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":96,"author":{"gitId":"-"},"content":" // multiple emails","lastModifiedDate":"2023-07-14"},{"lineNumber":97,"author":{"gitId":"-"},"content":" assertParseFailure(parser, EMAIL_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":98,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_EMAIL));","lastModifiedDate":"2023-07-14"},{"lineNumber":99,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":100,"author":{"gitId":"-"},"content":" // multiple addresses","lastModifiedDate":"2023-07-14"},{"lineNumber":101,"author":{"gitId":"-"},"content":" assertParseFailure(parser, ADDRESS_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":102,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_ADDRESS));","lastModifiedDate":"2023-07-14"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":104,"author":{"gitId":"ashleygoh1"},"content":" // multiple job description","lastModifiedDate":"2024-02-26"},{"lineNumber":105,"author":{"gitId":"ashleygoh1"},"content":" assertParseFailure(parser, JOB_DESCRIPTION_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2024-02-26"},{"lineNumber":106,"author":{"gitId":"ashleygoh1"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_JOB_DESCRIPTION));","lastModifiedDate":"2024-02-26"},{"lineNumber":107,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":108,"author":{"gitId":"ashleygoh1"},"content":" // multiple interview date","lastModifiedDate":"2024-02-26"},{"lineNumber":109,"author":{"gitId":"ashleygoh1"},"content":" assertParseFailure(parser, INTERVIEW_DATE_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2024-02-26"},{"lineNumber":110,"author":{"gitId":"ashleygoh1"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_INTERVIEW_DATE));","lastModifiedDate":"2024-02-26"},{"lineNumber":111,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":112,"author":{"gitId":"ashleygoh1"},"content":" // multiple intern duration","lastModifiedDate":"2024-02-26"},{"lineNumber":113,"author":{"gitId":"ashleygoh1"},"content":" assertParseFailure(parser, INTERN_DURATION_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2024-02-26"},{"lineNumber":114,"author":{"gitId":"ashleygoh1"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_INTERN_DURATION));","lastModifiedDate":"2024-02-26"},{"lineNumber":115,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":116,"author":{"gitId":"ashleygoh1"},"content":" // multiple salary","lastModifiedDate":"2024-02-26"},{"lineNumber":117,"author":{"gitId":"ashleygoh1"},"content":" assertParseFailure(parser, SALARY_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2024-02-26"},{"lineNumber":118,"author":{"gitId":"ashleygoh1"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_SALARY));","lastModifiedDate":"2024-02-26"},{"lineNumber":119,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":120,"author":{"gitId":"-"},"content":" // multiple fields repeated","lastModifiedDate":"2023-07-14"},{"lineNumber":121,"author":{"gitId":"-"},"content":" assertParseFailure(parser,","lastModifiedDate":"2023-07-14"},{"lineNumber":122,"author":{"gitId":"-"},"content":" validExpectedPersonString + PHONE_DESC_AMY + EMAIL_DESC_AMY + NAME_DESC_AMY + ADDRESS_DESC_AMY","lastModifiedDate":"2023-07-14"},{"lineNumber":123,"author":{"gitId":"-"},"content":" + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":124,"author":{"gitId":"ashleygoh1"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_NAME, PREFIX_ADDRESS, PREFIX_EMAIL, PREFIX_PHONE,","lastModifiedDate":"2024-02-26"},{"lineNumber":125,"author":{"gitId":"ashleygoh1"},"content":" PREFIX_TAG, PREFIX_JOB_DESCRIPTION, PREFIX_INTERVIEW_DATE, PREFIX_INTERN_DURATION,","lastModifiedDate":"2024-02-26"},{"lineNumber":126,"author":{"gitId":"ashleygoh1"},"content":" PREFIX_SALARY));","lastModifiedDate":"2024-02-26"},{"lineNumber":127,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":128,"author":{"gitId":"-"},"content":" // invalid value followed by valid value","lastModifiedDate":"2023-07-14"},{"lineNumber":129,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":130,"author":{"gitId":"-"},"content":" // invalid name","lastModifiedDate":"2023-07-14"},{"lineNumber":131,"author":{"gitId":"-"},"content":" assertParseFailure(parser, INVALID_NAME_DESC + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":132,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_NAME));","lastModifiedDate":"2023-07-14"},{"lineNumber":133,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":134,"author":{"gitId":"-"},"content":" // invalid email","lastModifiedDate":"2023-07-14"},{"lineNumber":135,"author":{"gitId":"-"},"content":" assertParseFailure(parser, INVALID_EMAIL_DESC + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":136,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_EMAIL));","lastModifiedDate":"2023-07-14"},{"lineNumber":137,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":138,"author":{"gitId":"-"},"content":" // invalid phone","lastModifiedDate":"2023-07-14"},{"lineNumber":139,"author":{"gitId":"-"},"content":" assertParseFailure(parser, INVALID_PHONE_DESC + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":140,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE));","lastModifiedDate":"2023-07-14"},{"lineNumber":141,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":142,"author":{"gitId":"-"},"content":" // invalid address","lastModifiedDate":"2023-07-14"},{"lineNumber":143,"author":{"gitId":"-"},"content":" assertParseFailure(parser, INVALID_ADDRESS_DESC + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":144,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_ADDRESS));","lastModifiedDate":"2023-07-14"},{"lineNumber":145,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":146,"author":{"gitId":"-"},"content":" // valid value followed by invalid value","lastModifiedDate":"2023-07-14"},{"lineNumber":147,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":148,"author":{"gitId":"-"},"content":" // invalid name","lastModifiedDate":"2023-07-14"},{"lineNumber":149,"author":{"gitId":"-"},"content":" assertParseFailure(parser, validExpectedPersonString + INVALID_NAME_DESC,","lastModifiedDate":"2023-07-14"},{"lineNumber":150,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_NAME));","lastModifiedDate":"2023-07-14"},{"lineNumber":151,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":152,"author":{"gitId":"-"},"content":" // invalid email","lastModifiedDate":"2023-07-14"},{"lineNumber":153,"author":{"gitId":"-"},"content":" assertParseFailure(parser, validExpectedPersonString + INVALID_EMAIL_DESC,","lastModifiedDate":"2023-07-14"},{"lineNumber":154,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_EMAIL));","lastModifiedDate":"2023-07-14"},{"lineNumber":155,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":156,"author":{"gitId":"-"},"content":" // invalid phone","lastModifiedDate":"2023-07-14"},{"lineNumber":157,"author":{"gitId":"-"},"content":" assertParseFailure(parser, validExpectedPersonString + INVALID_PHONE_DESC,","lastModifiedDate":"2023-07-14"},{"lineNumber":158,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE));","lastModifiedDate":"2023-07-14"},{"lineNumber":159,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":160,"author":{"gitId":"-"},"content":" // invalid address","lastModifiedDate":"2023-07-14"},{"lineNumber":161,"author":{"gitId":"-"},"content":" assertParseFailure(parser, validExpectedPersonString + INVALID_ADDRESS_DESC,","lastModifiedDate":"2023-07-14"},{"lineNumber":162,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_ADDRESS));","lastModifiedDate":"2023-07-14"},{"lineNumber":163,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-15"},{"lineNumber":164,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":165,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-15"},{"lineNumber":166,"author":{"gitId":"-"},"content":" public void parse_compulsoryFieldMissing_failure() {","lastModifiedDate":"2017-06-15"},{"lineNumber":167,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddCommand.MESSAGE_USAGE);","lastModifiedDate":"2017-06-15"},{"lineNumber":168,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":169,"author":{"gitId":"-"},"content":" // missing name prefix","lastModifiedDate":"2017-06-15"},{"lineNumber":170,"author":{"gitId":"-"},"content":" assertParseFailure(parser, VALID_NAME_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + ADDRESS_DESC_BOB,","lastModifiedDate":"2017-12-23"},{"lineNumber":171,"author":{"gitId":"-"},"content":" expectedMessage);","lastModifiedDate":"2017-12-23"},{"lineNumber":172,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":173,"author":{"gitId":"-"},"content":" // missing phone prefix","lastModifiedDate":"2017-06-15"},{"lineNumber":174,"author":{"gitId":"-"},"content":" assertParseFailure(parser, NAME_DESC_BOB + VALID_PHONE_BOB + EMAIL_DESC_BOB + ADDRESS_DESC_BOB,","lastModifiedDate":"2017-12-23"},{"lineNumber":175,"author":{"gitId":"-"},"content":" expectedMessage);","lastModifiedDate":"2017-12-23"},{"lineNumber":176,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":177,"author":{"gitId":"-"},"content":" // missing email prefix","lastModifiedDate":"2017-06-15"},{"lineNumber":178,"author":{"gitId":"-"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + VALID_EMAIL_BOB + ADDRESS_DESC_BOB,","lastModifiedDate":"2017-12-23"},{"lineNumber":179,"author":{"gitId":"-"},"content":" expectedMessage);","lastModifiedDate":"2017-12-23"},{"lineNumber":180,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":181,"author":{"gitId":"-"},"content":" // missing address prefix","lastModifiedDate":"2017-06-15"},{"lineNumber":182,"author":{"gitId":"-"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + VALID_ADDRESS_BOB,","lastModifiedDate":"2017-12-23"},{"lineNumber":183,"author":{"gitId":"-"},"content":" expectedMessage);","lastModifiedDate":"2017-12-23"},{"lineNumber":184,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":185,"author":{"gitId":"ashleygoh1"},"content":" // missing tag prefix","lastModifiedDate":"2024-02-26"},{"lineNumber":186,"author":{"gitId":"ashleygoh1"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + VALID_ADDRESS_BOB,","lastModifiedDate":"2024-02-26"},{"lineNumber":187,"author":{"gitId":"ashleygoh1"},"content":" expectedMessage);","lastModifiedDate":"2024-02-26"},{"lineNumber":188,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":189,"author":{"gitId":"ashleygoh1"},"content":" // missing job description prefix","lastModifiedDate":"2024-02-26"},{"lineNumber":190,"author":{"gitId":"ashleygoh1"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + VALID_ADDRESS_BOB","lastModifiedDate":"2024-02-26"},{"lineNumber":191,"author":{"gitId":"ashleygoh1"},"content":" + VALID_JOB_DESCRIPTION_BOB,","lastModifiedDate":"2024-02-26"},{"lineNumber":192,"author":{"gitId":"ashleygoh1"},"content":" expectedMessage);","lastModifiedDate":"2024-02-26"},{"lineNumber":193,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":194,"author":{"gitId":"ashleygoh1"},"content":" // missing interview date prefix","lastModifiedDate":"2024-02-26"},{"lineNumber":195,"author":{"gitId":"ashleygoh1"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + VALID_ADDRESS_BOB","lastModifiedDate":"2024-02-26"},{"lineNumber":196,"author":{"gitId":"ashleygoh1"},"content":" + VALID_INTERVIEW_DATE_BOB,","lastModifiedDate":"2024-02-26"},{"lineNumber":197,"author":{"gitId":"ashleygoh1"},"content":" expectedMessage);","lastModifiedDate":"2024-02-26"},{"lineNumber":198,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":199,"author":{"gitId":"ashleygoh1"},"content":" // missing intern duration prefix","lastModifiedDate":"2024-02-26"},{"lineNumber":200,"author":{"gitId":"ashleygoh1"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + VALID_ADDRESS_BOB","lastModifiedDate":"2024-02-26"},{"lineNumber":201,"author":{"gitId":"ashleygoh1"},"content":" + VALID_INTERN_DURATION_BOB,","lastModifiedDate":"2024-02-26"},{"lineNumber":202,"author":{"gitId":"ashleygoh1"},"content":" expectedMessage);","lastModifiedDate":"2024-02-26"},{"lineNumber":203,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":204,"author":{"gitId":"ashleygoh1"},"content":" // missing salary prefix","lastModifiedDate":"2024-02-26"},{"lineNumber":205,"author":{"gitId":"ashleygoh1"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + VALID_ADDRESS_BOB,","lastModifiedDate":"2024-02-26"},{"lineNumber":206,"author":{"gitId":"ashleygoh1"},"content":" expectedMessage);","lastModifiedDate":"2024-02-26"},{"lineNumber":207,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":208,"author":{"gitId":"-"},"content":" // all prefixes missing","lastModifiedDate":"2017-06-15"},{"lineNumber":209,"author":{"gitId":"-"},"content":" assertParseFailure(parser, VALID_NAME_BOB + VALID_PHONE_BOB + VALID_EMAIL_BOB + VALID_ADDRESS_BOB,","lastModifiedDate":"2017-12-23"},{"lineNumber":210,"author":{"gitId":"-"},"content":" expectedMessage);","lastModifiedDate":"2017-12-23"},{"lineNumber":211,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-15"},{"lineNumber":212,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":213,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-15"},{"lineNumber":214,"author":{"gitId":"-"},"content":" public void parse_invalidValue_failure() {","lastModifiedDate":"2017-06-15"},{"lineNumber":215,"author":{"gitId":"-"},"content":" // invalid name","lastModifiedDate":"2017-06-15"},{"lineNumber":216,"author":{"gitId":"-"},"content":" assertParseFailure(parser, INVALID_NAME_DESC + PHONE_DESC_BOB + EMAIL_DESC_BOB + ADDRESS_DESC_BOB","lastModifiedDate":"2017-12-23"},{"lineNumber":217,"author":{"gitId":"ashleygoh1"},"content":" + TAG_DESC_FIRST_INTERVIEW + JOB_DESCRIPTION_DESC_BOB + INTERVIEW_DATE_DESC_BOB","lastModifiedDate":"2024-02-26"},{"lineNumber":218,"author":{"gitId":"ashleygoh1"},"content":" + INTERN_DURATION_DESC_BOB + SALARY_DESC_BOB, Name.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-26"},{"lineNumber":219,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":220,"author":{"gitId":"-"},"content":" // invalid phone","lastModifiedDate":"2017-06-15"},{"lineNumber":221,"author":{"gitId":"-"},"content":" assertParseFailure(parser, NAME_DESC_BOB + INVALID_PHONE_DESC + EMAIL_DESC_BOB + ADDRESS_DESC_BOB","lastModifiedDate":"2017-12-23"},{"lineNumber":222,"author":{"gitId":"ashleygoh1"},"content":" + TAG_DESC_FIRST_INTERVIEW + JOB_DESCRIPTION_DESC_BOB + INTERVIEW_DATE_DESC_BOB","lastModifiedDate":"2024-02-26"},{"lineNumber":223,"author":{"gitId":"ashleygoh1"},"content":" + INTERN_DURATION_DESC_BOB + SALARY_DESC_BOB, Phone.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-26"},{"lineNumber":224,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":225,"author":{"gitId":"-"},"content":" // invalid email","lastModifiedDate":"2017-06-15"},{"lineNumber":226,"author":{"gitId":"-"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + INVALID_EMAIL_DESC + ADDRESS_DESC_BOB","lastModifiedDate":"2017-12-23"},{"lineNumber":227,"author":{"gitId":"ashleygoh1"},"content":" + TAG_DESC_FIRST_INTERVIEW + JOB_DESCRIPTION_DESC_BOB + INTERVIEW_DATE_DESC_BOB","lastModifiedDate":"2024-02-26"},{"lineNumber":228,"author":{"gitId":"ashleygoh1"},"content":" + INTERN_DURATION_DESC_BOB + SALARY_DESC_BOB, Email.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-26"},{"lineNumber":229,"author":{"gitId":"-"},"content":" // invalid tag","lastModifiedDate":"2017-06-15"},{"lineNumber":230,"author":{"gitId":"-"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + ADDRESS_DESC_BOB","lastModifiedDate":"2017-12-23"},{"lineNumber":231,"author":{"gitId":"ashleygoh1"},"content":" + INVALID_TAG_DESC + JOB_DESCRIPTION_DESC_BOB + INTERVIEW_DATE_DESC_BOB","lastModifiedDate":"2024-02-26"},{"lineNumber":232,"author":{"gitId":"ashleygoh1"},"content":" + INTERN_DURATION_DESC_BOB + SALARY_DESC_BOB, Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-26"},{"lineNumber":233,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":234,"author":{"gitId":"ashleygoh1"},"content":" // invalid job description","lastModifiedDate":"2024-02-26"},{"lineNumber":235,"author":{"gitId":"ashleygoh1"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + ADDRESS_DESC_BOB","lastModifiedDate":"2024-02-26"},{"lineNumber":236,"author":{"gitId":"ashleygoh1"},"content":" + TAG_DESC_FIRST_INTERVIEW + INVALID_JOB_DESCRIPTION_DESC + INTERVIEW_DATE_DESC_BOB","lastModifiedDate":"2024-02-26"},{"lineNumber":237,"author":{"gitId":"ashleygoh1"},"content":" + INTERN_DURATION_DESC_BOB + SALARY_DESC_BOB, JobDescription.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-26"},{"lineNumber":238,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":239,"author":{"gitId":"ashleygoh1"},"content":" // invalid intern duration","lastModifiedDate":"2024-02-26"},{"lineNumber":240,"author":{"gitId":"ashleygoh1"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + ADDRESS_DESC_BOB","lastModifiedDate":"2024-02-26"},{"lineNumber":241,"author":{"gitId":"ashleygoh1"},"content":" + TAG_DESC_FIRST_INTERVIEW + JOB_DESCRIPTION_DESC_BOB + INTERVIEW_DATE_DESC_BOB","lastModifiedDate":"2024-02-26"},{"lineNumber":242,"author":{"gitId":"ashleygoh1"},"content":" + INVALID_INTERN_DURATION_DESC + SALARY_DESC_BOB, InternDuration.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-26"},{"lineNumber":243,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":244,"author":{"gitId":"ashleygoh1"},"content":" // invalid salary","lastModifiedDate":"2024-02-26"},{"lineNumber":245,"author":{"gitId":"-"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + ADDRESS_DESC_BOB","lastModifiedDate":"2024-02-26"},{"lineNumber":246,"author":{"gitId":"ashleygoh1"},"content":" + TAG_DESC_FIRST_INTERVIEW + JOB_DESCRIPTION_DESC_BOB + INTERVIEW_DATE_DESC_BOB","lastModifiedDate":"2024-02-26"},{"lineNumber":247,"author":{"gitId":"ashleygoh1"},"content":" + INTERN_DURATION_DESC_BOB + INVALID_SALARY_DESC, Salary.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-26"},{"lineNumber":248,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":249,"author":{"gitId":"-"},"content":" // two invalid values, only first invalid value reported","lastModifiedDate":"2017-06-15"},{"lineNumber":250,"author":{"gitId":"ashleygoh1"},"content":" assertParseFailure(parser, INVALID_NAME_DESC + PHONE_DESC_BOB + EMAIL_DESC_BOB + INVALID_ADDRESS_DESC","lastModifiedDate":"2024-02-26"},{"lineNumber":251,"author":{"gitId":"ashleygoh1"},"content":" + TAG_DESC_FIRST_INTERVIEW + JOB_DESCRIPTION_DESC_BOB + INTERVIEW_DATE_DESC_BOB","lastModifiedDate":"2024-02-26"},{"lineNumber":252,"author":{"gitId":"ashleygoh1"},"content":" + INTERN_DURATION_DESC_BOB + INVALID_SALARY_DESC,","lastModifiedDate":"2024-02-26"},{"lineNumber":253,"author":{"gitId":"-"},"content":" Name.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":254,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-23"},{"lineNumber":255,"author":{"gitId":"-"},"content":" // non-empty preamble","lastModifiedDate":"2017-12-23"},{"lineNumber":256,"author":{"gitId":"-"},"content":" assertParseFailure(parser, PREAMBLE_NON_EMPTY + NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB","lastModifiedDate":"2017-12-23"},{"lineNumber":257,"author":{"gitId":"ashleygoh1"},"content":" + ADDRESS_DESC_BOB + TAG_DESC_FIRST_INTERVIEW + TAG_DESC_NO_REPLY,","lastModifiedDate":"2024-02-26"},{"lineNumber":258,"author":{"gitId":"-"},"content":" String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddCommand.MESSAGE_USAGE));","lastModifiedDate":"2017-12-23"},{"lineNumber":259,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-15"},{"lineNumber":260,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-06-15"}],"authorContributionMap":{"ashleygoh1":97,"-":163}},{"path":"src/test/java/seedu/address/logic/parser/AddressBookParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-03-15"},{"lineNumber":4,"author":{"gitId":"ashleygoh1"},"content":"//import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2024-02-26"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-07-13"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_UNKNOWN_COMMAND;","lastModifiedDate":"2023-07-13"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-23"},{"lineNumber":8,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON;","lastModifiedDate":"2024-02-26"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-27"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":"//import java.util.Arrays;","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":"//import java.util.List;","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"ashleygoh1"},"content":"//import java.util.stream.Collectors;","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.AddCommand;","lastModifiedDate":"2017-06-27"},{"lineNumber":16,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.logic.commands.ClearCommand;","lastModifiedDate":"2024-02-26"},{"lineNumber":17,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.logic.commands.DeleteCommand;","lastModifiedDate":"2024-02-26"},{"lineNumber":18,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.logic.commands.ExitCommand;","lastModifiedDate":"2024-02-26"},{"lineNumber":19,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.logic.commands.FindCommand;","lastModifiedDate":"2024-02-26"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.HelpCommand;","lastModifiedDate":"2017-06-27"},{"lineNumber":21,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.logic.commands.ListCommand;","lastModifiedDate":"2024-02-26"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2017-05-24"},{"lineNumber":23,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.person.NameContainsKeywordsPredicate;","lastModifiedDate":"2024-02-26"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2017-06-27"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import seedu.address.testutil.PersonBuilder;","lastModifiedDate":"2017-06-27"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import seedu.address.testutil.PersonUtil;","lastModifiedDate":"2017-06-27"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-24"},{"lineNumber":28,"author":{"gitId":"-"},"content":"public class AddressBookParserTest {","lastModifiedDate":"2017-07-07"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-27"},{"lineNumber":30,"author":{"gitId":"-"},"content":" private final AddressBookParser parser \u003d new AddressBookParser();","lastModifiedDate":"2017-07-07"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-24"},{"lineNumber":32,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-27"},{"lineNumber":33,"author":{"gitId":"-"},"content":" public void parseCommand_add() throws Exception {","lastModifiedDate":"2017-06-27"},{"lineNumber":34,"author":{"gitId":"-"},"content":" Person person \u003d new PersonBuilder().build();","lastModifiedDate":"2017-06-27"},{"lineNumber":35,"author":{"gitId":"-"},"content":" AddCommand command \u003d (AddCommand) parser.parseCommand(PersonUtil.getAddCommand(person));","lastModifiedDate":"2017-06-27"},{"lineNumber":36,"author":{"gitId":"-"},"content":" assertEquals(new AddCommand(person), command);","lastModifiedDate":"2017-06-27"},{"lineNumber":37,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-27"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-27"},{"lineNumber":39,"author":{"gitId":"ashleygoh1"},"content":" // @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":40,"author":{"gitId":"ashleygoh1"},"content":" // public void parseCommand_clear() throws Exception {","lastModifiedDate":"2024-02-26"},{"lineNumber":41,"author":{"gitId":"ashleygoh1"},"content":" // assertTrue(parser.parseCommand(ClearCommand.COMMAND_WORD) instanceof ClearCommand);","lastModifiedDate":"2024-02-26"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":" // assertTrue(parser.parseCommand(ClearCommand.COMMAND_WORD + \" 3\") instanceof ClearCommand);","lastModifiedDate":"2024-02-26"},{"lineNumber":43,"author":{"gitId":"ashleygoh1"},"content":" // }","lastModifiedDate":"2024-02-26"},{"lineNumber":44,"author":{"gitId":"ashleygoh1"},"content":" //","lastModifiedDate":"2024-02-26"},{"lineNumber":45,"author":{"gitId":"ashleygoh1"},"content":" // @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":46,"author":{"gitId":"ashleygoh1"},"content":" // public void parseCommand_delete() throws Exception {","lastModifiedDate":"2024-02-26"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":" // DeleteCommand command \u003d (DeleteCommand) parser.parseCommand(","lastModifiedDate":"2024-02-26"},{"lineNumber":48,"author":{"gitId":"ashleygoh1"},"content":" // DeleteCommand.COMMAND_WORD + \" \" + INDEX_FIRST_PERSON.getOneBased());","lastModifiedDate":"2024-02-26"},{"lineNumber":49,"author":{"gitId":"ashleygoh1"},"content":" // assertEquals(new DeleteCommand(INDEX_FIRST_PERSON), command);","lastModifiedDate":"2024-02-26"},{"lineNumber":50,"author":{"gitId":"ashleygoh1"},"content":" // }","lastModifiedDate":"2024-02-26"},{"lineNumber":51,"author":{"gitId":"ashleygoh1"},"content":" //","lastModifiedDate":"2024-02-26"},{"lineNumber":52,"author":{"gitId":"ashleygoh1"},"content":" // @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":53,"author":{"gitId":"ashleygoh1"},"content":" // public void parseCommand_exit() throws Exception {","lastModifiedDate":"2024-02-26"},{"lineNumber":54,"author":{"gitId":"ashleygoh1"},"content":" // assertTrue(parser.parseCommand(ExitCommand.COMMAND_WORD) instanceof ExitCommand);","lastModifiedDate":"2024-02-26"},{"lineNumber":55,"author":{"gitId":"ashleygoh1"},"content":" // assertTrue(parser.parseCommand(ExitCommand.COMMAND_WORD + \" 3\") instanceof ExitCommand);","lastModifiedDate":"2024-02-26"},{"lineNumber":56,"author":{"gitId":"ashleygoh1"},"content":" // }","lastModifiedDate":"2024-02-26"},{"lineNumber":57,"author":{"gitId":"ashleygoh1"},"content":" //","lastModifiedDate":"2024-02-26"},{"lineNumber":58,"author":{"gitId":"ashleygoh1"},"content":" // @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":59,"author":{"gitId":"ashleygoh1"},"content":" // public void parseCommand_find() throws Exception {","lastModifiedDate":"2024-02-26"},{"lineNumber":60,"author":{"gitId":"ashleygoh1"},"content":" // List\u003cString\u003e keywords \u003d Arrays.asList(\"foo\", \"bar\", \"baz\");","lastModifiedDate":"2024-02-26"},{"lineNumber":61,"author":{"gitId":"ashleygoh1"},"content":" // FindCommand command \u003d (FindCommand) parser.parseCommand(","lastModifiedDate":"2024-02-26"},{"lineNumber":62,"author":{"gitId":"ashleygoh1"},"content":" // FindCommand.COMMAND_WORD + \" \" + keywords.stream().collect(Collectors.joining(\" \")));","lastModifiedDate":"2024-02-26"},{"lineNumber":63,"author":{"gitId":"ashleygoh1"},"content":" // assertEquals(new FindCommand(new NameContainsKeywordsPredicate(keywords)), command);","lastModifiedDate":"2024-02-26"},{"lineNumber":64,"author":{"gitId":"ashleygoh1"},"content":" // }","lastModifiedDate":"2024-02-26"},{"lineNumber":65,"author":{"gitId":"ashleygoh1"},"content":" //","lastModifiedDate":"2024-02-26"},{"lineNumber":66,"author":{"gitId":"ashleygoh1"},"content":" // @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":67,"author":{"gitId":"ashleygoh1"},"content":" // public void parseCommand_help() throws Exception {","lastModifiedDate":"2024-02-26"},{"lineNumber":68,"author":{"gitId":"ashleygoh1"},"content":" // assertTrue(parser.parseCommand(HelpCommand.COMMAND_WORD) instanceof HelpCommand);","lastModifiedDate":"2024-02-26"},{"lineNumber":69,"author":{"gitId":"ashleygoh1"},"content":" // assertTrue(parser.parseCommand(HelpCommand.COMMAND_WORD + \" 3\") instanceof HelpCommand);","lastModifiedDate":"2024-02-26"},{"lineNumber":70,"author":{"gitId":"ashleygoh1"},"content":" // }","lastModifiedDate":"2024-02-26"},{"lineNumber":71,"author":{"gitId":"ashleygoh1"},"content":" //","lastModifiedDate":"2024-02-26"},{"lineNumber":72,"author":{"gitId":"ashleygoh1"},"content":" // @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":73,"author":{"gitId":"ashleygoh1"},"content":" // public void parseCommand_list() throws Exception {","lastModifiedDate":"2024-02-26"},{"lineNumber":74,"author":{"gitId":"ashleygoh1"},"content":" // assertTrue(parser.parseCommand(ListCommand.COMMAND_WORD) instanceof ListCommand);","lastModifiedDate":"2024-02-26"},{"lineNumber":75,"author":{"gitId":"ashleygoh1"},"content":" // assertTrue(parser.parseCommand(ListCommand.COMMAND_WORD + \" 3\") instanceof ListCommand);","lastModifiedDate":"2024-02-26"},{"lineNumber":76,"author":{"gitId":"ashleygoh1"},"content":" // }","lastModifiedDate":"2024-02-26"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-27"},{"lineNumber":78,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-27"},{"lineNumber":79,"author":{"gitId":"-"},"content":" public void parseCommand_unrecognisedInput_throwsParseException() {","lastModifiedDate":"2019-03-23"},{"lineNumber":80,"author":{"gitId":"-"},"content":" assertThrows(ParseException.class, String.format(MESSAGE_INVALID_COMMAND_FORMAT, HelpCommand.MESSAGE_USAGE), ()","lastModifiedDate":"2019-03-23"},{"lineNumber":81,"author":{"gitId":"-"},"content":" -\u003e parser.parseCommand(\"\"));","lastModifiedDate":"2019-03-23"},{"lineNumber":82,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-27"},{"lineNumber":83,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-27"},{"lineNumber":84,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-27"},{"lineNumber":85,"author":{"gitId":"-"},"content":" public void parseCommand_unknownCommand_throwsParseException() {","lastModifiedDate":"2019-03-23"},{"lineNumber":86,"author":{"gitId":"-"},"content":" assertThrows(ParseException.class, MESSAGE_UNKNOWN_COMMAND, () -\u003e parser.parseCommand(\"unknownCommand\"));","lastModifiedDate":"2019-03-23"},{"lineNumber":87,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-27"},{"lineNumber":88,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-05-24"}],"authorContributionMap":{"ashleygoh1":49,"-":39}},{"path":"src/test/java/seedu/address/logic/parser/EditCommandParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ashleygoh1"},"content":"//package seedu.address.logic.parser;","lastModifiedDate":"2024-02-26"},{"lineNumber":2,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":3,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2024-02-26"},{"lineNumber":4,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.ADDRESS_DESC_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":5,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.ADDRESS_DESC_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":6,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.EMAIL_DESC_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.EMAIL_DESC_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.INVALID_ADDRESS_DESC;","lastModifiedDate":"2024-02-26"},{"lineNumber":9,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.INVALID_EMAIL_DESC;","lastModifiedDate":"2024-02-26"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.INVALID_NAME_DESC;","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.INVALID_PHONE_DESC;","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.INVALID_TAG_DESC;","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.NAME_DESC_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":14,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.PHONE_DESC_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.PHONE_DESC_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":16,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.TAG_DESC_FRIEND;","lastModifiedDate":"2024-02-26"},{"lineNumber":17,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.TAG_DESC_HUSBAND;","lastModifiedDate":"2024-02-26"},{"lineNumber":18,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":19,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":20,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":21,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":22,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":23,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_FRIEND;","lastModifiedDate":"2024-02-26"},{"lineNumber":24,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND;","lastModifiedDate":"2024-02-26"},{"lineNumber":25,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2024-02-26"},{"lineNumber":26,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2024-02-26"},{"lineNumber":27,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2024-02-26"},{"lineNumber":28,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2024-02-26"},{"lineNumber":29,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.parser.CommandParserTestUtil.assertParseFailure;","lastModifiedDate":"2024-02-26"},{"lineNumber":30,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.parser.CommandParserTestUtil.assertParseSuccess;","lastModifiedDate":"2024-02-26"},{"lineNumber":31,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON;","lastModifiedDate":"2024-02-26"},{"lineNumber":32,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.testutil.TypicalIndexes.INDEX_SECOND_PERSON;","lastModifiedDate":"2024-02-26"},{"lineNumber":33,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.testutil.TypicalIndexes.INDEX_THIRD_PERSON;","lastModifiedDate":"2024-02-26"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":35,"author":{"gitId":"ashleygoh1"},"content":"//import org.junit.jupiter.api.Test;","lastModifiedDate":"2024-02-26"},{"lineNumber":36,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":37,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.commons.core.index.Index;","lastModifiedDate":"2024-02-26"},{"lineNumber":38,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.logic.Messages;","lastModifiedDate":"2024-02-26"},{"lineNumber":39,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.logic.commands.EditCommand;","lastModifiedDate":"2024-02-26"},{"lineNumber":40,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.logic.commands.EditCommand.EditPersonDescriptor;","lastModifiedDate":"2024-02-26"},{"lineNumber":41,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.person.Address;","lastModifiedDate":"2024-02-26"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.person.Email;","lastModifiedDate":"2024-02-26"},{"lineNumber":43,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.person.Name;","lastModifiedDate":"2024-02-26"},{"lineNumber":44,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.person.Phone;","lastModifiedDate":"2024-02-26"},{"lineNumber":45,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.tag.Tag;","lastModifiedDate":"2024-02-26"},{"lineNumber":46,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.testutil.EditPersonDescriptorBuilder;","lastModifiedDate":"2024-02-26"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":48,"author":{"gitId":"ashleygoh1"},"content":"//public class EditCommandParserTest {","lastModifiedDate":"2024-02-26"},{"lineNumber":49,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":50,"author":{"gitId":"ashleygoh1"},"content":"// private static final String TAG_EMPTY \u003d \" \" + PREFIX_TAG;","lastModifiedDate":"2024-02-26"},{"lineNumber":51,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":52,"author":{"gitId":"ashleygoh1"},"content":"// private static final String MESSAGE_INVALID_FORMAT \u003d","lastModifiedDate":"2024-02-26"},{"lineNumber":53,"author":{"gitId":"ashleygoh1"},"content":"// String.format(MESSAGE_INVALID_COMMAND_FORMAT, EditCommand.MESSAGE_USAGE);","lastModifiedDate":"2024-02-26"},{"lineNumber":54,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":55,"author":{"gitId":"ashleygoh1"},"content":"// private EditCommandParser parser \u003d new EditCommandParser();","lastModifiedDate":"2024-02-26"},{"lineNumber":56,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":57,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":58,"author":{"gitId":"ashleygoh1"},"content":"// public void parse_missingParts_failure() {","lastModifiedDate":"2024-02-26"},{"lineNumber":59,"author":{"gitId":"ashleygoh1"},"content":"// // no index specified","lastModifiedDate":"2024-02-26"},{"lineNumber":60,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, VALID_NAME_AMY, MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2024-02-26"},{"lineNumber":61,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":62,"author":{"gitId":"ashleygoh1"},"content":"// // no field specified","lastModifiedDate":"2024-02-26"},{"lineNumber":63,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, \"1\", EditCommand.MESSAGE_NOT_EDITED);","lastModifiedDate":"2024-02-26"},{"lineNumber":64,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":65,"author":{"gitId":"ashleygoh1"},"content":"// // no index and no field specified","lastModifiedDate":"2024-02-26"},{"lineNumber":66,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, \"\", MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2024-02-26"},{"lineNumber":67,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":68,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":69,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":70,"author":{"gitId":"ashleygoh1"},"content":"// public void parse_invalidPreamble_failure() {","lastModifiedDate":"2024-02-26"},{"lineNumber":71,"author":{"gitId":"ashleygoh1"},"content":"// // negative index","lastModifiedDate":"2024-02-26"},{"lineNumber":72,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, \"-5\" + NAME_DESC_AMY, MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2024-02-26"},{"lineNumber":73,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":74,"author":{"gitId":"ashleygoh1"},"content":"// // zero index","lastModifiedDate":"2024-02-26"},{"lineNumber":75,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, \"0\" + NAME_DESC_AMY, MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2024-02-26"},{"lineNumber":76,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":77,"author":{"gitId":"ashleygoh1"},"content":"// // invalid arguments being parsed as preamble","lastModifiedDate":"2024-02-26"},{"lineNumber":78,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, \"1 some random string\", MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2024-02-26"},{"lineNumber":79,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":80,"author":{"gitId":"ashleygoh1"},"content":"// // invalid prefix being parsed as preamble","lastModifiedDate":"2024-02-26"},{"lineNumber":81,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, \"1 i/ string\", MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2024-02-26"},{"lineNumber":82,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":83,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":84,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":85,"author":{"gitId":"ashleygoh1"},"content":"// public void parse_invalidValue_failure() {","lastModifiedDate":"2024-02-26"},{"lineNumber":86,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, \"1\" + INVALID_NAME_DESC, Name.MESSAGE_CONSTRAINTS); // invalid name","lastModifiedDate":"2024-02-26"},{"lineNumber":87,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, \"1\" + INVALID_PHONE_DESC, Phone.MESSAGE_CONSTRAINTS); // invalid phone","lastModifiedDate":"2024-02-26"},{"lineNumber":88,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, \"1\" + INVALID_EMAIL_DESC, Email.MESSAGE_CONSTRAINTS); // invalid email","lastModifiedDate":"2024-02-26"},{"lineNumber":89,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, \"1\" + INVALID_ADDRESS_DESC, Address.MESSAGE_CONSTRAINTS); // invalid address","lastModifiedDate":"2024-02-26"},{"lineNumber":90,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, \"1\" + INVALID_TAG_DESC, Tag.MESSAGE_CONSTRAINTS); // invalid tag","lastModifiedDate":"2024-02-26"},{"lineNumber":91,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":92,"author":{"gitId":"ashleygoh1"},"content":"// // invalid phone followed by valid email","lastModifiedDate":"2024-02-26"},{"lineNumber":93,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, \"1\" + INVALID_PHONE_DESC + EMAIL_DESC_AMY, Phone.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-26"},{"lineNumber":94,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":95,"author":{"gitId":"ashleygoh1"},"content":"// // while parsing {@code PREFIX_TAG} alone will reset the tags of the {@code Person} being edited,","lastModifiedDate":"2024-02-26"},{"lineNumber":96,"author":{"gitId":"ashleygoh1"},"content":"// // parsing it together with a valid tag results in error","lastModifiedDate":"2024-02-26"},{"lineNumber":97,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, \"1\" + TAG_DESC_FRIEND + TAG_DESC_HUSBAND + TAG_EMPTY, Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-26"},{"lineNumber":98,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, \"1\" + TAG_DESC_FRIEND + TAG_EMPTY + TAG_DESC_HUSBAND, Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-26"},{"lineNumber":99,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, \"1\" + TAG_EMPTY + TAG_DESC_FRIEND + TAG_DESC_HUSBAND, Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-26"},{"lineNumber":100,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":101,"author":{"gitId":"ashleygoh1"},"content":"// // multiple invalid values, but only the first invalid value is captured","lastModifiedDate":"2024-02-26"},{"lineNumber":102,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, \"1\" + INVALID_NAME_DESC + INVALID_EMAIL_DESC + VALID_ADDRESS_AMY + VALID_PHONE_AMY,","lastModifiedDate":"2024-02-26"},{"lineNumber":103,"author":{"gitId":"ashleygoh1"},"content":"// Name.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-26"},{"lineNumber":104,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":105,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":106,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":107,"author":{"gitId":"ashleygoh1"},"content":"// public void parse_allFieldsSpecified_success() {","lastModifiedDate":"2024-02-26"},{"lineNumber":108,"author":{"gitId":"ashleygoh1"},"content":"// Index targetIndex \u003d INDEX_SECOND_PERSON;","lastModifiedDate":"2024-02-26"},{"lineNumber":109,"author":{"gitId":"ashleygoh1"},"content":"// String userInput \u003d targetIndex.getOneBased() + PHONE_DESC_BOB + TAG_DESC_HUSBAND","lastModifiedDate":"2024-02-26"},{"lineNumber":110,"author":{"gitId":"ashleygoh1"},"content":"// + EMAIL_DESC_AMY + ADDRESS_DESC_AMY + NAME_DESC_AMY + TAG_DESC_FRIEND;","lastModifiedDate":"2024-02-26"},{"lineNumber":111,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":112,"author":{"gitId":"ashleygoh1"},"content":"// EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder().withName(VALID_NAME_AMY)","lastModifiedDate":"2024-02-26"},{"lineNumber":113,"author":{"gitId":"ashleygoh1"},"content":"// .withPhone(VALID_PHONE_BOB).withEmail(VALID_EMAIL_AMY).withAddress(VALID_ADDRESS_AMY)","lastModifiedDate":"2024-02-26"},{"lineNumber":114,"author":{"gitId":"ashleygoh1"},"content":"// .withTags(VALID_TAG_HUSBAND, VALID_TAG_FRIEND).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":115,"author":{"gitId":"ashleygoh1"},"content":"// EditCommand expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2024-02-26"},{"lineNumber":116,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":117,"author":{"gitId":"ashleygoh1"},"content":"// assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2024-02-26"},{"lineNumber":118,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":119,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":120,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":121,"author":{"gitId":"ashleygoh1"},"content":"// public void parse_someFieldsSpecified_success() {","lastModifiedDate":"2024-02-26"},{"lineNumber":122,"author":{"gitId":"ashleygoh1"},"content":"// Index targetIndex \u003d INDEX_FIRST_PERSON;","lastModifiedDate":"2024-02-26"},{"lineNumber":123,"author":{"gitId":"ashleygoh1"},"content":"// String userInput \u003d targetIndex.getOneBased() + PHONE_DESC_BOB + EMAIL_DESC_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":124,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":125,"author":{"gitId":"ashleygoh1"},"content":"// EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder().withPhone(VALID_PHONE_BOB)","lastModifiedDate":"2024-02-26"},{"lineNumber":126,"author":{"gitId":"ashleygoh1"},"content":"// .withEmail(VALID_EMAIL_AMY).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":127,"author":{"gitId":"ashleygoh1"},"content":"// EditCommand expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2024-02-26"},{"lineNumber":128,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":129,"author":{"gitId":"ashleygoh1"},"content":"// assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2024-02-26"},{"lineNumber":130,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":131,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":132,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":133,"author":{"gitId":"ashleygoh1"},"content":"// public void parse_oneFieldSpecified_success() {","lastModifiedDate":"2024-02-26"},{"lineNumber":134,"author":{"gitId":"ashleygoh1"},"content":"// // name","lastModifiedDate":"2024-02-26"},{"lineNumber":135,"author":{"gitId":"ashleygoh1"},"content":"// Index targetIndex \u003d INDEX_THIRD_PERSON;","lastModifiedDate":"2024-02-26"},{"lineNumber":136,"author":{"gitId":"ashleygoh1"},"content":"// String userInput \u003d targetIndex.getOneBased() + NAME_DESC_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":137,"author":{"gitId":"ashleygoh1"},"content":"// EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder().withName(VALID_NAME_AMY).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":138,"author":{"gitId":"ashleygoh1"},"content":"// EditCommand expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2024-02-26"},{"lineNumber":139,"author":{"gitId":"ashleygoh1"},"content":"// assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2024-02-26"},{"lineNumber":140,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":141,"author":{"gitId":"ashleygoh1"},"content":"// // phone","lastModifiedDate":"2024-02-26"},{"lineNumber":142,"author":{"gitId":"ashleygoh1"},"content":"// userInput \u003d targetIndex.getOneBased() + PHONE_DESC_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":143,"author":{"gitId":"ashleygoh1"},"content":"// descriptor \u003d new EditPersonDescriptorBuilder().withPhone(VALID_PHONE_AMY).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":144,"author":{"gitId":"ashleygoh1"},"content":"// expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2024-02-26"},{"lineNumber":145,"author":{"gitId":"ashleygoh1"},"content":"// assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2024-02-26"},{"lineNumber":146,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":147,"author":{"gitId":"ashleygoh1"},"content":"// // email","lastModifiedDate":"2024-02-26"},{"lineNumber":148,"author":{"gitId":"ashleygoh1"},"content":"// userInput \u003d targetIndex.getOneBased() + EMAIL_DESC_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":149,"author":{"gitId":"ashleygoh1"},"content":"// descriptor \u003d new EditPersonDescriptorBuilder().withEmail(VALID_EMAIL_AMY).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":150,"author":{"gitId":"ashleygoh1"},"content":"// expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2024-02-26"},{"lineNumber":151,"author":{"gitId":"ashleygoh1"},"content":"// assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2024-02-26"},{"lineNumber":152,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":153,"author":{"gitId":"ashleygoh1"},"content":"// // address","lastModifiedDate":"2024-02-26"},{"lineNumber":154,"author":{"gitId":"ashleygoh1"},"content":"// userInput \u003d targetIndex.getOneBased() + ADDRESS_DESC_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":155,"author":{"gitId":"ashleygoh1"},"content":"// descriptor \u003d new EditPersonDescriptorBuilder().withAddress(VALID_ADDRESS_AMY).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":156,"author":{"gitId":"ashleygoh1"},"content":"// expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2024-02-26"},{"lineNumber":157,"author":{"gitId":"ashleygoh1"},"content":"// assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2024-02-26"},{"lineNumber":158,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":159,"author":{"gitId":"ashleygoh1"},"content":"// // tags","lastModifiedDate":"2024-02-26"},{"lineNumber":160,"author":{"gitId":"ashleygoh1"},"content":"// userInput \u003d targetIndex.getOneBased() + TAG_DESC_FRIEND;","lastModifiedDate":"2024-02-26"},{"lineNumber":161,"author":{"gitId":"ashleygoh1"},"content":"// descriptor \u003d new EditPersonDescriptorBuilder().withTags(VALID_TAG_FRIEND).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":162,"author":{"gitId":"ashleygoh1"},"content":"// expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2024-02-26"},{"lineNumber":163,"author":{"gitId":"ashleygoh1"},"content":"// assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2024-02-26"},{"lineNumber":164,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":165,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":166,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":167,"author":{"gitId":"ashleygoh1"},"content":"// public void parse_multipleRepeatedFields_failure() {","lastModifiedDate":"2024-02-26"},{"lineNumber":168,"author":{"gitId":"ashleygoh1"},"content":"// // More extensive testing of duplicate parameter detections is done in","lastModifiedDate":"2024-02-26"},{"lineNumber":169,"author":{"gitId":"ashleygoh1"},"content":"// // AddCommandParserTest#parse_repeatedNonTagValue_failure()","lastModifiedDate":"2024-02-26"},{"lineNumber":170,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":171,"author":{"gitId":"ashleygoh1"},"content":"// // valid followed by invalid","lastModifiedDate":"2024-02-26"},{"lineNumber":172,"author":{"gitId":"ashleygoh1"},"content":"// Index targetIndex \u003d INDEX_FIRST_PERSON;","lastModifiedDate":"2024-02-26"},{"lineNumber":173,"author":{"gitId":"ashleygoh1"},"content":"// String userInput \u003d targetIndex.getOneBased() + INVALID_PHONE_DESC + PHONE_DESC_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":174,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":175,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, userInput, Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE));","lastModifiedDate":"2024-02-26"},{"lineNumber":176,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":177,"author":{"gitId":"ashleygoh1"},"content":"// // invalid followed by valid","lastModifiedDate":"2024-02-26"},{"lineNumber":178,"author":{"gitId":"ashleygoh1"},"content":"// userInput \u003d targetIndex.getOneBased() + PHONE_DESC_BOB + INVALID_PHONE_DESC;","lastModifiedDate":"2024-02-26"},{"lineNumber":179,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":180,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, userInput, Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE));","lastModifiedDate":"2024-02-26"},{"lineNumber":181,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":182,"author":{"gitId":"ashleygoh1"},"content":"// // mulltiple valid fields repeated","lastModifiedDate":"2024-02-26"},{"lineNumber":183,"author":{"gitId":"ashleygoh1"},"content":"// userInput \u003d targetIndex.getOneBased() + PHONE_DESC_AMY + ADDRESS_DESC_AMY + EMAIL_DESC_AMY","lastModifiedDate":"2024-02-26"},{"lineNumber":184,"author":{"gitId":"ashleygoh1"},"content":"// + TAG_DESC_FRIEND + PHONE_DESC_AMY + ADDRESS_DESC_AMY + EMAIL_DESC_AMY + TAG_DESC_FRIEND","lastModifiedDate":"2024-02-26"},{"lineNumber":185,"author":{"gitId":"ashleygoh1"},"content":"// + PHONE_DESC_BOB + ADDRESS_DESC_BOB + EMAIL_DESC_BOB + TAG_DESC_HUSBAND;","lastModifiedDate":"2024-02-26"},{"lineNumber":186,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":187,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, userInput,","lastModifiedDate":"2024-02-26"},{"lineNumber":188,"author":{"gitId":"ashleygoh1"},"content":"// Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS));","lastModifiedDate":"2024-02-26"},{"lineNumber":189,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":190,"author":{"gitId":"ashleygoh1"},"content":"// // multiple invalid values","lastModifiedDate":"2024-02-26"},{"lineNumber":191,"author":{"gitId":"ashleygoh1"},"content":"// userInput \u003d targetIndex.getOneBased() + INVALID_PHONE_DESC + INVALID_ADDRESS_DESC + INVALID_EMAIL_DESC","lastModifiedDate":"2024-02-26"},{"lineNumber":192,"author":{"gitId":"ashleygoh1"},"content":"// + INVALID_PHONE_DESC + INVALID_ADDRESS_DESC + INVALID_EMAIL_DESC;","lastModifiedDate":"2024-02-26"},{"lineNumber":193,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":194,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, userInput,","lastModifiedDate":"2024-02-26"},{"lineNumber":195,"author":{"gitId":"ashleygoh1"},"content":"// Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS));","lastModifiedDate":"2024-02-26"},{"lineNumber":196,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":197,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":198,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":199,"author":{"gitId":"ashleygoh1"},"content":"// public void parse_resetTags_success() {","lastModifiedDate":"2024-02-26"},{"lineNumber":200,"author":{"gitId":"ashleygoh1"},"content":"// Index targetIndex \u003d INDEX_THIRD_PERSON;","lastModifiedDate":"2024-02-26"},{"lineNumber":201,"author":{"gitId":"ashleygoh1"},"content":"// String userInput \u003d targetIndex.getOneBased() + TAG_EMPTY;","lastModifiedDate":"2024-02-26"},{"lineNumber":202,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":203,"author":{"gitId":"ashleygoh1"},"content":"// EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder().withTags().build();","lastModifiedDate":"2024-02-26"},{"lineNumber":204,"author":{"gitId":"ashleygoh1"},"content":"// EditCommand expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2024-02-26"},{"lineNumber":205,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":206,"author":{"gitId":"ashleygoh1"},"content":"// assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2024-02-26"},{"lineNumber":207,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":208,"author":{"gitId":"ashleygoh1"},"content":"//}","lastModifiedDate":"2024-02-26"}],"authorContributionMap":{"ashleygoh1":208}},{"path":"src/test/java/seedu/address/logic/parser/ParserUtilTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-05-22"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-03-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.ParserUtil.MESSAGE_INVALID_INDEX;","lastModifiedDate":"2017-06-02"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-14"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON;","lastModifiedDate":"2017-08-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2018-07-10"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2017-05-22"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2017-05-22"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2017-05-22"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2017-05-22"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-05-22"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":17,"author":{"gitId":"-"},"content":"public class ParserUtilTest {","lastModifiedDate":"2017-05-22"},{"lineNumber":18,"author":{"gitId":"-"},"content":" private static final String INVALID_NAME \u003d \"R@chel\";","lastModifiedDate":"2017-05-22"},{"lineNumber":19,"author":{"gitId":"-"},"content":" private static final String INVALID_PHONE \u003d \"+651234\";","lastModifiedDate":"2017-05-22"},{"lineNumber":20,"author":{"gitId":"-"},"content":" private static final String INVALID_ADDRESS \u003d \" \";","lastModifiedDate":"2017-05-22"},{"lineNumber":21,"author":{"gitId":"-"},"content":" private static final String INVALID_EMAIL \u003d \"example.com\";","lastModifiedDate":"2017-05-22"},{"lineNumber":22,"author":{"gitId":"ashleygoh1"},"content":" private static final String INVALID_TAG \u003d \"#NR\";","lastModifiedDate":"2024-02-26"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":24,"author":{"gitId":"-"},"content":" private static final String VALID_NAME \u003d \"Rachel Walker\";","lastModifiedDate":"2017-05-22"},{"lineNumber":25,"author":{"gitId":"-"},"content":" private static final String VALID_PHONE \u003d \"123456\";","lastModifiedDate":"2017-05-22"},{"lineNumber":26,"author":{"gitId":"-"},"content":" private static final String VALID_ADDRESS \u003d \"123 Main Street #0505\";","lastModifiedDate":"2017-05-22"},{"lineNumber":27,"author":{"gitId":"-"},"content":" private static final String VALID_EMAIL \u003d \"rachel@example.com\";","lastModifiedDate":"2017-05-22"},{"lineNumber":28,"author":{"gitId":"ashleygoh1"},"content":" private static final String VALID_TAG \u003d \"NR\";","lastModifiedDate":"2024-02-26"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":30,"author":{"gitId":"-"},"content":" private static final String WHITESPACE \u003d \" \\t\\r\\n\";","lastModifiedDate":"2017-05-29"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-29"},{"lineNumber":32,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-26"},{"lineNumber":33,"author":{"gitId":"-"},"content":" public void parseIndex_invalidInput_throwsParseException() {","lastModifiedDate":"2019-03-23"},{"lineNumber":34,"author":{"gitId":"-"},"content":" assertThrows(ParseException.class, () -\u003e ParserUtil.parseIndex(\"10 a\"));","lastModifiedDate":"2019-03-23"},{"lineNumber":35,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-26"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-26"},{"lineNumber":37,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-26"},{"lineNumber":38,"author":{"gitId":"-"},"content":" public void parseIndex_outOfRangeInput_throwsParseException() {","lastModifiedDate":"2019-03-23"},{"lineNumber":39,"author":{"gitId":"-"},"content":" assertThrows(ParseException.class, MESSAGE_INVALID_INDEX, ()","lastModifiedDate":"2019-03-23"},{"lineNumber":40,"author":{"gitId":"-"},"content":" -\u003e ParserUtil.parseIndex(Long.toString(Integer.MAX_VALUE + 1)));","lastModifiedDate":"2019-03-23"},{"lineNumber":41,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-26"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-26"},{"lineNumber":43,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-26"},{"lineNumber":44,"author":{"gitId":"-"},"content":" public void parseIndex_validInput_success() throws Exception {","lastModifiedDate":"2017-05-26"},{"lineNumber":45,"author":{"gitId":"-"},"content":" // No whitespaces","lastModifiedDate":"2017-05-26"},{"lineNumber":46,"author":{"gitId":"-"},"content":" assertEquals(INDEX_FIRST_PERSON, ParserUtil.parseIndex(\"1\"));","lastModifiedDate":"2017-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-26"},{"lineNumber":48,"author":{"gitId":"-"},"content":" // Leading and trailing whitespaces","lastModifiedDate":"2017-05-26"},{"lineNumber":49,"author":{"gitId":"-"},"content":" assertEquals(INDEX_FIRST_PERSON, ParserUtil.parseIndex(\" 1 \"));","lastModifiedDate":"2017-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-26"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-26"},{"lineNumber":52,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":53,"author":{"gitId":"-"},"content":" public void parseName_null_throwsNullPointerException() {","lastModifiedDate":"2017-05-29"},{"lineNumber":54,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e ParserUtil.parseName((String) null));","lastModifiedDate":"2019-03-14"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":57,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":58,"author":{"gitId":"-"},"content":" public void parseName_invalidValue_throwsParseException() {","lastModifiedDate":"2018-07-10"},{"lineNumber":59,"author":{"gitId":"-"},"content":" assertThrows(ParseException.class, () -\u003e ParserUtil.parseName(INVALID_NAME));","lastModifiedDate":"2019-03-14"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":62,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":63,"author":{"gitId":"-"},"content":" public void parseName_validValueWithoutWhitespace_returnsName() throws Exception {","lastModifiedDate":"2017-05-29"},{"lineNumber":64,"author":{"gitId":"-"},"content":" Name expectedName \u003d new Name(VALID_NAME);","lastModifiedDate":"2017-05-22"},{"lineNumber":65,"author":{"gitId":"-"},"content":" assertEquals(expectedName, ParserUtil.parseName(VALID_NAME));","lastModifiedDate":"2017-05-29"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-29"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":68,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-29"},{"lineNumber":69,"author":{"gitId":"-"},"content":" public void parseName_validValueWithWhitespace_returnsTrimmedName() throws Exception {","lastModifiedDate":"2017-05-29"},{"lineNumber":70,"author":{"gitId":"-"},"content":" String nameWithWhitespace \u003d WHITESPACE + VALID_NAME + WHITESPACE;","lastModifiedDate":"2017-05-29"},{"lineNumber":71,"author":{"gitId":"-"},"content":" Name expectedName \u003d new Name(VALID_NAME);","lastModifiedDate":"2017-05-29"},{"lineNumber":72,"author":{"gitId":"-"},"content":" assertEquals(expectedName, ParserUtil.parseName(nameWithWhitespace));","lastModifiedDate":"2017-05-29"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":75,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":76,"author":{"gitId":"-"},"content":" public void parsePhone_null_throwsNullPointerException() {","lastModifiedDate":"2017-05-30"},{"lineNumber":77,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e ParserUtil.parsePhone((String) null));","lastModifiedDate":"2019-03-14"},{"lineNumber":78,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":80,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":81,"author":{"gitId":"-"},"content":" public void parsePhone_invalidValue_throwsParseException() {","lastModifiedDate":"2018-07-10"},{"lineNumber":82,"author":{"gitId":"-"},"content":" assertThrows(ParseException.class, () -\u003e ParserUtil.parsePhone(INVALID_PHONE));","lastModifiedDate":"2019-03-14"},{"lineNumber":83,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":85,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":86,"author":{"gitId":"-"},"content":" public void parsePhone_validValueWithoutWhitespace_returnsPhone() throws Exception {","lastModifiedDate":"2017-05-30"},{"lineNumber":87,"author":{"gitId":"-"},"content":" Phone expectedPhone \u003d new Phone(VALID_PHONE);","lastModifiedDate":"2017-05-22"},{"lineNumber":88,"author":{"gitId":"-"},"content":" assertEquals(expectedPhone, ParserUtil.parsePhone(VALID_PHONE));","lastModifiedDate":"2017-05-30"},{"lineNumber":89,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":91,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-30"},{"lineNumber":92,"author":{"gitId":"-"},"content":" public void parsePhone_validValueWithWhitespace_returnsTrimmedPhone() throws Exception {","lastModifiedDate":"2017-05-30"},{"lineNumber":93,"author":{"gitId":"-"},"content":" String phoneWithWhitespace \u003d WHITESPACE + VALID_PHONE + WHITESPACE;","lastModifiedDate":"2017-05-30"},{"lineNumber":94,"author":{"gitId":"-"},"content":" Phone expectedPhone \u003d new Phone(VALID_PHONE);","lastModifiedDate":"2017-05-30"},{"lineNumber":95,"author":{"gitId":"-"},"content":" assertEquals(expectedPhone, ParserUtil.parsePhone(phoneWithWhitespace));","lastModifiedDate":"2017-05-30"},{"lineNumber":96,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":97,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":98,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":99,"author":{"gitId":"-"},"content":" public void parseAddress_null_throwsNullPointerException() {","lastModifiedDate":"2017-05-30"},{"lineNumber":100,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e ParserUtil.parseAddress((String) null));","lastModifiedDate":"2019-03-14"},{"lineNumber":101,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":102,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":103,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":104,"author":{"gitId":"-"},"content":" public void parseAddress_validValueWithoutWhitespace_returnsAddress() throws Exception {","lastModifiedDate":"2017-05-30"},{"lineNumber":105,"author":{"gitId":"-"},"content":" Address expectedAddress \u003d new Address(VALID_ADDRESS);","lastModifiedDate":"2017-05-22"},{"lineNumber":106,"author":{"gitId":"-"},"content":" assertEquals(expectedAddress, ParserUtil.parseAddress(VALID_ADDRESS));","lastModifiedDate":"2017-05-30"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":108,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":109,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-30"},{"lineNumber":110,"author":{"gitId":"-"},"content":" public void parseAddress_validValueWithWhitespace_returnsTrimmedAddress() throws Exception {","lastModifiedDate":"2017-05-30"},{"lineNumber":111,"author":{"gitId":"-"},"content":" String addressWithWhitespace \u003d WHITESPACE + VALID_ADDRESS + WHITESPACE;","lastModifiedDate":"2017-05-30"},{"lineNumber":112,"author":{"gitId":"-"},"content":" Address expectedAddress \u003d new Address(VALID_ADDRESS);","lastModifiedDate":"2017-05-30"},{"lineNumber":113,"author":{"gitId":"-"},"content":" assertEquals(expectedAddress, ParserUtil.parseAddress(addressWithWhitespace));","lastModifiedDate":"2017-05-30"},{"lineNumber":114,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":115,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":116,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":117,"author":{"gitId":"-"},"content":" public void parseEmail_null_throwsNullPointerException() {","lastModifiedDate":"2017-05-30"},{"lineNumber":118,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e ParserUtil.parseEmail((String) null));","lastModifiedDate":"2019-03-14"},{"lineNumber":119,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":121,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":122,"author":{"gitId":"-"},"content":" public void parseEmail_invalidValue_throwsParseException() {","lastModifiedDate":"2018-07-10"},{"lineNumber":123,"author":{"gitId":"-"},"content":" assertThrows(ParseException.class, () -\u003e ParserUtil.parseEmail(INVALID_EMAIL));","lastModifiedDate":"2019-03-14"},{"lineNumber":124,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":125,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":126,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":127,"author":{"gitId":"-"},"content":" public void parseEmail_validValueWithoutWhitespace_returnsEmail() throws Exception {","lastModifiedDate":"2017-05-30"},{"lineNumber":128,"author":{"gitId":"-"},"content":" Email expectedEmail \u003d new Email(VALID_EMAIL);","lastModifiedDate":"2017-05-22"},{"lineNumber":129,"author":{"gitId":"-"},"content":" assertEquals(expectedEmail, ParserUtil.parseEmail(VALID_EMAIL));","lastModifiedDate":"2017-05-30"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":131,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":132,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-30"},{"lineNumber":133,"author":{"gitId":"-"},"content":" public void parseEmail_validValueWithWhitespace_returnsTrimmedEmail() throws Exception {","lastModifiedDate":"2017-05-30"},{"lineNumber":134,"author":{"gitId":"-"},"content":" String emailWithWhitespace \u003d WHITESPACE + VALID_EMAIL + WHITESPACE;","lastModifiedDate":"2017-05-30"},{"lineNumber":135,"author":{"gitId":"-"},"content":" Email expectedEmail \u003d new Email(VALID_EMAIL);","lastModifiedDate":"2017-05-30"},{"lineNumber":136,"author":{"gitId":"-"},"content":" assertEquals(expectedEmail, ParserUtil.parseEmail(emailWithWhitespace));","lastModifiedDate":"2017-05-30"},{"lineNumber":137,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":138,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":139,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-30"},{"lineNumber":140,"author":{"gitId":"-"},"content":" public void parseTag_null_throwsNullPointerException() {","lastModifiedDate":"2019-03-23"},{"lineNumber":141,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e ParserUtil.parseTag(null));","lastModifiedDate":"2019-03-23"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":143,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":144,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-30"},{"lineNumber":145,"author":{"gitId":"-"},"content":" public void parseTag_invalidValue_throwsParseException() {","lastModifiedDate":"2019-03-23"},{"lineNumber":146,"author":{"gitId":"-"},"content":" assertThrows(ParseException.class, () -\u003e ParserUtil.parseTag(INVALID_TAG));","lastModifiedDate":"2019-03-23"},{"lineNumber":147,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":148,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":149,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-30"},{"lineNumber":150,"author":{"gitId":"-"},"content":" public void parseTag_validValueWithoutWhitespace_returnsTag() throws Exception {","lastModifiedDate":"2017-05-30"},{"lineNumber":151,"author":{"gitId":"ashleygoh1"},"content":" Tag expectedTag \u003d new Tag(VALID_TAG);","lastModifiedDate":"2024-02-26"},{"lineNumber":152,"author":{"gitId":"ashleygoh1"},"content":" assertEquals(expectedTag, ParserUtil.parseTag(VALID_TAG));","lastModifiedDate":"2024-02-26"},{"lineNumber":153,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":154,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":155,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-30"},{"lineNumber":156,"author":{"gitId":"-"},"content":" public void parseTag_validValueWithWhitespace_returnsTrimmedTag() throws Exception {","lastModifiedDate":"2017-05-30"},{"lineNumber":157,"author":{"gitId":"ashleygoh1"},"content":" String tagWithWhitespace \u003d WHITESPACE + VALID_TAG + WHITESPACE;","lastModifiedDate":"2024-02-26"},{"lineNumber":158,"author":{"gitId":"ashleygoh1"},"content":" Tag expectedTag \u003d new Tag(VALID_TAG);","lastModifiedDate":"2024-02-26"},{"lineNumber":159,"author":{"gitId":"-"},"content":" assertEquals(expectedTag, ParserUtil.parseTag(tagWithWhitespace));","lastModifiedDate":"2017-05-30"},{"lineNumber":160,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":161,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":162,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":163,"author":{"gitId":"-"},"content":" public void parseTags_null_throwsNullPointerException() {","lastModifiedDate":"2019-03-23"},{"lineNumber":164,"author":{"gitId":"ashleygoh1"},"content":" assertThrows(NullPointerException.class, () -\u003e ParserUtil.parseTag(null));","lastModifiedDate":"2024-02-26"},{"lineNumber":165,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":166,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":167,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-05-22"}],"authorContributionMap":{"ashleygoh1":7,"-":160}},{"path":"src/test/java/seedu/address/model/AddressBookTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model;","lastModifiedDate":"2016-12-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-03-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2019-03-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2019-03-15"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB;","lastModifiedDate":"2018-04-19"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_FIRST_INTERVIEW;","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.ALICE;","lastModifiedDate":"2017-07-19"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook;","lastModifiedDate":"2017-07-19"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import java.util.Arrays;","lastModifiedDate":"2016-12-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import java.util.Collection;","lastModifiedDate":"2016-12-24"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import java.util.Collections;","lastModifiedDate":"2016-12-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2016-12-24"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2016-12-24"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2016-12-24"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2016-12-24"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import seedu.address.model.person.exceptions.DuplicatePersonException;","lastModifiedDate":"2018-08-07"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import seedu.address.testutil.PersonBuilder;","lastModifiedDate":"2018-04-19"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-24"},{"lineNumber":25,"author":{"gitId":"-"},"content":"public class AddressBookTest {","lastModifiedDate":"2016-12-24"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-24"},{"lineNumber":27,"author":{"gitId":"-"},"content":" private final AddressBook addressBook \u003d new AddressBook();","lastModifiedDate":"2016-12-24"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-24"},{"lineNumber":29,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2016-12-24"},{"lineNumber":30,"author":{"gitId":"-"},"content":" public void constructor() {","lastModifiedDate":"2016-12-24"},{"lineNumber":31,"author":{"gitId":"-"},"content":" assertEquals(Collections.emptyList(), addressBook.getPersonList());","lastModifiedDate":"2016-12-24"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-24"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-24"},{"lineNumber":34,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2016-12-24"},{"lineNumber":35,"author":{"gitId":"-"},"content":" public void resetData_null_throwsNullPointerException() {","lastModifiedDate":"2017-05-15"},{"lineNumber":36,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e addressBook.resetData(null));","lastModifiedDate":"2019-03-23"},{"lineNumber":37,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-24"},{"lineNumber":39,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2016-12-24"},{"lineNumber":40,"author":{"gitId":"-"},"content":" public void resetData_withValidReadOnlyAddressBook_replacesData() {","lastModifiedDate":"2016-12-24"},{"lineNumber":41,"author":{"gitId":"-"},"content":" AddressBook newData \u003d getTypicalAddressBook();","lastModifiedDate":"2017-07-19"},{"lineNumber":42,"author":{"gitId":"-"},"content":" addressBook.resetData(newData);","lastModifiedDate":"2016-12-24"},{"lineNumber":43,"author":{"gitId":"-"},"content":" assertEquals(newData, addressBook);","lastModifiedDate":"2016-12-24"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-24"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-24"},{"lineNumber":46,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2016-12-24"},{"lineNumber":47,"author":{"gitId":"-"},"content":" public void resetData_withDuplicatePersons_throwsDuplicatePersonException() {","lastModifiedDate":"2018-08-07"},{"lineNumber":48,"author":{"gitId":"-"},"content":" // Two persons with the same identity fields","lastModifiedDate":"2018-04-19"},{"lineNumber":49,"author":{"gitId":"ashleygoh1"},"content":" Person editedAlice \u003d new PersonBuilder(ALICE).withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_FIRST_INTERVIEW)","lastModifiedDate":"2024-02-26"},{"lineNumber":50,"author":{"gitId":"-"},"content":" .build();","lastModifiedDate":"2018-04-19"},{"lineNumber":51,"author":{"gitId":"-"},"content":" List\u003cPerson\u003e newPersons \u003d Arrays.asList(ALICE, editedAlice);","lastModifiedDate":"2018-04-19"},{"lineNumber":52,"author":{"gitId":"-"},"content":" AddressBookStub newData \u003d new AddressBookStub(newPersons);","lastModifiedDate":"2018-03-29"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-24"},{"lineNumber":54,"author":{"gitId":"-"},"content":" assertThrows(DuplicatePersonException.class, () -\u003e addressBook.resetData(newData));","lastModifiedDate":"2019-03-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-24"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-24"},{"lineNumber":57,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-06"},{"lineNumber":58,"author":{"gitId":"-"},"content":" public void hasPerson_nullPerson_throwsNullPointerException() {","lastModifiedDate":"2018-08-06"},{"lineNumber":59,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e addressBook.hasPerson(null));","lastModifiedDate":"2019-03-23"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-06"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-06"},{"lineNumber":62,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-06"},{"lineNumber":63,"author":{"gitId":"-"},"content":" public void hasPerson_personNotInAddressBook_returnsFalse() {","lastModifiedDate":"2018-08-06"},{"lineNumber":64,"author":{"gitId":"-"},"content":" assertFalse(addressBook.hasPerson(ALICE));","lastModifiedDate":"2018-08-06"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-06"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-06"},{"lineNumber":67,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-06"},{"lineNumber":68,"author":{"gitId":"-"},"content":" public void hasPerson_personInAddressBook_returnsTrue() {","lastModifiedDate":"2018-08-07"},{"lineNumber":69,"author":{"gitId":"-"},"content":" addressBook.addPerson(ALICE);","lastModifiedDate":"2018-08-06"},{"lineNumber":70,"author":{"gitId":"-"},"content":" assertTrue(addressBook.hasPerson(ALICE));","lastModifiedDate":"2018-08-06"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-06"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-06"},{"lineNumber":73,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-06"},{"lineNumber":74,"author":{"gitId":"-"},"content":" public void hasPerson_personWithSameIdentityFieldsInAddressBook_returnsTrue() {","lastModifiedDate":"2018-08-07"},{"lineNumber":75,"author":{"gitId":"-"},"content":" addressBook.addPerson(ALICE);","lastModifiedDate":"2018-08-06"},{"lineNumber":76,"author":{"gitId":"ashleygoh1"},"content":" Person editedAlice \u003d new PersonBuilder(ALICE).withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_FIRST_INTERVIEW)","lastModifiedDate":"2024-02-26"},{"lineNumber":77,"author":{"gitId":"-"},"content":" .build();","lastModifiedDate":"2018-08-06"},{"lineNumber":78,"author":{"gitId":"-"},"content":" assertTrue(addressBook.hasPerson(editedAlice));","lastModifiedDate":"2018-08-06"},{"lineNumber":79,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-06"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-06"},{"lineNumber":81,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-09-01"},{"lineNumber":82,"author":{"gitId":"-"},"content":" public void getPersonList_modifyList_throwsUnsupportedOperationException() {","lastModifiedDate":"2017-09-01"},{"lineNumber":83,"author":{"gitId":"-"},"content":" assertThrows(UnsupportedOperationException.class, () -\u003e addressBook.getPersonList().remove(0));","lastModifiedDate":"2019-03-23"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-09-01"},{"lineNumber":85,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":86,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2019-02-23"},{"lineNumber":87,"author":{"gitId":"-"},"content":" public void toStringMethod() {","lastModifiedDate":"2019-02-23"},{"lineNumber":88,"author":{"gitId":"-"},"content":" String expected \u003d AddressBook.class.getCanonicalName() + \"{persons\u003d\" + addressBook.getPersonList() + \"}\";","lastModifiedDate":"2019-02-23"},{"lineNumber":89,"author":{"gitId":"-"},"content":" assertEquals(expected, addressBook.toString());","lastModifiedDate":"2019-02-23"},{"lineNumber":90,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":91,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":92,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-12-24"},{"lineNumber":93,"author":{"gitId":"-"},"content":" * A stub ReadOnlyAddressBook whose persons list can violate interface constraints.","lastModifiedDate":"2018-03-29"},{"lineNumber":94,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-24"},{"lineNumber":95,"author":{"gitId":"-"},"content":" private static class AddressBookStub implements ReadOnlyAddressBook {","lastModifiedDate":"2016-12-24"},{"lineNumber":96,"author":{"gitId":"-"},"content":" private final ObservableList\u003cPerson\u003e persons \u003d FXCollections.observableArrayList();","lastModifiedDate":"2018-01-10"},{"lineNumber":97,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-24"},{"lineNumber":98,"author":{"gitId":"-"},"content":" AddressBookStub(Collection\u003cPerson\u003e persons) {","lastModifiedDate":"2018-03-29"},{"lineNumber":99,"author":{"gitId":"-"},"content":" this.persons.setAll(persons);","lastModifiedDate":"2016-12-24"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-24"},{"lineNumber":101,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-24"},{"lineNumber":102,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-12-24"},{"lineNumber":103,"author":{"gitId":"-"},"content":" public ObservableList\u003cPerson\u003e getPersonList() {","lastModifiedDate":"2018-01-10"},{"lineNumber":104,"author":{"gitId":"-"},"content":" return persons;","lastModifiedDate":"2016-12-24"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-24"},{"lineNumber":106,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-24"},{"lineNumber":107,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-24"},{"lineNumber":108,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-12-24"}],"authorContributionMap":{"ashleygoh1":3,"-":105}},{"path":"src/test/java/seedu/address/model/ModelManagerTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model;","lastModifiedDate":"2017-05-31"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-03-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2019-03-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2019-03-15"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.model.Model.PREDICATE_SHOW_ALL_PERSONS;","lastModifiedDate":"2017-08-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-23"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.ALICE;","lastModifiedDate":"2017-07-19"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.BENSON;","lastModifiedDate":"2017-07-19"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import java.nio.file.Path;","lastModifiedDate":"2018-11-27"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2018-08-09"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import java.util.Arrays;","lastModifiedDate":"2017-05-31"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.GuiSettings;","lastModifiedDate":"2018-11-27"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.model.person.NameContainsKeywordsPredicate;","lastModifiedDate":"2017-06-12"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.testutil.AddressBookBuilder;","lastModifiedDate":"2017-05-31"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":21,"author":{"gitId":"-"},"content":"public class ModelManagerTest {","lastModifiedDate":"2017-05-31"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":23,"author":{"gitId":"-"},"content":" private ModelManager modelManager \u003d new ModelManager();","lastModifiedDate":"2018-08-06"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-06"},{"lineNumber":25,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-11-27"},{"lineNumber":26,"author":{"gitId":"-"},"content":" public void constructor() {","lastModifiedDate":"2018-11-27"},{"lineNumber":27,"author":{"gitId":"-"},"content":" assertEquals(new UserPrefs(), modelManager.getUserPrefs());","lastModifiedDate":"2018-11-27"},{"lineNumber":28,"author":{"gitId":"-"},"content":" assertEquals(new GuiSettings(), modelManager.getGuiSettings());","lastModifiedDate":"2018-11-27"},{"lineNumber":29,"author":{"gitId":"-"},"content":" assertEquals(new AddressBook(), new AddressBook(modelManager.getAddressBook()));","lastModifiedDate":"2018-11-27"},{"lineNumber":30,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":32,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-11-27"},{"lineNumber":33,"author":{"gitId":"-"},"content":" public void setUserPrefs_nullUserPrefs_throwsNullPointerException() {","lastModifiedDate":"2018-11-27"},{"lineNumber":34,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e modelManager.setUserPrefs(null));","lastModifiedDate":"2019-03-23"},{"lineNumber":35,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":37,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-11-27"},{"lineNumber":38,"author":{"gitId":"-"},"content":" public void setUserPrefs_validUserPrefs_copiesUserPrefs() {","lastModifiedDate":"2018-12-06"},{"lineNumber":39,"author":{"gitId":"-"},"content":" UserPrefs userPrefs \u003d new UserPrefs();","lastModifiedDate":"2018-11-27"},{"lineNumber":40,"author":{"gitId":"-"},"content":" userPrefs.setAddressBookFilePath(Paths.get(\"address/book/file/path\"));","lastModifiedDate":"2018-11-27"},{"lineNumber":41,"author":{"gitId":"-"},"content":" userPrefs.setGuiSettings(new GuiSettings(1, 2, 3, 4));","lastModifiedDate":"2018-11-27"},{"lineNumber":42,"author":{"gitId":"-"},"content":" modelManager.setUserPrefs(userPrefs);","lastModifiedDate":"2018-11-27"},{"lineNumber":43,"author":{"gitId":"-"},"content":" assertEquals(userPrefs, modelManager.getUserPrefs());","lastModifiedDate":"2018-11-27"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-06"},{"lineNumber":45,"author":{"gitId":"-"},"content":" // Modifying userPrefs should not modify modelManager\u0027s userPrefs","lastModifiedDate":"2018-12-06"},{"lineNumber":46,"author":{"gitId":"-"},"content":" UserPrefs oldUserPrefs \u003d new UserPrefs(userPrefs);","lastModifiedDate":"2018-12-06"},{"lineNumber":47,"author":{"gitId":"-"},"content":" userPrefs.setAddressBookFilePath(Paths.get(\"new/address/book/file/path\"));","lastModifiedDate":"2018-12-06"},{"lineNumber":48,"author":{"gitId":"-"},"content":" assertEquals(oldUserPrefs, modelManager.getUserPrefs());","lastModifiedDate":"2018-12-06"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":51,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-11-27"},{"lineNumber":52,"author":{"gitId":"-"},"content":" public void setGuiSettings_nullGuiSettings_throwsNullPointerException() {","lastModifiedDate":"2018-11-27"},{"lineNumber":53,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e modelManager.setGuiSettings(null));","lastModifiedDate":"2019-03-23"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":56,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-11-27"},{"lineNumber":57,"author":{"gitId":"-"},"content":" public void setGuiSettings_validGuiSettings_setsGuiSettings() {","lastModifiedDate":"2018-11-27"},{"lineNumber":58,"author":{"gitId":"-"},"content":" GuiSettings guiSettings \u003d new GuiSettings(1, 2, 3, 4);","lastModifiedDate":"2018-11-27"},{"lineNumber":59,"author":{"gitId":"-"},"content":" modelManager.setGuiSettings(guiSettings);","lastModifiedDate":"2018-11-27"},{"lineNumber":60,"author":{"gitId":"-"},"content":" assertEquals(guiSettings, modelManager.getGuiSettings());","lastModifiedDate":"2018-11-27"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":63,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-11-27"},{"lineNumber":64,"author":{"gitId":"-"},"content":" public void setAddressBookFilePath_nullPath_throwsNullPointerException() {","lastModifiedDate":"2018-11-27"},{"lineNumber":65,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e modelManager.setAddressBookFilePath(null));","lastModifiedDate":"2019-03-23"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":68,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-11-27"},{"lineNumber":69,"author":{"gitId":"-"},"content":" public void setAddressBookFilePath_validPath_setsAddressBookFilePath() {","lastModifiedDate":"2018-11-27"},{"lineNumber":70,"author":{"gitId":"-"},"content":" Path path \u003d Paths.get(\"address/book/file/path\");","lastModifiedDate":"2018-11-27"},{"lineNumber":71,"author":{"gitId":"-"},"content":" modelManager.setAddressBookFilePath(path);","lastModifiedDate":"2018-11-27"},{"lineNumber":72,"author":{"gitId":"-"},"content":" assertEquals(path, modelManager.getAddressBookFilePath());","lastModifiedDate":"2018-11-27"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":75,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-06"},{"lineNumber":76,"author":{"gitId":"-"},"content":" public void hasPerson_nullPerson_throwsNullPointerException() {","lastModifiedDate":"2018-08-06"},{"lineNumber":77,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e modelManager.hasPerson(null));","lastModifiedDate":"2019-03-23"},{"lineNumber":78,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-06"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-06"},{"lineNumber":80,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-06"},{"lineNumber":81,"author":{"gitId":"-"},"content":" public void hasPerson_personNotInAddressBook_returnsFalse() {","lastModifiedDate":"2018-08-06"},{"lineNumber":82,"author":{"gitId":"-"},"content":" assertFalse(modelManager.hasPerson(ALICE));","lastModifiedDate":"2018-08-06"},{"lineNumber":83,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-06"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-06"},{"lineNumber":85,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-06"},{"lineNumber":86,"author":{"gitId":"-"},"content":" public void hasPerson_personInAddressBook_returnsTrue() {","lastModifiedDate":"2018-08-07"},{"lineNumber":87,"author":{"gitId":"-"},"content":" modelManager.addPerson(ALICE);","lastModifiedDate":"2018-08-06"},{"lineNumber":88,"author":{"gitId":"-"},"content":" assertTrue(modelManager.hasPerson(ALICE));","lastModifiedDate":"2018-08-06"},{"lineNumber":89,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-06"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-06"},{"lineNumber":91,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-09-01"},{"lineNumber":92,"author":{"gitId":"-"},"content":" public void getFilteredPersonList_modifyList_throwsUnsupportedOperationException() {","lastModifiedDate":"2017-09-01"},{"lineNumber":93,"author":{"gitId":"-"},"content":" assertThrows(UnsupportedOperationException.class, () -\u003e modelManager.getFilteredPersonList().remove(0));","lastModifiedDate":"2019-03-23"},{"lineNumber":94,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-09-01"},{"lineNumber":95,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":96,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-31"},{"lineNumber":97,"author":{"gitId":"-"},"content":" public void equals() {","lastModifiedDate":"2017-08-15"},{"lineNumber":98,"author":{"gitId":"-"},"content":" AddressBook addressBook \u003d new AddressBookBuilder().withPerson(ALICE).withPerson(BENSON).build();","lastModifiedDate":"2017-07-19"},{"lineNumber":99,"author":{"gitId":"-"},"content":" AddressBook differentAddressBook \u003d new AddressBook();","lastModifiedDate":"2017-05-31"},{"lineNumber":100,"author":{"gitId":"-"},"content":" UserPrefs userPrefs \u003d new UserPrefs();","lastModifiedDate":"2017-05-31"},{"lineNumber":101,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":102,"author":{"gitId":"-"},"content":" // same values -\u003e returns true","lastModifiedDate":"2017-05-31"},{"lineNumber":103,"author":{"gitId":"-"},"content":" modelManager \u003d new ModelManager(addressBook, userPrefs);","lastModifiedDate":"2018-08-06"},{"lineNumber":104,"author":{"gitId":"-"},"content":" ModelManager modelManagerCopy \u003d new ModelManager(addressBook, userPrefs);","lastModifiedDate":"2017-05-31"},{"lineNumber":105,"author":{"gitId":"-"},"content":" assertTrue(modelManager.equals(modelManagerCopy));","lastModifiedDate":"2017-05-31"},{"lineNumber":106,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":107,"author":{"gitId":"-"},"content":" // same object -\u003e returns true","lastModifiedDate":"2017-05-31"},{"lineNumber":108,"author":{"gitId":"-"},"content":" assertTrue(modelManager.equals(modelManager));","lastModifiedDate":"2017-05-31"},{"lineNumber":109,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":110,"author":{"gitId":"-"},"content":" // null -\u003e returns false","lastModifiedDate":"2017-05-31"},{"lineNumber":111,"author":{"gitId":"-"},"content":" assertFalse(modelManager.equals(null));","lastModifiedDate":"2017-05-31"},{"lineNumber":112,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":113,"author":{"gitId":"-"},"content":" // different types -\u003e returns false","lastModifiedDate":"2017-05-31"},{"lineNumber":114,"author":{"gitId":"-"},"content":" assertFalse(modelManager.equals(5));","lastModifiedDate":"2017-05-31"},{"lineNumber":115,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":116,"author":{"gitId":"-"},"content":" // different addressBook -\u003e returns false","lastModifiedDate":"2017-05-31"},{"lineNumber":117,"author":{"gitId":"-"},"content":" assertFalse(modelManager.equals(new ModelManager(differentAddressBook, userPrefs)));","lastModifiedDate":"2017-05-31"},{"lineNumber":118,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":119,"author":{"gitId":"-"},"content":" // different filteredList -\u003e returns false","lastModifiedDate":"2017-05-31"},{"lineNumber":120,"author":{"gitId":"ashleygoh1"},"content":" String[] keywords \u003d ALICE.getCompanyName().fullName.split(\"\\\\s+\");","lastModifiedDate":"2024-02-25"},{"lineNumber":121,"author":{"gitId":"-"},"content":" modelManager.updateFilteredPersonList(new NameContainsKeywordsPredicate(Arrays.asList(keywords)));","lastModifiedDate":"2017-06-12"},{"lineNumber":122,"author":{"gitId":"-"},"content":" assertFalse(modelManager.equals(new ModelManager(addressBook, userPrefs)));","lastModifiedDate":"2017-05-31"},{"lineNumber":123,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-08-05"},{"lineNumber":124,"author":{"gitId":"-"},"content":" // resets modelManager to initial state for upcoming tests","lastModifiedDate":"2017-08-05"},{"lineNumber":125,"author":{"gitId":"-"},"content":" modelManager.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS);","lastModifiedDate":"2017-08-05"},{"lineNumber":126,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":127,"author":{"gitId":"-"},"content":" // different userPrefs -\u003e returns false","lastModifiedDate":"2018-11-27"},{"lineNumber":128,"author":{"gitId":"-"},"content":" UserPrefs differentUserPrefs \u003d new UserPrefs();","lastModifiedDate":"2017-05-31"},{"lineNumber":129,"author":{"gitId":"-"},"content":" differentUserPrefs.setAddressBookFilePath(Paths.get(\"differentFilePath\"));","lastModifiedDate":"2018-08-09"},{"lineNumber":130,"author":{"gitId":"-"},"content":" assertFalse(modelManager.equals(new ModelManager(addressBook, differentUserPrefs)));","lastModifiedDate":"2018-11-27"},{"lineNumber":131,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-31"},{"lineNumber":132,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-05-31"}],"authorContributionMap":{"ashleygoh1":1,"-":131}},{"path":"src/test/java/seedu/address/model/person/PersonTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model.person;","lastModifiedDate":"2018-03-26"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-02-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2019-03-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2019-03-15"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB;","lastModifiedDate":"2018-04-19"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_BOB;","lastModifiedDate":"2018-04-19"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB;","lastModifiedDate":"2018-04-19"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB;","lastModifiedDate":"2018-04-19"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_FIRST_INTERVIEW;","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.ALICE;","lastModifiedDate":"2018-04-19"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.BOB;","lastModifiedDate":"2018-04-19"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.testutil.PersonBuilder;","lastModifiedDate":"2018-03-26"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":18,"author":{"gitId":"-"},"content":"public class PersonTest {","lastModifiedDate":"2018-03-26"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":20,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-04-19"},{"lineNumber":21,"author":{"gitId":"-"},"content":" public void isSamePerson() {","lastModifiedDate":"2018-04-19"},{"lineNumber":22,"author":{"gitId":"-"},"content":" // same object -\u003e returns true","lastModifiedDate":"2018-04-19"},{"lineNumber":23,"author":{"gitId":"-"},"content":" assertTrue(ALICE.isSamePerson(ALICE));","lastModifiedDate":"2018-04-19"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":25,"author":{"gitId":"-"},"content":" // null -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":26,"author":{"gitId":"-"},"content":" assertFalse(ALICE.isSamePerson(null));","lastModifiedDate":"2018-04-19"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":28,"author":{"gitId":"-"},"content":" // same name, all other attributes different -\u003e returns true","lastModifiedDate":"2020-12-18"},{"lineNumber":29,"author":{"gitId":"-"},"content":" Person editedAlice \u003d new PersonBuilder(ALICE).withPhone(VALID_PHONE_BOB).withEmail(VALID_EMAIL_BOB)","lastModifiedDate":"2020-12-18"},{"lineNumber":30,"author":{"gitId":"ashleygoh1"},"content":" .withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_FIRST_INTERVIEW).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":31,"author":{"gitId":"-"},"content":" assertTrue(ALICE.isSamePerson(editedAlice));","lastModifiedDate":"2020-12-18"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":33,"author":{"gitId":"-"},"content":" // different name, all other attributes same -\u003e returns false","lastModifiedDate":"2020-12-18"},{"lineNumber":34,"author":{"gitId":"-"},"content":" editedAlice \u003d new PersonBuilder(ALICE).withName(VALID_NAME_BOB).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":35,"author":{"gitId":"-"},"content":" assertFalse(ALICE.isSamePerson(editedAlice));","lastModifiedDate":"2018-04-19"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":37,"author":{"gitId":"-"},"content":" // name differs in case, all other attributes same -\u003e returns false","lastModifiedDate":"2020-12-18"},{"lineNumber":38,"author":{"gitId":"-"},"content":" Person editedBob \u003d new PersonBuilder(BOB).withName(VALID_NAME_BOB.toLowerCase()).build();","lastModifiedDate":"2020-12-18"},{"lineNumber":39,"author":{"gitId":"-"},"content":" assertFalse(BOB.isSamePerson(editedBob));","lastModifiedDate":"2020-12-18"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":41,"author":{"gitId":"-"},"content":" // name has trailing spaces, all other attributes same -\u003e returns false","lastModifiedDate":"2020-12-18"},{"lineNumber":42,"author":{"gitId":"-"},"content":" String nameWithTrailingSpaces \u003d VALID_NAME_BOB + \" \";","lastModifiedDate":"2020-12-18"},{"lineNumber":43,"author":{"gitId":"-"},"content":" editedBob \u003d new PersonBuilder(BOB).withName(nameWithTrailingSpaces).build();","lastModifiedDate":"2020-12-18"},{"lineNumber":44,"author":{"gitId":"-"},"content":" assertFalse(BOB.isSamePerson(editedBob));","lastModifiedDate":"2020-12-18"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-04-19"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":47,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-04-19"},{"lineNumber":48,"author":{"gitId":"-"},"content":" public void equals() {","lastModifiedDate":"2018-04-19"},{"lineNumber":49,"author":{"gitId":"-"},"content":" // same values -\u003e returns true","lastModifiedDate":"2018-04-19"},{"lineNumber":50,"author":{"gitId":"-"},"content":" Person aliceCopy \u003d new PersonBuilder(ALICE).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":51,"author":{"gitId":"-"},"content":" assertTrue(ALICE.equals(aliceCopy));","lastModifiedDate":"2018-04-19"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":53,"author":{"gitId":"-"},"content":" // same object -\u003e returns true","lastModifiedDate":"2018-04-19"},{"lineNumber":54,"author":{"gitId":"-"},"content":" assertTrue(ALICE.equals(ALICE));","lastModifiedDate":"2018-04-19"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":56,"author":{"gitId":"-"},"content":" // null -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":57,"author":{"gitId":"-"},"content":" assertFalse(ALICE.equals(null));","lastModifiedDate":"2018-04-19"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":59,"author":{"gitId":"-"},"content":" // different type -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":60,"author":{"gitId":"-"},"content":" assertFalse(ALICE.equals(5));","lastModifiedDate":"2018-04-19"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":62,"author":{"gitId":"-"},"content":" // different person -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":63,"author":{"gitId":"-"},"content":" assertFalse(ALICE.equals(BOB));","lastModifiedDate":"2018-04-19"},{"lineNumber":64,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":65,"author":{"gitId":"-"},"content":" // different name -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":66,"author":{"gitId":"-"},"content":" Person editedAlice \u003d new PersonBuilder(ALICE).withName(VALID_NAME_BOB).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":67,"author":{"gitId":"-"},"content":" assertFalse(ALICE.equals(editedAlice));","lastModifiedDate":"2018-04-19"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":69,"author":{"gitId":"-"},"content":" // different phone -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":70,"author":{"gitId":"-"},"content":" editedAlice \u003d new PersonBuilder(ALICE).withPhone(VALID_PHONE_BOB).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":71,"author":{"gitId":"-"},"content":" assertFalse(ALICE.equals(editedAlice));","lastModifiedDate":"2018-04-19"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":73,"author":{"gitId":"-"},"content":" // different email -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":74,"author":{"gitId":"-"},"content":" editedAlice \u003d new PersonBuilder(ALICE).withEmail(VALID_EMAIL_BOB).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":75,"author":{"gitId":"-"},"content":" assertFalse(ALICE.equals(editedAlice));","lastModifiedDate":"2018-04-19"},{"lineNumber":76,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":77,"author":{"gitId":"-"},"content":" // different address -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":78,"author":{"gitId":"-"},"content":" editedAlice \u003d new PersonBuilder(ALICE).withAddress(VALID_ADDRESS_BOB).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":79,"author":{"gitId":"-"},"content":" assertFalse(ALICE.equals(editedAlice));","lastModifiedDate":"2018-04-19"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-18"},{"lineNumber":81,"author":{"gitId":"-"},"content":" // different tags -\u003e returns false","lastModifiedDate":"2018-04-18"},{"lineNumber":82,"author":{"gitId":"ashleygoh1"},"content":" editedAlice \u003d new PersonBuilder(ALICE).withTags(VALID_TAG_FIRST_INTERVIEW).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":83,"author":{"gitId":"-"},"content":" assertFalse(ALICE.equals(editedAlice));","lastModifiedDate":"2018-04-18"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-04-19"},{"lineNumber":85,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":86,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2019-02-23"},{"lineNumber":87,"author":{"gitId":"-"},"content":" public void toStringMethod() {","lastModifiedDate":"2019-02-23"},{"lineNumber":88,"author":{"gitId":"ashleygoh1"},"content":" String expected \u003d Person.class.getCanonicalName() + \"{name\u003d\" + ALICE.getCompanyName()","lastModifiedDate":"2024-02-26"},{"lineNumber":89,"author":{"gitId":"ashleygoh1"},"content":" + \", phone\u003d\" + ALICE.getPhone() + \", email\u003d\" + ALICE.getEmail()","lastModifiedDate":"2024-02-26"},{"lineNumber":90,"author":{"gitId":"ashleygoh1"},"content":" + \", address\u003d\" + ALICE.getAddress() + \", tag\u003d\" + ALICE.getTag()","lastModifiedDate":"2024-02-26"},{"lineNumber":91,"author":{"gitId":"ashleygoh1"},"content":" + \", job description\u003d\" + ALICE.getJobDescription()","lastModifiedDate":"2024-02-26"},{"lineNumber":92,"author":{"gitId":"ashleygoh1"},"content":" + \", interview date\u003d\" + ALICE.getInterviewDate()","lastModifiedDate":"2024-02-26"},{"lineNumber":93,"author":{"gitId":"ashleygoh1"},"content":" + \", intern duration\u003d\" + ALICE.getInternDuration()","lastModifiedDate":"2024-02-26"},{"lineNumber":94,"author":{"gitId":"ashleygoh1"},"content":" + \", salary\u003d\" + ALICE.getSalary() + \"}\";","lastModifiedDate":"2024-02-26"},{"lineNumber":95,"author":{"gitId":"-"},"content":" assertEquals(expected, ALICE.toString());","lastModifiedDate":"2019-02-23"},{"lineNumber":96,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":97,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-09-01"}],"authorContributionMap":{"ashleygoh1":10,"-":87}},{"path":"src/test/java/seedu/address/model/person/UniquePersonListTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model.person;","lastModifiedDate":"2018-08-09"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-03-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2019-03-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2019-03-15"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB;","lastModifiedDate":"2018-08-08"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_FIRST_INTERVIEW;","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.ALICE;","lastModifiedDate":"2018-08-08"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.BOB;","lastModifiedDate":"2018-08-08"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import java.util.Arrays;","lastModifiedDate":"2018-08-08"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import java.util.Collections;","lastModifiedDate":"2018-08-08"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2018-08-08"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.model.person.exceptions.DuplicatePersonException;","lastModifiedDate":"2018-08-08"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.model.person.exceptions.PersonNotFoundException;","lastModifiedDate":"2018-08-08"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.testutil.PersonBuilder;","lastModifiedDate":"2018-08-08"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":22,"author":{"gitId":"-"},"content":"public class UniquePersonListTest {","lastModifiedDate":"2017-09-01"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":24,"author":{"gitId":"-"},"content":" private final UniquePersonList uniquePersonList \u003d new UniquePersonList();","lastModifiedDate":"2018-08-08"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":26,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":27,"author":{"gitId":"-"},"content":" public void contains_nullPerson_throwsNullPointerException() {","lastModifiedDate":"2018-08-08"},{"lineNumber":28,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e uniquePersonList.contains(null));","lastModifiedDate":"2019-03-23"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":31,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":32,"author":{"gitId":"-"},"content":" public void contains_personNotInList_returnsFalse() {","lastModifiedDate":"2018-08-08"},{"lineNumber":33,"author":{"gitId":"-"},"content":" assertFalse(uniquePersonList.contains(ALICE));","lastModifiedDate":"2018-08-08"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":36,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":37,"author":{"gitId":"-"},"content":" public void contains_personInList_returnsTrue() {","lastModifiedDate":"2018-08-08"},{"lineNumber":38,"author":{"gitId":"-"},"content":" uniquePersonList.add(ALICE);","lastModifiedDate":"2018-08-08"},{"lineNumber":39,"author":{"gitId":"-"},"content":" assertTrue(uniquePersonList.contains(ALICE));","lastModifiedDate":"2018-08-08"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":42,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":43,"author":{"gitId":"-"},"content":" public void contains_personWithSameIdentityFieldsInList_returnsTrue() {","lastModifiedDate":"2018-08-08"},{"lineNumber":44,"author":{"gitId":"-"},"content":" uniquePersonList.add(ALICE);","lastModifiedDate":"2018-08-08"},{"lineNumber":45,"author":{"gitId":"ashleygoh1"},"content":" Person editedAlice \u003d new PersonBuilder(ALICE).withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_FIRST_INTERVIEW)","lastModifiedDate":"2024-02-26"},{"lineNumber":46,"author":{"gitId":"-"},"content":" .build();","lastModifiedDate":"2018-08-08"},{"lineNumber":47,"author":{"gitId":"-"},"content":" assertTrue(uniquePersonList.contains(editedAlice));","lastModifiedDate":"2018-08-08"},{"lineNumber":48,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":50,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":51,"author":{"gitId":"-"},"content":" public void add_nullPerson_throwsNullPointerException() {","lastModifiedDate":"2018-08-08"},{"lineNumber":52,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e uniquePersonList.add(null));","lastModifiedDate":"2019-03-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":55,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":56,"author":{"gitId":"-"},"content":" public void add_duplicatePerson_throwsDuplicatePersonException() {","lastModifiedDate":"2018-08-08"},{"lineNumber":57,"author":{"gitId":"-"},"content":" uniquePersonList.add(ALICE);","lastModifiedDate":"2018-08-08"},{"lineNumber":58,"author":{"gitId":"-"},"content":" assertThrows(DuplicatePersonException.class, () -\u003e uniquePersonList.add(ALICE));","lastModifiedDate":"2019-03-23"},{"lineNumber":59,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":61,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":62,"author":{"gitId":"-"},"content":" public void setPerson_nullTargetPerson_throwsNullPointerException() {","lastModifiedDate":"2018-08-08"},{"lineNumber":63,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e uniquePersonList.setPerson(null, ALICE));","lastModifiedDate":"2019-03-23"},{"lineNumber":64,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":66,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":67,"author":{"gitId":"-"},"content":" public void setPerson_nullEditedPerson_throwsNullPointerException() {","lastModifiedDate":"2018-08-08"},{"lineNumber":68,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e uniquePersonList.setPerson(ALICE, null));","lastModifiedDate":"2019-03-23"},{"lineNumber":69,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":71,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":72,"author":{"gitId":"-"},"content":" public void setPerson_targetPersonNotInList_throwsPersonNotFoundException() {","lastModifiedDate":"2018-08-08"},{"lineNumber":73,"author":{"gitId":"-"},"content":" assertThrows(PersonNotFoundException.class, () -\u003e uniquePersonList.setPerson(ALICE, ALICE));","lastModifiedDate":"2019-03-23"},{"lineNumber":74,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":76,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":77,"author":{"gitId":"-"},"content":" public void setPerson_editedPersonIsSamePerson_success() {","lastModifiedDate":"2018-08-08"},{"lineNumber":78,"author":{"gitId":"-"},"content":" uniquePersonList.add(ALICE);","lastModifiedDate":"2018-08-08"},{"lineNumber":79,"author":{"gitId":"-"},"content":" uniquePersonList.setPerson(ALICE, ALICE);","lastModifiedDate":"2018-08-08"},{"lineNumber":80,"author":{"gitId":"-"},"content":" UniquePersonList expectedUniquePersonList \u003d new UniquePersonList();","lastModifiedDate":"2018-08-08"},{"lineNumber":81,"author":{"gitId":"-"},"content":" expectedUniquePersonList.add(ALICE);","lastModifiedDate":"2018-08-08"},{"lineNumber":82,"author":{"gitId":"-"},"content":" assertEquals(expectedUniquePersonList, uniquePersonList);","lastModifiedDate":"2018-08-08"},{"lineNumber":83,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":85,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":86,"author":{"gitId":"-"},"content":" public void setPerson_editedPersonHasSameIdentity_success() {","lastModifiedDate":"2018-08-08"},{"lineNumber":87,"author":{"gitId":"-"},"content":" uniquePersonList.add(ALICE);","lastModifiedDate":"2018-08-08"},{"lineNumber":88,"author":{"gitId":"ashleygoh1"},"content":" Person editedAlice \u003d new PersonBuilder(ALICE).withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_FIRST_INTERVIEW)","lastModifiedDate":"2024-02-26"},{"lineNumber":89,"author":{"gitId":"-"},"content":" .build();","lastModifiedDate":"2018-08-08"},{"lineNumber":90,"author":{"gitId":"-"},"content":" uniquePersonList.setPerson(ALICE, editedAlice);","lastModifiedDate":"2018-08-08"},{"lineNumber":91,"author":{"gitId":"-"},"content":" UniquePersonList expectedUniquePersonList \u003d new UniquePersonList();","lastModifiedDate":"2018-08-08"},{"lineNumber":92,"author":{"gitId":"-"},"content":" expectedUniquePersonList.add(editedAlice);","lastModifiedDate":"2018-08-08"},{"lineNumber":93,"author":{"gitId":"-"},"content":" assertEquals(expectedUniquePersonList, uniquePersonList);","lastModifiedDate":"2018-08-08"},{"lineNumber":94,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":95,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":96,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":97,"author":{"gitId":"-"},"content":" public void setPerson_editedPersonHasDifferentIdentity_success() {","lastModifiedDate":"2018-08-08"},{"lineNumber":98,"author":{"gitId":"-"},"content":" uniquePersonList.add(ALICE);","lastModifiedDate":"2018-08-08"},{"lineNumber":99,"author":{"gitId":"-"},"content":" uniquePersonList.setPerson(ALICE, BOB);","lastModifiedDate":"2018-08-08"},{"lineNumber":100,"author":{"gitId":"-"},"content":" UniquePersonList expectedUniquePersonList \u003d new UniquePersonList();","lastModifiedDate":"2018-08-08"},{"lineNumber":101,"author":{"gitId":"-"},"content":" expectedUniquePersonList.add(BOB);","lastModifiedDate":"2018-08-08"},{"lineNumber":102,"author":{"gitId":"-"},"content":" assertEquals(expectedUniquePersonList, uniquePersonList);","lastModifiedDate":"2018-08-08"},{"lineNumber":103,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":104,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":105,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":106,"author":{"gitId":"-"},"content":" public void setPerson_editedPersonHasNonUniqueIdentity_throwsDuplicatePersonException() {","lastModifiedDate":"2018-08-08"},{"lineNumber":107,"author":{"gitId":"-"},"content":" uniquePersonList.add(ALICE);","lastModifiedDate":"2018-08-08"},{"lineNumber":108,"author":{"gitId":"-"},"content":" uniquePersonList.add(BOB);","lastModifiedDate":"2018-08-08"},{"lineNumber":109,"author":{"gitId":"-"},"content":" assertThrows(DuplicatePersonException.class, () -\u003e uniquePersonList.setPerson(ALICE, BOB));","lastModifiedDate":"2019-03-23"},{"lineNumber":110,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":111,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":112,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":113,"author":{"gitId":"-"},"content":" public void remove_nullPerson_throwsNullPointerException() {","lastModifiedDate":"2018-08-08"},{"lineNumber":114,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e uniquePersonList.remove(null));","lastModifiedDate":"2019-03-23"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":116,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":117,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":118,"author":{"gitId":"-"},"content":" public void remove_personDoesNotExist_throwsPersonNotFoundException() {","lastModifiedDate":"2018-08-08"},{"lineNumber":119,"author":{"gitId":"-"},"content":" assertThrows(PersonNotFoundException.class, () -\u003e uniquePersonList.remove(ALICE));","lastModifiedDate":"2019-03-23"},{"lineNumber":120,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":121,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":122,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":123,"author":{"gitId":"-"},"content":" public void remove_existingPerson_removesPerson() {","lastModifiedDate":"2018-08-08"},{"lineNumber":124,"author":{"gitId":"-"},"content":" uniquePersonList.add(ALICE);","lastModifiedDate":"2018-08-08"},{"lineNumber":125,"author":{"gitId":"-"},"content":" uniquePersonList.remove(ALICE);","lastModifiedDate":"2018-08-08"},{"lineNumber":126,"author":{"gitId":"-"},"content":" UniquePersonList expectedUniquePersonList \u003d new UniquePersonList();","lastModifiedDate":"2018-08-08"},{"lineNumber":127,"author":{"gitId":"-"},"content":" assertEquals(expectedUniquePersonList, uniquePersonList);","lastModifiedDate":"2018-08-08"},{"lineNumber":128,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":129,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":130,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":131,"author":{"gitId":"-"},"content":" public void setPersons_nullUniquePersonList_throwsNullPointerException() {","lastModifiedDate":"2018-08-08"},{"lineNumber":132,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e uniquePersonList.setPersons((UniquePersonList) null));","lastModifiedDate":"2019-03-23"},{"lineNumber":133,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":134,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":135,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":136,"author":{"gitId":"-"},"content":" public void setPersons_uniquePersonList_replacesOwnListWithProvidedUniquePersonList() {","lastModifiedDate":"2018-08-08"},{"lineNumber":137,"author":{"gitId":"-"},"content":" uniquePersonList.add(ALICE);","lastModifiedDate":"2018-08-08"},{"lineNumber":138,"author":{"gitId":"-"},"content":" UniquePersonList expectedUniquePersonList \u003d new UniquePersonList();","lastModifiedDate":"2018-08-08"},{"lineNumber":139,"author":{"gitId":"-"},"content":" expectedUniquePersonList.add(BOB);","lastModifiedDate":"2018-08-08"},{"lineNumber":140,"author":{"gitId":"-"},"content":" uniquePersonList.setPersons(expectedUniquePersonList);","lastModifiedDate":"2018-08-08"},{"lineNumber":141,"author":{"gitId":"-"},"content":" assertEquals(expectedUniquePersonList, uniquePersonList);","lastModifiedDate":"2018-08-08"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":143,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":144,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":145,"author":{"gitId":"-"},"content":" public void setPersons_nullList_throwsNullPointerException() {","lastModifiedDate":"2018-08-08"},{"lineNumber":146,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e uniquePersonList.setPersons((List\u003cPerson\u003e) null));","lastModifiedDate":"2019-03-23"},{"lineNumber":147,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":148,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":149,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":150,"author":{"gitId":"-"},"content":" public void setPersons_list_replacesOwnListWithProvidedList() {","lastModifiedDate":"2018-08-08"},{"lineNumber":151,"author":{"gitId":"-"},"content":" uniquePersonList.add(ALICE);","lastModifiedDate":"2018-08-08"},{"lineNumber":152,"author":{"gitId":"-"},"content":" List\u003cPerson\u003e personList \u003d Collections.singletonList(BOB);","lastModifiedDate":"2018-08-08"},{"lineNumber":153,"author":{"gitId":"-"},"content":" uniquePersonList.setPersons(personList);","lastModifiedDate":"2018-08-08"},{"lineNumber":154,"author":{"gitId":"-"},"content":" UniquePersonList expectedUniquePersonList \u003d new UniquePersonList();","lastModifiedDate":"2018-08-08"},{"lineNumber":155,"author":{"gitId":"-"},"content":" expectedUniquePersonList.add(BOB);","lastModifiedDate":"2018-08-08"},{"lineNumber":156,"author":{"gitId":"-"},"content":" assertEquals(expectedUniquePersonList, uniquePersonList);","lastModifiedDate":"2018-08-08"},{"lineNumber":157,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":158,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":159,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":160,"author":{"gitId":"-"},"content":" public void setPersons_listWithDuplicatePersons_throwsDuplicatePersonException() {","lastModifiedDate":"2018-08-08"},{"lineNumber":161,"author":{"gitId":"-"},"content":" List\u003cPerson\u003e listWithDuplicatePersons \u003d Arrays.asList(ALICE, ALICE);","lastModifiedDate":"2018-08-08"},{"lineNumber":162,"author":{"gitId":"-"},"content":" assertThrows(DuplicatePersonException.class, () -\u003e uniquePersonList.setPersons(listWithDuplicatePersons));","lastModifiedDate":"2019-03-23"},{"lineNumber":163,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":164,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":165,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-09-01"},{"lineNumber":166,"author":{"gitId":"-"},"content":" public void asUnmodifiableObservableList_modifyList_throwsUnsupportedOperationException() {","lastModifiedDate":"2018-04-05"},{"lineNumber":167,"author":{"gitId":"-"},"content":" assertThrows(UnsupportedOperationException.class, ()","lastModifiedDate":"2019-03-23"},{"lineNumber":168,"author":{"gitId":"-"},"content":" -\u003e uniquePersonList.asUnmodifiableObservableList().remove(0));","lastModifiedDate":"2019-03-23"},{"lineNumber":169,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-09-01"},{"lineNumber":170,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-24"},{"lineNumber":171,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2019-02-24"},{"lineNumber":172,"author":{"gitId":"-"},"content":" public void toStringMethod() {","lastModifiedDate":"2019-02-24"},{"lineNumber":173,"author":{"gitId":"-"},"content":" assertEquals(uniquePersonList.asUnmodifiableObservableList().toString(), uniquePersonList.toString());","lastModifiedDate":"2019-02-24"},{"lineNumber":174,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-24"},{"lineNumber":175,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-09-01"}],"authorContributionMap":{"ashleygoh1":3,"-":172}},{"path":"src/test/java/seedu/address/storage/JsonAdaptedPersonTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.storage;","lastModifiedDate":"2018-08-13"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-03-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.storage.JsonAdaptedPerson.MISSING_FIELD_MESSAGE_FORMAT;","lastModifiedDate":"2018-08-13"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-14"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.BENSON;","lastModifiedDate":"2018-08-13"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import seedu.address.commons.exceptions.IllegalValueException;","lastModifiedDate":"2018-08-13"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2018-08-13"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2018-08-13"},{"lineNumber":13,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.InternDuration;","lastModifiedDate":"2024-02-26"},{"lineNumber":14,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.JobDescription;","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2018-08-13"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2018-08-13"},{"lineNumber":17,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.Salary;","lastModifiedDate":"2024-02-26"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":19,"author":{"gitId":"-"},"content":"public class JsonAdaptedPersonTest {","lastModifiedDate":"2018-08-13"},{"lineNumber":20,"author":{"gitId":"-"},"content":" private static final String INVALID_NAME \u003d \"R@chel\";","lastModifiedDate":"2018-08-13"},{"lineNumber":21,"author":{"gitId":"-"},"content":" private static final String INVALID_PHONE \u003d \"+651234\";","lastModifiedDate":"2018-08-13"},{"lineNumber":22,"author":{"gitId":"-"},"content":" private static final String INVALID_ADDRESS \u003d \" \";","lastModifiedDate":"2018-08-13"},{"lineNumber":23,"author":{"gitId":"-"},"content":" private static final String INVALID_EMAIL \u003d \"example.com\";","lastModifiedDate":"2018-08-13"},{"lineNumber":24,"author":{"gitId":"-"},"content":" private static final String INVALID_TAG \u003d \"#friend\";","lastModifiedDate":"2018-08-13"},{"lineNumber":25,"author":{"gitId":"ashleygoh1"},"content":" private static final String INVALID_JOB_DESCRIPTION \u003d \" \";","lastModifiedDate":"2024-02-26"},{"lineNumber":26,"author":{"gitId":"ashleygoh1"},"content":" private static final String INVALID_INTERVIEW_DATE \u003d \" \";","lastModifiedDate":"2024-02-26"},{"lineNumber":27,"author":{"gitId":"ashleygoh1"},"content":" private static final String INVALID_INTERN_DURATION \u003d \" \";","lastModifiedDate":"2024-02-26"},{"lineNumber":28,"author":{"gitId":"ashleygoh1"},"content":" private static final String INVALID_SALARY \u003d \"0\";","lastModifiedDate":"2024-02-26"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":30,"author":{"gitId":"ashleygoh1"},"content":" private static final String VALID_NAME \u003d BENSON.getCompanyName().toString();","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" private static final String VALID_PHONE \u003d BENSON.getPhone().toString();","lastModifiedDate":"2018-08-13"},{"lineNumber":32,"author":{"gitId":"-"},"content":" private static final String VALID_EMAIL \u003d BENSON.getEmail().toString();","lastModifiedDate":"2018-08-13"},{"lineNumber":33,"author":{"gitId":"-"},"content":" private static final String VALID_ADDRESS \u003d BENSON.getAddress().toString();","lastModifiedDate":"2018-08-13"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":" private static final String VALID_TAGS \u003d BENSON.getTag().tagName;","lastModifiedDate":"2024-02-26"},{"lineNumber":35,"author":{"gitId":"ashleygoh1"},"content":" private static final String VALID_JOB_DESCRIPTION \u003d BENSON.getJobDescription().toString();","lastModifiedDate":"2024-02-26"},{"lineNumber":36,"author":{"gitId":"ashleygoh1"},"content":" private static final String VALID_INTERVIEW_DATE \u003d BENSON.getInterviewDate().toString();","lastModifiedDate":"2024-02-26"},{"lineNumber":37,"author":{"gitId":"ashleygoh1"},"content":" private static final String VALID_INTERN_DURATION \u003d BENSON.getInternDuration().toString();","lastModifiedDate":"2024-02-26"},{"lineNumber":38,"author":{"gitId":"ashleygoh1"},"content":" private static final String VALID_SALARY \u003d BENSON.getSalary().toString();","lastModifiedDate":"2024-02-26"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":40,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":41,"author":{"gitId":"-"},"content":" public void toModelType_validPersonDetails_returnsPerson() throws Exception {","lastModifiedDate":"2018-08-13"},{"lineNumber":42,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d new JsonAdaptedPerson(BENSON);","lastModifiedDate":"2018-08-13"},{"lineNumber":43,"author":{"gitId":"-"},"content":" assertEquals(BENSON, person.toModelType());","lastModifiedDate":"2018-08-13"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":46,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":47,"author":{"gitId":"-"},"content":" public void toModelType_invalidName_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":48,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2018-08-13"},{"lineNumber":49,"author":{"gitId":"ashleygoh1"},"content":" new JsonAdaptedPerson(INVALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS,","lastModifiedDate":"2024-02-26"},{"lineNumber":50,"author":{"gitId":"ashleygoh1"},"content":" VALID_JOB_DESCRIPTION, VALID_INTERVIEW_DATE, VALID_INTERN_DURATION, VALID_SALARY);","lastModifiedDate":"2024-02-26"},{"lineNumber":51,"author":{"gitId":"-"},"content":" String expectedMessage \u003d Name.MESSAGE_CONSTRAINTS;","lastModifiedDate":"2018-08-13"},{"lineNumber":52,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":55,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":56,"author":{"gitId":"-"},"content":" public void toModelType_nullName_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":57,"author":{"gitId":"ashleygoh1"},"content":" JsonAdaptedPerson person \u003d new JsonAdaptedPerson(null, VALID_PHONE, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS,","lastModifiedDate":"2024-02-26"},{"lineNumber":58,"author":{"gitId":"ashleygoh1"},"content":" VALID_JOB_DESCRIPTION, VALID_INTERVIEW_DATE, VALID_INTERN_DURATION, VALID_SALARY);","lastModifiedDate":"2024-02-26"},{"lineNumber":59,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(MISSING_FIELD_MESSAGE_FORMAT, Name.class.getSimpleName());","lastModifiedDate":"2018-08-13"},{"lineNumber":60,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":63,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":64,"author":{"gitId":"-"},"content":" public void toModelType_invalidPhone_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":65,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2018-08-13"},{"lineNumber":66,"author":{"gitId":"ashleygoh1"},"content":" new JsonAdaptedPerson(VALID_NAME, INVALID_PHONE, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS,","lastModifiedDate":"2024-02-26"},{"lineNumber":67,"author":{"gitId":"ashleygoh1"},"content":" VALID_JOB_DESCRIPTION, VALID_INTERVIEW_DATE, VALID_INTERN_DURATION, VALID_SALARY);","lastModifiedDate":"2024-02-26"},{"lineNumber":68,"author":{"gitId":"-"},"content":" String expectedMessage \u003d Phone.MESSAGE_CONSTRAINTS;","lastModifiedDate":"2018-08-13"},{"lineNumber":69,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":72,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":73,"author":{"gitId":"-"},"content":" public void toModelType_nullPhone_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":74,"author":{"gitId":"ashleygoh1"},"content":" JsonAdaptedPerson person \u003d new JsonAdaptedPerson(VALID_NAME, null, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS,","lastModifiedDate":"2024-02-26"},{"lineNumber":75,"author":{"gitId":"ashleygoh1"},"content":" VALID_JOB_DESCRIPTION, VALID_INTERVIEW_DATE, VALID_INTERN_DURATION, VALID_SALARY);","lastModifiedDate":"2024-02-26"},{"lineNumber":76,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(MISSING_FIELD_MESSAGE_FORMAT, Phone.class.getSimpleName());","lastModifiedDate":"2018-08-13"},{"lineNumber":77,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":78,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":80,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":81,"author":{"gitId":"-"},"content":" public void toModelType_invalidEmail_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":82,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2018-08-13"},{"lineNumber":83,"author":{"gitId":"ashleygoh1"},"content":" new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, INVALID_EMAIL, VALID_ADDRESS, VALID_TAGS,","lastModifiedDate":"2024-02-26"},{"lineNumber":84,"author":{"gitId":"ashleygoh1"},"content":" VALID_JOB_DESCRIPTION, VALID_INTERVIEW_DATE, VALID_INTERN_DURATION, VALID_SALARY);","lastModifiedDate":"2024-02-26"},{"lineNumber":85,"author":{"gitId":"-"},"content":" String expectedMessage \u003d Email.MESSAGE_CONSTRAINTS;","lastModifiedDate":"2018-08-13"},{"lineNumber":86,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":87,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":89,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":90,"author":{"gitId":"-"},"content":" public void toModelType_nullEmail_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":91,"author":{"gitId":"ashleygoh1"},"content":" JsonAdaptedPerson person \u003d new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, null, VALID_ADDRESS, VALID_TAGS,","lastModifiedDate":"2024-02-26"},{"lineNumber":92,"author":{"gitId":"ashleygoh1"},"content":" VALID_JOB_DESCRIPTION, VALID_INTERVIEW_DATE, VALID_INTERN_DURATION, VALID_SALARY);","lastModifiedDate":"2024-02-26"},{"lineNumber":93,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(MISSING_FIELD_MESSAGE_FORMAT, Email.class.getSimpleName());","lastModifiedDate":"2018-08-13"},{"lineNumber":94,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":95,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":97,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":98,"author":{"gitId":"-"},"content":" public void toModelType_nullAddress_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":99,"author":{"gitId":"ashleygoh1"},"content":" JsonAdaptedPerson person \u003d new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, null, VALID_TAGS,","lastModifiedDate":"2024-02-26"},{"lineNumber":100,"author":{"gitId":"ashleygoh1"},"content":" VALID_JOB_DESCRIPTION, VALID_INTERVIEW_DATE, VALID_INTERN_DURATION, VALID_SALARY);","lastModifiedDate":"2024-02-26"},{"lineNumber":101,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(MISSING_FIELD_MESSAGE_FORMAT, Address.class.getSimpleName());","lastModifiedDate":"2018-08-13"},{"lineNumber":102,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":103,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":104,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":105,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":106,"author":{"gitId":"-"},"content":" public void toModelType_invalidTags_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":107,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2018-08-13"},{"lineNumber":108,"author":{"gitId":"ashleygoh1"},"content":" new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_ADDRESS, INVALID_TAG,","lastModifiedDate":"2024-02-26"},{"lineNumber":109,"author":{"gitId":"ashleygoh1"},"content":" VALID_JOB_DESCRIPTION, VALID_INTERVIEW_DATE, VALID_INTERN_DURATION, VALID_SALARY);","lastModifiedDate":"2024-02-26"},{"lineNumber":110,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":111,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":112,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":113,"author":{"gitId":"ashleygoh1"},"content":" @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":114,"author":{"gitId":"ashleygoh1"},"content":" public void toModelType_invalidJobDescription_throwsIllegalValueException() {","lastModifiedDate":"2024-02-26"},{"lineNumber":115,"author":{"gitId":"ashleygoh1"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2024-02-26"},{"lineNumber":116,"author":{"gitId":"ashleygoh1"},"content":" new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS,","lastModifiedDate":"2024-02-26"},{"lineNumber":117,"author":{"gitId":"ashleygoh1"},"content":" INVALID_JOB_DESCRIPTION, VALID_INTERVIEW_DATE, VALID_INTERN_DURATION, VALID_SALARY);","lastModifiedDate":"2024-02-26"},{"lineNumber":118,"author":{"gitId":"ashleygoh1"},"content":" String expectedMessage \u003d JobDescription.MESSAGE_CONSTRAINTS;","lastModifiedDate":"2024-02-26"},{"lineNumber":119,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2024-02-26"},{"lineNumber":120,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":121,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":122,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":123,"author":{"gitId":"ashleygoh1"},"content":" public void toModelType_invalidInternDuration_throwsIllegalValueException() {","lastModifiedDate":"2024-02-26"},{"lineNumber":124,"author":{"gitId":"ashleygoh1"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2024-02-26"},{"lineNumber":125,"author":{"gitId":"ashleygoh1"},"content":" new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS,","lastModifiedDate":"2024-02-26"},{"lineNumber":126,"author":{"gitId":"ashleygoh1"},"content":" VALID_JOB_DESCRIPTION, VALID_INTERVIEW_DATE, INVALID_INTERN_DURATION, VALID_SALARY);","lastModifiedDate":"2024-02-26"},{"lineNumber":127,"author":{"gitId":"ashleygoh1"},"content":" String expectedMessage \u003d InternDuration.MESSAGE_CONSTRAINTS;","lastModifiedDate":"2024-02-26"},{"lineNumber":128,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2024-02-26"},{"lineNumber":129,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":131,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":132,"author":{"gitId":"ashleygoh1"},"content":" public void toModelType_invalidSalary_throwsIllegalValueException() {","lastModifiedDate":"2024-02-26"},{"lineNumber":133,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2024-02-26"},{"lineNumber":134,"author":{"gitId":"ashleygoh1"},"content":" new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS,","lastModifiedDate":"2024-02-26"},{"lineNumber":135,"author":{"gitId":"ashleygoh1"},"content":" VALID_JOB_DESCRIPTION, VALID_INTERVIEW_DATE, VALID_INTERN_DURATION, INVALID_SALARY);","lastModifiedDate":"2024-02-26"},{"lineNumber":136,"author":{"gitId":"ashleygoh1"},"content":" String expectedMessage \u003d Salary.MESSAGE_CONSTRAINTS;","lastModifiedDate":"2024-02-26"},{"lineNumber":137,"author":{"gitId":"ashleygoh1"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2024-02-26"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":139,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":140,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2018-08-13"}],"authorContributionMap":{"ashleygoh1":45,"-":95}},{"path":"src/test/java/seedu/address/testutil/EditPersonDescriptorBuilder.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ashleygoh1"},"content":"//package seedu.address.testutil;","lastModifiedDate":"2024-02-26"},{"lineNumber":2,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":3,"author":{"gitId":"ashleygoh1"},"content":"//import java.util.Set;","lastModifiedDate":"2024-02-26"},{"lineNumber":4,"author":{"gitId":"ashleygoh1"},"content":"//import java.util.stream.Collectors;","lastModifiedDate":"2024-02-26"},{"lineNumber":5,"author":{"gitId":"ashleygoh1"},"content":"//import java.util.stream.Stream;","lastModifiedDate":"2024-02-26"},{"lineNumber":6,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.logic.commands.EditCommand.EditPersonDescriptor;","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.person.Address;","lastModifiedDate":"2024-02-26"},{"lineNumber":9,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.person.Email;","lastModifiedDate":"2024-02-26"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.person.Name;","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.person.Person;","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.person.Phone;","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.tag.Tag;","lastModifiedDate":"2024-02-26"},{"lineNumber":14,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"ashleygoh1"},"content":"///**","lastModifiedDate":"2024-02-26"},{"lineNumber":16,"author":{"gitId":"ashleygoh1"},"content":"// * A utility class to help with building EditPersonDescriptor objects.","lastModifiedDate":"2024-02-26"},{"lineNumber":17,"author":{"gitId":"ashleygoh1"},"content":"// */","lastModifiedDate":"2024-02-26"},{"lineNumber":18,"author":{"gitId":"ashleygoh1"},"content":"//public class EditPersonDescriptorBuilder {","lastModifiedDate":"2024-02-26"},{"lineNumber":19,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":20,"author":{"gitId":"ashleygoh1"},"content":"// private EditPersonDescriptor descriptor;","lastModifiedDate":"2024-02-26"},{"lineNumber":21,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":22,"author":{"gitId":"ashleygoh1"},"content":"// public EditPersonDescriptorBuilder() {","lastModifiedDate":"2024-02-26"},{"lineNumber":23,"author":{"gitId":"ashleygoh1"},"content":"// descriptor \u003d new EditPersonDescriptor();","lastModifiedDate":"2024-02-26"},{"lineNumber":24,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":25,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":26,"author":{"gitId":"ashleygoh1"},"content":"// public EditPersonDescriptorBuilder(EditPersonDescriptor descriptor) {","lastModifiedDate":"2024-02-26"},{"lineNumber":27,"author":{"gitId":"ashleygoh1"},"content":"// this.descriptor \u003d new EditPersonDescriptor(descriptor);","lastModifiedDate":"2024-02-26"},{"lineNumber":28,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":29,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":30,"author":{"gitId":"ashleygoh1"},"content":"// /**","lastModifiedDate":"2024-02-26"},{"lineNumber":31,"author":{"gitId":"ashleygoh1"},"content":"// * Returns an {@code EditPersonDescriptor} with fields containing {@code person}\u0027s details","lastModifiedDate":"2024-02-26"},{"lineNumber":32,"author":{"gitId":"ashleygoh1"},"content":"// */","lastModifiedDate":"2024-02-26"},{"lineNumber":33,"author":{"gitId":"ashleygoh1"},"content":"// public EditPersonDescriptorBuilder(Person person) {","lastModifiedDate":"2024-02-26"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":"// descriptor \u003d new EditPersonDescriptor();","lastModifiedDate":"2024-02-26"},{"lineNumber":35,"author":{"gitId":"ashleygoh1"},"content":"// descriptor.setName(person.getCompanyName());","lastModifiedDate":"2024-02-26"},{"lineNumber":36,"author":{"gitId":"ashleygoh1"},"content":"// descriptor.setPhone(person.getPhone());","lastModifiedDate":"2024-02-26"},{"lineNumber":37,"author":{"gitId":"ashleygoh1"},"content":"// descriptor.setEmail(person.getEmail());","lastModifiedDate":"2024-02-26"},{"lineNumber":38,"author":{"gitId":"ashleygoh1"},"content":"// descriptor.setAddress(person.getAddress());","lastModifiedDate":"2024-02-26"},{"lineNumber":39,"author":{"gitId":"ashleygoh1"},"content":"// descriptor.setTags(person.getTags());","lastModifiedDate":"2024-02-26"},{"lineNumber":40,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":41,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":"// /**","lastModifiedDate":"2024-02-26"},{"lineNumber":43,"author":{"gitId":"ashleygoh1"},"content":"// * Sets the {@code Name} of the {@code EditPersonDescriptor} that we are building.","lastModifiedDate":"2024-02-26"},{"lineNumber":44,"author":{"gitId":"ashleygoh1"},"content":"// */","lastModifiedDate":"2024-02-26"},{"lineNumber":45,"author":{"gitId":"ashleygoh1"},"content":"// public EditPersonDescriptorBuilder withName(String name) {","lastModifiedDate":"2024-02-26"},{"lineNumber":46,"author":{"gitId":"ashleygoh1"},"content":"// descriptor.setName(new Name(name));","lastModifiedDate":"2024-02-26"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":"// return this;","lastModifiedDate":"2024-02-26"},{"lineNumber":48,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":49,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":50,"author":{"gitId":"ashleygoh1"},"content":"// /**","lastModifiedDate":"2024-02-26"},{"lineNumber":51,"author":{"gitId":"ashleygoh1"},"content":"// * Sets the {@code Phone} of the {@code EditPersonDescriptor} that we are building.","lastModifiedDate":"2024-02-26"},{"lineNumber":52,"author":{"gitId":"ashleygoh1"},"content":"// */","lastModifiedDate":"2024-02-26"},{"lineNumber":53,"author":{"gitId":"ashleygoh1"},"content":"// public EditPersonDescriptorBuilder withPhone(String phone) {","lastModifiedDate":"2024-02-26"},{"lineNumber":54,"author":{"gitId":"ashleygoh1"},"content":"// descriptor.setPhone(new Phone(phone));","lastModifiedDate":"2024-02-26"},{"lineNumber":55,"author":{"gitId":"ashleygoh1"},"content":"// return this;","lastModifiedDate":"2024-02-26"},{"lineNumber":56,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":57,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":58,"author":{"gitId":"ashleygoh1"},"content":"// /**","lastModifiedDate":"2024-02-26"},{"lineNumber":59,"author":{"gitId":"ashleygoh1"},"content":"// * Sets the {@code Email} of the {@code EditPersonDescriptor} that we are building.","lastModifiedDate":"2024-02-26"},{"lineNumber":60,"author":{"gitId":"ashleygoh1"},"content":"// */","lastModifiedDate":"2024-02-26"},{"lineNumber":61,"author":{"gitId":"ashleygoh1"},"content":"// public EditPersonDescriptorBuilder withEmail(String email) {","lastModifiedDate":"2024-02-26"},{"lineNumber":62,"author":{"gitId":"ashleygoh1"},"content":"// descriptor.setEmail(new Email(email));","lastModifiedDate":"2024-02-26"},{"lineNumber":63,"author":{"gitId":"ashleygoh1"},"content":"// return this;","lastModifiedDate":"2024-02-26"},{"lineNumber":64,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":65,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":66,"author":{"gitId":"ashleygoh1"},"content":"// /**","lastModifiedDate":"2024-02-26"},{"lineNumber":67,"author":{"gitId":"ashleygoh1"},"content":"// * Sets the {@code Address} of the {@code EditPersonDescriptor} that we are building.","lastModifiedDate":"2024-02-26"},{"lineNumber":68,"author":{"gitId":"ashleygoh1"},"content":"// */","lastModifiedDate":"2024-02-26"},{"lineNumber":69,"author":{"gitId":"ashleygoh1"},"content":"// public EditPersonDescriptorBuilder withAddress(String address) {","lastModifiedDate":"2024-02-26"},{"lineNumber":70,"author":{"gitId":"ashleygoh1"},"content":"// descriptor.setAddress(new Address(address));","lastModifiedDate":"2024-02-26"},{"lineNumber":71,"author":{"gitId":"ashleygoh1"},"content":"// return this;","lastModifiedDate":"2024-02-26"},{"lineNumber":72,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":73,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":74,"author":{"gitId":"ashleygoh1"},"content":"// /**","lastModifiedDate":"2024-02-26"},{"lineNumber":75,"author":{"gitId":"ashleygoh1"},"content":"// * Parses the {@code tags} into a {@code Set\u003cTag\u003e} and set it to the {@code EditPersonDescriptor}","lastModifiedDate":"2024-02-26"},{"lineNumber":76,"author":{"gitId":"ashleygoh1"},"content":"// * that we are building.","lastModifiedDate":"2024-02-26"},{"lineNumber":77,"author":{"gitId":"ashleygoh1"},"content":"// */","lastModifiedDate":"2024-02-26"},{"lineNumber":78,"author":{"gitId":"ashleygoh1"},"content":"// public EditPersonDescriptorBuilder withTags(String... tags) {","lastModifiedDate":"2024-02-26"},{"lineNumber":79,"author":{"gitId":"ashleygoh1"},"content":"// Set\u003cTag\u003e tagSet \u003d Stream.of(tags).map(Tag::new).collect(Collectors.toSet());","lastModifiedDate":"2024-02-26"},{"lineNumber":80,"author":{"gitId":"ashleygoh1"},"content":"// descriptor.setTags(tagSet);","lastModifiedDate":"2024-02-26"},{"lineNumber":81,"author":{"gitId":"ashleygoh1"},"content":"// return this;","lastModifiedDate":"2024-02-26"},{"lineNumber":82,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":83,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":84,"author":{"gitId":"ashleygoh1"},"content":"// public EditPersonDescriptor build() {","lastModifiedDate":"2024-02-26"},{"lineNumber":85,"author":{"gitId":"ashleygoh1"},"content":"// return descriptor;","lastModifiedDate":"2024-02-26"},{"lineNumber":86,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":87,"author":{"gitId":"ashleygoh1"},"content":"//}","lastModifiedDate":"2024-02-26"}],"authorContributionMap":{"ashleygoh1":87}},{"path":"src/test/java/seedu/address/testutil/PersonBuilder.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.testutil;","lastModifiedDate":"2016-09-03"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2017-01-18"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2017-01-18"},{"lineNumber":5,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.InternDuration;","lastModifiedDate":"2024-02-26"},{"lineNumber":6,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.InterviewDate;","lastModifiedDate":"2024-02-26"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.JobDescription;","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2017-01-18"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2017-04-05"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2017-01-18"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.Salary;","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-04-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":14,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-09-03"},{"lineNumber":15,"author":{"gitId":"-"},"content":" * A utility class to help with building Person objects.","lastModifiedDate":"2017-04-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-09-03"},{"lineNumber":17,"author":{"gitId":"-"},"content":"public class PersonBuilder {","lastModifiedDate":"2016-09-03"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":19,"author":{"gitId":"-"},"content":" public static final String DEFAULT_NAME \u003d \"Amy Bee\";","lastModifiedDate":"2020-12-18"},{"lineNumber":20,"author":{"gitId":"-"},"content":" public static final String DEFAULT_PHONE \u003d \"85355255\";","lastModifiedDate":"2017-04-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":" public static final String DEFAULT_EMAIL \u003d \"amy@gmail.com\";","lastModifiedDate":"2020-12-18"},{"lineNumber":22,"author":{"gitId":"ashleygoh1"},"content":" public static final String DEFAULT_ADDRESS \u003d \"\";","lastModifiedDate":"2024-02-26"},{"lineNumber":23,"author":{"gitId":"ashleygoh1"},"content":" public static final String DEFAULT_TAG \u003d \"F\";","lastModifiedDate":"2024-02-26"},{"lineNumber":24,"author":{"gitId":"ashleygoh1"},"content":" public static final String DEFAULT_JOB_DESCRIPTION \u003d \"Software Developer Intern\";","lastModifiedDate":"2024-02-26"},{"lineNumber":25,"author":{"gitId":"ashleygoh1"},"content":" public static final String DEFAULT_INTERVIEW_DATE \u003d null;","lastModifiedDate":"2024-02-26"},{"lineNumber":26,"author":{"gitId":"ashleygoh1"},"content":" public static final String DEFAULT_INTERN_DURATION \u003d \"6 months\";","lastModifiedDate":"2024-02-26"},{"lineNumber":27,"author":{"gitId":"ashleygoh1"},"content":" public static final String DEFAULT_SALARY \u003d \"500\";","lastModifiedDate":"2024-02-26"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-05"},{"lineNumber":29,"author":{"gitId":"-"},"content":" private Name name;","lastModifiedDate":"2017-12-20"},{"lineNumber":30,"author":{"gitId":"-"},"content":" private Phone phone;","lastModifiedDate":"2017-12-20"},{"lineNumber":31,"author":{"gitId":"-"},"content":" private Email email;","lastModifiedDate":"2017-12-20"},{"lineNumber":32,"author":{"gitId":"-"},"content":" private Address address;","lastModifiedDate":"2017-12-20"},{"lineNumber":33,"author":{"gitId":"ashleygoh1"},"content":" private Tag tag;","lastModifiedDate":"2024-02-26"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":" private JobDescription jobDescription;","lastModifiedDate":"2024-02-26"},{"lineNumber":35,"author":{"gitId":"ashleygoh1"},"content":" private InterviewDate interviewDate;","lastModifiedDate":"2024-02-26"},{"lineNumber":36,"author":{"gitId":"ashleygoh1"},"content":" private InternDuration internDuration;","lastModifiedDate":"2024-02-26"},{"lineNumber":37,"author":{"gitId":"ashleygoh1"},"content":" private Salary salary;","lastModifiedDate":"2024-02-26"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":39,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2020-05-27"},{"lineNumber":40,"author":{"gitId":"-"},"content":" * Creates a {@code PersonBuilder} with the default details.","lastModifiedDate":"2020-05-27"},{"lineNumber":41,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2020-05-27"},{"lineNumber":42,"author":{"gitId":"-"},"content":" public PersonBuilder() {","lastModifiedDate":"2017-08-15"},{"lineNumber":43,"author":{"gitId":"-"},"content":" name \u003d new Name(DEFAULT_NAME);","lastModifiedDate":"2017-12-20"},{"lineNumber":44,"author":{"gitId":"-"},"content":" phone \u003d new Phone(DEFAULT_PHONE);","lastModifiedDate":"2017-12-20"},{"lineNumber":45,"author":{"gitId":"-"},"content":" email \u003d new Email(DEFAULT_EMAIL);","lastModifiedDate":"2017-12-20"},{"lineNumber":46,"author":{"gitId":"-"},"content":" address \u003d new Address(DEFAULT_ADDRESS);","lastModifiedDate":"2017-12-20"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":" tag \u003d new Tag(DEFAULT_TAG);","lastModifiedDate":"2024-02-26"},{"lineNumber":48,"author":{"gitId":"ashleygoh1"},"content":" jobDescription \u003d new JobDescription(DEFAULT_JOB_DESCRIPTION);","lastModifiedDate":"2024-02-26"},{"lineNumber":49,"author":{"gitId":"ashleygoh1"},"content":" interviewDate \u003d new InterviewDate(DEFAULT_INTERVIEW_DATE);;","lastModifiedDate":"2024-02-26"},{"lineNumber":50,"author":{"gitId":"ashleygoh1"},"content":" internDuration \u003d new InternDuration(DEFAULT_INTERN_DURATION);;","lastModifiedDate":"2024-02-26"},{"lineNumber":51,"author":{"gitId":"ashleygoh1"},"content":" salary \u003d new Salary(DEFAULT_SALARY);;","lastModifiedDate":"2024-02-26"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":54,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-12-11"},{"lineNumber":55,"author":{"gitId":"-"},"content":" * Initializes the PersonBuilder with the data of {@code personToCopy}.","lastModifiedDate":"2016-12-11"},{"lineNumber":56,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-11"},{"lineNumber":57,"author":{"gitId":"-"},"content":" public PersonBuilder(Person personToCopy) {","lastModifiedDate":"2018-01-10"},{"lineNumber":58,"author":{"gitId":"ashleygoh1"},"content":" name \u003d personToCopy.getCompanyName();","lastModifiedDate":"2024-02-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":" phone \u003d personToCopy.getPhone();","lastModifiedDate":"2017-12-20"},{"lineNumber":60,"author":{"gitId":"-"},"content":" email \u003d personToCopy.getEmail();","lastModifiedDate":"2017-12-20"},{"lineNumber":61,"author":{"gitId":"-"},"content":" address \u003d personToCopy.getAddress();","lastModifiedDate":"2017-12-20"},{"lineNumber":62,"author":{"gitId":"ashleygoh1"},"content":" tag \u003d personToCopy.getTag();","lastModifiedDate":"2024-02-26"},{"lineNumber":63,"author":{"gitId":"ashleygoh1"},"content":" jobDescription \u003d personToCopy.getJobDescription();","lastModifiedDate":"2024-02-26"},{"lineNumber":64,"author":{"gitId":"ashleygoh1"},"content":" interviewDate \u003d personToCopy.getInterviewDate();","lastModifiedDate":"2024-02-26"},{"lineNumber":65,"author":{"gitId":"ashleygoh1"},"content":" internDuration \u003d personToCopy.getInternDuration();","lastModifiedDate":"2024-02-26"},{"lineNumber":66,"author":{"gitId":"ashleygoh1"},"content":" salary \u003d personToCopy.getSalary();","lastModifiedDate":"2024-02-26"},{"lineNumber":67,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-11"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-11"},{"lineNumber":69,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":70,"author":{"gitId":"-"},"content":" * Sets the {@code Name} of the {@code Person} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":71,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":72,"author":{"gitId":"-"},"content":" public PersonBuilder withName(String name) {","lastModifiedDate":"2017-08-15"},{"lineNumber":73,"author":{"gitId":"-"},"content":" this.name \u003d new Name(name);","lastModifiedDate":"2017-12-20"},{"lineNumber":74,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2016-09-03"},{"lineNumber":75,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":76,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":77,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":78,"author":{"gitId":"-"},"content":" * Parses the {@code tags} into a {@code Set\u003cTag\u003e} and set it to the {@code Person} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":79,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":80,"author":{"gitId":"ashleygoh1"},"content":" public PersonBuilder withTags(String tag) {","lastModifiedDate":"2024-02-26"},{"lineNumber":81,"author":{"gitId":"ashleygoh1"},"content":" this.tag \u003d new Tag(tag);","lastModifiedDate":"2024-02-26"},{"lineNumber":82,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2016-09-03"},{"lineNumber":83,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":85,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":86,"author":{"gitId":"-"},"content":" * Sets the {@code Address} of the {@code Person} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":87,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":88,"author":{"gitId":"-"},"content":" public PersonBuilder withAddress(String address) {","lastModifiedDate":"2017-08-15"},{"lineNumber":89,"author":{"gitId":"-"},"content":" this.address \u003d new Address(address);","lastModifiedDate":"2017-12-20"},{"lineNumber":90,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2016-09-03"},{"lineNumber":91,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":93,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":94,"author":{"gitId":"-"},"content":" * Sets the {@code Phone} of the {@code Person} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":95,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":96,"author":{"gitId":"-"},"content":" public PersonBuilder withPhone(String phone) {","lastModifiedDate":"2017-08-15"},{"lineNumber":97,"author":{"gitId":"-"},"content":" this.phone \u003d new Phone(phone);","lastModifiedDate":"2017-12-20"},{"lineNumber":98,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2016-09-03"},{"lineNumber":99,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":100,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":101,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":102,"author":{"gitId":"-"},"content":" * Sets the {@code Email} of the {@code Person} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":103,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":104,"author":{"gitId":"-"},"content":" public PersonBuilder withEmail(String email) {","lastModifiedDate":"2017-08-15"},{"lineNumber":105,"author":{"gitId":"-"},"content":" this.email \u003d new Email(email);","lastModifiedDate":"2017-12-20"},{"lineNumber":106,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2016-09-03"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":108,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":109,"author":{"gitId":"ashleygoh1"},"content":" /**","lastModifiedDate":"2024-02-26"},{"lineNumber":110,"author":{"gitId":"ashleygoh1"},"content":" * Sets the {@code jobDescription} of the {@code Person} that we are building.","lastModifiedDate":"2024-02-26"},{"lineNumber":111,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-26"},{"lineNumber":112,"author":{"gitId":"ashleygoh1"},"content":" public PersonBuilder withJobDescription(String jobDescription) {","lastModifiedDate":"2024-02-26"},{"lineNumber":113,"author":{"gitId":"ashleygoh1"},"content":" this.jobDescription \u003d new JobDescription(jobDescription);","lastModifiedDate":"2024-02-26"},{"lineNumber":114,"author":{"gitId":"ashleygoh1"},"content":" return this;","lastModifiedDate":"2024-02-26"},{"lineNumber":115,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":116,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":117,"author":{"gitId":"ashleygoh1"},"content":" /**","lastModifiedDate":"2024-02-26"},{"lineNumber":118,"author":{"gitId":"ashleygoh1"},"content":" * Sets the {@code interviewDate} of the {@code Person} that we are building.","lastModifiedDate":"2024-02-26"},{"lineNumber":119,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-26"},{"lineNumber":120,"author":{"gitId":"ashleygoh1"},"content":" public PersonBuilder withInterviewDate(String interviewDate) {","lastModifiedDate":"2024-02-26"},{"lineNumber":121,"author":{"gitId":"ashleygoh1"},"content":" this.interviewDate \u003d new InterviewDate(interviewDate);","lastModifiedDate":"2024-02-26"},{"lineNumber":122,"author":{"gitId":"ashleygoh1"},"content":" return this;","lastModifiedDate":"2024-02-26"},{"lineNumber":123,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":124,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":125,"author":{"gitId":"ashleygoh1"},"content":" /**","lastModifiedDate":"2024-02-26"},{"lineNumber":126,"author":{"gitId":"ashleygoh1"},"content":" * Sets the {@code internDuration} of the {@code Person} that we are building.","lastModifiedDate":"2024-02-26"},{"lineNumber":127,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-26"},{"lineNumber":128,"author":{"gitId":"ashleygoh1"},"content":" public PersonBuilder withInternDuration(String internDuration) {","lastModifiedDate":"2024-02-26"},{"lineNumber":129,"author":{"gitId":"ashleygoh1"},"content":" this.internDuration \u003d new InternDuration(internDuration);","lastModifiedDate":"2024-02-26"},{"lineNumber":130,"author":{"gitId":"ashleygoh1"},"content":" return this;","lastModifiedDate":"2024-02-26"},{"lineNumber":131,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":132,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":133,"author":{"gitId":"ashleygoh1"},"content":" /**","lastModifiedDate":"2024-02-26"},{"lineNumber":134,"author":{"gitId":"ashleygoh1"},"content":" * Sets the {@code salary} of the {@code Person} that we are building.","lastModifiedDate":"2024-02-26"},{"lineNumber":135,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-26"},{"lineNumber":136,"author":{"gitId":"ashleygoh1"},"content":" public PersonBuilder withSalary(String salary) {","lastModifiedDate":"2024-02-26"},{"lineNumber":137,"author":{"gitId":"ashleygoh1"},"content":" this.salary \u003d new Salary(salary);","lastModifiedDate":"2024-02-26"},{"lineNumber":138,"author":{"gitId":"ashleygoh1"},"content":" return this;","lastModifiedDate":"2024-02-26"},{"lineNumber":139,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":140,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":141,"author":{"gitId":"ashleygoh1"},"content":" /**","lastModifiedDate":"2024-02-26"},{"lineNumber":142,"author":{"gitId":"ashleygoh1"},"content":" * Build the person","lastModifiedDate":"2024-02-26"},{"lineNumber":143,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-26"},{"lineNumber":144,"author":{"gitId":"-"},"content":" public Person build() {","lastModifiedDate":"2017-04-05"},{"lineNumber":145,"author":{"gitId":"ashleygoh1"},"content":" return new Person(name, phone, email, address, tag,","lastModifiedDate":"2024-02-26"},{"lineNumber":146,"author":{"gitId":"ashleygoh1"},"content":" jobDescription, interviewDate, internDuration, salary);","lastModifiedDate":"2024-02-26"},{"lineNumber":147,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":148,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":149,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-09-03"}],"authorContributionMap":{"ashleygoh1":65,"-":84}},{"path":"src/test/java/seedu/address/testutil/PersonUtil.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.testutil;","lastModifiedDate":"2017-04-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2017-05-09"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2017-05-09"},{"lineNumber":5,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INTERN_DURATION;","lastModifiedDate":"2024-02-26"},{"lineNumber":6,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INTERVIEW_DATE;","lastModifiedDate":"2024-02-26"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_JOB_DESCRIPTION;","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2017-06-06"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2017-05-09"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_SALARY;","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2017-05-09"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-09"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.AddCommand;","lastModifiedDate":"2017-03-29"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-01-10"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-04-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * A utility class for Person.","lastModifiedDate":"2017-04-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-04-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"public class PersonUtil {","lastModifiedDate":"2017-04-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-04-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * Returns an add command string for adding the {@code person}.","lastModifiedDate":"2017-04-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-04-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":" public static String getAddCommand(Person person) {","lastModifiedDate":"2018-01-10"},{"lineNumber":25,"author":{"gitId":"-"},"content":" return AddCommand.COMMAND_WORD + \" \" + getPersonDetails(person);","lastModifiedDate":"2017-03-29"},{"lineNumber":26,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-04-06"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-06"},{"lineNumber":28,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-04-06"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * Returns the part of command string for the given {@code person}\u0027s details.","lastModifiedDate":"2017-04-06"},{"lineNumber":30,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-04-06"},{"lineNumber":31,"author":{"gitId":"-"},"content":" public static String getPersonDetails(Person person) {","lastModifiedDate":"2018-01-10"},{"lineNumber":32,"author":{"gitId":"-"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2017-04-05"},{"lineNumber":33,"author":{"gitId":"ashleygoh1"},"content":" sb.append(PREFIX_NAME + person.getCompanyName().fullName + \" \");","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" sb.append(PREFIX_PHONE + person.getPhone().value + \" \");","lastModifiedDate":"2017-05-09"},{"lineNumber":35,"author":{"gitId":"-"},"content":" sb.append(PREFIX_EMAIL + person.getEmail().value + \" \");","lastModifiedDate":"2017-05-09"},{"lineNumber":36,"author":{"gitId":"-"},"content":" sb.append(PREFIX_ADDRESS + person.getAddress().value + \" \");","lastModifiedDate":"2017-05-09"},{"lineNumber":37,"author":{"gitId":"ashleygoh1"},"content":" sb.append(PREFIX_TAG + person.getTag().tagName + \" \");","lastModifiedDate":"2024-02-26"},{"lineNumber":38,"author":{"gitId":"ashleygoh1"},"content":" sb.append(PREFIX_JOB_DESCRIPTION + person.getJobDescription().value + \" \");","lastModifiedDate":"2024-02-26"},{"lineNumber":39,"author":{"gitId":"ashleygoh1"},"content":" sb.append(PREFIX_INTERVIEW_DATE + person.getInterviewDate().toString() + \" \");","lastModifiedDate":"2024-02-26"},{"lineNumber":40,"author":{"gitId":"ashleygoh1"},"content":" sb.append(PREFIX_INTERN_DURATION + person.getInternDuration().value + \" \");","lastModifiedDate":"2024-02-26"},{"lineNumber":41,"author":{"gitId":"ashleygoh1"},"content":" sb.append(PREFIX_SALARY + person.getSalary().value);","lastModifiedDate":"2024-02-26"},{"lineNumber":42,"author":{"gitId":"-"},"content":" return sb.toString();","lastModifiedDate":"2018-03-26"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-03-26"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-04-05"}],"authorContributionMap":{"ashleygoh1":10,"-":34}},{"path":"src/test/java/seedu/address/testutil/TypicalPersons.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.testutil;","lastModifiedDate":"2016-09-13"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-13"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_AMY;","lastModifiedDate":"2017-08-22"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB;","lastModifiedDate":"2017-08-22"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_AMY;","lastModifiedDate":"2017-08-22"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_BOB;","lastModifiedDate":"2017-08-22"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_INTERN_DURATION_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_INTERN_DURATION_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":9,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_INTERVIEW_DATE_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_INTERVIEW_DATE_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_JOB_DESCRIPTION_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_JOB_DESCRIPTION_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_AMY;","lastModifiedDate":"2017-08-22"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB;","lastModifiedDate":"2017-08-22"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_AMY;","lastModifiedDate":"2017-08-22"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB;","lastModifiedDate":"2017-08-22"},{"lineNumber":17,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_SALARY_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":18,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_SALARY_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":19,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_FIRST_INTERVIEW;","lastModifiedDate":"2024-02-26"},{"lineNumber":20,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_NO_REPLY;","lastModifiedDate":"2024-02-26"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-08-22"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import java.util.ArrayList;","lastModifiedDate":"2017-08-07"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import java.util.Arrays;","lastModifiedDate":"2017-08-07"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2017-08-07"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-08-07"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import seedu.address.model.AddressBook;","lastModifiedDate":"2016-09-21"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-01-10"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-13"},{"lineNumber":29,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-09-13"},{"lineNumber":30,"author":{"gitId":"-"},"content":" * A utility class containing a list of {@code Person} objects to be used in tests.","lastModifiedDate":"2017-08-05"},{"lineNumber":31,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-09-13"},{"lineNumber":32,"author":{"gitId":"-"},"content":"public class TypicalPersons {","lastModifiedDate":"2017-04-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-13"},{"lineNumber":34,"author":{"gitId":"-"},"content":" public static final Person ALICE \u003d new PersonBuilder().withName(\"Alice Pauline\")","lastModifiedDate":"2018-01-10"},{"lineNumber":35,"author":{"gitId":"-"},"content":" .withPhone(\"94351253\")","lastModifiedDate":"2018-04-19"},{"lineNumber":36,"author":{"gitId":"ashleygoh1"},"content":" .withEmail(\"alice@example.com\")","lastModifiedDate":"2024-02-26"},{"lineNumber":37,"author":{"gitId":"ashleygoh1"},"content":" .withAddress(\"123, Jurong West Ave 6, #08-111\")","lastModifiedDate":"2024-02-26"},{"lineNumber":38,"author":{"gitId":"ashleygoh1"},"content":" .withTags(\"NR\")","lastModifiedDate":"2024-02-26"},{"lineNumber":39,"author":{"gitId":"ashleygoh1"},"content":" .withJobDescription(\"Software engineer developer\")","lastModifiedDate":"2024-02-26"},{"lineNumber":40,"author":{"gitId":"ashleygoh1"},"content":" .withInterviewDate(\"03-01-2024 1000\")","lastModifiedDate":"2024-02-26"},{"lineNumber":41,"author":{"gitId":"ashleygoh1"},"content":" .withInternDuration(\"3 months\")","lastModifiedDate":"2024-02-26"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":" .withSalary(\"1000\").build();","lastModifiedDate":"2024-02-26"},{"lineNumber":43,"author":{"gitId":"-"},"content":" public static final Person BENSON \u003d new PersonBuilder().withName(\"Benson Meier\")","lastModifiedDate":"2018-01-10"},{"lineNumber":44,"author":{"gitId":"-"},"content":" .withAddress(\"311, Clementi Ave 2, #02-25\")","lastModifiedDate":"2017-09-21"},{"lineNumber":45,"author":{"gitId":"-"},"content":" .withEmail(\"johnd@example.com\").withPhone(\"98765432\")","lastModifiedDate":"2017-04-05"},{"lineNumber":46,"author":{"gitId":"ashleygoh1"},"content":" .withTags(\"F\")","lastModifiedDate":"2024-02-26"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":" .withJobDescription(\"Software engineer developer intern\")","lastModifiedDate":"2024-02-26"},{"lineNumber":48,"author":{"gitId":"Jawad280"},"content":" .withInterviewDate(\"03-02-2024 1000\")","lastModifiedDate":"2024-02-29"},{"lineNumber":49,"author":{"gitId":"ashleygoh1"},"content":" .withInternDuration(\"3 months\")","lastModifiedDate":"2024-02-26"},{"lineNumber":50,"author":{"gitId":"ashleygoh1"},"content":" .withSalary(\"1000\").build();","lastModifiedDate":"2024-02-26"},{"lineNumber":51,"author":{"gitId":"-"},"content":" public static final Person CARL \u003d new PersonBuilder().withName(\"Carl Kurz\").withPhone(\"95352563\")","lastModifiedDate":"2018-01-10"},{"lineNumber":52,"author":{"gitId":"ashleygoh1"},"content":" .withEmail(\"heinz@example.com\").withAddress(\"wall street\")","lastModifiedDate":"2024-02-26"},{"lineNumber":53,"author":{"gitId":"ashleygoh1"},"content":" .withTags(\"NR\")","lastModifiedDate":"2024-02-26"},{"lineNumber":54,"author":{"gitId":"ashleygoh1"},"content":" .withJobDescription(\"Software engineer developer intern\")","lastModifiedDate":"2024-02-26"},{"lineNumber":55,"author":{"gitId":"Jawad280"},"content":" .withInterviewDate(\"03-03-2024 1000\")","lastModifiedDate":"2024-02-29"},{"lineNumber":56,"author":{"gitId":"ashleygoh1"},"content":" .withInternDuration(\"3 months\")","lastModifiedDate":"2024-02-26"},{"lineNumber":57,"author":{"gitId":"ashleygoh1"},"content":" .withSalary(\"1000\").build();","lastModifiedDate":"2024-02-26"},{"lineNumber":58,"author":{"gitId":"-"},"content":" public static final Person DANIEL \u003d new PersonBuilder().withName(\"Daniel Meier\").withPhone(\"87652533\")","lastModifiedDate":"2018-01-10"},{"lineNumber":59,"author":{"gitId":"ashleygoh1"},"content":" .withEmail(\"cornelia@example.com\").withAddress(\"10th street\")","lastModifiedDate":"2024-02-26"},{"lineNumber":60,"author":{"gitId":"ashleygoh1"},"content":" .withTags(\"NR\")","lastModifiedDate":"2024-02-26"},{"lineNumber":61,"author":{"gitId":"ashleygoh1"},"content":" .withJobDescription(\"Front End intern\")","lastModifiedDate":"2024-02-26"},{"lineNumber":62,"author":{"gitId":"Jawad280"},"content":" .withInterviewDate(\"03-04-2024 1000\")","lastModifiedDate":"2024-02-29"},{"lineNumber":63,"author":{"gitId":"ashleygoh1"},"content":" .withInternDuration(\"3 months\")","lastModifiedDate":"2024-02-26"},{"lineNumber":64,"author":{"gitId":"ashleygoh1"},"content":" .withSalary(\"1200\").build();","lastModifiedDate":"2024-02-26"},{"lineNumber":65,"author":{"gitId":"-"},"content":" public static final Person ELLE \u003d new PersonBuilder().withName(\"Elle Meyer\").withPhone(\"9482224\")","lastModifiedDate":"2018-01-10"},{"lineNumber":66,"author":{"gitId":"ashleygoh1"},"content":" .withEmail(\"werner@example.com\")","lastModifiedDate":"2024-02-26"},{"lineNumber":67,"author":{"gitId":"ashleygoh1"},"content":" .withTags(\"NR\")","lastModifiedDate":"2024-02-26"},{"lineNumber":68,"author":{"gitId":"ashleygoh1"},"content":" .withJobDescription(\"Software engineer developer intern\")","lastModifiedDate":"2024-02-26"},{"lineNumber":69,"author":{"gitId":"Jawad280"},"content":" .withInterviewDate(\"03-05-2024 1000\")","lastModifiedDate":"2024-02-29"},{"lineNumber":70,"author":{"gitId":"ashleygoh1"},"content":" .withInternDuration(\"3 months\")","lastModifiedDate":"2024-02-26"},{"lineNumber":71,"author":{"gitId":"ashleygoh1"},"content":" .withSalary(\"1000\").build();","lastModifiedDate":"2024-02-26"},{"lineNumber":72,"author":{"gitId":"-"},"content":" public static final Person FIONA \u003d new PersonBuilder().withName(\"Fiona Kunz\").withPhone(\"9482427\")","lastModifiedDate":"2018-01-10"},{"lineNumber":73,"author":{"gitId":"ashleygoh1"},"content":" .withEmail(\"lydia@example.com\")","lastModifiedDate":"2024-02-26"},{"lineNumber":74,"author":{"gitId":"ashleygoh1"},"content":" .withTags(\"NR\")","lastModifiedDate":"2024-02-26"},{"lineNumber":75,"author":{"gitId":"ashleygoh1"},"content":" .withJobDescription(\"Data science intern\")","lastModifiedDate":"2024-02-26"},{"lineNumber":76,"author":{"gitId":"Jawad280"},"content":" .withInterviewDate(\"03-06-2024 1000\")","lastModifiedDate":"2024-02-29"},{"lineNumber":77,"author":{"gitId":"ashleygoh1"},"content":" .withInternDuration(\"3 months\")","lastModifiedDate":"2024-02-26"},{"lineNumber":78,"author":{"gitId":"ashleygoh1"},"content":" .withSalary(\"1000\").build();","lastModifiedDate":"2024-02-26"},{"lineNumber":79,"author":{"gitId":"-"},"content":" public static final Person GEORGE \u003d new PersonBuilder().withName(\"George Best\").withPhone(\"9482442\")","lastModifiedDate":"2018-01-10"},{"lineNumber":80,"author":{"gitId":"ashleygoh1"},"content":" .withEmail(\"anna@example.com\").withAddress(\"4th street\")","lastModifiedDate":"2024-02-26"},{"lineNumber":81,"author":{"gitId":"ashleygoh1"},"content":" .withTags(\"F\")","lastModifiedDate":"2024-02-26"},{"lineNumber":82,"author":{"gitId":"ashleygoh1"},"content":" .withJobDescription(\"Software engineer developer intern\")","lastModifiedDate":"2024-02-26"},{"lineNumber":83,"author":{"gitId":"Jawad280"},"content":" .withInterviewDate(\"03-07-2024 1000\")","lastModifiedDate":"2024-02-29"},{"lineNumber":84,"author":{"gitId":"ashleygoh1"},"content":" .withInternDuration(\"3 months\")","lastModifiedDate":"2024-02-26"},{"lineNumber":85,"author":{"gitId":"ashleygoh1"},"content":" .withSalary(\"1000\").build();","lastModifiedDate":"2024-02-26"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-13"},{"lineNumber":87,"author":{"gitId":"-"},"content":" // Manually added","lastModifiedDate":"2016-09-13"},{"lineNumber":88,"author":{"gitId":"-"},"content":" public static final Person HOON \u003d new PersonBuilder().withName(\"Hoon Meier\").withPhone(\"8482424\")","lastModifiedDate":"2018-01-10"},{"lineNumber":89,"author":{"gitId":"ashleygoh1"},"content":" .withEmail(\"stefan@example.com\").withAddress(\"little india\")","lastModifiedDate":"2024-02-26"},{"lineNumber":90,"author":{"gitId":"ashleygoh1"},"content":" .withTags(\"F\")","lastModifiedDate":"2024-02-26"},{"lineNumber":91,"author":{"gitId":"ashleygoh1"},"content":" .withJobDescription(\"Software engineer developer intern\")","lastModifiedDate":"2024-02-26"},{"lineNumber":92,"author":{"gitId":"Jawad280"},"content":" .withInterviewDate(\"03-08-2024 1700\")","lastModifiedDate":"2024-02-29"},{"lineNumber":93,"author":{"gitId":"ashleygoh1"},"content":" .withInternDuration(\"3 months\")","lastModifiedDate":"2024-02-26"},{"lineNumber":94,"author":{"gitId":"ashleygoh1"},"content":" .withSalary(\"1000\").build();","lastModifiedDate":"2024-02-26"},{"lineNumber":95,"author":{"gitId":"-"},"content":" public static final Person IDA \u003d new PersonBuilder().withName(\"Ida Mueller\").withPhone(\"8482131\")","lastModifiedDate":"2018-01-10"},{"lineNumber":96,"author":{"gitId":"ashleygoh1"},"content":" .withEmail(\"hans@example.com\")","lastModifiedDate":"2024-02-26"},{"lineNumber":97,"author":{"gitId":"ashleygoh1"},"content":" .withTags(\"NR\")","lastModifiedDate":"2024-02-26"},{"lineNumber":98,"author":{"gitId":"ashleygoh1"},"content":" .withJobDescription(\"Full Stack intern\")","lastModifiedDate":"2024-02-26"},{"lineNumber":99,"author":{"gitId":"Jawad280"},"content":" .withInterviewDate(\"03-09-2024 1000\")","lastModifiedDate":"2024-02-29"},{"lineNumber":100,"author":{"gitId":"ashleygoh1"},"content":" .withInternDuration(\"3 months\")","lastModifiedDate":"2024-02-26"},{"lineNumber":101,"author":{"gitId":"ashleygoh1"},"content":" .withSalary(\"1000\").build();","lastModifiedDate":"2024-02-26"},{"lineNumber":102,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-08-22"},{"lineNumber":103,"author":{"gitId":"-"},"content":" // Manually added - Person\u0027s details found in {@code CommandTestUtil}","lastModifiedDate":"2017-08-22"},{"lineNumber":104,"author":{"gitId":"-"},"content":" public static final Person AMY \u003d new PersonBuilder().withName(VALID_NAME_AMY).withPhone(VALID_PHONE_AMY)","lastModifiedDate":"2018-01-10"},{"lineNumber":105,"author":{"gitId":"ashleygoh1"},"content":" .withEmail(VALID_EMAIL_AMY).withAddress(VALID_ADDRESS_AMY).withTags(VALID_TAG_NO_REPLY)","lastModifiedDate":"2024-02-26"},{"lineNumber":106,"author":{"gitId":"ashleygoh1"},"content":" .withJobDescription(VALID_JOB_DESCRIPTION_AMY).withInterviewDate(VALID_INTERVIEW_DATE_AMY)","lastModifiedDate":"2024-02-26"},{"lineNumber":107,"author":{"gitId":"ashleygoh1"},"content":" .withInternDuration(VALID_INTERN_DURATION_AMY).withSalary(VALID_SALARY_AMY).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":108,"author":{"gitId":"-"},"content":" public static final Person BOB \u003d new PersonBuilder().withName(VALID_NAME_BOB).withPhone(VALID_PHONE_BOB)","lastModifiedDate":"2018-01-10"},{"lineNumber":109,"author":{"gitId":"ashleygoh1"},"content":" .withEmail(VALID_EMAIL_BOB).withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_FIRST_INTERVIEW)","lastModifiedDate":"2024-02-26"},{"lineNumber":110,"author":{"gitId":"ashleygoh1"},"content":" .withJobDescription(VALID_JOB_DESCRIPTION_BOB).withInterviewDate(VALID_INTERVIEW_DATE_BOB)","lastModifiedDate":"2024-02-26"},{"lineNumber":111,"author":{"gitId":"ashleygoh1"},"content":" .withInternDuration(VALID_INTERN_DURATION_BOB).withSalary(VALID_SALARY_BOB).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":112,"author":{"gitId":"-"},"content":" public static final String KEYWORD_MATCHING_MEIER \u003d \"Meier\"; // A keyword that matches MEIER","lastModifiedDate":"2017-09-21"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-13"},{"lineNumber":114,"author":{"gitId":"-"},"content":" private TypicalPersons() {} // prevents instantiation","lastModifiedDate":"2017-07-20"},{"lineNumber":115,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-20"},{"lineNumber":116,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":117,"author":{"gitId":"-"},"content":" * Returns an {@code AddressBook} with all the typical persons.","lastModifiedDate":"2017-08-05"},{"lineNumber":118,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":119,"author":{"gitId":"-"},"content":" public static AddressBook getTypicalAddressBook() {","lastModifiedDate":"2017-08-05"},{"lineNumber":120,"author":{"gitId":"-"},"content":" AddressBook ab \u003d new AddressBook();","lastModifiedDate":"2017-08-05"},{"lineNumber":121,"author":{"gitId":"-"},"content":" for (Person person : getTypicalPersons()) {","lastModifiedDate":"2018-01-10"},{"lineNumber":122,"author":{"gitId":"-"},"content":" ab.addPerson(person);","lastModifiedDate":"2017-08-05"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-13"},{"lineNumber":124,"author":{"gitId":"-"},"content":" return ab;","lastModifiedDate":"2016-09-24"},{"lineNumber":125,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-24"},{"lineNumber":126,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-08-04"},{"lineNumber":127,"author":{"gitId":"-"},"content":" public static List\u003cPerson\u003e getTypicalPersons() {","lastModifiedDate":"2018-01-10"},{"lineNumber":128,"author":{"gitId":"-"},"content":" return new ArrayList\u003c\u003e(Arrays.asList(ALICE, BENSON, CARL, DANIEL, ELLE, FIONA, GEORGE));","lastModifiedDate":"2017-08-07"},{"lineNumber":129,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-08-04"},{"lineNumber":130,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-09-13"}],"authorContributionMap":{"Jawad280":8,"ashleygoh1":62,"-":60}}] +[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"eunrcn"},"content":"# InternHub","lastModifiedDate":"2024-02-25"},{"lineNumber":2,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":3,"author":{"gitId":"ashleygoh1"},"content":"[![CI Status](https://github.com/AY2324S2-CS2103T-F14-1/tp/actions/workflows/gradle.yml/badge.svg)](https://github.com/AY2324S2-CS2103T-F14-1/tp/actions/workflows/gradle.yml)","lastModifiedDate":"2024-03-02"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"![Ui](docs/images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":7,"author":{"gitId":"eunrcn"},"content":"## Overview","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"eunrcn"},"content":"InternHub is a comprehensive project designed to assist Computer Science (CS) students in managing their internship applications. This project serves various purposes:","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"eunrcn"},"content":"- It can be utilized as a starting point for a course project, offering students a foundation rather than building everything from scratch.","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"eunrcn"},"content":"- It serves as a case study for understanding the development of a desktop application in an Object-Oriented Programming (OOP) fashion.","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"eunrcn"},"content":"- The project provides a well-written code base, surpassing the typical size of beginner-level SE modules (around 6 KLoC) without becoming overwhelming.","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"eunrcn"},"content":"- Extensive user and developer documentation is included to facilitate understanding and usage.","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"eunrcn"},"content":"## Project Details","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":18,"author":{"gitId":"eunrcn"},"content":"- **Name:** InternHub","lastModifiedDate":"2024-02-25"},{"lineNumber":19,"author":{"gitId":"eunrcn"},"content":"- **Type:** Desktop Application","lastModifiedDate":"2024-02-25"},{"lineNumber":20,"author":{"gitId":"eunrcn"},"content":"- **Initiative:** Part of the se-education.org initiative","lastModifiedDate":"2024-02-25"},{"lineNumber":21,"author":{"gitId":"eunrcn"},"content":"- **Documentation:** [InternHub Product Website](https://ay2324s2-cs2103t-f14-1.github.io/tp/index.html)","lastModifiedDate":"2024-02-28"},{"lineNumber":22,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":23,"author":{"gitId":"eunrcn"},"content":"## Features","lastModifiedDate":"2024-02-25"},{"lineNumber":24,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":25,"author":{"gitId":"eunrcn"},"content":"InternHub is specifically tailored for CS students, offering the following features:","lastModifiedDate":"2024-02-25"},{"lineNumber":26,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"eunrcn"},"content":"- Organization and optimization of internship application details.","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"eunrcn"},"content":"- Seamless management of contacts, interview dates, internship duration, salary and job description.","lastModifiedDate":"2024-02-28"},{"lineNumber":29,"author":{"gitId":"eunrcn"},"content":"- Editable fields to meet sudden changes in attributes.","lastModifiedDate":"2024-02-28"},{"lineNumber":30,"author":{"gitId":"eunrcn"},"content":"- Tagging system to categorize and track the stages of each interview process.","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"eunrcn"},"content":"- Filtering and sorting capabilities for efficient access to relevant information.","lastModifiedDate":"2024-02-25"},{"lineNumber":32,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"eunrcn"},"content":"## Getting Started","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":35,"author":{"gitId":"eunrcn"},"content":"For detailed information on using InternHub, refer to our [User Guide](https://ay2324s2-cs2103t-f14-1.github.io/tp/UserGuide.html).","lastModifiedDate":"2024-02-28"},{"lineNumber":36,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"eunrcn"},"content":"## Contributing","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":39,"author":{"gitId":"ashleygoh1"},"content":"This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-03-02"}],"authorContributionMap":{"eunrcn":34,"ashleygoh1":2,"-":3}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"About Us\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"# About Us","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"-"},"content":"We are a team based in the [School of Computing, National University of Singapore](http://www.comp.nus.edu.sg).","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":10,"author":{"gitId":"-"},"content":"You can reach us at the email `seer[at]comp.nus.edu.sg`","lastModifiedDate":"2020-06-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-06-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":"## Project team","lastModifiedDate":"2020-06-07"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":14,"author":{"gitId":"ashleygoh1"},"content":"### Ashley Goh","lastModifiedDate":"2024-02-27"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"ashleygoh1"},"content":"\u003cimg src\u003d\"images/ashleygoh1.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-27"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"ashleygoh1"},"content":"[[github](http://github.com/ashleygoh1)]","lastModifiedDate":"2024-02-27"},{"lineNumber":19,"author":{"gitId":"ashleygoh1"},"content":"[[portfolio](team/ashley.md)]","lastModifiedDate":"2024-02-27"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"ashleygoh1"},"content":"* Role: Developer","lastModifiedDate":"2024-02-27"},{"lineNumber":22,"author":{"gitId":"ashleygoh1"},"content":"* Responsibilities: Model","lastModifiedDate":"2024-02-27"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"ashleygoh1"},"content":"### Chai Ming How","lastModifiedDate":"2024-02-27"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"ashleygoh1"},"content":"\u003cimg src\u003d\"images/minghowc.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-02"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"ashleygoh1"},"content":"[[github](http://github.com/minghowC)]","lastModifiedDate":"2024-02-27"},{"lineNumber":29,"author":{"gitId":"ashleygoh1"},"content":"[[portfolio](team/minghow.md)]","lastModifiedDate":"2024-02-27"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"ashleygoh1"},"content":"* Role: Developer","lastModifiedDate":"2024-02-27"},{"lineNumber":32,"author":{"gitId":"minghowC"},"content":"* Responsibilities: Features Testing","lastModifiedDate":"2024-03-08"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":"### Chen Yixin","lastModifiedDate":"2024-02-27"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"Jawad280"},"content":"\u003cimg src\u003d\"images/chenyixin0.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-03"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"ashleygoh1"},"content":"[[github](http://github.com/chenyixin0)]","lastModifiedDate":"2024-02-27"},{"lineNumber":39,"author":{"gitId":"ashleygoh1"},"content":"[[portfolio](team/yixin.md)]","lastModifiedDate":"2024-02-27"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":41,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":"* Responsibilities: Dev Ops + Threading","lastModifiedDate":"2024-02-27"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"ashleygoh1"},"content":"### Eunice Koh","lastModifiedDate":"2024-02-27"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"eunrcn"},"content":"\u003cimg src\u003d\"images/eunrcn.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-01"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"ashleygoh1"},"content":"[[github](http://github.com/eunrcn)]","lastModifiedDate":"2024-02-27"},{"lineNumber":49,"author":{"gitId":"ashleygoh1"},"content":"[[portfolio](team/eunice.md)]","lastModifiedDate":"2024-02-27"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"eunrcn"},"content":"* Responsibilities: Model","lastModifiedDate":"2024-02-28"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"Jawad280"},"content":"### Jawad Afthab","lastModifiedDate":"2024-02-27"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":56,"author":{"gitId":"Jawad280"},"content":"\u003cimg src\u003d\"images/jawad280.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-27"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":58,"author":{"gitId":"ashleygoh1"},"content":"[[github](http://github.com/Jawad280)]","lastModifiedDate":"2024-02-27"},{"lineNumber":59,"author":{"gitId":"ashleygoh1"},"content":"[[portfolio](team/jawad.md)]","lastModifiedDate":"2024-02-27"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":61,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":62,"author":{"gitId":"-"},"content":"* Responsibilities: UI","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"eunrcn":2,"minghowC":1,"Jawad280":3,"ashleygoh1":20,"-":36}},{"path":"docs/DeveloperGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":"layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":"title: \"Developer Guide\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"pageNav: 3","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":"# InternHub Developer Guide","lastModifiedDate":"2024-03-02"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c!-- * Table of Contents --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003cpage-nav-print /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":14,"author":{"gitId":"-"},"content":"## **Acknowledgements**","lastModifiedDate":"2021-07-30"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":16,"author":{"gitId":"-"},"content":"_{ list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the original source as well }_","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":18,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2021-07-30"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"-"},"content":"## **Setting up, getting started**","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"Refer to the guide [_Setting up and getting started_](SettingUp.md).","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"-"},"content":"## **Design**","lastModifiedDate":"2020-05-23"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":"### Architecture","lastModifiedDate":"2021-07-31"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ArchitectureDiagram.puml\" width\u003d\"280\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"-"},"content":"The ***Architecture Diagram*** given above explains the high-level design of the App.","lastModifiedDate":"2021-07-31"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"-"},"content":"Given below is a quick overview of main components and how they interact with each other.","lastModifiedDate":"2021-07-31"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":36,"author":{"gitId":"-"},"content":"**Main components of the architecture**","lastModifiedDate":"2021-07-31"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":"**`Main`** (consisting of classes [`Main`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/Main.java) and [`MainApp`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/MainApp.java)) is in charge of the app launch and shut down.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"-"},"content":"* At app launch, it initializes the other components in the correct sequence, and connects them up with each other.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"-"},"content":"* At shut down, it shuts down the other components and invokes cleanup methods where necessary.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":"The bulk of the app\u0027s work is done by the following four components:","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"-"},"content":"* [**`UI`**](#ui-component): The UI of the App.","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":"* [**`Logic`**](#logic-component): The command executor.","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":"* [**`Model`**](#model-component): Holds the data of the App in memory.","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* [**`Storage`**](#storage-component): Reads data from, and writes data to, the hard disk.","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"-"},"content":"[**`Commons`**](#common-classes) represents a collection of classes used by multiple other components.","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"-"},"content":"**How the architecture components interact with each other**","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":"The *Sequence Diagram* below shows how the components interact with each other for the scenario where the user issues the command `delete 1`.","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ArchitectureSequenceDiagram.puml\" width\u003d\"574\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":57,"author":{"gitId":"-"},"content":"Each of the four main components (also shown in the diagram above),","lastModifiedDate":"2021-07-31"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":59,"author":{"gitId":"-"},"content":"* defines its *API* in an `interface` with the same name as the Component.","lastModifiedDate":"2021-07-31"},{"lineNumber":60,"author":{"gitId":"-"},"content":"* implements its functionality using a concrete `{Component Name}Manager` class (which follows the corresponding API `interface` mentioned in the previous point.","lastModifiedDate":"2021-07-31"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":62,"author":{"gitId":"-"},"content":"For example, the `Logic` component defines its API in the `Logic.java` interface and implements its functionality using the `LogicManager.java` class which follows the `Logic` interface. Other components interact with a given component through its interface rather than the concrete class (reason: to prevent outside component\u0027s being coupled to the implementation of a component), as illustrated in the (partial) class diagram below.","lastModifiedDate":"2021-07-31"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":64,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ComponentManagers.puml\" width\u003d\"300\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":66,"author":{"gitId":"-"},"content":"The sections below give more details of each component.","lastModifiedDate":"2020-05-23"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":68,"author":{"gitId":"-"},"content":"### UI component","lastModifiedDate":"2020-05-23"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":70,"author":{"gitId":"-"},"content":"The **API** of this component is specified in [`Ui.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/Ui.java)","lastModifiedDate":"2021-07-31"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":72,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UiClassDiagram.puml\" alt\u003d\"Structure of the UI Component\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":74,"author":{"gitId":"-"},"content":"The UI consists of a `MainWindow` that is made up of parts e.g.`CommandBox`, `ResultDisplay`, `PersonListPanel`, `StatusBarFooter` etc. All these, including the `MainWindow`, inherit from the abstract `UiPart` class which captures the commonalities between classes that represent parts of the visible GUI.","lastModifiedDate":"2021-07-31"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":76,"author":{"gitId":"-"},"content":"The `UI` component uses the JavaFx UI framework. The layout of these UI parts are defined in matching `.fxml` files that are in the `src/main/resources/view` folder. For example, the layout of the [`MainWindow`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/MainWindow.java) is specified in [`MainWindow.fxml`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/resources/view/MainWindow.fxml)","lastModifiedDate":"2021-07-31"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":78,"author":{"gitId":"-"},"content":"The `UI` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":80,"author":{"gitId":"-"},"content":"* executes user commands using the `Logic` component.","lastModifiedDate":"2021-07-31"},{"lineNumber":81,"author":{"gitId":"-"},"content":"* listens for changes to `Model` data so that the UI can be updated with the modified data.","lastModifiedDate":"2021-07-31"},{"lineNumber":82,"author":{"gitId":"-"},"content":"* keeps a reference to the `Logic` component, because the `UI` relies on the `Logic` to execute commands.","lastModifiedDate":"2021-07-31"},{"lineNumber":83,"author":{"gitId":"-"},"content":"* depends on some classes in the `Model` component, as it displays `Person` object residing in the `Model`.","lastModifiedDate":"2021-07-31"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":85,"author":{"gitId":"-"},"content":"### Logic component","lastModifiedDate":"2020-05-23"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":87,"author":{"gitId":"-"},"content":"**API** : [`Logic.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/logic/Logic.java)","lastModifiedDate":"2021-07-31"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":89,"author":{"gitId":"-"},"content":"Here\u0027s a (partial) class diagram of the `Logic` component:","lastModifiedDate":"2021-07-31"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":91,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/LogicClassDiagram.puml\" width\u003d\"550\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":93,"author":{"gitId":"-"},"content":"The sequence diagram below illustrates the interactions within the `Logic` component, taking `execute(\"delete 1\")` API call as an example.","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":95,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/DeleteSequenceDiagram.puml\" alt\u003d\"Interactions Inside the Logic Component for the `delete 1` Command\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":97,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":98,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":99,"author":{"gitId":"-"},"content":"**Note:** The lifeline for `DeleteCommandParser` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline continues till the end of diagram.","lastModifiedDate":"2023-09-12"},{"lineNumber":100,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":101,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":102,"author":{"gitId":"-"},"content":"How the `Logic` component works:","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"-"},"content":"1. When `Logic` is called upon to execute a command, it is passed to an `AddressBookParser` object which in turn creates a parser that matches the command (e.g., `DeleteCommandParser`) and uses it to parse the command.","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"-"},"content":"1. This results in a `Command` object (more precisely, an object of one of its subclasses e.g., `DeleteCommand`) which is executed by the `LogicManager`.","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"-"},"content":"1. The command can communicate with the `Model` when it is executed (e.g. to delete a person).\u003cbr\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":107,"author":{"gitId":"-"},"content":" Note that although this is shown as a single step in the diagram above (for simplicity), in the code it can take several interactions (between the command object and the `Model`) to achieve.","lastModifiedDate":"2024-02-09"},{"lineNumber":108,"author":{"gitId":"-"},"content":"1. The result of the command execution is encapsulated as a `CommandResult` object which is returned back from `Logic`.","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"-"},"content":"Here are the other classes in `Logic` (omitted from the class diagram above) that are used for parsing a user command:","lastModifiedDate":"2021-07-31"},{"lineNumber":111,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":112,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ParserClasses.puml\" width\u003d\"600\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":114,"author":{"gitId":"-"},"content":"How the parsing works:","lastModifiedDate":"2021-07-31"},{"lineNumber":115,"author":{"gitId":"-"},"content":"* When called upon to parse a user command, the `AddressBookParser` class creates an `XYZCommandParser` (`XYZ` is a placeholder for the specific command name e.g., `AddCommandParser`) which uses the other classes shown above to parse the user command and create a `XYZCommand` object (e.g., `AddCommand`) which the `AddressBookParser` returns back as a `Command` object.","lastModifiedDate":"2021-07-31"},{"lineNumber":116,"author":{"gitId":"-"},"content":"* All `XYZCommandParser` classes (e.g., `AddCommandParser`, `DeleteCommandParser`, ...) inherit from the `Parser` interface so that they can be treated similarly where possible e.g, during testing.","lastModifiedDate":"2021-07-31"},{"lineNumber":117,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":118,"author":{"gitId":"-"},"content":"### Model component","lastModifiedDate":"2021-07-31"},{"lineNumber":119,"author":{"gitId":"-"},"content":"**API** : [`Model.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/model/Model.java)","lastModifiedDate":"2020-05-23"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":121,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ModelClassDiagram.puml\" width\u003d\"450\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":122,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":123,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":124,"author":{"gitId":"-"},"content":"The `Model` component,","lastModifiedDate":"2021-07-31"},{"lineNumber":125,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":126,"author":{"gitId":"-"},"content":"* stores the address book data i.e., all `Person` objects (which are contained in a `UniquePersonList` object).","lastModifiedDate":"2021-07-31"},{"lineNumber":127,"author":{"gitId":"-"},"content":"* stores the currently \u0027selected\u0027 `Person` objects (e.g., results of a search query) as a separate _filtered_ list which is exposed to outsiders as an unmodifiable `ObservableList\u003cPerson\u003e` that can be \u0027observed\u0027 e.g. the UI can be bound to this list so that the UI automatically updates when the data in the list change.","lastModifiedDate":"2021-07-31"},{"lineNumber":128,"author":{"gitId":"-"},"content":"* stores a `UserPref` object that represents the user’s preferences. This is exposed to the outside as a `ReadOnlyUserPref` objects.","lastModifiedDate":"2021-07-31"},{"lineNumber":129,"author":{"gitId":"-"},"content":"* does not depend on any of the other three components (as the `Model` represents data entities of the domain, they should make sense on their own without depending on other components)","lastModifiedDate":"2021-07-31"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":131,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":132,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":133,"author":{"gitId":"-"},"content":"**Note:** An alternative (arguably, a more OOP) model is given below. It has a `Tag` list in the `AddressBook`, which `Person` references. This allows `AddressBook` to only require one `Tag` object per unique tag, instead of each `Person` needing their own `Tag` objects.\u003cbr\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":134,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":135,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/BetterModelClassDiagram.puml\" width\u003d\"450\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":137,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":138,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":139,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":140,"author":{"gitId":"-"},"content":"### Storage component","lastModifiedDate":"2020-05-23"},{"lineNumber":141,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":142,"author":{"gitId":"-"},"content":"**API** : [`Storage.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/storage/Storage.java)","lastModifiedDate":"2020-05-23"},{"lineNumber":143,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":144,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/StorageClassDiagram.puml\" width\u003d\"550\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":145,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":146,"author":{"gitId":"-"},"content":"The `Storage` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":147,"author":{"gitId":"-"},"content":"* can save both address book data and user preference data in JSON format, and read them back into corresponding objects.","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"-"},"content":"* inherits from both `AddressBookStorage` and `UserPrefStorage`, which means it can be treated as either one (if only the functionality of only one is needed).","lastModifiedDate":"2021-07-31"},{"lineNumber":149,"author":{"gitId":"-"},"content":"* depends on some classes in the `Model` component (because the `Storage` component\u0027s job is to save/retrieve objects that belong to the `Model`)","lastModifiedDate":"2021-07-21"},{"lineNumber":150,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":151,"author":{"gitId":"-"},"content":"### Common classes","lastModifiedDate":"2020-05-23"},{"lineNumber":152,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":153,"author":{"gitId":"-"},"content":"Classes used by multiple components are in the `seedu.addressbook.commons` package.","lastModifiedDate":"2020-05-23"},{"lineNumber":154,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":155,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":156,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":157,"author":{"gitId":"-"},"content":"## **Implementation**","lastModifiedDate":"2020-05-23"},{"lineNumber":158,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":159,"author":{"gitId":"-"},"content":"This section describes some noteworthy details on how certain features are implemented.","lastModifiedDate":"2020-05-23"},{"lineNumber":160,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":161,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Undo/redo feature","lastModifiedDate":"2020-06-07"},{"lineNumber":162,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":163,"author":{"gitId":"-"},"content":"#### Proposed Implementation","lastModifiedDate":"2020-05-23"},{"lineNumber":164,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":165,"author":{"gitId":"-"},"content":"The proposed undo/redo mechanism is facilitated by `VersionedAddressBook`. It extends `AddressBook` with an undo/redo history, stored internally as an `addressBookStateList` and `currentStatePointer`. Additionally, it implements the following operations:","lastModifiedDate":"2020-05-23"},{"lineNumber":166,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":167,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#commit()` — Saves the current address book state in its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":168,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#undo()` — Restores the previous address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":169,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#redo()` — Restores a previously undone address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":170,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":171,"author":{"gitId":"-"},"content":"These operations are exposed in the `Model` interface as `Model#commitAddressBook()`, `Model#undoAddressBook()` and `Model#redoAddressBook()` respectively.","lastModifiedDate":"2020-05-23"},{"lineNumber":172,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":173,"author":{"gitId":"-"},"content":"Given below is an example usage scenario and how the undo/redo mechanism behaves at each step.","lastModifiedDate":"2020-05-23"},{"lineNumber":174,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":175,"author":{"gitId":"-"},"content":"Step 1. The user launches the application for the first time. The `VersionedAddressBook` will be initialized with the initial address book state, and the `currentStatePointer` pointing to that single address book state.","lastModifiedDate":"2020-05-23"},{"lineNumber":176,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":177,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState0.puml\" alt\u003d\"UndoRedoState0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":178,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":179,"author":{"gitId":"-"},"content":"Step 2. The user executes `delete 5` command to delete the 5th person in the address book. The `delete` command calls `Model#commitAddressBook()`, causing the modified state of the address book after the `delete 5` command executes to be saved in the `addressBookStateList`, and the `currentStatePointer` is shifted to the newly inserted address book state.","lastModifiedDate":"2020-05-23"},{"lineNumber":180,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":181,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState1.puml\" alt\u003d\"UndoRedoState1\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":182,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":183,"author":{"gitId":"-"},"content":"Step 3. The user executes `add n/David …​` to add a new person. The `add` command also calls `Model#commitAddressBook()`, causing another modified address book state to be saved into the `addressBookStateList`.","lastModifiedDate":"2020-05-23"},{"lineNumber":184,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":185,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState2.puml\" alt\u003d\"UndoRedoState2\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":186,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":187,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":188,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":189,"author":{"gitId":"-"},"content":"**Note:** If a command fails its execution, it will not call `Model#commitAddressBook()`, so the address book state will not be saved into the `addressBookStateList`.","lastModifiedDate":"2023-09-12"},{"lineNumber":190,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":191,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":192,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":193,"author":{"gitId":"-"},"content":"Step 4. The user now decides that adding the person was a mistake, and decides to undo that action by executing the `undo` command. The `undo` command will call `Model#undoAddressBook()`, which will shift the `currentStatePointer` once to the left, pointing it to the previous address book state, and restores the address book to that state.","lastModifiedDate":"2020-05-23"},{"lineNumber":194,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":195,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState3.puml\" alt\u003d\"UndoRedoState3\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":196,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":197,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":198,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":199,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":200,"author":{"gitId":"-"},"content":"**Note:** If the `currentStatePointer` is at index 0, pointing to the initial AddressBook state, then there are no previous AddressBook states to restore. The `undo` command uses `Model#canUndoAddressBook()` to check if this is the case. If so, it will return an error to the user rather","lastModifiedDate":"2023-09-12"},{"lineNumber":201,"author":{"gitId":"-"},"content":"than attempting to perform the undo.","lastModifiedDate":"2020-05-23"},{"lineNumber":202,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":203,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":204,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":205,"author":{"gitId":"-"},"content":"The following sequence diagram shows how an undo operation goes through the `Logic` component:","lastModifiedDate":"2024-02-09"},{"lineNumber":206,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":207,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoSequenceDiagram-Logic.puml\" alt\u003d\"UndoSequenceDiagram-Logic\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":208,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":209,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":210,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":211,"author":{"gitId":"-"},"content":"**Note:** The lifeline for `UndoCommand` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram.","lastModifiedDate":"2023-09-12"},{"lineNumber":212,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":213,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":214,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":215,"author":{"gitId":"-"},"content":"Similarly, how an undo operation goes through the `Model` component is shown below:","lastModifiedDate":"2024-02-09"},{"lineNumber":216,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":217,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoSequenceDiagram-Model.puml\" alt\u003d\"UndoSequenceDiagram-Model\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":218,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":219,"author":{"gitId":"-"},"content":"The `redo` command does the opposite — it calls `Model#redoAddressBook()`, which shifts the `currentStatePointer` once to the right, pointing to the previously undone state, and restores the address book to that state.","lastModifiedDate":"2020-05-23"},{"lineNumber":220,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":221,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":222,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":223,"author":{"gitId":"-"},"content":"**Note:** If the `currentStatePointer` is at index `addressBookStateList.size() - 1`, pointing to the latest address book state, then there are no undone AddressBook states to restore. The `redo` command uses `Model#canRedoAddressBook()` to check if this is the case. If so, it will return an error to the user rather than attempting to perform the redo.","lastModifiedDate":"2023-09-12"},{"lineNumber":224,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":225,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":226,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":227,"author":{"gitId":"-"},"content":"Step 5. The user then decides to execute the command `list`. Commands that do not modify the address book, such as `list`, will usually not call `Model#commitAddressBook()`, `Model#undoAddressBook()` or `Model#redoAddressBook()`. Thus, the `addressBookStateList` remains unchanged.","lastModifiedDate":"2020-05-23"},{"lineNumber":228,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":229,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState4.puml\" alt\u003d\"UndoRedoState4\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":230,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":231,"author":{"gitId":"-"},"content":"Step 6. The user executes `clear`, which calls `Model#commitAddressBook()`. Since the `currentStatePointer` is not pointing at the end of the `addressBookStateList`, all address book states after the `currentStatePointer` will be purged. Reason: It no longer makes sense to redo the `add n/David …​` command. This is the behavior that most modern desktop applications follow.","lastModifiedDate":"2020-05-23"},{"lineNumber":232,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":233,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState5.puml\" alt\u003d\"UndoRedoState5\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":234,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":235,"author":{"gitId":"-"},"content":"The following activity diagram summarizes what happens when a user executes a new command:","lastModifiedDate":"2020-05-23"},{"lineNumber":236,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":237,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/CommitActivityDiagram.puml\" width\u003d\"250\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":238,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":239,"author":{"gitId":"Jawad280"},"content":"### Design considerations:","lastModifiedDate":"2024-03-01"},{"lineNumber":240,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":241,"author":{"gitId":"-"},"content":"**Aspect: How undo \u0026 redo executes:**","lastModifiedDate":"2021-07-31"},{"lineNumber":242,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":243,"author":{"gitId":"-"},"content":"* **Alternative 1 (current choice):** Saves the entire address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":244,"author":{"gitId":"-"},"content":" * Pros: Easy to implement.","lastModifiedDate":"2020-05-23"},{"lineNumber":245,"author":{"gitId":"-"},"content":" * Cons: May have performance issues in terms of memory usage.","lastModifiedDate":"2020-05-23"},{"lineNumber":246,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":247,"author":{"gitId":"-"},"content":"* **Alternative 2:** Individual command knows how to undo/redo by","lastModifiedDate":"2020-05-23"},{"lineNumber":248,"author":{"gitId":"-"},"content":" itself.","lastModifiedDate":"2020-05-23"},{"lineNumber":249,"author":{"gitId":"-"},"content":" * Pros: Will use less memory (e.g. for `delete`, just save the person being deleted).","lastModifiedDate":"2020-05-23"},{"lineNumber":250,"author":{"gitId":"-"},"content":" * Cons: We must ensure that the implementation of each individual command are correct.","lastModifiedDate":"2020-05-23"},{"lineNumber":251,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":252,"author":{"gitId":"-"},"content":"_{more aspects and alternatives to be added}_","lastModifiedDate":"2020-05-23"},{"lineNumber":253,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":254,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Data archiving","lastModifiedDate":"2020-05-23"},{"lineNumber":255,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":256,"author":{"gitId":"-"},"content":"_{Explain here how the data archiving feature will be implemented}_","lastModifiedDate":"2020-05-23"},{"lineNumber":257,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":258,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":259,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":260,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":261,"author":{"gitId":"-"},"content":"## **Documentation, logging, testing, configuration, dev-ops**","lastModifiedDate":"2020-06-07"},{"lineNumber":262,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":263,"author":{"gitId":"-"},"content":"* [Documentation guide](Documentation.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":264,"author":{"gitId":"-"},"content":"* [Testing guide](Testing.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":265,"author":{"gitId":"-"},"content":"* [Logging guide](Logging.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":266,"author":{"gitId":"-"},"content":"* [Configuration guide](Configuration.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":267,"author":{"gitId":"-"},"content":"* [DevOps guide](DevOps.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":268,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":269,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":270,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":271,"author":{"gitId":"-"},"content":"## **Appendix: Requirements**","lastModifiedDate":"2020-05-23"},{"lineNumber":272,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":273,"author":{"gitId":"-"},"content":"### Product scope","lastModifiedDate":"2020-05-23"},{"lineNumber":274,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":275,"author":{"gitId":"-"},"content":"**Target user profile**:","lastModifiedDate":"2020-05-23"},{"lineNumber":276,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":277,"author":{"gitId":"ashleygoh1"},"content":"* CS students","lastModifiedDate":"2024-03-02"},{"lineNumber":278,"author":{"gitId":"ashleygoh1"},"content":"* has a need to keep track of contacts of companies and interview dates during thier internship hunt","lastModifiedDate":"2024-03-02"},{"lineNumber":279,"author":{"gitId":"ashleygoh1"},"content":"* prefer a one-stop, centralised dashboard to manage all contact details of companies","lastModifiedDate":"2024-03-02"},{"lineNumber":280,"author":{"gitId":"ashleygoh1"},"content":"* is reasonably comfortable in using a more CLI based app","lastModifiedDate":"2024-03-02"},{"lineNumber":281,"author":{"gitId":"ashleygoh1"},"content":"* wants to be better organized","lastModifiedDate":"2024-03-02"},{"lineNumber":282,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":283,"author":{"gitId":"ashleygoh1"},"content":"**Value proposition**: Ultimate companion for Computer Science (CS) students embarking on their internship journey !","lastModifiedDate":"2024-03-02"},{"lineNumber":284,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":285,"author":{"gitId":"-"},"content":"### User stories","lastModifiedDate":"2020-06-07"},{"lineNumber":286,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":287,"author":{"gitId":"-"},"content":"Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unlikely to have) - `*`","lastModifiedDate":"2020-05-23"},{"lineNumber":288,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":289,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":290,"author":{"gitId":"eunrcn"},"content":"| Priority | As an …​ | I want to …​ | So that I can…​ |","lastModifiedDate":"2024-03-01"},{"lineNumber":291,"author":{"gitId":"Jawad280"},"content":"|----------|----------------------|---------------------------------------------------------|---------------------------------------------------------------------------------------------------|","lastModifiedDate":"2024-03-01"},{"lineNumber":292,"author":{"gitId":"Jawad280"},"content":"| `* * *` | internship applicant | add contact information of internship companies | easily access their details when needed |","lastModifiedDate":"2024-03-01"},{"lineNumber":293,"author":{"gitId":"Jawad280"},"content":"| `* * *` | internship applicant | delete contact information of internship companies | easily remove any old or irrelevant company contacts |","lastModifiedDate":"2024-03-01"},{"lineNumber":294,"author":{"gitId":"Jawad280"},"content":"| `* * *` | internship applicant | edit contact information of internship companies | easily update any details on the go |","lastModifiedDate":"2024-03-01"},{"lineNumber":295,"author":{"gitId":"Jawad280"},"content":"| `* * *` | internship applicant | see usage instructions | refer to instructions when I forget how to use the AddressBook |","lastModifiedDate":"2024-03-01"},{"lineNumber":296,"author":{"gitId":"Jawad280"},"content":"| `* * *` | internship applicant | find the contact information of a certain company | easily search which company contact I want by name |","lastModifiedDate":"2024-03-01"},{"lineNumber":297,"author":{"gitId":"Jawad280"},"content":"| `* * *` | internship applicant | keep track of the status of each internship application | categorize and easily follow up accordingly |","lastModifiedDate":"2024-03-01"},{"lineNumber":298,"author":{"gitId":"Jawad280"},"content":"| `* * *` | internship applicant | sort company contacts by dates | prioritize and plan for upcoming interviews |","lastModifiedDate":"2024-03-01"},{"lineNumber":299,"author":{"gitId":"Jawad280"},"content":"| `* * ` | internship applicant | filter company contacts by date | quickly access contacts associated with a specific date |","lastModifiedDate":"2024-03-01"},{"lineNumber":300,"author":{"gitId":"Jawad280"},"content":"| `* * ` | internship applicant | filter company contacts by tag | easily find and manage contacts within specific categories |","lastModifiedDate":"2024-03-01"},{"lineNumber":301,"author":{"gitId":"Jawad280"},"content":"| `* * ` | internship applicant | add a time to a company contact | record when a specific task or interaction needs to be done |","lastModifiedDate":"2024-03-01"},{"lineNumber":302,"author":{"gitId":"Jawad280"},"content":"| `* ` | internship applicant | add notes to company contacts | include important details or information about specific interviews and what I can learn from them |","lastModifiedDate":"2024-03-01"},{"lineNumber":303,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":304,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":305,"author":{"gitId":"-"},"content":"### Use cases","lastModifiedDate":"2020-06-07"},{"lineNumber":306,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":307,"author":{"gitId":"-"},"content":"(For all use cases below, the **System** is the `AddressBook` and the **Actor** is the `user`, unless specified otherwise)","lastModifiedDate":"2020-05-23"},{"lineNumber":308,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":309,"author":{"gitId":"Jawad280"},"content":"**Use Case: Input Company Contact Information**","lastModifiedDate":"2024-03-01"},{"lineNumber":310,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":311,"author":{"gitId":"Jawad280"},"content":"**Actor:** Internship Applicant","lastModifiedDate":"2024-03-01"},{"lineNumber":312,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":313,"author":{"gitId":"Jawad280"},"content":"**Main Success Scenario (MSS):**","lastModifiedDate":"2024-03-01"},{"lineNumber":314,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":315,"author":{"gitId":"Jawad280"},"content":"1. Internship Applicant inputs contact information of internship company.","lastModifiedDate":"2024-03-01"},{"lineNumber":316,"author":{"gitId":"Jawad280"},"content":"2. System stores the contact information.","lastModifiedDate":"2024-03-01"},{"lineNumber":317,"author":{"gitId":"Jawad280"},"content":"3. Use case ends.","lastModifiedDate":"2024-03-01"},{"lineNumber":318,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":319,"author":{"gitId":"Jawad280"},"content":"**Extensions:**","lastModifiedDate":"2024-03-01"},{"lineNumber":320,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":321,"author":{"gitId":"Jawad280"},"content":"* 1a. System detects an error in the entered data.","lastModifiedDate":"2024-03-01"},{"lineNumber":322,"author":{"gitId":"Jawad280"},"content":" * 1a1. System requests for the correct data.","lastModifiedDate":"2024-03-01"},{"lineNumber":323,"author":{"gitId":"Jawad280"},"content":" * 1a2. Internship Applicant enters new data.","lastModifiedDate":"2024-03-01"},{"lineNumber":324,"author":{"gitId":"Jawad280"},"content":" * Steps 1a1-1a2 are repeated until the data entered are correct.","lastModifiedDate":"2024-03-01"},{"lineNumber":325,"author":{"gitId":"Jawad280"},"content":" * Use case resumes from step 2.","lastModifiedDate":"2024-03-01"},{"lineNumber":326,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":327,"author":{"gitId":"Jawad280"},"content":"* *a. At any time, Internship Applicant chooses to cancel the input.","lastModifiedDate":"2024-03-01"},{"lineNumber":328,"author":{"gitId":"Jawad280"},"content":" * Use case ends.","lastModifiedDate":"2024-03-01"},{"lineNumber":329,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":330,"author":{"gitId":"Jawad280"},"content":"---","lastModifiedDate":"2024-03-01"},{"lineNumber":331,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":332,"author":{"gitId":"Jawad280"},"content":"**Use Case: Delete Company Contact Information**","lastModifiedDate":"2024-03-01"},{"lineNumber":333,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":334,"author":{"gitId":"Jawad280"},"content":"**Actor:** Internship Applicant","lastModifiedDate":"2024-03-01"},{"lineNumber":335,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":336,"author":{"gitId":"Jawad280"},"content":"**Main Success Scenario (MSS):**","lastModifiedDate":"2024-03-01"},{"lineNumber":337,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":338,"author":{"gitId":"Jawad280"},"content":"1. Internship Applicant inputs index of contact to be deleted.","lastModifiedDate":"2024-03-01"},{"lineNumber":339,"author":{"gitId":"Jawad280"},"content":"2. System deletes the relevant contact information.","lastModifiedDate":"2024-03-01"},{"lineNumber":340,"author":{"gitId":"Jawad280"},"content":"3. Use case ends.","lastModifiedDate":"2024-03-01"},{"lineNumber":341,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":342,"author":{"gitId":"Jawad280"},"content":"**Extensions:**","lastModifiedDate":"2024-03-01"},{"lineNumber":343,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":344,"author":{"gitId":"Jawad280"},"content":"* 1a. System detects an error in index of contact","lastModifiedDate":"2024-03-01"},{"lineNumber":345,"author":{"gitId":"Jawad280"},"content":" * 1a1. System requests for proper input of index (1 to current number of contacts)","lastModifiedDate":"2024-03-01"},{"lineNumber":346,"author":{"gitId":"Jawad280"},"content":" * 1a2. Internship Applicant enters the correct index.","lastModifiedDate":"2024-03-01"},{"lineNumber":347,"author":{"gitId":"Jawad280"},"content":" * Steps 1a1-1a2 are repeated until the selection is correct.","lastModifiedDate":"2024-03-01"},{"lineNumber":348,"author":{"gitId":"Jawad280"},"content":" * Use case resumes from step 2.","lastModifiedDate":"2024-03-01"},{"lineNumber":349,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":350,"author":{"gitId":"Jawad280"},"content":"* *a. At any time, the Internship Applicant chooses to cancel to detect contact.","lastModifiedDate":"2024-03-01"},{"lineNumber":351,"author":{"gitId":"Jawad280"},"content":" * *a1. System cancels deletion of contact.","lastModifiedDate":"2024-03-01"},{"lineNumber":352,"author":{"gitId":"Jawad280"},"content":" * Use case ends.","lastModifiedDate":"2024-03-01"},{"lineNumber":353,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":354,"author":{"gitId":"Jawad280"},"content":"---","lastModifiedDate":"2024-03-01"},{"lineNumber":355,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":356,"author":{"gitId":"Jawad280"},"content":"**Use Case: Edit Contacts Info**","lastModifiedDate":"2024-03-01"},{"lineNumber":357,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":358,"author":{"gitId":"Jawad280"},"content":"**Actor:** Internship Applicant","lastModifiedDate":"2024-03-01"},{"lineNumber":359,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":360,"author":{"gitId":"Jawad280"},"content":"**Main Success Scenario (MSS):**","lastModifiedDate":"2024-03-01"},{"lineNumber":361,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":362,"author":{"gitId":"Jawad280"},"content":"1. Internship Applicant chooses contact to edit by its index and enters relevant fields to be modified","lastModifiedDate":"2024-03-01"},{"lineNumber":363,"author":{"gitId":"Jawad280"},"content":"2. System modifies that corresponding field of that contact","lastModifiedDate":"2024-03-01"},{"lineNumber":364,"author":{"gitId":"Jawad280"},"content":"3. Use case ends","lastModifiedDate":"2024-03-01"},{"lineNumber":365,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":366,"author":{"gitId":"Jawad280"},"content":"**Extensions:**","lastModifiedDate":"2024-03-01"},{"lineNumber":367,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":368,"author":{"gitId":"Jawad280"},"content":"* 1a. System detects an error in index of contact","lastModifiedDate":"2024-03-01"},{"lineNumber":369,"author":{"gitId":"Jawad280"},"content":" * 1a1. System requests for proper input of index (1 to current number of contacts)","lastModifiedDate":"2024-03-01"},{"lineNumber":370,"author":{"gitId":"Jawad280"},"content":" * 1a2. Internship Applicant enters the correct index.","lastModifiedDate":"2024-03-01"},{"lineNumber":371,"author":{"gitId":"Jawad280"},"content":" * Steps 1a1-1a2 are repeated until the selection is correct.","lastModifiedDate":"2024-03-01"},{"lineNumber":372,"author":{"gitId":"Jawad280"},"content":" * Use case resumes from step 2.","lastModifiedDate":"2024-03-01"},{"lineNumber":373,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":374,"author":{"gitId":"Jawad280"},"content":"* 1a. System detects an error in the fields to be edited (No fields at all or incorrect field prefixes)","lastModifiedDate":"2024-03-01"},{"lineNumber":375,"author":{"gitId":"Jawad280"},"content":" * 1a1. System requests for proper input of fields and correct prefix","lastModifiedDate":"2024-03-01"},{"lineNumber":376,"author":{"gitId":"Jawad280"},"content":" * 1a2. Internship Applicant enters the fields to be edited.","lastModifiedDate":"2024-03-01"},{"lineNumber":377,"author":{"gitId":"Jawad280"},"content":" * Steps 1a1-1a2 are repeated until the selection is correct.","lastModifiedDate":"2024-03-01"},{"lineNumber":378,"author":{"gitId":"Jawad280"},"content":" * Use case resumes from step 2.","lastModifiedDate":"2024-03-01"},{"lineNumber":379,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":380,"author":{"gitId":"Jawad280"},"content":"* *a. At any time, the Internship Applicant chooses to cancel to edit contact.","lastModifiedDate":"2024-03-01"},{"lineNumber":381,"author":{"gitId":"Jawad280"},"content":" * *a1. System cancels edit of contact.","lastModifiedDate":"2024-03-01"},{"lineNumber":382,"author":{"gitId":"Jawad280"},"content":" * Use case ends.","lastModifiedDate":"2024-03-01"},{"lineNumber":383,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":384,"author":{"gitId":"Jawad280"},"content":"---","lastModifiedDate":"2024-03-01"},{"lineNumber":385,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":386,"author":{"gitId":"Jawad280"},"content":"**Use Case: Filter Contacts by Tag**","lastModifiedDate":"2024-03-01"},{"lineNumber":387,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":388,"author":{"gitId":"Jawad280"},"content":"**Actor:** Internship Applicant","lastModifiedDate":"2024-03-01"},{"lineNumber":389,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":390,"author":{"gitId":"Jawad280"},"content":"**Main Success Scenario (MSS):**","lastModifiedDate":"2024-03-01"},{"lineNumber":391,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":392,"author":{"gitId":"Jawad280"},"content":"1. Internship Applicant chooses to filter contacts by tag.","lastModifiedDate":"2024-03-01"},{"lineNumber":393,"author":{"gitId":"Jawad280"},"content":"2. Internship Applicant inputs the tag.","lastModifiedDate":"2024-03-01"},{"lineNumber":394,"author":{"gitId":"Jawad280"},"content":"3. System filters the contacts associated with the selected tag.","lastModifiedDate":"2024-03-01"},{"lineNumber":395,"author":{"gitId":"Jawad280"},"content":"4. System displays the filtered contacts.","lastModifiedDate":"2024-03-01"},{"lineNumber":396,"author":{"gitId":"Jawad280"},"content":"5. Use case ends.","lastModifiedDate":"2024-03-01"},{"lineNumber":397,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":398,"author":{"gitId":"Jawad280"},"content":"**Extensions:**","lastModifiedDate":"2024-03-01"},{"lineNumber":399,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":400,"author":{"gitId":"Jawad280"},"content":"* 2a. System detects an error in tag to be filtered","lastModifiedDate":"2024-03-01"},{"lineNumber":401,"author":{"gitId":"Jawad280"},"content":" * 2a1. System requests for proper input of tag (One of existing tags)","lastModifiedDate":"2024-03-01"},{"lineNumber":402,"author":{"gitId":"Jawad280"},"content":" * 2a2. Internship Applicant enters the correct tag.","lastModifiedDate":"2024-03-01"},{"lineNumber":403,"author":{"gitId":"Jawad280"},"content":" * Steps 2a1-2a2 are repeated until the selection is correct.","lastModifiedDate":"2024-03-01"},{"lineNumber":404,"author":{"gitId":"Jawad280"},"content":" * Use case resumes from step 3.","lastModifiedDate":"2024-03-01"},{"lineNumber":405,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":406,"author":{"gitId":"Jawad280"},"content":"* *a. At any time, the Internship Applicant chooses to cancel the filtering.","lastModifiedDate":"2024-03-01"},{"lineNumber":407,"author":{"gitId":"Jawad280"},"content":" * *a1. System cancels the filtering.","lastModifiedDate":"2024-03-01"},{"lineNumber":408,"author":{"gitId":"Jawad280"},"content":" * Use case ends.","lastModifiedDate":"2024-03-01"},{"lineNumber":409,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":410,"author":{"gitId":"Jawad280"},"content":"---","lastModifiedDate":"2024-03-01"},{"lineNumber":411,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":412,"author":{"gitId":"Jawad280"},"content":"**Use Case: View information of a contact**","lastModifiedDate":"2024-03-01"},{"lineNumber":413,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":414,"author":{"gitId":"Jawad280"},"content":"**Actor:** Internship Applicant","lastModifiedDate":"2024-03-01"},{"lineNumber":415,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":416,"author":{"gitId":"Jawad280"},"content":"**Main Success Scenario (MSS):**","lastModifiedDate":"2024-03-01"},{"lineNumber":417,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":418,"author":{"gitId":"Jawad280"},"content":"1. Internship Applicant chooses contact to be viewed on view panel.","lastModifiedDate":"2024-03-01"},{"lineNumber":419,"author":{"gitId":"Jawad280"},"content":"2. System requests for the specific contact index.","lastModifiedDate":"2024-03-01"},{"lineNumber":420,"author":{"gitId":"Jawad280"},"content":"3. Internship Applicant enters the contact index.","lastModifiedDate":"2024-03-01"},{"lineNumber":421,"author":{"gitId":"Jawad280"},"content":"4. System views the relevant contact on the view panel.","lastModifiedDate":"2024-03-01"},{"lineNumber":422,"author":{"gitId":"Jawad280"},"content":"5. Use case ends.","lastModifiedDate":"2024-03-01"},{"lineNumber":423,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":424,"author":{"gitId":"Jawad280"},"content":"**Extensions:**","lastModifiedDate":"2024-03-01"},{"lineNumber":425,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":426,"author":{"gitId":"Jawad280"},"content":"* 3a. IH detects an error in index of contact","lastModifiedDate":"2024-03-01"},{"lineNumber":427,"author":{"gitId":"Jawad280"},"content":" * 3a1. System requests for proper input of index (1 to current number of contacts)","lastModifiedDate":"2024-03-01"},{"lineNumber":428,"author":{"gitId":"Jawad280"},"content":" * 3a2. Internship Applicant enters the correct index.","lastModifiedDate":"2024-03-01"},{"lineNumber":429,"author":{"gitId":"Jawad280"},"content":" * Steps 3a1-3a2 are repeated until the selection is correct.","lastModifiedDate":"2024-03-01"},{"lineNumber":430,"author":{"gitId":"Jawad280"},"content":" * Use case resumes from step 3.","lastModifiedDate":"2024-03-01"},{"lineNumber":431,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":432,"author":{"gitId":"Jawad280"},"content":"* *a. At any time, Internship Applicant chooses to cancel to view contact.","lastModifiedDate":"2024-03-01"},{"lineNumber":433,"author":{"gitId":"Jawad280"},"content":" * *a1. System cancels viewing of contact.","lastModifiedDate":"2024-03-01"},{"lineNumber":434,"author":{"gitId":"Jawad280"},"content":" * Use case ends.","lastModifiedDate":"2024-03-01"},{"lineNumber":435,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":436,"author":{"gitId":"Jawad280"},"content":"---","lastModifiedDate":"2024-03-01"},{"lineNumber":437,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":438,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":439,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":440,"author":{"gitId":"-"},"content":"1. Should work on any _mainstream OS_ as long as it has Java `11` or above installed.","lastModifiedDate":"2020-05-23"},{"lineNumber":441,"author":{"gitId":"-"},"content":"2. Should be able to hold up to 1000 persons without a noticeable sluggishness in performance for typical usage.","lastModifiedDate":"2020-05-23"},{"lineNumber":442,"author":{"gitId":"-"},"content":"3. A user with above average typing speed for regular English text (i.e. not code, not system admin commands) should be able to accomplish most of the tasks faster using commands than using the mouse.","lastModifiedDate":"2020-05-23"},{"lineNumber":443,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":444,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":445,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":446,"author":{"gitId":"-"},"content":"* **Mainstream OS**: Windows, Linux, Unix, MacOS","lastModifiedDate":"2024-02-09"},{"lineNumber":447,"author":{"gitId":"-"},"content":"* **Private contact detail**: A contact detail that is not meant to be shared with others","lastModifiedDate":"2020-05-23"},{"lineNumber":448,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":449,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":450,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":451,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":452,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":453,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":454,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":455,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":456,"author":{"gitId":"-"},"content":"**Note:** These instructions only provide a starting point for testers to work on;","lastModifiedDate":"2023-09-12"},{"lineNumber":457,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":458,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":459,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":460,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":461,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":462,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":463,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":464,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":465,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":466,"author":{"gitId":"-"},"content":" 1. Double-click the jar file Expected: Shows the GUI with a set of sample contacts. The window size may not be optimum.","lastModifiedDate":"2020-05-23"},{"lineNumber":467,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":468,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":469,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":470,"author":{"gitId":"-"},"content":" 1. Resize the window to an optimum size. Move the window to a different location. Close the window.","lastModifiedDate":"2020-05-23"},{"lineNumber":471,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":472,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":473,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","lastModifiedDate":"2020-05-23"},{"lineNumber":474,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":475,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":476,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":477,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":478,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":479,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":480,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":481,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":482,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":483,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":484,"author":{"gitId":"-"},"content":" Expected: First contact is deleted from the list. Details of the deleted contact shown in the status message. Timestamp in the status bar is updated.","lastModifiedDate":"2020-05-23"},{"lineNumber":485,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":486,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":487,"author":{"gitId":"-"},"content":" Expected: No person is deleted. Error details shown in the status message. Status bar remains the same.","lastModifiedDate":"2020-05-23"},{"lineNumber":488,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":489,"author":{"gitId":"-"},"content":" 1. Other incorrect delete commands to try: `delete`, `delete x`, `...` (where x is larger than the list size)\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":490,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":491,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":492,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":493,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":494,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":495,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":496,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":497,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":498,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":499,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":500,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"eunrcn":1,"Jawad280":120,"ashleygoh1":7,"-":372}},{"path":"docs/UserGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":"layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":"title: \"User Guide\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"pageNav: 3","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":7,"author":{"gitId":"eunrcn"},"content":"# Internhub User Guide","lastModifiedDate":"2024-02-28"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"Jawad280"},"content":"Intern Hub is a **desktop app for managing contacts, optimized for use via a Line Interface** (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast, InternHub can get your contact management tasks done faster than traditional GUI apps.","lastModifiedDate":"2024-03-01"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":"\u003c!-- * Table of Contents --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003cpage-nav-print /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":14,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"-"},"content":"## Quick start","lastModifiedDate":"2020-05-23"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"1. Ensure you have Java `11` or above installed in your Computer.","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"eunrcn"},"content":"1. Download the latest `internhub.jar` from [here](https://github.com/se-edu/addressbook-level3/releases).","lastModifiedDate":"2024-02-28"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"1. Copy the file to the folder you want to use as the _home folder_ for your AddressBook.","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"eunrcn"},"content":"1. Open a command terminal, `cd` into the folder you put the jar file in, and use the `java -jar internhub.jar` command to run the application.\u003cbr\u003e","lastModifiedDate":"2024-02-28"},{"lineNumber":25,"author":{"gitId":"-"},"content":" A GUI similar to the below should appear in a few seconds. Note how the app contains some sample data.\u003cbr\u003e","lastModifiedDate":"2023-01-01"},{"lineNumber":26,"author":{"gitId":"-"},"content":" ![Ui](images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":"1. Type the command in the command box and press Enter to execute it. e.g. typing **`help`** and pressing Enter will open the help window.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":29,"author":{"gitId":"-"},"content":" Some example commands you can try:","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * `list` : Lists all contacts.","lastModifiedDate":"2023-01-01"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":33,"author":{"gitId":"ashleygoh1"},"content":" * `add c/Food Panda p/12345678 e/panda@food.com a/CBD t/F jd/Front End Intern d/15-04-2024 0900 id/6 months s/500","lastModifiedDate":"2024-02-27"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":" ` : Adds a contact named `Food Panda` to the Address Book.","lastModifiedDate":"2024-02-27"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * `delete 3` : Deletes the 3rd contact shown in the current list.","lastModifiedDate":"2023-01-01"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":" * `clear` : Deletes all contacts.","lastModifiedDate":"2023-01-01"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":40,"author":{"gitId":"-"},"content":" * `exit` : Exits the app.","lastModifiedDate":"2023-01-01"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":"1. Refer to the [Features](#features) below for details of each command.","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":"## Features","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":50,"author":{"gitId":"-"},"content":"**Notes about the command format:**\u003cbr\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"-"},"content":"* Words in `UPPER_CASE` are the parameters to be supplied by the user.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"ashleygoh1"},"content":" e.g. in `add c/COMPANY_NAME`, `COMPANY_NAME` is a parameter which can be used as `add c/Food Panda`.","lastModifiedDate":"2024-02-27"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":"* Items in square brackets are optional.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":56,"author":{"gitId":"ashleygoh1"},"content":" e.g `c/COMPANY_NAME [a/ADDRESS]` can be used as `c/Food Panda a/CBD` or as `c/Food Panda`.","lastModifiedDate":"2024-02-27"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":58,"author":{"gitId":"-"},"content":"* Parameters can be in any order.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":59,"author":{"gitId":"ashleygoh1"},"content":" e.g. if the command specifies `add c/COMPANY_NAME p/PHONE_NUMBER`, `p/PHONE_NUMBER add c/COMPANY_NAME` is also acceptable.","lastModifiedDate":"2024-02-27"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":61,"author":{"gitId":"-"},"content":"* Extraneous parameters for commands that do not take in parameters (such as `help`, `list`, `exit` and `clear`) will be ignored.\u003cbr\u003e","lastModifiedDate":"2021-02-03"},{"lineNumber":62,"author":{"gitId":"-"},"content":" e.g. if the command specifies `help 123`, it will be interpreted as `help`.","lastModifiedDate":"2021-02-03"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-02-03"},{"lineNumber":64,"author":{"gitId":"-"},"content":"* If you are using a PDF version of this document, be careful when copying and pasting commands that span multiple lines as space characters surrounding line-breaks may be omitted when copied over to the application.","lastModifiedDate":"2023-06-26"},{"lineNumber":65,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":67,"author":{"gitId":"-"},"content":"### Viewing help : `help`","lastModifiedDate":"2020-05-23"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":69,"author":{"gitId":"-"},"content":"Shows a message explaning how to access the help page.","lastModifiedDate":"2020-05-23"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":71,"author":{"gitId":"-"},"content":"![help message](images/helpMessage.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":73,"author":{"gitId":"-"},"content":"Format: `help`","lastModifiedDate":"2020-05-23"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":76,"author":{"gitId":"Jawad280"},"content":"### Adding a contact: `add`","lastModifiedDate":"2024-03-01"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":78,"author":{"gitId":"Jawad280"},"content":"Adds a contact to the address book.","lastModifiedDate":"2024-03-01"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":80,"author":{"gitId":"ashleygoh1"},"content":"Format: `add c/COMPANY_NAME p/PHONE_NUMBER e/EMAIL a/[ADDRESS] t/TAG jd/JOB_DESCRIPTION d/[INTERVIEW_DATE] id/INTERN_DURATION s/salary`","lastModifiedDate":"2024-02-27"},{"lineNumber":81,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":82,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":83,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":84,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":85,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":86,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":87,"author":{"gitId":"ashleygoh1"},"content":"* `add c/FoodPanda p/12345678 e/panda@food.com a/CBD t/F jd/Front End Intern d/15-04-2024 0900 id/6 months s/500`","lastModifiedDate":"2024-02-27"},{"lineNumber":88,"author":{"gitId":"ashleygoh1"},"content":"* `add c/Shoppa p/99912345 e/panda@food.com t/F jd/Software Developer Intern id/6 months s/500`","lastModifiedDate":"2024-02-27"},{"lineNumber":89,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":90,"author":{"gitId":"Jawad280"},"content":"### Listing all contacts : `list`","lastModifiedDate":"2024-03-01"},{"lineNumber":91,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":92,"author":{"gitId":"Jawad280"},"content":"Shows a list of all contacts in the address book sorted in ascending order of interview dates. If a company contact does not have any interview dates yet, it will be pushed to the end of the list.","lastModifiedDate":"2024-03-01"},{"lineNumber":93,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":94,"author":{"gitId":"-"},"content":"Format: `list`","lastModifiedDate":"2020-05-23"},{"lineNumber":95,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":96,"author":{"gitId":"Jawad280"},"content":"### Viewing a contact : `view`","lastModifiedDate":"2024-03-02"},{"lineNumber":97,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":98,"author":{"gitId":"Jawad280"},"content":"Views the details of the contact on the view panel in address book.","lastModifiedDate":"2024-03-02"},{"lineNumber":99,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":100,"author":{"gitId":"Jawad280"},"content":"Format: `View INDEX`","lastModifiedDate":"2024-03-02"},{"lineNumber":101,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":102,"author":{"gitId":"Jawad280"},"content":"* Views the contact at the specified `INDEX`. The index refers to the index number shown in the displayed contact list. The index **must be a positive integer** 1, 2, 3, …​","lastModifiedDate":"2024-03-02"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":104,"author":{"gitId":"Jawad280"},"content":"Example:","lastModifiedDate":"2024-03-02"},{"lineNumber":105,"author":{"gitId":"Jawad280"},"content":"* `view 3` Shows the company name of the 3rd contact on the view panel.","lastModifiedDate":"2024-03-02"},{"lineNumber":106,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":107,"author":{"gitId":"Jawad280"},"content":"### Editing a contact : `edit`","lastModifiedDate":"2024-03-01"},{"lineNumber":108,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":109,"author":{"gitId":"Jawad280"},"content":"Edits an existing contact detail in the address book.","lastModifiedDate":"2024-03-01"},{"lineNumber":110,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":111,"author":{"gitId":"Jawad280"},"content":"Format: `Edit INDEX c/[COMPANY_NAME] p/[PHONE_NUMBER] e/[EMAIL] a/[ADDRESS] t/[TAG] jd/[JOB_DESCRIPTION] d/[INTERVIEW_DATE] id/[INTERN_DURATION] s/[salary]`","lastModifiedDate":"2024-03-01"},{"lineNumber":112,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":113,"author":{"gitId":"Jawad280"},"content":"* Edits the contact at the specified `INDEX`. The index refers to the index number shown in the displayed contact list. The index **must be a positive integer** 1, 2, 3, …​","lastModifiedDate":"2024-03-01"},{"lineNumber":114,"author":{"gitId":"-"},"content":"* At least one of the optional fields must be provided.","lastModifiedDate":"2020-05-23"},{"lineNumber":115,"author":{"gitId":"-"},"content":"* Existing values will be updated to the input values.","lastModifiedDate":"2020-05-23"},{"lineNumber":116,"author":{"gitId":"Jawad280"},"content":"* For `[INTERVIEW_DATE]`, if you want to remove a date, just enter `d/` and it will remove that field.","lastModifiedDate":"2024-03-01"},{"lineNumber":117,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":118,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":119,"author":{"gitId":"Jawad280"},"content":"* `edit 1 p/91234567 e/foodpanda@example.com` Edits the phone number and email address of the 1st contact to be `91234567` and `foodpanda@example.com` respectively.","lastModifiedDate":"2024-03-01"},{"lineNumber":120,"author":{"gitId":"Jawad280"},"content":"* `edit 2 c/shopee` Edits the company name of the 2nd contact to be `shopee`.","lastModifiedDate":"2024-03-01"},{"lineNumber":121,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":122,"author":{"gitId":"Jawad280"},"content":"### Locating contacts by name: `find`","lastModifiedDate":"2024-03-01"},{"lineNumber":123,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":124,"author":{"gitId":"Jawad280"},"content":"Finds contacts whose names contain any of the given keywords.","lastModifiedDate":"2024-03-01"},{"lineNumber":125,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":126,"author":{"gitId":"-"},"content":"Format: `find KEYWORD [MORE_KEYWORDS]`","lastModifiedDate":"2020-05-23"},{"lineNumber":127,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":128,"author":{"gitId":"chenyixin0"},"content":"* The search is case-insensitive. e.g `shoppa` will match `Shoppa`","lastModifiedDate":"2024-02-29"},{"lineNumber":129,"author":{"gitId":"chenyixin0"},"content":"* The order of the keywords does not matter. e.g. `Food Panda` will match `Panda Food`","lastModifiedDate":"2024-02-29"},{"lineNumber":130,"author":{"gitId":"-"},"content":"* Only the name is searched.","lastModifiedDate":"2020-05-23"},{"lineNumber":131,"author":{"gitId":"chenyixin0"},"content":"* Only full words will be matched e.g. `Shopp` will not match `Shoppa`","lastModifiedDate":"2024-02-29"},{"lineNumber":132,"author":{"gitId":"Jawad280"},"content":"* Contacts matching at least one keyword will be returned (i.e. `OR` search).","lastModifiedDate":"2024-03-01"},{"lineNumber":133,"author":{"gitId":"Jawad280"},"content":" e.g. `Happy Burger` will return `Happy Meal`, `Burger Queen`","lastModifiedDate":"2024-03-01"},{"lineNumber":134,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":135,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":136,"author":{"gitId":"Jawad280"},"content":"* `find Happy` returns `happy` and `Happy Burger`","lastModifiedDate":"2024-03-01"},{"lineNumber":137,"author":{"gitId":"-"},"content":"* `find alex david` returns `Alex Yeoh`, `David Li`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":138,"author":{"gitId":"-"},"content":" ![result for \u0027find alex david\u0027](images/findAlexDavidResult.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":139,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":140,"author":{"gitId":"Jawad280"},"content":"### Deleting a contact : `delete`","lastModifiedDate":"2024-03-01"},{"lineNumber":141,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":142,"author":{"gitId":"Jawad280"},"content":"Deletes the specified contact from the address book.","lastModifiedDate":"2024-03-01"},{"lineNumber":143,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":144,"author":{"gitId":"-"},"content":"Format: `delete INDEX`","lastModifiedDate":"2020-05-23"},{"lineNumber":145,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":146,"author":{"gitId":"Jawad280"},"content":"* Deletes the contact at the specified `INDEX`.","lastModifiedDate":"2024-03-01"},{"lineNumber":147,"author":{"gitId":"Jawad280"},"content":"* The index refers to the index number shown in the displayed contact list.","lastModifiedDate":"2024-03-01"},{"lineNumber":148,"author":{"gitId":"-"},"content":"* The index **must be a positive integer** 1, 2, 3, …​","lastModifiedDate":"2020-05-23"},{"lineNumber":149,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":150,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":151,"author":{"gitId":"Jawad280"},"content":"* `list` followed by `delete 2` deletes the 2nd contact in the address book.","lastModifiedDate":"2024-03-01"},{"lineNumber":152,"author":{"gitId":"Jawad280"},"content":"* `find Betsy` followed by `delete 1` deletes the 1st contact in the results of the `find` command.","lastModifiedDate":"2024-03-01"},{"lineNumber":153,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":154,"author":{"gitId":"-"},"content":"### Clearing all entries : `clear`","lastModifiedDate":"2020-05-23"},{"lineNumber":155,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":156,"author":{"gitId":"-"},"content":"Clears all entries from the address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":157,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":158,"author":{"gitId":"-"},"content":"Format: `clear`","lastModifiedDate":"2020-05-23"},{"lineNumber":159,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":160,"author":{"gitId":"-"},"content":"### Exiting the program : `exit`","lastModifiedDate":"2020-05-23"},{"lineNumber":161,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":162,"author":{"gitId":"-"},"content":"Exits the program.","lastModifiedDate":"2020-05-23"},{"lineNumber":163,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":164,"author":{"gitId":"-"},"content":"Format: `exit`","lastModifiedDate":"2020-05-23"},{"lineNumber":165,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":166,"author":{"gitId":"-"},"content":"### Saving the data","lastModifiedDate":"2020-05-23"},{"lineNumber":167,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":168,"author":{"gitId":"-"},"content":"AddressBook data are saved in the hard disk automatically after any command that changes the data. There is no need to save manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":169,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":170,"author":{"gitId":"-"},"content":"### Editing the data file","lastModifiedDate":"2021-02-04"},{"lineNumber":171,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-02-04"},{"lineNumber":172,"author":{"gitId":"-"},"content":"AddressBook data are saved automatically as a JSON file `[JAR file location]/data/addressbook.json`. Advanced users are welcome to update data directly by editing that data file.","lastModifiedDate":"2023-09-08"},{"lineNumber":173,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-02-04"},{"lineNumber":174,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"warning\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":175,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":176,"author":{"gitId":"-"},"content":"**Caution:**","lastModifiedDate":"2023-09-12"},{"lineNumber":177,"author":{"gitId":"-"},"content":"If your changes to the data file makes its format invalid, AddressBook will discard all data and start with an empty data file at the next run. Hence, it is recommended to take a backup of the file before editing it.\u003cbr\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":178,"author":{"gitId":"-"},"content":"Furthermore, certain edits can cause the AddressBook to behave in unexpected ways (e.g., if a value entered is outside the acceptable range). Therefore, edit the data file only if you are confident that you can update it correctly.","lastModifiedDate":"2023-09-12"},{"lineNumber":179,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-03-01"},{"lineNumber":180,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":181,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-02-04"},{"lineNumber":182,"author":{"gitId":"-"},"content":"### Archiving data files `[coming in v2.0]`","lastModifiedDate":"2020-05-23"},{"lineNumber":183,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":184,"author":{"gitId":"-"},"content":"_Details coming soon ..._","lastModifiedDate":"2021-02-04"},{"lineNumber":185,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":186,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":187,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":188,"author":{"gitId":"-"},"content":"## FAQ","lastModifiedDate":"2020-05-23"},{"lineNumber":189,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":190,"author":{"gitId":"-"},"content":"**Q**: How do I transfer my data to another Computer?\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":191,"author":{"gitId":"chenyixin0"},"content":"**A**: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous InternHub home folder.","lastModifiedDate":"2024-02-29"},{"lineNumber":192,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":193,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":194,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":195,"author":{"gitId":"-"},"content":"## Known issues","lastModifiedDate":"2023-09-08"},{"lineNumber":196,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":197,"author":{"gitId":"-"},"content":"1. **When using multiple screens**, if you move the application to a secondary screen, and later switch to using only the primary screen, the GUI will open off-screen. The remedy is to delete the `preferences.json` file created by the application before running the application again.","lastModifiedDate":"2023-09-08"},{"lineNumber":198,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":199,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2023-09-08"},{"lineNumber":200,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":201,"author":{"gitId":"-"},"content":"## Command summary","lastModifiedDate":"2020-05-23"},{"lineNumber":202,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":203,"author":{"gitId":"Jawad280"},"content":"| Action | Format, Examples |","lastModifiedDate":"2024-03-01"},{"lineNumber":204,"author":{"gitId":"Jawad280"},"content":"|------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|","lastModifiedDate":"2024-03-01"},{"lineNumber":205,"author":{"gitId":"Jawad280"},"content":"| **Add** | `add c/COMPANY_NAME p/PHONE_NUMBER e/EMAIL a/[ADDRESS] t/TAG jd/JOB_DESCRIPTION d/[INTERVIEW_DATE] id/INTERN_DURATION s/salary` \u003cbr\u003e e.g., `add c/FoodPanda p/12345678 e/panda@food.com a/CBD t/F jd/Front End Intern d/15-04-2024 0900 id/6 months s/500` |","lastModifiedDate":"2024-03-01"},{"lineNumber":206,"author":{"gitId":"Jawad280"},"content":"| **Clear** | `clear` |","lastModifiedDate":"2024-03-01"},{"lineNumber":207,"author":{"gitId":"Jawad280"},"content":"| **Delete** | `delete INDEX`\u003cbr\u003e e.g., `delete 3` |","lastModifiedDate":"2024-03-01"},{"lineNumber":208,"author":{"gitId":"Jawad280"},"content":"| **Edit** | `Edit INDEX c/[COMPANY_NAME] p/[PHONE_NUMBER] e/[EMAIL] a/[ADDRESS] t/[TAG] jd/[JOB_DESCRIPTION] d/[INTERVIEW_DATE] id/[INTERN_DURATION] s/[salary]`\u003cbr\u003e e.g.,`Edit 2 p/9998765` |","lastModifiedDate":"2024-03-01"},{"lineNumber":209,"author":{"gitId":"Jawad280"},"content":"| **Find** | `find KEYWORD [MORE_KEYWORDS]`\u003cbr\u003e e.g., `find foodpanda` |","lastModifiedDate":"2024-03-01"},{"lineNumber":210,"author":{"gitId":"Jawad280"},"content":"| **List** | `list` |","lastModifiedDate":"2024-03-01"},{"lineNumber":211,"author":{"gitId":"Jawad280"},"content":"| **View** | `view INDEX`\u003cbr\u003e e.g., `view 3` |","lastModifiedDate":"2024-03-02"},{"lineNumber":212,"author":{"gitId":"Jawad280"},"content":"| **Help** | `help` |","lastModifiedDate":"2024-03-01"}],"authorContributionMap":{"eunrcn":3,"chenyixin0":4,"Jawad280":43,"ashleygoh1":8,"-":154}},{"path":"docs/_markbind/layouts/default.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003chead-bottom\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003clink rel\u003d\"stylesheet\" href\u003d\"{{baseUrl}}/stylesheets/main.css\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003c/head-bottom\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cheader sticky\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cnavbar type\u003d\"dark\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"{{baseUrl}}/index.html\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003eInternHub\u003c/a\u003e","lastModifiedDate":"2024-02-23"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/index.html\" class\u003d\"nav-link\"\u003eHome\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/UserGuide.html\" class\u003d\"nav-link\"\u003eUser Guide\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/DeveloperGuide.html\" class\u003d\"nav-link\"\u003eDeveloper Guide\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/AboutUs.html\" class\u003d\"nav-link\"\u003eAbout Us\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"https://github.com/se-edu/addressbook-level3\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003e\u003cmd\u003e:fab-github:\u003c/md\u003e\u003c/a\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003cli slot\u003d\"right\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003cform class\u003d\"navbar-form\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\" menu-align-right\u003e\u003c/searchbar\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003c/form\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003c/navbar\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"-"},"content":"\u003c/header\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"flex-body\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"site-nav\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"site-nav-top\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"fw-bold mb-2\" style\u003d\"font-size: 1.25rem;\"\u003eSite Map\u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003csite-nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"-"},"content":"* [Home]({{ baseUrl }}/index.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"-"},"content":"* [User Guide]({{ baseUrl }}/UserGuide.html) :expanded:","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * [Quick Start]({{ baseUrl }}/UserGuide.html#quick-start)","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"-"},"content":" * [Features]({{ baseUrl }}/UserGuide.html#features)","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * [FAQ]({{ baseUrl }}/UserGuide.html#faq)","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * [Command Summary]({{ baseUrl }}/UserGuide.html#faq)","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"-"},"content":"* [Developer Guide]({{ baseUrl }}/DeveloperGuide.html) :expanded:","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * [Acknowledgements]({{ baseUrl }}/DeveloperGuide.html#acknowledgements)","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * [Setting Up]({{ baseUrl }}/DeveloperGuide.html#setting-up-getting-started)","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"-"},"content":" * [Design]({{ baseUrl }}/DeveloperGuide.html#design)","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * [Implementation]({{ baseUrl }}/DeveloperGuide.html#implementation)","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"-"},"content":" * [Documentation, logging, testing, configuration, dev-ops]({{ baseUrl }}/DeveloperGuide.html#documentation-logging-testing-configuration-dev-ops)","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * [Appendix: Requirements]({{ baseUrl }}/DeveloperGuide.html#appendix-requirements)","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * [Appendix: Instructions for manual testing]({{ baseUrl }}/DeveloperGuide.html#appendix-instructions-for-manual-testing)","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"-"},"content":"* Tutorials","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * [Tracing code]({{ baseUrl }}/tutorials/TracingCode.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"-"},"content":" * [Adding a command]({{ baseUrl }}/tutorials/AddRemark.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"-"},"content":" * [Removing Fields]({{ baseUrl }}/tutorials/RemovingFields.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* [About Us]({{ baseUrl }}/AboutUs.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003c/site-nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003c/nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003cdiv id\u003d\"content-wrapper\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"-"},"content":" {{ content }}","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"page-nav\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"-"},"content":" \u003cpage-nav /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"-"},"content":" \u003c/nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"-"},"content":" \u003cscroll-top-button\u003e\u003c/scroll-top-button\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"-"},"content":"\u003cfooter\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u003c!-- Support MarkBind by including a link to us on your landing page! --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"text-center\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"-"},"content":" \u003csmall\u003e[\u003cmd\u003e**Powered by**\u003c/md\u003e \u003cimg src\u003d\"https://markbind.org/favicon.ico\" width\u003d\"30\"\u003e {{MarkBind}}, generated on {{timestamp}}]\u003c/small\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"-"},"content":"\u003c/footer\u003e","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"ashleygoh1":1,"-":66}},{"path":"docs/team/ashley.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"ashleygoh1"},"content":"---","lastModifiedDate":"2024-02-27"},{"lineNumber":2,"author":{"gitId":"ashleygoh1"},"content":" layout: default.md","lastModifiedDate":"2024-02-27"},{"lineNumber":3,"author":{"gitId":"ashleygoh1"},"content":" title: \"John Doe\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-02-27"},{"lineNumber":4,"author":{"gitId":"ashleygoh1"},"content":"---","lastModifiedDate":"2024-02-27"},{"lineNumber":5,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":6,"author":{"gitId":"ashleygoh1"},"content":"### Project: AddressBook Level 3","lastModifiedDate":"2024-02-27"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":8,"author":{"gitId":"ashleygoh1"},"content":"AddressBook - Level 3 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.","lastModifiedDate":"2024-02-27"},{"lineNumber":9,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-02-27"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":12,"author":{"gitId":"ashleygoh1"},"content":"* **New Feature**: Allow user to add new contact to the address book.","lastModifiedDate":"2024-02-27"},{"lineNumber":13,"author":{"gitId":"ashleygoh1"},"content":" * What it does: Allow user to add the internship information that they applied for","lastModifiedDate":"2024-02-27"},{"lineNumber":14,"author":{"gitId":"ashleygoh1"},"content":" * Justification: This feature allow users to conveniently store all relevant internship details in one centralized location alongside their other contacts. This helps them stay organized and easily access internship information when needed.","lastModifiedDate":"2024-02-27"},{"lineNumber":15,"author":{"gitId":"ashleygoh1"},"content":" * Credits: The feature builds upon the robust foundation of AB3, optimizing code to accommodate new parameters.","lastModifiedDate":"2024-02-27"},{"lineNumber":16,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":17,"author":{"gitId":"ashleygoh1"},"content":"* **Code contributed**: [RepoSense link]()","lastModifiedDate":"2024-02-27"},{"lineNumber":18,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":19,"author":{"gitId":"ashleygoh1"},"content":"* **Project management**:","lastModifiedDate":"2024-02-27"},{"lineNumber":20,"author":{"gitId":"ashleygoh1"},"content":" * Managed releases `v1.3` - `v1.5rc` (3 releases) on GitHub","lastModifiedDate":"2024-02-27"},{"lineNumber":21,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":22,"author":{"gitId":"ashleygoh1"},"content":"* **Enhancements to existing features**:","lastModifiedDate":"2024-02-27"},{"lineNumber":23,"author":{"gitId":"ashleygoh1"},"content":" * Update existing tests for existing features with coverage of 78.57% (Pull requests [\\#36](), [\\#38]())","lastModifiedDate":"2024-02-27"},{"lineNumber":24,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":25,"author":{"gitId":"ashleygoh1"},"content":"* **Documentation**:","lastModifiedDate":"2024-02-27"},{"lineNumber":26,"author":{"gitId":"ashleygoh1"},"content":" * User Guide:","lastModifiedDate":"2024-02-27"},{"lineNumber":27,"author":{"gitId":"ashleygoh1"},"content":" * Added documentation for the features `add` and `edit` [\\#72]()","lastModifiedDate":"2024-02-27"},{"lineNumber":28,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":29,"author":{"gitId":"ashleygoh1"},"content":"* **Community**:","lastModifiedDate":"2024-02-27"},{"lineNumber":30,"author":{"gitId":"ashleygoh1"},"content":" * PRs reviewed (with non-trivial review comments): [\\#12](), [\\#32](), [\\#19](), [\\#42]()","lastModifiedDate":"2024-02-27"},{"lineNumber":31,"author":{"gitId":"ashleygoh1"},"content":" * Reported bugs and suggestions for other teams in the class (examples: [1](), [2](), [3]())","lastModifiedDate":"2024-02-27"},{"lineNumber":32,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":33,"author":{"gitId":"ashleygoh1"},"content":"* **Tools**:","lastModifiedDate":"2024-02-27"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":" * Set up codecov to the team repo","lastModifiedDate":"2024-02-27"},{"lineNumber":35,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":36,"author":{"gitId":"ashleygoh1"},"content":"* _{you can add/remove categories in the list above}_","lastModifiedDate":"2024-02-27"}],"authorContributionMap":{"ashleygoh1":36}},{"path":"src/main/java/seedu/address/logic/Messages.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic;","lastModifiedDate":"2023-07-13"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2023-07-14"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-07-14"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.stream.Stream;","lastModifiedDate":"2023-07-14"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.Prefix;","lastModifiedDate":"2023-07-14"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2019-02-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":10,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":" * Container for user visible messages.","lastModifiedDate":"2016-08-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class Messages {","lastModifiedDate":"2016-08-24"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":" public static final String MESSAGE_UNKNOWN_COMMAND \u003d \"Unknown command\";","lastModifiedDate":"2016-09-21"},{"lineNumber":16,"author":{"gitId":"-"},"content":" public static final String MESSAGE_INVALID_COMMAND_FORMAT \u003d \"Invalid command format! \\n%1$s\";","lastModifiedDate":"2016-08-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":" public static final String MESSAGE_INVALID_PERSON_DISPLAYED_INDEX \u003d \"The person index provided is invalid\";","lastModifiedDate":"2016-08-24"},{"lineNumber":18,"author":{"gitId":"-"},"content":" public static final String MESSAGE_PERSONS_LISTED_OVERVIEW \u003d \"%1$d persons listed!\";","lastModifiedDate":"2016-08-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":" public static final String MESSAGE_DUPLICATE_FIELDS \u003d","lastModifiedDate":"2023-07-14"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \"Multiple values specified for the following single-valued field(s): \";","lastModifiedDate":"2023-07-14"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":22,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-07-14"},{"lineNumber":23,"author":{"gitId":"-"},"content":" * Returns an error message indicating the duplicate prefixes.","lastModifiedDate":"2023-07-14"},{"lineNumber":24,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-07-14"},{"lineNumber":25,"author":{"gitId":"-"},"content":" public static String getErrorMessageForDuplicatePrefixes(Prefix... duplicatePrefixes) {","lastModifiedDate":"2023-07-14"},{"lineNumber":26,"author":{"gitId":"-"},"content":" assert duplicatePrefixes.length \u003e 0;","lastModifiedDate":"2023-07-14"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":28,"author":{"gitId":"-"},"content":" Set\u003cString\u003e duplicateFields \u003d","lastModifiedDate":"2023-07-14"},{"lineNumber":29,"author":{"gitId":"-"},"content":" Stream.of(duplicatePrefixes).map(Prefix::toString).collect(Collectors.toSet());","lastModifiedDate":"2023-07-14"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":31,"author":{"gitId":"-"},"content":" return MESSAGE_DUPLICATE_FIELDS + String.join(\" \", duplicateFields);","lastModifiedDate":"2023-07-14"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-14"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-28"},{"lineNumber":34,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2019-02-23"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * Formats the {@code person} for display to the user.","lastModifiedDate":"2019-02-23"},{"lineNumber":36,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2019-02-23"},{"lineNumber":37,"author":{"gitId":"-"},"content":" public static String format(Person person) {","lastModifiedDate":"2019-02-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":" final StringBuilder builder \u003d new StringBuilder();","lastModifiedDate":"2019-02-23"},{"lineNumber":39,"author":{"gitId":"ashleygoh1"},"content":" builder.append(person.getCompanyName())","lastModifiedDate":"2024-02-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" .append(\"; Phone: \")","lastModifiedDate":"2019-02-23"},{"lineNumber":41,"author":{"gitId":"-"},"content":" .append(person.getPhone())","lastModifiedDate":"2019-02-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":" .append(\"; Email: \")","lastModifiedDate":"2019-02-23"},{"lineNumber":43,"author":{"gitId":"-"},"content":" .append(person.getEmail())","lastModifiedDate":"2019-02-23"},{"lineNumber":44,"author":{"gitId":"-"},"content":" .append(\"; Address: \")","lastModifiedDate":"2019-02-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":" .append(person.getAddress())","lastModifiedDate":"2019-02-23"},{"lineNumber":46,"author":{"gitId":"ashleygoh1"},"content":" .append(\"; Tags: \")","lastModifiedDate":"2024-02-25"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":" .append(person.getTag())","lastModifiedDate":"2024-02-25"},{"lineNumber":48,"author":{"gitId":"ashleygoh1"},"content":" .append(\"; Job Description: \")","lastModifiedDate":"2024-02-25"},{"lineNumber":49,"author":{"gitId":"ashleygoh1"},"content":" .append(person.getJobDescription())","lastModifiedDate":"2024-02-25"},{"lineNumber":50,"author":{"gitId":"ashleygoh1"},"content":" .append(\"; Interview Date: \")","lastModifiedDate":"2024-02-25"},{"lineNumber":51,"author":{"gitId":"ashleygoh1"},"content":" .append(person.getInterviewDate())","lastModifiedDate":"2024-02-25"},{"lineNumber":52,"author":{"gitId":"ashleygoh1"},"content":" .append(\"; Internship Duration: \")","lastModifiedDate":"2024-02-25"},{"lineNumber":53,"author":{"gitId":"ashleygoh1"},"content":" .append(person.getInternDuration())","lastModifiedDate":"2024-02-25"},{"lineNumber":54,"author":{"gitId":"ashleygoh1"},"content":" .append(\"; Salary: \")","lastModifiedDate":"2024-02-25"},{"lineNumber":55,"author":{"gitId":"ashleygoh1"},"content":" .append(person.getSalary());","lastModifiedDate":"2024-02-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" return builder.toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":59,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-24"}],"authorContributionMap":{"ashleygoh1":11,"-":48}},{"path":"src/main/java/seedu/address/logic/commands/AddCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.commands;","lastModifiedDate":"2016-09-22"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2017-05-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2017-05-09"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2017-05-09"},{"lineNumber":6,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INTERN_DURATION;","lastModifiedDate":"2024-02-26"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INTERVIEW_DATE;","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_JOB_DESCRIPTION;","lastModifiedDate":"2024-02-26"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2017-06-06"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2017-05-09"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_SALARY;","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2017-05-09"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-09"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.ToStringBuilder;","lastModifiedDate":"2019-02-23"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.logic.Messages;","lastModifiedDate":"2023-07-13"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.exceptions.CommandException;","lastModifiedDate":"2017-02-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.model.Model;","lastModifiedDate":"2018-08-08"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2017-01-18"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":20,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-24"},{"lineNumber":21,"author":{"gitId":"-"},"content":" * Adds a person to the address book.","lastModifiedDate":"2016-08-24"},{"lineNumber":22,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":23,"author":{"gitId":"-"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2018-04-19"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":25,"author":{"gitId":"-"},"content":" public static final String COMMAND_WORD \u003d \"add\";","lastModifiedDate":"2016-08-24"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":27,"author":{"gitId":"-"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Adds a person to the address book. \"","lastModifiedDate":"2016-08-24"},{"lineNumber":28,"author":{"gitId":"-"},"content":" + \"Parameters: \"","lastModifiedDate":"2017-06-06"},{"lineNumber":29,"author":{"gitId":"-"},"content":" + PREFIX_NAME + \"NAME \"","lastModifiedDate":"2017-06-06"},{"lineNumber":30,"author":{"gitId":"-"},"content":" + PREFIX_PHONE + \"PHONE \"","lastModifiedDate":"2017-05-09"},{"lineNumber":31,"author":{"gitId":"-"},"content":" + PREFIX_EMAIL + \"EMAIL \"","lastModifiedDate":"2017-05-09"},{"lineNumber":32,"author":{"gitId":"ashleygoh1"},"content":" + \"[\" + PREFIX_ADDRESS + \"ADDRESS] \"","lastModifiedDate":"2024-02-26"},{"lineNumber":33,"author":{"gitId":"ashleygoh1"},"content":" + PREFIX_TAG + \"TAG \"","lastModifiedDate":"2024-02-26"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":" + PREFIX_JOB_DESCRIPTION + \"JOB DESCRIPTION \"","lastModifiedDate":"2024-02-26"},{"lineNumber":35,"author":{"gitId":"ashleygoh1"},"content":" + \"[\" + PREFIX_INTERVIEW_DATE + \"INTERVIEW DATE] \"","lastModifiedDate":"2024-02-26"},{"lineNumber":36,"author":{"gitId":"ashleygoh1"},"content":" + PREFIX_INTERN_DURATION + \"INTERN DURATION \"","lastModifiedDate":"2024-02-26"},{"lineNumber":37,"author":{"gitId":"ashleygoh1"},"content":" + PREFIX_SALARY + \"SALARY\\n\"","lastModifiedDate":"2024-02-26"},{"lineNumber":38,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":39,"author":{"gitId":"-"},"content":" + \"Example: \" + COMMAND_WORD + \" \"","lastModifiedDate":"2017-06-06"},{"lineNumber":40,"author":{"gitId":"ashleygoh1"},"content":" + PREFIX_NAME + \"Happy Burger \"","lastModifiedDate":"2024-02-26"},{"lineNumber":41,"author":{"gitId":"-"},"content":" + PREFIX_PHONE + \"98765432 \"","lastModifiedDate":"2017-05-09"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":" + PREFIX_EMAIL + \"HappyBurger@example.com \"","lastModifiedDate":"2024-02-26"},{"lineNumber":43,"author":{"gitId":"-"},"content":" + PREFIX_ADDRESS + \"311, Clementi Ave 2, #02-25 \"","lastModifiedDate":"2017-05-09"},{"lineNumber":44,"author":{"gitId":"ashleygoh1"},"content":" + PREFIX_TAG + \"F \"","lastModifiedDate":"2024-02-26"},{"lineNumber":45,"author":{"gitId":"ashleygoh1"},"content":" + PREFIX_JOB_DESCRIPTION + \"Software Developer intern \"","lastModifiedDate":"2024-02-26"},{"lineNumber":46,"author":{"gitId":"eunrcn"},"content":" + PREFIX_INTERVIEW_DATE + \"03-03-2024 1200 \"","lastModifiedDate":"2024-02-28"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":" + PREFIX_INTERN_DURATION + \"3 months \"","lastModifiedDate":"2024-02-26"},{"lineNumber":48,"author":{"gitId":"ashleygoh1"},"content":" + PREFIX_SALARY + \"1000\";","lastModifiedDate":"2024-02-26"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":50,"author":{"gitId":"-"},"content":" public static final String MESSAGE_SUCCESS \u003d \"New person added: %1$s\";","lastModifiedDate":"2016-08-24"},{"lineNumber":51,"author":{"gitId":"-"},"content":" public static final String MESSAGE_DUPLICATE_PERSON \u003d \"This person already exists in the address book\";","lastModifiedDate":"2016-08-24"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":53,"author":{"gitId":"-"},"content":" private final Person toAdd;","lastModifiedDate":"2016-08-24"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":55,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-09-21"},{"lineNumber":56,"author":{"gitId":"-"},"content":" * Creates an AddCommand to add the specified {@code Person}","lastModifiedDate":"2018-01-10"},{"lineNumber":57,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-09-21"},{"lineNumber":58,"author":{"gitId":"-"},"content":" public AddCommand(Person person) {","lastModifiedDate":"2018-01-10"},{"lineNumber":59,"author":{"gitId":"-"},"content":" requireNonNull(person);","lastModifiedDate":"2018-01-10"},{"lineNumber":60,"author":{"gitId":"-"},"content":" toAdd \u003d person;","lastModifiedDate":"2018-01-10"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-21"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":63,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":64,"author":{"gitId":"-"},"content":" public CommandResult execute(Model model) throws CommandException {","lastModifiedDate":"2019-01-25"},{"lineNumber":65,"author":{"gitId":"-"},"content":" requireNonNull(model);","lastModifiedDate":"2017-05-15"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-07"},{"lineNumber":67,"author":{"gitId":"-"},"content":" if (model.hasPerson(toAdd)) {","lastModifiedDate":"2018-08-07"},{"lineNumber":68,"author":{"gitId":"-"},"content":" throw new CommandException(MESSAGE_DUPLICATE_PERSON);","lastModifiedDate":"2018-08-07"},{"lineNumber":69,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-07"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-07"},{"lineNumber":71,"author":{"gitId":"-"},"content":" model.addPerson(toAdd);","lastModifiedDate":"2016-09-25"},{"lineNumber":72,"author":{"gitId":"-"},"content":" return new CommandResult(String.format(MESSAGE_SUCCESS, Messages.format(toAdd)));","lastModifiedDate":"2019-02-23"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":75,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-06-22"},{"lineNumber":76,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2017-06-22"},{"lineNumber":77,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2023-07-13"},{"lineNumber":78,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2023-07-13"},{"lineNumber":79,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-13"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-13"},{"lineNumber":81,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2023-07-13"},{"lineNumber":82,"author":{"gitId":"-"},"content":" if (!(other instanceof AddCommand)) {","lastModifiedDate":"2023-07-13"},{"lineNumber":83,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2023-07-13"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-13"},{"lineNumber":85,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-13"},{"lineNumber":86,"author":{"gitId":"-"},"content":" AddCommand otherAddCommand \u003d (AddCommand) other;","lastModifiedDate":"2023-07-13"},{"lineNumber":87,"author":{"gitId":"-"},"content":" return toAdd.equals(otherAddCommand.toAdd);","lastModifiedDate":"2023-07-13"},{"lineNumber":88,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-22"},{"lineNumber":89,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":90,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2019-02-23"},{"lineNumber":91,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2019-02-23"},{"lineNumber":92,"author":{"gitId":"-"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2019-02-23"},{"lineNumber":93,"author":{"gitId":"-"},"content":" .add(\"toAdd\", toAdd)","lastModifiedDate":"2019-02-23"},{"lineNumber":94,"author":{"gitId":"-"},"content":" .toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":95,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":96,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-24"}],"authorContributionMap":{"eunrcn":1,"ashleygoh1":17,"-":78}},{"path":"src/main/java/seedu/address/logic/commands/CommandResult.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.commands;","lastModifiedDate":"2016-09-22"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2017-05-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.Objects;","lastModifiedDate":"2018-12-09"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":7,"author":{"gitId":"chenyixin0"},"content":"import javafx.collections.transformation.FilteredList;","lastModifiedDate":"2024-02-29"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.ToStringBuilder;","lastModifiedDate":"2019-02-23"},{"lineNumber":9,"author":{"gitId":"Jawad280"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2024-02-26"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":11,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":" * Represents the result of a command execution.","lastModifiedDate":"2016-08-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":14,"author":{"gitId":"-"},"content":"public class CommandResult {","lastModifiedDate":"2016-08-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-28"},{"lineNumber":16,"author":{"gitId":"-"},"content":" private final String feedbackToUser;","lastModifiedDate":"2018-12-09"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":18,"author":{"gitId":"-"},"content":" /** Help information should be shown to the user. */","lastModifiedDate":"2018-12-09"},{"lineNumber":19,"author":{"gitId":"-"},"content":" private final boolean showHelp;","lastModifiedDate":"2018-12-09"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":21,"author":{"gitId":"-"},"content":" /** The application should exit. */","lastModifiedDate":"2018-12-09"},{"lineNumber":22,"author":{"gitId":"-"},"content":" private final boolean exit;","lastModifiedDate":"2018-12-09"},{"lineNumber":23,"author":{"gitId":"Jawad280"},"content":" private final Person viewPerson;","lastModifiedDate":"2024-02-26"},{"lineNumber":24,"author":{"gitId":"chenyixin0"},"content":" private final FilteredList\u003cPerson\u003e viewList;","lastModifiedDate":"2024-02-29"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":26,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-12-09"},{"lineNumber":27,"author":{"gitId":"-"},"content":" * Constructs a {@code CommandResult} with the specified fields.","lastModifiedDate":"2018-12-09"},{"lineNumber":28,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-12-09"},{"lineNumber":29,"author":{"gitId":"-"},"content":" public CommandResult(String feedbackToUser, boolean showHelp, boolean exit) {","lastModifiedDate":"2018-12-09"},{"lineNumber":30,"author":{"gitId":"-"},"content":" this.feedbackToUser \u003d requireNonNull(feedbackToUser);","lastModifiedDate":"2017-05-15"},{"lineNumber":31,"author":{"gitId":"-"},"content":" this.showHelp \u003d showHelp;","lastModifiedDate":"2018-12-09"},{"lineNumber":32,"author":{"gitId":"-"},"content":" this.exit \u003d exit;","lastModifiedDate":"2018-12-09"},{"lineNumber":33,"author":{"gitId":"Jawad280"},"content":" this.viewPerson \u003d null;","lastModifiedDate":"2024-02-26"},{"lineNumber":34,"author":{"gitId":"chenyixin0"},"content":" this.viewList \u003d null;","lastModifiedDate":"2024-02-29"},{"lineNumber":35,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":37,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-12-09"},{"lineNumber":38,"author":{"gitId":"-"},"content":" * Constructs a {@code CommandResult} with the specified {@code feedbackToUser},","lastModifiedDate":"2018-12-09"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * and other fields set to their default value.","lastModifiedDate":"2018-12-09"},{"lineNumber":40,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-12-09"},{"lineNumber":41,"author":{"gitId":"-"},"content":" public CommandResult(String feedbackToUser) {","lastModifiedDate":"2018-12-09"},{"lineNumber":42,"author":{"gitId":"-"},"content":" this(feedbackToUser, false, false);","lastModifiedDate":"2018-12-09"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":44,"author":{"gitId":"Jawad280"},"content":" /**","lastModifiedDate":"2024-02-26"},{"lineNumber":45,"author":{"gitId":"Jawad280"},"content":" * Constructs a {@code CommandResult} with the specified {@code feedbackToUser},","lastModifiedDate":"2024-02-26"},{"lineNumber":46,"author":{"gitId":"Jawad280"},"content":" * and other fields set to their default value.","lastModifiedDate":"2024-02-26"},{"lineNumber":47,"author":{"gitId":"Jawad280"},"content":" */","lastModifiedDate":"2024-02-26"},{"lineNumber":48,"author":{"gitId":"Jawad280"},"content":" public CommandResult(String feedbackToUser, Person viewPerson) {","lastModifiedDate":"2024-02-26"},{"lineNumber":49,"author":{"gitId":"Jawad280"},"content":" this.feedbackToUser \u003d requireNonNull(feedbackToUser);","lastModifiedDate":"2024-02-26"},{"lineNumber":50,"author":{"gitId":"Jawad280"},"content":" this.showHelp \u003d false;","lastModifiedDate":"2024-02-26"},{"lineNumber":51,"author":{"gitId":"Jawad280"},"content":" this.exit \u003d false;","lastModifiedDate":"2024-02-26"},{"lineNumber":52,"author":{"gitId":"Jawad280"},"content":" this.viewPerson \u003d viewPerson;","lastModifiedDate":"2024-02-26"},{"lineNumber":53,"author":{"gitId":"chenyixin0"},"content":" this.viewList \u003d null;","lastModifiedDate":"2024-02-29"},{"lineNumber":54,"author":{"gitId":"chenyixin0"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":55,"author":{"gitId":"chenyixin0"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":56,"author":{"gitId":"Jawad280"},"content":" /**","lastModifiedDate":"2024-03-01"},{"lineNumber":57,"author":{"gitId":"Jawad280"},"content":" * Constructs a {@code CommandResult} with the specified {@code feedbackToUser},","lastModifiedDate":"2024-03-01"},{"lineNumber":58,"author":{"gitId":"Jawad280"},"content":" * and other fields set to their default value.","lastModifiedDate":"2024-03-01"},{"lineNumber":59,"author":{"gitId":"Jawad280"},"content":" */","lastModifiedDate":"2024-03-01"},{"lineNumber":60,"author":{"gitId":"chenyixin0"},"content":" public CommandResult(String feedbackToUser, FilteredList\u003cPerson\u003e viewList) {","lastModifiedDate":"2024-02-29"},{"lineNumber":61,"author":{"gitId":"chenyixin0"},"content":" this.feedbackToUser \u003d requireNonNull(feedbackToUser);","lastModifiedDate":"2024-02-29"},{"lineNumber":62,"author":{"gitId":"chenyixin0"},"content":" this.showHelp \u003d false;","lastModifiedDate":"2024-02-29"},{"lineNumber":63,"author":{"gitId":"chenyixin0"},"content":" this.exit \u003d false;","lastModifiedDate":"2024-02-29"},{"lineNumber":64,"author":{"gitId":"chenyixin0"},"content":" this.viewPerson \u003d null;","lastModifiedDate":"2024-02-29"},{"lineNumber":65,"author":{"gitId":"chenyixin0"},"content":" this.viewList \u003d viewList;","lastModifiedDate":"2024-02-29"},{"lineNumber":66,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":68,"author":{"gitId":"-"},"content":" public String getFeedbackToUser() {","lastModifiedDate":"2018-12-09"},{"lineNumber":69,"author":{"gitId":"-"},"content":" return feedbackToUser;","lastModifiedDate":"2018-12-09"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":71,"author":{"gitId":"Jawad280"},"content":" public Person getViewPerson() {","lastModifiedDate":"2024-02-26"},{"lineNumber":72,"author":{"gitId":"Jawad280"},"content":" return this.viewPerson;","lastModifiedDate":"2024-02-26"},{"lineNumber":73,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":74,"author":{"gitId":"chenyixin0"},"content":" public FilteredList\u003cPerson\u003e getViewList() {","lastModifiedDate":"2024-02-29"},{"lineNumber":75,"author":{"gitId":"chenyixin0"},"content":" return this.viewList;","lastModifiedDate":"2024-02-29"},{"lineNumber":76,"author":{"gitId":"chenyixin0"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":78,"author":{"gitId":"-"},"content":" public boolean isShowHelp() {","lastModifiedDate":"2018-12-09"},{"lineNumber":79,"author":{"gitId":"-"},"content":" return showHelp;","lastModifiedDate":"2018-12-09"},{"lineNumber":80,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":81,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":82,"author":{"gitId":"-"},"content":" public boolean isExit() {","lastModifiedDate":"2018-12-09"},{"lineNumber":83,"author":{"gitId":"-"},"content":" return exit;","lastModifiedDate":"2018-12-09"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":85,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":86,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":87,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-12-09"},{"lineNumber":88,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2018-12-09"},{"lineNumber":89,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2018-12-09"},{"lineNumber":90,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2018-12-09"},{"lineNumber":91,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":93,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2018-12-09"},{"lineNumber":94,"author":{"gitId":"-"},"content":" if (!(other instanceof CommandResult)) {","lastModifiedDate":"2018-12-09"},{"lineNumber":95,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2018-12-09"},{"lineNumber":96,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":97,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":98,"author":{"gitId":"-"},"content":" CommandResult otherCommandResult \u003d (CommandResult) other;","lastModifiedDate":"2018-12-09"},{"lineNumber":99,"author":{"gitId":"-"},"content":" return feedbackToUser.equals(otherCommandResult.feedbackToUser)","lastModifiedDate":"2018-12-09"},{"lineNumber":100,"author":{"gitId":"-"},"content":" \u0026\u0026 showHelp \u003d\u003d otherCommandResult.showHelp","lastModifiedDate":"2018-12-09"},{"lineNumber":101,"author":{"gitId":"-"},"content":" \u0026\u0026 exit \u003d\u003d otherCommandResult.exit;","lastModifiedDate":"2018-12-09"},{"lineNumber":102,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":104,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-12-09"},{"lineNumber":105,"author":{"gitId":"-"},"content":" public int hashCode() {","lastModifiedDate":"2018-12-09"},{"lineNumber":106,"author":{"gitId":"-"},"content":" return Objects.hash(feedbackToUser, showHelp, exit);","lastModifiedDate":"2018-12-09"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":108,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":109,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2019-02-23"},{"lineNumber":110,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2019-02-23"},{"lineNumber":111,"author":{"gitId":"-"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2019-02-23"},{"lineNumber":112,"author":{"gitId":"-"},"content":" .add(\"feedbackToUser\", feedbackToUser)","lastModifiedDate":"2019-02-23"},{"lineNumber":113,"author":{"gitId":"-"},"content":" .add(\"showHelp\", showHelp)","lastModifiedDate":"2019-02-23"},{"lineNumber":114,"author":{"gitId":"-"},"content":" .add(\"exit\", exit)","lastModifiedDate":"2019-02-23"},{"lineNumber":115,"author":{"gitId":"-"},"content":" .toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":117,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":118,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-24"}],"authorContributionMap":{"chenyixin0":15,"Jawad280":21,"-":82}},{"path":"src/main/java/seedu/address/logic/commands/DeleteCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.commands;","lastModifiedDate":"2016-09-22"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2018-08-08"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2017-09-01"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2017-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.ToStringBuilder;","lastModifiedDate":"2019-02-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import seedu.address.logic.Messages;","lastModifiedDate":"2023-07-13"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.exceptions.CommandException;","lastModifiedDate":"2017-02-05"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.model.Model;","lastModifiedDate":"2018-08-08"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-01-10"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":14,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":" * Deletes a person identified using it\u0027s displayed index from the address book.","lastModifiedDate":"2018-04-01"},{"lineNumber":16,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2018-04-19"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":" public static final String COMMAND_WORD \u003d \"delete\";","lastModifiedDate":"2016-08-24"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":21,"author":{"gitId":"-"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD","lastModifiedDate":"2016-08-24"},{"lineNumber":22,"author":{"gitId":"-"},"content":" + \": Deletes the person identified by the index number used in the displayed person list.\\n\"","lastModifiedDate":"2018-04-01"},{"lineNumber":23,"author":{"gitId":"-"},"content":" + \"Parameters: INDEX (must be a positive integer)\\n\"","lastModifiedDate":"2016-09-29"},{"lineNumber":24,"author":{"gitId":"-"},"content":" + \"Example: \" + COMMAND_WORD + \" 1\";","lastModifiedDate":"2016-08-24"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":26,"author":{"gitId":"minghowC"},"content":" // Output message: \"Deleted Person: Person Name\"","lastModifiedDate":"2024-03-01"},{"lineNumber":27,"author":{"gitId":"-"},"content":" public static final String MESSAGE_DELETE_PERSON_SUCCESS \u003d \"Deleted Person: %1$s\";","lastModifiedDate":"2016-08-24"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":29,"author":{"gitId":"-"},"content":" private final Index targetIndex;","lastModifiedDate":"2017-06-27"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":31,"author":{"gitId":"-"},"content":" public DeleteCommand(Index targetIndex) {","lastModifiedDate":"2017-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" this.targetIndex \u003d targetIndex;","lastModifiedDate":"2016-09-22"},{"lineNumber":33,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":35,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":36,"author":{"gitId":"-"},"content":" public CommandResult execute(Model model) throws CommandException {","lastModifiedDate":"2019-01-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" requireNonNull(model);","lastModifiedDate":"2018-08-08"},{"lineNumber":38,"author":{"gitId":"-"},"content":" List\u003cPerson\u003e lastShownList \u003d model.getFilteredPersonList();","lastModifiedDate":"2018-04-19"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":40,"author":{"gitId":"-"},"content":" if (targetIndex.getZeroBased() \u003e\u003d lastShownList.size()) {","lastModifiedDate":"2018-04-19"},{"lineNumber":41,"author":{"gitId":"-"},"content":" throw new CommandException(Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX);","lastModifiedDate":"2018-04-19"},{"lineNumber":42,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-04-19"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":44,"author":{"gitId":"-"},"content":" Person personToDelete \u003d lastShownList.get(targetIndex.getZeroBased());","lastModifiedDate":"2018-04-19"},{"lineNumber":45,"author":{"gitId":"-"},"content":" model.deletePerson(personToDelete);","lastModifiedDate":"2016-09-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" return new CommandResult(String.format(MESSAGE_DELETE_PERSON_SUCCESS, Messages.format(personToDelete)));","lastModifiedDate":"2019-02-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-28"},{"lineNumber":49,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-06-27"},{"lineNumber":50,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2017-06-27"},{"lineNumber":51,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2023-07-13"},{"lineNumber":52,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2023-07-13"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-13"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-13"},{"lineNumber":55,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2023-07-13"},{"lineNumber":56,"author":{"gitId":"-"},"content":" if (!(other instanceof DeleteCommand)) {","lastModifiedDate":"2023-07-13"},{"lineNumber":57,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2023-07-13"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-13"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-13"},{"lineNumber":60,"author":{"gitId":"-"},"content":" DeleteCommand otherDeleteCommand \u003d (DeleteCommand) other;","lastModifiedDate":"2023-07-13"},{"lineNumber":61,"author":{"gitId":"-"},"content":" return targetIndex.equals(otherDeleteCommand.targetIndex);","lastModifiedDate":"2023-07-13"},{"lineNumber":62,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-27"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":64,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2019-02-23"},{"lineNumber":65,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2019-02-23"},{"lineNumber":66,"author":{"gitId":"-"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2019-02-23"},{"lineNumber":67,"author":{"gitId":"-"},"content":" .add(\"targetIndex\", targetIndex)","lastModifiedDate":"2019-02-23"},{"lineNumber":68,"author":{"gitId":"-"},"content":" .toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":69,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":70,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-24"}],"authorContributionMap":{"minghowC":1,"-":69}},{"path":"src/main/java/seedu/address/logic/commands/EditCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.commands;","lastModifiedDate":"2024-02-28"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2024-02-28"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2024-02-28"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2024-02-28"},{"lineNumber":6,"author":{"gitId":"eunrcn"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INTERN_DURATION;","lastModifiedDate":"2024-02-28"},{"lineNumber":7,"author":{"gitId":"eunrcn"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INTERVIEW_DATE;","lastModifiedDate":"2024-02-28"},{"lineNumber":8,"author":{"gitId":"eunrcn"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_JOB_DESCRIPTION;","lastModifiedDate":"2024-02-28"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2024-02-28"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2024-02-28"},{"lineNumber":11,"author":{"gitId":"eunrcn"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_SALARY;","lastModifiedDate":"2024-02-28"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2024-02-28"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import static seedu.address.model.Model.PREDICATE_SHOW_ALL_PERSONS;","lastModifiedDate":"2024-02-28"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2024-02-28"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import java.util.Objects;","lastModifiedDate":"2024-02-28"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import java.util.Optional;","lastModifiedDate":"2024-02-28"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2024-02-28"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.CollectionUtil;","lastModifiedDate":"2024-02-28"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.ToStringBuilder;","lastModifiedDate":"2024-02-28"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import seedu.address.logic.Messages;","lastModifiedDate":"2024-02-28"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.exceptions.CommandException;","lastModifiedDate":"2024-02-28"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import seedu.address.model.Model;","lastModifiedDate":"2024-02-28"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2024-02-28"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2024-02-29"},{"lineNumber":27,"author":{"gitId":"eunrcn"},"content":"import seedu.address.model.person.InternDuration;","lastModifiedDate":"2024-02-28"},{"lineNumber":28,"author":{"gitId":"eunrcn"},"content":"import seedu.address.model.person.InterviewDate;","lastModifiedDate":"2024-02-28"},{"lineNumber":29,"author":{"gitId":"Jawad280"},"content":"import seedu.address.model.person.JobDescription;","lastModifiedDate":"2024-02-29"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2024-02-28"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2024-02-28"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2024-02-28"},{"lineNumber":33,"author":{"gitId":"Jawad280"},"content":"import seedu.address.model.person.Salary;","lastModifiedDate":"2024-02-29"},{"lineNumber":34,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2024-02-28"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":36,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2024-02-28"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * Edits the details of an existing person in the address book.","lastModifiedDate":"2024-02-28"},{"lineNumber":38,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2024-02-28"},{"lineNumber":39,"author":{"gitId":"-"},"content":"public class EditCommand extends Command {","lastModifiedDate":"2024-02-28"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":41,"author":{"gitId":"-"},"content":" public static final String COMMAND_WORD \u003d \"edit\";","lastModifiedDate":"2024-02-28"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":43,"author":{"gitId":"-"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Edits the details of the person identified \"","lastModifiedDate":"2024-02-28"},{"lineNumber":44,"author":{"gitId":"-"},"content":" + \"by the index number used in the displayed person list. \"","lastModifiedDate":"2024-02-28"},{"lineNumber":45,"author":{"gitId":"-"},"content":" + \"Existing values will be overwritten by the input values.\\n\"","lastModifiedDate":"2024-02-28"},{"lineNumber":46,"author":{"gitId":"-"},"content":" + \"Parameters: INDEX (must be a positive integer) \"","lastModifiedDate":"2024-02-28"},{"lineNumber":47,"author":{"gitId":"-"},"content":" + \"[\" + PREFIX_NAME + \"NAME] \"","lastModifiedDate":"2024-02-28"},{"lineNumber":48,"author":{"gitId":"-"},"content":" + \"[\" + PREFIX_PHONE + \"PHONE] \"","lastModifiedDate":"2024-02-28"},{"lineNumber":49,"author":{"gitId":"-"},"content":" + \"[\" + PREFIX_EMAIL + \"EMAIL] \"","lastModifiedDate":"2024-02-28"},{"lineNumber":50,"author":{"gitId":"-"},"content":" + \"[\" + PREFIX_ADDRESS + \"ADDRESS] \"","lastModifiedDate":"2024-02-28"},{"lineNumber":51,"author":{"gitId":"eunrcn"},"content":" + \"[\" + PREFIX_JOB_DESCRIPTION + \"JOB DESCRIPTION] \"","lastModifiedDate":"2024-02-28"},{"lineNumber":52,"author":{"gitId":"eunrcn"},"content":" + \"[\" + PREFIX_INTERVIEW_DATE + \"INTERVIEW DATE] \"","lastModifiedDate":"2024-02-28"},{"lineNumber":53,"author":{"gitId":"eunrcn"},"content":" + \"[\" + PREFIX_INTERN_DURATION + \"INTERN DURATION] \"","lastModifiedDate":"2024-02-28"},{"lineNumber":54,"author":{"gitId":"eunrcn"},"content":" + \"[\" + PREFIX_SALARY + \"SALARY] \"","lastModifiedDate":"2024-02-28"},{"lineNumber":55,"author":{"gitId":"-"},"content":" + \"[\" + PREFIX_TAG + \"TAG]...\\n\"","lastModifiedDate":"2024-02-28"},{"lineNumber":56,"author":{"gitId":"-"},"content":" + \"Example: \" + COMMAND_WORD + \" 1 \"","lastModifiedDate":"2024-02-28"},{"lineNumber":57,"author":{"gitId":"-"},"content":" + PREFIX_PHONE + \"91234567 \"","lastModifiedDate":"2024-02-28"},{"lineNumber":58,"author":{"gitId":"-"},"content":" + PREFIX_EMAIL + \"johndoe@example.com\";","lastModifiedDate":"2024-02-28"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":60,"author":{"gitId":"-"},"content":" public static final String MESSAGE_EDIT_PERSON_SUCCESS \u003d \"Edited Person: %1$s\";","lastModifiedDate":"2024-02-28"},{"lineNumber":61,"author":{"gitId":"-"},"content":" public static final String MESSAGE_NOT_EDITED \u003d \"At least one field to edit must be provided.\";","lastModifiedDate":"2024-02-28"},{"lineNumber":62,"author":{"gitId":"-"},"content":" public static final String MESSAGE_DUPLICATE_PERSON \u003d \"This person already exists in the address book.\";","lastModifiedDate":"2024-02-28"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":64,"author":{"gitId":"-"},"content":" private final Index index;","lastModifiedDate":"2024-02-28"},{"lineNumber":65,"author":{"gitId":"-"},"content":" private final EditPersonDescriptor editPersonDescriptor;","lastModifiedDate":"2024-02-28"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":67,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2024-02-28"},{"lineNumber":68,"author":{"gitId":"-"},"content":" * @param index of the person in the filtered person list to edit","lastModifiedDate":"2024-02-28"},{"lineNumber":69,"author":{"gitId":"-"},"content":" * @param editPersonDescriptor details to edit the person with","lastModifiedDate":"2024-02-28"},{"lineNumber":70,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2024-02-28"},{"lineNumber":71,"author":{"gitId":"-"},"content":" public EditCommand(Index index, EditPersonDescriptor editPersonDescriptor) {","lastModifiedDate":"2024-02-28"},{"lineNumber":72,"author":{"gitId":"-"},"content":" requireNonNull(index);","lastModifiedDate":"2024-02-28"},{"lineNumber":73,"author":{"gitId":"-"},"content":" requireNonNull(editPersonDescriptor);","lastModifiedDate":"2024-02-28"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":75,"author":{"gitId":"-"},"content":" this.index \u003d index;","lastModifiedDate":"2024-02-28"},{"lineNumber":76,"author":{"gitId":"-"},"content":" this.editPersonDescriptor \u003d new EditPersonDescriptor(editPersonDescriptor);","lastModifiedDate":"2024-02-28"},{"lineNumber":77,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":78,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":79,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2024-02-28"},{"lineNumber":80,"author":{"gitId":"-"},"content":" public CommandResult execute(Model model) throws CommandException {","lastModifiedDate":"2024-02-28"},{"lineNumber":81,"author":{"gitId":"-"},"content":" requireNonNull(model);","lastModifiedDate":"2024-02-28"},{"lineNumber":82,"author":{"gitId":"-"},"content":" List\u003cPerson\u003e lastShownList \u003d model.getFilteredPersonList();","lastModifiedDate":"2024-02-28"},{"lineNumber":83,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":84,"author":{"gitId":"-"},"content":" if (index.getZeroBased() \u003e\u003d lastShownList.size()) {","lastModifiedDate":"2024-02-28"},{"lineNumber":85,"author":{"gitId":"-"},"content":" throw new CommandException(Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX);","lastModifiedDate":"2024-02-28"},{"lineNumber":86,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":87,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":88,"author":{"gitId":"-"},"content":" Person personToEdit \u003d lastShownList.get(index.getZeroBased());","lastModifiedDate":"2024-02-28"},{"lineNumber":89,"author":{"gitId":"-"},"content":" Person editedPerson \u003d createEditedPerson(personToEdit, editPersonDescriptor);","lastModifiedDate":"2024-02-28"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":91,"author":{"gitId":"-"},"content":" if (!personToEdit.isSamePerson(editedPerson) \u0026\u0026 model.hasPerson(editedPerson)) {","lastModifiedDate":"2024-02-28"},{"lineNumber":92,"author":{"gitId":"-"},"content":" throw new CommandException(MESSAGE_DUPLICATE_PERSON);","lastModifiedDate":"2024-02-28"},{"lineNumber":93,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":94,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":95,"author":{"gitId":"-"},"content":" model.setPerson(personToEdit, editedPerson);","lastModifiedDate":"2024-02-28"},{"lineNumber":96,"author":{"gitId":"-"},"content":" model.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS);","lastModifiedDate":"2024-02-28"},{"lineNumber":97,"author":{"gitId":"-"},"content":" return new CommandResult(String.format(MESSAGE_EDIT_PERSON_SUCCESS, Messages.format(editedPerson)));","lastModifiedDate":"2024-02-28"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":99,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":100,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2024-02-28"},{"lineNumber":101,"author":{"gitId":"-"},"content":" * Creates and returns a {@code Person} with the details of {@code personToEdit}","lastModifiedDate":"2024-02-28"},{"lineNumber":102,"author":{"gitId":"-"},"content":" * edited with {@code editPersonDescriptor}.","lastModifiedDate":"2024-02-28"},{"lineNumber":103,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2024-02-28"},{"lineNumber":104,"author":{"gitId":"-"},"content":" private static Person createEditedPerson(Person personToEdit, EditPersonDescriptor editPersonDescriptor) {","lastModifiedDate":"2024-02-28"},{"lineNumber":105,"author":{"gitId":"-"},"content":" assert personToEdit !\u003d null;","lastModifiedDate":"2024-02-28"},{"lineNumber":106,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":107,"author":{"gitId":"eunrcn"},"content":" Name updatedName \u003d editPersonDescriptor.getName().orElse(personToEdit.getCompanyName());","lastModifiedDate":"2024-02-28"},{"lineNumber":108,"author":{"gitId":"-"},"content":" Phone updatedPhone \u003d editPersonDescriptor.getPhone().orElse(personToEdit.getPhone());","lastModifiedDate":"2024-02-28"},{"lineNumber":109,"author":{"gitId":"-"},"content":" Email updatedEmail \u003d editPersonDescriptor.getEmail().orElse(personToEdit.getEmail());","lastModifiedDate":"2024-02-28"},{"lineNumber":110,"author":{"gitId":"-"},"content":" Address updatedAddress \u003d editPersonDescriptor.getAddress().orElse(personToEdit.getAddress());","lastModifiedDate":"2024-02-28"},{"lineNumber":111,"author":{"gitId":"Jawad280"},"content":" JobDescription updatedJobDescription \u003d editPersonDescriptor","lastModifiedDate":"2024-02-29"},{"lineNumber":112,"author":{"gitId":"Jawad280"},"content":" .getJobDescription()","lastModifiedDate":"2024-02-29"},{"lineNumber":113,"author":{"gitId":"Jawad280"},"content":" .orElse(personToEdit.getJobDescription());","lastModifiedDate":"2024-02-29"},{"lineNumber":114,"author":{"gitId":"Jawad280"},"content":" InterviewDate updatedInterviewDate \u003d editPersonDescriptor","lastModifiedDate":"2024-02-29"},{"lineNumber":115,"author":{"gitId":"Jawad280"},"content":" .getInterviewDate()","lastModifiedDate":"2024-02-29"},{"lineNumber":116,"author":{"gitId":"Jawad280"},"content":" .orElse(personToEdit.getInterviewDate());","lastModifiedDate":"2024-02-29"},{"lineNumber":117,"author":{"gitId":"Jawad280"},"content":" InternDuration updatedInternDuration \u003d editPersonDescriptor","lastModifiedDate":"2024-02-29"},{"lineNumber":118,"author":{"gitId":"Jawad280"},"content":" .getInternDuration()","lastModifiedDate":"2024-02-29"},{"lineNumber":119,"author":{"gitId":"Jawad280"},"content":" .orElse(personToEdit.getInternDuration());","lastModifiedDate":"2024-02-29"},{"lineNumber":120,"author":{"gitId":"eunrcn"},"content":" Salary updatedSalary \u003d editPersonDescriptor.getSalary().orElse(personToEdit.getSalary());","lastModifiedDate":"2024-02-28"},{"lineNumber":121,"author":{"gitId":"Jawad280"},"content":" Tag updatedTags \u003d editPersonDescriptor.getTag().orElse(personToEdit.getTag());","lastModifiedDate":"2024-02-29"},{"lineNumber":122,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":123,"author":{"gitId":"eunrcn"},"content":" return new Person(updatedName, updatedPhone, updatedEmail, updatedAddress, updatedTags,","lastModifiedDate":"2024-02-28"},{"lineNumber":124,"author":{"gitId":"eunrcn"},"content":" updatedJobDescription, updatedInterviewDate,","lastModifiedDate":"2024-02-28"},{"lineNumber":125,"author":{"gitId":"eunrcn"},"content":" updatedInternDuration, updatedSalary);","lastModifiedDate":"2024-02-28"},{"lineNumber":126,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":127,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":128,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2024-02-28"},{"lineNumber":129,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2024-02-28"},{"lineNumber":130,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2024-02-28"},{"lineNumber":131,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2024-02-28"},{"lineNumber":132,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":133,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":134,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2024-02-28"},{"lineNumber":135,"author":{"gitId":"-"},"content":" if (!(other instanceof EditCommand)) {","lastModifiedDate":"2024-02-28"},{"lineNumber":136,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2024-02-28"},{"lineNumber":137,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":138,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":139,"author":{"gitId":"-"},"content":" EditCommand otherEditCommand \u003d (EditCommand) other;","lastModifiedDate":"2024-02-28"},{"lineNumber":140,"author":{"gitId":"-"},"content":" return index.equals(otherEditCommand.index)","lastModifiedDate":"2024-02-28"},{"lineNumber":141,"author":{"gitId":"-"},"content":" \u0026\u0026 editPersonDescriptor.equals(otherEditCommand.editPersonDescriptor);","lastModifiedDate":"2024-02-28"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":143,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":144,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2024-02-28"},{"lineNumber":145,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2024-02-28"},{"lineNumber":146,"author":{"gitId":"-"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2024-02-28"},{"lineNumber":147,"author":{"gitId":"-"},"content":" .add(\"index\", index)","lastModifiedDate":"2024-02-28"},{"lineNumber":148,"author":{"gitId":"-"},"content":" .add(\"editPersonDescriptor\", editPersonDescriptor)","lastModifiedDate":"2024-02-28"},{"lineNumber":149,"author":{"gitId":"-"},"content":" .toString();","lastModifiedDate":"2024-02-28"},{"lineNumber":150,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":151,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":152,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2024-02-28"},{"lineNumber":153,"author":{"gitId":"-"},"content":" * Stores the details to edit the person with. Each non-empty field value will replace the","lastModifiedDate":"2024-02-28"},{"lineNumber":154,"author":{"gitId":"-"},"content":" * corresponding field value of the person.","lastModifiedDate":"2024-02-28"},{"lineNumber":155,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2024-02-28"},{"lineNumber":156,"author":{"gitId":"-"},"content":" public static class EditPersonDescriptor {","lastModifiedDate":"2024-02-28"},{"lineNumber":157,"author":{"gitId":"-"},"content":" private Name name;","lastModifiedDate":"2024-02-28"},{"lineNumber":158,"author":{"gitId":"-"},"content":" private Phone phone;","lastModifiedDate":"2024-02-28"},{"lineNumber":159,"author":{"gitId":"-"},"content":" private Email email;","lastModifiedDate":"2024-02-28"},{"lineNumber":160,"author":{"gitId":"-"},"content":" private Address address;","lastModifiedDate":"2024-02-28"},{"lineNumber":161,"author":{"gitId":"Jawad280"},"content":" private Tag tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":162,"author":{"gitId":"eunrcn"},"content":" private JobDescription jobDescription;","lastModifiedDate":"2024-02-28"},{"lineNumber":163,"author":{"gitId":"eunrcn"},"content":" private InternDuration internDuration;","lastModifiedDate":"2024-02-28"},{"lineNumber":164,"author":{"gitId":"eunrcn"},"content":" private InterviewDate interviewDate;","lastModifiedDate":"2024-02-28"},{"lineNumber":165,"author":{"gitId":"eunrcn"},"content":" private Salary salary;","lastModifiedDate":"2024-02-28"},{"lineNumber":166,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":167,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":168,"author":{"gitId":"-"},"content":" public EditPersonDescriptor() {}","lastModifiedDate":"2024-02-28"},{"lineNumber":169,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":170,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2024-02-28"},{"lineNumber":171,"author":{"gitId":"-"},"content":" * Copy constructor.","lastModifiedDate":"2024-02-28"},{"lineNumber":172,"author":{"gitId":"-"},"content":" * A defensive copy of {@code tags} is used internally.","lastModifiedDate":"2024-02-28"},{"lineNumber":173,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2024-02-28"},{"lineNumber":174,"author":{"gitId":"-"},"content":" public EditPersonDescriptor(EditPersonDescriptor toCopy) {","lastModifiedDate":"2024-02-28"},{"lineNumber":175,"author":{"gitId":"-"},"content":" setName(toCopy.name);","lastModifiedDate":"2024-02-28"},{"lineNumber":176,"author":{"gitId":"-"},"content":" setPhone(toCopy.phone);","lastModifiedDate":"2024-02-28"},{"lineNumber":177,"author":{"gitId":"-"},"content":" setEmail(toCopy.email);","lastModifiedDate":"2024-02-28"},{"lineNumber":178,"author":{"gitId":"-"},"content":" setAddress(toCopy.address);","lastModifiedDate":"2024-02-28"},{"lineNumber":179,"author":{"gitId":"Jawad280"},"content":" setTag(toCopy.tag);","lastModifiedDate":"2024-02-29"},{"lineNumber":180,"author":{"gitId":"eunrcn"},"content":" setJobDescription(toCopy.jobDescription);","lastModifiedDate":"2024-02-28"},{"lineNumber":181,"author":{"gitId":"eunrcn"},"content":" setInternDuration(toCopy.internDuration);","lastModifiedDate":"2024-02-28"},{"lineNumber":182,"author":{"gitId":"eunrcn"},"content":" setInterviewDate(toCopy.interviewDate);","lastModifiedDate":"2024-02-28"},{"lineNumber":183,"author":{"gitId":"eunrcn"},"content":" setSalary(toCopy.salary);","lastModifiedDate":"2024-02-28"},{"lineNumber":184,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":185,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":186,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2024-02-28"},{"lineNumber":187,"author":{"gitId":"-"},"content":" * Returns true if at least one field is edited.","lastModifiedDate":"2024-02-28"},{"lineNumber":188,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2024-02-28"},{"lineNumber":189,"author":{"gitId":"-"},"content":" public boolean isAnyFieldEdited() {","lastModifiedDate":"2024-02-28"},{"lineNumber":190,"author":{"gitId":"Jawad280"},"content":" return CollectionUtil.isAnyNonNull(","lastModifiedDate":"2024-02-29"},{"lineNumber":191,"author":{"gitId":"Jawad280"},"content":" name, phone, email, address, tag, jobDescription, interviewDate, internDuration, salary","lastModifiedDate":"2024-02-29"},{"lineNumber":192,"author":{"gitId":"Jawad280"},"content":" );","lastModifiedDate":"2024-02-29"},{"lineNumber":193,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":194,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":195,"author":{"gitId":"-"},"content":" public void setName(Name name) {","lastModifiedDate":"2024-02-28"},{"lineNumber":196,"author":{"gitId":"-"},"content":" this.name \u003d name;","lastModifiedDate":"2024-02-28"},{"lineNumber":197,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":198,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":199,"author":{"gitId":"-"},"content":" public Optional\u003cName\u003e getName() {","lastModifiedDate":"2024-02-28"},{"lineNumber":200,"author":{"gitId":"-"},"content":" return Optional.ofNullable(name);","lastModifiedDate":"2024-02-28"},{"lineNumber":201,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":202,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":203,"author":{"gitId":"-"},"content":" public void setPhone(Phone phone) {","lastModifiedDate":"2024-02-28"},{"lineNumber":204,"author":{"gitId":"-"},"content":" this.phone \u003d phone;","lastModifiedDate":"2024-02-28"},{"lineNumber":205,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":206,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":207,"author":{"gitId":"-"},"content":" public Optional\u003cPhone\u003e getPhone() {","lastModifiedDate":"2024-02-28"},{"lineNumber":208,"author":{"gitId":"-"},"content":" return Optional.ofNullable(phone);","lastModifiedDate":"2024-02-28"},{"lineNumber":209,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":210,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":211,"author":{"gitId":"-"},"content":" public void setEmail(Email email) {","lastModifiedDate":"2024-02-28"},{"lineNumber":212,"author":{"gitId":"-"},"content":" this.email \u003d email;","lastModifiedDate":"2024-02-28"},{"lineNumber":213,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":214,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":215,"author":{"gitId":"-"},"content":" public Optional\u003cEmail\u003e getEmail() {","lastModifiedDate":"2024-02-28"},{"lineNumber":216,"author":{"gitId":"-"},"content":" return Optional.ofNullable(email);","lastModifiedDate":"2024-02-28"},{"lineNumber":217,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":218,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":219,"author":{"gitId":"-"},"content":" public void setAddress(Address address) {","lastModifiedDate":"2024-02-28"},{"lineNumber":220,"author":{"gitId":"-"},"content":" this.address \u003d address;","lastModifiedDate":"2024-02-28"},{"lineNumber":221,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":222,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":223,"author":{"gitId":"-"},"content":" public Optional\u003cAddress\u003e getAddress() {","lastModifiedDate":"2024-02-28"},{"lineNumber":224,"author":{"gitId":"-"},"content":" return Optional.ofNullable(address);","lastModifiedDate":"2024-02-28"},{"lineNumber":225,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":226,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":227,"author":{"gitId":"eunrcn"},"content":" public void setJobDescription(JobDescription jobDescription) {","lastModifiedDate":"2024-02-28"},{"lineNumber":228,"author":{"gitId":"eunrcn"},"content":" this.jobDescription \u003d jobDescription;","lastModifiedDate":"2024-02-28"},{"lineNumber":229,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":230,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":231,"author":{"gitId":"eunrcn"},"content":" public Optional\u003cJobDescription\u003e getJobDescription() {","lastModifiedDate":"2024-02-28"},{"lineNumber":232,"author":{"gitId":"eunrcn"},"content":" return Optional.ofNullable(jobDescription);","lastModifiedDate":"2024-02-28"},{"lineNumber":233,"author":{"gitId":"eunrcn"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":234,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":235,"author":{"gitId":"eunrcn"},"content":" public void setInternDuration(InternDuration internDuration) {","lastModifiedDate":"2024-02-28"},{"lineNumber":236,"author":{"gitId":"eunrcn"},"content":" this.internDuration \u003d internDuration;","lastModifiedDate":"2024-02-28"},{"lineNumber":237,"author":{"gitId":"eunrcn"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":238,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":239,"author":{"gitId":"eunrcn"},"content":" public Optional\u003cInternDuration\u003e getInternDuration() {","lastModifiedDate":"2024-02-28"},{"lineNumber":240,"author":{"gitId":"eunrcn"},"content":" return Optional.ofNullable(internDuration);","lastModifiedDate":"2024-02-28"},{"lineNumber":241,"author":{"gitId":"eunrcn"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":242,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":243,"author":{"gitId":"eunrcn"},"content":" public void setInterviewDate(InterviewDate interviewDate) {","lastModifiedDate":"2024-02-28"},{"lineNumber":244,"author":{"gitId":"eunrcn"},"content":" this.interviewDate \u003d interviewDate;","lastModifiedDate":"2024-02-28"},{"lineNumber":245,"author":{"gitId":"eunrcn"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":246,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":247,"author":{"gitId":"eunrcn"},"content":" public Optional\u003cInterviewDate\u003e getInterviewDate() {","lastModifiedDate":"2024-02-28"},{"lineNumber":248,"author":{"gitId":"eunrcn"},"content":" return Optional.ofNullable(interviewDate);","lastModifiedDate":"2024-02-28"},{"lineNumber":249,"author":{"gitId":"eunrcn"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":250,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":251,"author":{"gitId":"eunrcn"},"content":" public void setSalary(Salary salary) {","lastModifiedDate":"2024-02-28"},{"lineNumber":252,"author":{"gitId":"eunrcn"},"content":" this.salary \u003d salary;","lastModifiedDate":"2024-02-28"},{"lineNumber":253,"author":{"gitId":"eunrcn"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":254,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":255,"author":{"gitId":"eunrcn"},"content":" public Optional\u003cSalary\u003e getSalary() {","lastModifiedDate":"2024-02-28"},{"lineNumber":256,"author":{"gitId":"eunrcn"},"content":" return Optional.ofNullable(salary);","lastModifiedDate":"2024-02-28"},{"lineNumber":257,"author":{"gitId":"eunrcn"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":258,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":259,"author":{"gitId":"Jawad280"},"content":" public void setTag(Tag tag) {","lastModifiedDate":"2024-02-29"},{"lineNumber":260,"author":{"gitId":"Jawad280"},"content":" this.tag \u003d tag;","lastModifiedDate":"2024-02-29"},{"lineNumber":261,"author":{"gitId":"eunrcn"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":262,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":263,"author":{"gitId":"Jawad280"},"content":" public Optional\u003cTag\u003e getTag() {","lastModifiedDate":"2024-02-29"},{"lineNumber":264,"author":{"gitId":"Jawad280"},"content":" return Optional.ofNullable(tag);","lastModifiedDate":"2024-02-29"},{"lineNumber":265,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":266,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":267,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2024-02-28"},{"lineNumber":268,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2024-02-28"},{"lineNumber":269,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2024-02-28"},{"lineNumber":270,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2024-02-28"},{"lineNumber":271,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":272,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":273,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2024-02-28"},{"lineNumber":274,"author":{"gitId":"-"},"content":" if (!(other instanceof EditPersonDescriptor)) {","lastModifiedDate":"2024-02-28"},{"lineNumber":275,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2024-02-28"},{"lineNumber":276,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":277,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":278,"author":{"gitId":"-"},"content":" EditPersonDescriptor otherEditPersonDescriptor \u003d (EditPersonDescriptor) other;","lastModifiedDate":"2024-02-28"},{"lineNumber":279,"author":{"gitId":"-"},"content":" return Objects.equals(name, otherEditPersonDescriptor.name)","lastModifiedDate":"2024-02-28"},{"lineNumber":280,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(phone, otherEditPersonDescriptor.phone)","lastModifiedDate":"2024-02-28"},{"lineNumber":281,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(email, otherEditPersonDescriptor.email)","lastModifiedDate":"2024-02-28"},{"lineNumber":282,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(address, otherEditPersonDescriptor.address)","lastModifiedDate":"2024-02-28"},{"lineNumber":283,"author":{"gitId":"Jawad280"},"content":" \u0026\u0026 Objects.equals(tag, otherEditPersonDescriptor.tag)","lastModifiedDate":"2024-02-29"},{"lineNumber":284,"author":{"gitId":"eunrcn"},"content":" \u0026\u0026 Objects.equals(jobDescription, otherEditPersonDescriptor.jobDescription)","lastModifiedDate":"2024-02-28"},{"lineNumber":285,"author":{"gitId":"eunrcn"},"content":" \u0026\u0026 Objects.equals(internDuration, otherEditPersonDescriptor.internDuration)","lastModifiedDate":"2024-02-28"},{"lineNumber":286,"author":{"gitId":"eunrcn"},"content":" \u0026\u0026 Objects.equals(interviewDate, otherEditPersonDescriptor.interviewDate)","lastModifiedDate":"2024-02-28"},{"lineNumber":287,"author":{"gitId":"eunrcn"},"content":" \u0026\u0026 Objects.equals(salary, otherEditPersonDescriptor.salary);","lastModifiedDate":"2024-02-28"},{"lineNumber":288,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":289,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":290,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2024-02-28"},{"lineNumber":291,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2024-02-28"},{"lineNumber":292,"author":{"gitId":"-"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2024-02-28"},{"lineNumber":293,"author":{"gitId":"-"},"content":" .add(\"name\", name)","lastModifiedDate":"2024-02-28"},{"lineNumber":294,"author":{"gitId":"-"},"content":" .add(\"phone\", phone)","lastModifiedDate":"2024-02-28"},{"lineNumber":295,"author":{"gitId":"-"},"content":" .add(\"email\", email)","lastModifiedDate":"2024-02-28"},{"lineNumber":296,"author":{"gitId":"-"},"content":" .add(\"address\", address)","lastModifiedDate":"2024-02-28"},{"lineNumber":297,"author":{"gitId":"Jawad280"},"content":" .add(\"tag\", tag)","lastModifiedDate":"2024-02-29"},{"lineNumber":298,"author":{"gitId":"Jawad280"},"content":" .add(\"job description\", jobDescription)","lastModifiedDate":"2024-02-29"},{"lineNumber":299,"author":{"gitId":"Jawad280"},"content":" .add(\"intern duration\", internDuration)","lastModifiedDate":"2024-02-29"},{"lineNumber":300,"author":{"gitId":"Jawad280"},"content":" .add(\"interview date\", interviewDate)","lastModifiedDate":"2024-02-29"},{"lineNumber":301,"author":{"gitId":"Jawad280"},"content":" .add(\"salary\", salary)","lastModifiedDate":"2024-02-29"},{"lineNumber":302,"author":{"gitId":"-"},"content":" .toString();","lastModifiedDate":"2024-02-28"},{"lineNumber":303,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":304,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":305,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2024-02-28"}],"authorContributionMap":{"eunrcn":61,"Jawad280":27,"-":217}},{"path":"src/main/java/seedu/address/logic/commands/FindCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.commands;","lastModifiedDate":"2016-09-22"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-22"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2018-08-08"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.ToStringBuilder;","lastModifiedDate":"2019-02-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import seedu.address.logic.Messages;","lastModifiedDate":"2023-07-13"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import seedu.address.model.Model;","lastModifiedDate":"2018-08-08"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import seedu.address.model.person.NameContainsKeywordsPredicate;","lastModifiedDate":"2017-06-12"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-22"},{"lineNumber":10,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-09-22"},{"lineNumber":11,"author":{"gitId":"chenyixin0"},"content":" * Finds and lists all companies in address book whose name contains any of the argument keywords.","lastModifiedDate":"2024-02-29"},{"lineNumber":12,"author":{"gitId":"-"},"content":" * Keyword matching is case insensitive.","lastModifiedDate":"2018-04-01"},{"lineNumber":13,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-09-22"},{"lineNumber":14,"author":{"gitId":"-"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2016-09-22"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-22"},{"lineNumber":16,"author":{"gitId":"-"},"content":" public static final String COMMAND_WORD \u003d \"find\";","lastModifiedDate":"2016-09-22"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-22"},{"lineNumber":18,"author":{"gitId":"chenyixin0"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Finds all companies whose names contain any of \"","lastModifiedDate":"2024-02-29"},{"lineNumber":19,"author":{"gitId":"-"},"content":" + \"the specified keywords (case-insensitive) and displays them as a list with index numbers.\\n\"","lastModifiedDate":"2018-04-01"},{"lineNumber":20,"author":{"gitId":"-"},"content":" + \"Parameters: KEYWORD [MORE_KEYWORDS]...\\n\"","lastModifiedDate":"2016-09-22"},{"lineNumber":21,"author":{"gitId":"chenyixin0"},"content":" + \"Example: \" + COMMAND_WORD + \" food panda\";","lastModifiedDate":"2024-02-29"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-22"},{"lineNumber":23,"author":{"gitId":"-"},"content":" private final NameContainsKeywordsPredicate predicate;","lastModifiedDate":"2017-06-12"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-22"},{"lineNumber":25,"author":{"gitId":"-"},"content":" public FindCommand(NameContainsKeywordsPredicate predicate) {","lastModifiedDate":"2017-06-12"},{"lineNumber":26,"author":{"gitId":"-"},"content":" this.predicate \u003d predicate;","lastModifiedDate":"2017-06-12"},{"lineNumber":27,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-22"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-22"},{"lineNumber":29,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-09-22"},{"lineNumber":30,"author":{"gitId":"-"},"content":" public CommandResult execute(Model model) {","lastModifiedDate":"2019-01-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" requireNonNull(model);","lastModifiedDate":"2018-08-08"},{"lineNumber":32,"author":{"gitId":"-"},"content":" model.updateFilteredPersonList(predicate);","lastModifiedDate":"2024-03-01"},{"lineNumber":33,"author":{"gitId":"-"},"content":" return new CommandResult(","lastModifiedDate":"2018-04-01"},{"lineNumber":34,"author":{"gitId":"Jawad280"},"content":" String.format(","lastModifiedDate":"2024-03-01"},{"lineNumber":35,"author":{"gitId":"Jawad280"},"content":" Messages.MESSAGE_PERSONS_LISTED_OVERVIEW,","lastModifiedDate":"2024-03-01"},{"lineNumber":36,"author":{"gitId":"Jawad280"},"content":" model.generateNewFilteredPersonList(predicate).size()),","lastModifiedDate":"2024-03-01"},{"lineNumber":37,"author":{"gitId":"chenyixin0"},"content":" model.generateNewFilteredPersonList(predicate));","lastModifiedDate":"2024-02-29"},{"lineNumber":38,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-22"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-22"},{"lineNumber":40,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-06-27"},{"lineNumber":41,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2017-06-27"},{"lineNumber":42,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2023-07-13"},{"lineNumber":43,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2023-07-13"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-13"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-13"},{"lineNumber":46,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2023-07-13"},{"lineNumber":47,"author":{"gitId":"-"},"content":" if (!(other instanceof FindCommand)) {","lastModifiedDate":"2023-07-13"},{"lineNumber":48,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2023-07-13"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-13"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-13"},{"lineNumber":51,"author":{"gitId":"-"},"content":" FindCommand otherFindCommand \u003d (FindCommand) other;","lastModifiedDate":"2023-07-13"},{"lineNumber":52,"author":{"gitId":"-"},"content":" return predicate.equals(otherFindCommand.predicate);","lastModifiedDate":"2023-07-13"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-27"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2019-02-23"},{"lineNumber":56,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2019-02-23"},{"lineNumber":57,"author":{"gitId":"-"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2019-02-23"},{"lineNumber":58,"author":{"gitId":"-"},"content":" .add(\"predicate\", predicate)","lastModifiedDate":"2019-02-23"},{"lineNumber":59,"author":{"gitId":"-"},"content":" .toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":61,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-09-22"}],"authorContributionMap":{"chenyixin0":4,"Jawad280":3,"-":54}},{"path":"src/main/java/seedu/address/logic/commands/ViewCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Jawad280"},"content":"package seedu.address.logic.commands;","lastModifiedDate":"2024-02-26"},{"lineNumber":2,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":3,"author":{"gitId":"Jawad280"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2024-02-26"},{"lineNumber":4,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":5,"author":{"gitId":"Jawad280"},"content":"import java.util.List;","lastModifiedDate":"2024-02-26"},{"lineNumber":6,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":7,"author":{"gitId":"Jawad280"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"Jawad280"},"content":"import seedu.address.commons.util.ToStringBuilder;","lastModifiedDate":"2024-02-26"},{"lineNumber":9,"author":{"gitId":"Jawad280"},"content":"import seedu.address.logic.Messages;","lastModifiedDate":"2024-02-26"},{"lineNumber":10,"author":{"gitId":"Jawad280"},"content":"import seedu.address.logic.commands.exceptions.CommandException;","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"Jawad280"},"content":"import seedu.address.model.Model;","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"Jawad280"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":14,"author":{"gitId":"Jawad280"},"content":"/**","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"Jawad280"},"content":" * Views a person identified using it\u0027s displayed index from the address book.","lastModifiedDate":"2024-02-26"},{"lineNumber":16,"author":{"gitId":"Jawad280"},"content":" */","lastModifiedDate":"2024-02-26"},{"lineNumber":17,"author":{"gitId":"Jawad280"},"content":"public class ViewCommand extends Command {","lastModifiedDate":"2024-02-26"},{"lineNumber":18,"author":{"gitId":"Jawad280"},"content":" public static final String COMMAND_WORD \u003d \"view\";","lastModifiedDate":"2024-02-26"},{"lineNumber":19,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":20,"author":{"gitId":"Jawad280"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD","lastModifiedDate":"2024-02-26"},{"lineNumber":21,"author":{"gitId":"Jawad280"},"content":" + \": Views the person identified by the index number used in the displayed person list.\\n\"","lastModifiedDate":"2024-02-26"},{"lineNumber":22,"author":{"gitId":"Jawad280"},"content":" + \"Parameters: INDEX (must be a positive integer)\\n\"","lastModifiedDate":"2024-02-26"},{"lineNumber":23,"author":{"gitId":"Jawad280"},"content":" + \"Example: \" + COMMAND_WORD + \" 1\";","lastModifiedDate":"2024-02-26"},{"lineNumber":24,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":25,"author":{"gitId":"Jawad280"},"content":" public static final String MESSAGE_VIEW_PERSON_SUCCESS \u003d \"Viewing Person: %1$s\";","lastModifiedDate":"2024-02-26"},{"lineNumber":26,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":27,"author":{"gitId":"Jawad280"},"content":" private final Index targetIndex;","lastModifiedDate":"2024-02-26"},{"lineNumber":28,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":29,"author":{"gitId":"Jawad280"},"content":" public ViewCommand(Index targetIndex) {","lastModifiedDate":"2024-02-26"},{"lineNumber":30,"author":{"gitId":"Jawad280"},"content":" this.targetIndex \u003d targetIndex;","lastModifiedDate":"2024-02-26"},{"lineNumber":31,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":32,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":33,"author":{"gitId":"Jawad280"},"content":" @Override","lastModifiedDate":"2024-02-26"},{"lineNumber":34,"author":{"gitId":"Jawad280"},"content":" public CommandResult execute(Model model) throws CommandException {","lastModifiedDate":"2024-02-26"},{"lineNumber":35,"author":{"gitId":"Jawad280"},"content":" requireNonNull(model);","lastModifiedDate":"2024-02-26"},{"lineNumber":36,"author":{"gitId":"Jawad280"},"content":" List\u003cPerson\u003e lastShownList \u003d model.getFilteredPersonList();","lastModifiedDate":"2024-02-26"},{"lineNumber":37,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":38,"author":{"gitId":"Jawad280"},"content":" if (targetIndex.getZeroBased() \u003e\u003d lastShownList.size()) {","lastModifiedDate":"2024-02-26"},{"lineNumber":39,"author":{"gitId":"Jawad280"},"content":" throw new CommandException(Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX);","lastModifiedDate":"2024-02-26"},{"lineNumber":40,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":41,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":42,"author":{"gitId":"Jawad280"},"content":" Person personToView \u003d lastShownList.get(targetIndex.getZeroBased());","lastModifiedDate":"2024-02-26"},{"lineNumber":43,"author":{"gitId":"Jawad280"},"content":" return new CommandResult(","lastModifiedDate":"2024-02-26"},{"lineNumber":44,"author":{"gitId":"Jawad280"},"content":" String.format(MESSAGE_VIEW_PERSON_SUCCESS, Messages.format(personToView)),","lastModifiedDate":"2024-02-26"},{"lineNumber":45,"author":{"gitId":"Jawad280"},"content":" personToView);","lastModifiedDate":"2024-02-26"},{"lineNumber":46,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":47,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":48,"author":{"gitId":"Jawad280"},"content":" @Override","lastModifiedDate":"2024-02-26"},{"lineNumber":49,"author":{"gitId":"Jawad280"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2024-02-26"},{"lineNumber":50,"author":{"gitId":"Jawad280"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2024-02-26"},{"lineNumber":51,"author":{"gitId":"Jawad280"},"content":" return true;","lastModifiedDate":"2024-02-26"},{"lineNumber":52,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":53,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":54,"author":{"gitId":"Jawad280"},"content":" // instanceof handles nulls","lastModifiedDate":"2024-02-26"},{"lineNumber":55,"author":{"gitId":"Jawad280"},"content":" if (!(other instanceof ViewCommand)) {","lastModifiedDate":"2024-02-26"},{"lineNumber":56,"author":{"gitId":"Jawad280"},"content":" return false;","lastModifiedDate":"2024-02-26"},{"lineNumber":57,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":58,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":59,"author":{"gitId":"Jawad280"},"content":" ViewCommand otherViewCommand \u003d (ViewCommand) other;","lastModifiedDate":"2024-02-26"},{"lineNumber":60,"author":{"gitId":"Jawad280"},"content":" return targetIndex.equals(otherViewCommand.targetIndex);","lastModifiedDate":"2024-02-26"},{"lineNumber":61,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":62,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":63,"author":{"gitId":"Jawad280"},"content":" @Override","lastModifiedDate":"2024-02-26"},{"lineNumber":64,"author":{"gitId":"Jawad280"},"content":" public String toString() {","lastModifiedDate":"2024-02-26"},{"lineNumber":65,"author":{"gitId":"Jawad280"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2024-02-26"},{"lineNumber":66,"author":{"gitId":"Jawad280"},"content":" .add(\"targetIndex\", targetIndex)","lastModifiedDate":"2024-02-26"},{"lineNumber":67,"author":{"gitId":"Jawad280"},"content":" .toString();","lastModifiedDate":"2024-02-26"},{"lineNumber":68,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":69,"author":{"gitId":"Jawad280"},"content":"}","lastModifiedDate":"2024-02-26"}],"authorContributionMap":{"Jawad280":69}},{"path":"src/main/java/seedu/address/logic/parser/AddCommandParser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-02-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-07-13"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2017-02-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2017-02-05"},{"lineNumber":6,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INTERN_DURATION;","lastModifiedDate":"2024-02-25"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INTERVIEW_DATE;","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_JOB_DESCRIPTION;","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2017-06-06"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2017-02-05"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_SALARY;","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import java.util.stream.Stream;","lastModifiedDate":"2017-03-17"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.AddCommand;","lastModifiedDate":"2017-02-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2017-03-11"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2024-02-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2024-02-25"},{"lineNumber":20,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.InternDuration;","lastModifiedDate":"2024-02-25"},{"lineNumber":21,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.InterviewDate;","lastModifiedDate":"2024-02-25"},{"lineNumber":22,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.JobDescription;","lastModifiedDate":"2024-02-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2024-02-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2024-02-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2024-02-25"},{"lineNumber":26,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.Salary;","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-03-17"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":29,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-02-05"},{"lineNumber":30,"author":{"gitId":"-"},"content":" * Parses input arguments and creates a new AddCommand object","lastModifiedDate":"2017-02-05"},{"lineNumber":31,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":"public class AddCommandParser implements Parser\u003cAddCommand\u003e {","lastModifiedDate":"2017-07-06"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-02-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * Parses the given {@code String} of arguments in the context of the AddCommand","lastModifiedDate":"2017-02-05"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * and returns an AddCommand object for execution.","lastModifiedDate":"2017-02-05"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * @throws ParseException if the user input does not conform the expected format","lastModifiedDate":"2017-03-11"},{"lineNumber":38,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":" public AddCommand parse(String args) throws ParseException {","lastModifiedDate":"2017-03-11"},{"lineNumber":40,"author":{"gitId":"-"},"content":" ArgumentMultimap argMultimap \u003d","lastModifiedDate":"2017-03-20"},{"lineNumber":41,"author":{"gitId":"ashleygoh1"},"content":" ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS, PREFIX_TAG,","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":" PREFIX_JOB_DESCRIPTION, PREFIX_INTERVIEW_DATE, PREFIX_INTERN_DURATION, PREFIX_SALARY);","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-17"},{"lineNumber":44,"author":{"gitId":"ashleygoh1"},"content":" if (!arePrefixesPresent(argMultimap, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_TAG,","lastModifiedDate":"2024-02-26"},{"lineNumber":45,"author":{"gitId":"ashleygoh1"},"content":" PREFIX_JOB_DESCRIPTION, PREFIX_INTERN_DURATION, PREFIX_SALARY)","lastModifiedDate":"2024-02-26"},{"lineNumber":46,"author":{"gitId":"-"},"content":" || !argMultimap.getPreamble().isEmpty()) {","lastModifiedDate":"2017-12-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":" throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddCommand.MESSAGE_USAGE));","lastModifiedDate":"2017-03-11"},{"lineNumber":48,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-03-17"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-17"},{"lineNumber":50,"author":{"gitId":"ashleygoh1"},"content":" argMultimap.verifyNoDuplicatePrefixesFor(PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS,","lastModifiedDate":"2024-02-26"},{"lineNumber":51,"author":{"gitId":"ashleygoh1"},"content":" PREFIX_TAG, PREFIX_JOB_DESCRIPTION, PREFIX_INTERVIEW_DATE, PREFIX_INTERN_DURATION,","lastModifiedDate":"2024-02-26"},{"lineNumber":52,"author":{"gitId":"ashleygoh1"},"content":" PREFIX_SALARY);","lastModifiedDate":"2024-02-26"},{"lineNumber":53,"author":{"gitId":"-"},"content":" Name name \u003d ParserUtil.parseName(argMultimap.getValue(PREFIX_NAME).get());","lastModifiedDate":"2018-07-10"},{"lineNumber":54,"author":{"gitId":"-"},"content":" Phone phone \u003d ParserUtil.parsePhone(argMultimap.getValue(PREFIX_PHONE).get());","lastModifiedDate":"2018-07-10"},{"lineNumber":55,"author":{"gitId":"-"},"content":" Email email \u003d ParserUtil.parseEmail(argMultimap.getValue(PREFIX_EMAIL).get());","lastModifiedDate":"2018-07-10"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":57,"author":{"gitId":"ashleygoh1"},"content":" Address address;","lastModifiedDate":"2024-02-26"},{"lineNumber":58,"author":{"gitId":"ashleygoh1"},"content":" if (argMultimap.getValue(PREFIX_ADDRESS).isPresent()) {","lastModifiedDate":"2024-02-26"},{"lineNumber":59,"author":{"gitId":"ashleygoh1"},"content":" try {","lastModifiedDate":"2024-02-26"},{"lineNumber":60,"author":{"gitId":"ashleygoh1"},"content":" address \u003d ParserUtil.parseAddress(argMultimap.getValue(PREFIX_ADDRESS).get());","lastModifiedDate":"2024-02-26"},{"lineNumber":61,"author":{"gitId":"ashleygoh1"},"content":" } catch (ParseException e) {","lastModifiedDate":"2024-02-26"},{"lineNumber":62,"author":{"gitId":"ashleygoh1"},"content":" throw new ParseException(\"Error parsing address: \" + e.getMessage());","lastModifiedDate":"2024-02-26"},{"lineNumber":63,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":64,"author":{"gitId":"ashleygoh1"},"content":" } else {","lastModifiedDate":"2024-02-26"},{"lineNumber":65,"author":{"gitId":"ashleygoh1"},"content":" address \u003d new Address(\"\"); // Provide a default empty address if not provided","lastModifiedDate":"2024-02-26"},{"lineNumber":66,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":67,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":68,"author":{"gitId":"ashleygoh1"},"content":" Tag tag \u003d ParserUtil.parseTag(argMultimap.getValue(PREFIX_TAG).get());","lastModifiedDate":"2024-02-25"},{"lineNumber":69,"author":{"gitId":"ashleygoh1"},"content":" JobDescription jobDescription \u003d ParserUtil.parseJobDescription(","lastModifiedDate":"2024-02-25"},{"lineNumber":70,"author":{"gitId":"ashleygoh1"},"content":" argMultimap.getValue(PREFIX_JOB_DESCRIPTION).get());","lastModifiedDate":"2024-02-25"},{"lineNumber":71,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":72,"author":{"gitId":"ashleygoh1"},"content":" InterviewDate interviewDate \u003d new InterviewDate(null);","lastModifiedDate":"2024-02-26"},{"lineNumber":73,"author":{"gitId":"ashleygoh1"},"content":" if (argMultimap.getValue(PREFIX_INTERVIEW_DATE).isPresent()) {","lastModifiedDate":"2024-02-26"},{"lineNumber":74,"author":{"gitId":"ashleygoh1"},"content":" try {","lastModifiedDate":"2024-02-26"},{"lineNumber":75,"author":{"gitId":"ashleygoh1"},"content":" String givenDate \u003d argMultimap.getValue(PREFIX_INTERVIEW_DATE).get();","lastModifiedDate":"2024-02-26"},{"lineNumber":76,"author":{"gitId":"ashleygoh1"},"content":" if (!givenDate.isEmpty()) {","lastModifiedDate":"2024-02-26"},{"lineNumber":77,"author":{"gitId":"ashleygoh1"},"content":" interviewDate \u003d ParserUtil.parseInterviewDate(givenDate);","lastModifiedDate":"2024-02-26"},{"lineNumber":78,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":79,"author":{"gitId":"ashleygoh1"},"content":" } catch (ParseException e) {","lastModifiedDate":"2024-02-26"},{"lineNumber":80,"author":{"gitId":"ashleygoh1"},"content":" throw new ParseException(\"Error parsing interview date: \" + e.getMessage());","lastModifiedDate":"2024-02-26"},{"lineNumber":81,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":82,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":83,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":84,"author":{"gitId":"ashleygoh1"},"content":" InternDuration internDuration \u003d ParserUtil.parseInternDuration(","lastModifiedDate":"2024-02-25"},{"lineNumber":85,"author":{"gitId":"ashleygoh1"},"content":" argMultimap.getValue(PREFIX_INTERN_DURATION).get());","lastModifiedDate":"2024-02-25"},{"lineNumber":86,"author":{"gitId":"ashleygoh1"},"content":" Salary salary \u003d ParserUtil.parseSalary(argMultimap.getValue(PREFIX_SALARY).get());","lastModifiedDate":"2024-02-25"},{"lineNumber":87,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-17"},{"lineNumber":88,"author":{"gitId":"ashleygoh1"},"content":" Person person \u003d new Person(name, phone, email, address, tag,","lastModifiedDate":"2024-02-25"},{"lineNumber":89,"author":{"gitId":"ashleygoh1"},"content":" jobDescription, interviewDate, internDuration, salary);","lastModifiedDate":"2024-02-25"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-17"},{"lineNumber":91,"author":{"gitId":"-"},"content":" return new AddCommand(person);","lastModifiedDate":"2017-03-17"},{"lineNumber":92,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-05"},{"lineNumber":93,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":94,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-03-17"},{"lineNumber":95,"author":{"gitId":"-"},"content":" * Returns true if none of the prefixes contains empty {@code Optional} values in the given","lastModifiedDate":"2017-03-17"},{"lineNumber":96,"author":{"gitId":"-"},"content":" * {@code ArgumentMultimap}.","lastModifiedDate":"2017-03-17"},{"lineNumber":97,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-03-17"},{"lineNumber":98,"author":{"gitId":"-"},"content":" private static boolean arePrefixesPresent(ArgumentMultimap argumentMultimap, Prefix... prefixes) {","lastModifiedDate":"2017-03-17"},{"lineNumber":99,"author":{"gitId":"-"},"content":" return Stream.of(prefixes).allMatch(prefix -\u003e argumentMultimap.getValue(prefix).isPresent());","lastModifiedDate":"2017-03-17"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-03-17"},{"lineNumber":101,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-17"},{"lineNumber":102,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-02-05"}],"authorContributionMap":{"ashleygoh1":47,"-":55}},{"path":"src/main/java/seedu/address/logic/parser/AddressBookParser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2016-09-22"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-07-13"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_UNKNOWN_COMMAND;","lastModifiedDate":"2023-07-13"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-19"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-07-29"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2017-01-19"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2017-01-19"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-19"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.LogsCenter;","lastModifiedDate":"2023-07-29"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.AddCommand;","lastModifiedDate":"2017-01-18"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.ClearCommand;","lastModifiedDate":"2024-02-29"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.Command;","lastModifiedDate":"2017-01-18"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.DeleteCommand;","lastModifiedDate":"2024-03-01"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand;","lastModifiedDate":"2024-02-29"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.ExitCommand;","lastModifiedDate":"2024-02-29"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.FindCommand;","lastModifiedDate":"2024-02-29"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.HelpCommand;","lastModifiedDate":"2017-01-18"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.ListCommand;","lastModifiedDate":"2024-02-26"},{"lineNumber":20,"author":{"gitId":"Jawad280"},"content":"import seedu.address.logic.commands.ViewCommand;","lastModifiedDate":"2024-02-29"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2017-03-11"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":23,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-24"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * Parses user input.","lastModifiedDate":"2016-08-24"},{"lineNumber":25,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":26,"author":{"gitId":"-"},"content":"public class AddressBookParser {","lastModifiedDate":"2017-07-07"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":28,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-08-24"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * Used for initial separation of command word and args.","lastModifiedDate":"2016-08-24"},{"lineNumber":30,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":31,"author":{"gitId":"-"},"content":" private static final Pattern BASIC_COMMAND_FORMAT \u003d Pattern.compile(\"(?\u003ccommandWord\u003e\\\\S+)(?\u003carguments\u003e.*)\");","lastModifiedDate":"2016-09-22"},{"lineNumber":32,"author":{"gitId":"-"},"content":" private static final Logger logger \u003d LogsCenter.getLogger(AddressBookParser.class);","lastModifiedDate":"2023-07-29"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":34,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-08-24"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * Parses user input into command for execution.","lastModifiedDate":"2016-08-24"},{"lineNumber":36,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2016-08-24"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * @param userInput full user input string","lastModifiedDate":"2016-08-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":" * @return the command based on the user input","lastModifiedDate":"2016-08-24"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * @throws ParseException if the user input does not conform the expected format","lastModifiedDate":"2017-03-11"},{"lineNumber":40,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":41,"author":{"gitId":"-"},"content":" public Command parseCommand(String userInput) throws ParseException {","lastModifiedDate":"2017-03-11"},{"lineNumber":42,"author":{"gitId":"-"},"content":" final Matcher matcher \u003d BASIC_COMMAND_FORMAT.matcher(userInput.trim());","lastModifiedDate":"2016-08-24"},{"lineNumber":43,"author":{"gitId":"-"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2016-08-24"},{"lineNumber":44,"author":{"gitId":"-"},"content":" throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, HelpCommand.MESSAGE_USAGE));","lastModifiedDate":"2017-03-11"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":47,"author":{"gitId":"-"},"content":" final String commandWord \u003d matcher.group(\"commandWord\");","lastModifiedDate":"2016-08-24"},{"lineNumber":48,"author":{"gitId":"-"},"content":" final String arguments \u003d matcher.group(\"arguments\");","lastModifiedDate":"2016-08-24"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-29"},{"lineNumber":50,"author":{"gitId":"-"},"content":" // Note to developers: Change the log level in config.json to enable lower level (i.e., FINE, FINER and lower)","lastModifiedDate":"2023-07-29"},{"lineNumber":51,"author":{"gitId":"-"},"content":" // log messages such as the one below.","lastModifiedDate":"2023-07-29"},{"lineNumber":52,"author":{"gitId":"-"},"content":" // Lower level log messages are used sparingly to minimize noise in the code.","lastModifiedDate":"2023-07-29"},{"lineNumber":53,"author":{"gitId":"-"},"content":" logger.fine(\"Command word: \" + commandWord + \"; Arguments: \" + arguments);","lastModifiedDate":"2023-07-29"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-29"},{"lineNumber":55,"author":{"gitId":"-"},"content":" switch (commandWord) {","lastModifiedDate":"2016-08-24"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":57,"author":{"gitId":"-"},"content":" case AddCommand.COMMAND_WORD:","lastModifiedDate":"2016-09-21"},{"lineNumber":58,"author":{"gitId":"-"},"content":" return new AddCommandParser().parse(arguments);","lastModifiedDate":"2017-02-05"},{"lineNumber":59,"author":{"gitId":"-"},"content":" case FindCommand.COMMAND_WORD:","lastModifiedDate":"2024-02-26"},{"lineNumber":60,"author":{"gitId":"-"},"content":" return new FindCommandParser().parse(arguments);","lastModifiedDate":"2024-02-26"},{"lineNumber":61,"author":{"gitId":"-"},"content":" case ListCommand.COMMAND_WORD:","lastModifiedDate":"2024-02-26"},{"lineNumber":62,"author":{"gitId":"-"},"content":" return new ListCommand();","lastModifiedDate":"2024-02-26"},{"lineNumber":63,"author":{"gitId":"minghowC"},"content":" case DeleteCommand.COMMAND_WORD:","lastModifiedDate":"2024-03-01"},{"lineNumber":64,"author":{"gitId":"minghowC"},"content":" return new DeleteCommandParser().parse(arguments);","lastModifiedDate":"2024-03-01"},{"lineNumber":65,"author":{"gitId":"Jawad280"},"content":" case ViewCommand.COMMAND_WORD:","lastModifiedDate":"2024-02-26"},{"lineNumber":66,"author":{"gitId":"Jawad280"},"content":" return new ViewCommandParser().parse(arguments);","lastModifiedDate":"2024-02-26"},{"lineNumber":67,"author":{"gitId":"eunrcn"},"content":" case EditCommand.COMMAND_WORD:","lastModifiedDate":"2024-02-28"},{"lineNumber":68,"author":{"gitId":"eunrcn"},"content":" return new EditCommandParser().parse(arguments);","lastModifiedDate":"2024-02-28"},{"lineNumber":69,"author":{"gitId":"ashleygoh1"},"content":" case ClearCommand.COMMAND_WORD:","lastModifiedDate":"2024-02-27"},{"lineNumber":70,"author":{"gitId":"ashleygoh1"},"content":" return new ClearCommand();","lastModifiedDate":"2024-02-27"},{"lineNumber":71,"author":{"gitId":"-"},"content":" case ExitCommand.COMMAND_WORD:","lastModifiedDate":"2024-02-27"},{"lineNumber":72,"author":{"gitId":"-"},"content":" return new ExitCommand();","lastModifiedDate":"2024-02-27"},{"lineNumber":73,"author":{"gitId":"-"},"content":" case HelpCommand.COMMAND_WORD:","lastModifiedDate":"2024-02-27"},{"lineNumber":74,"author":{"gitId":"-"},"content":" return new HelpCommand();","lastModifiedDate":"2024-02-27"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":76,"author":{"gitId":"-"},"content":" default:","lastModifiedDate":"2016-08-26"},{"lineNumber":77,"author":{"gitId":"-"},"content":" logger.finer(\"This user input caused a ParseException: \" + userInput);","lastModifiedDate":"2023-07-29"},{"lineNumber":78,"author":{"gitId":"-"},"content":" throw new ParseException(MESSAGE_UNKNOWN_COMMAND);","lastModifiedDate":"2017-03-11"},{"lineNumber":79,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":80,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":81,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":82,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-24"}],"authorContributionMap":{"eunrcn":2,"minghowC":2,"Jawad280":3,"ashleygoh1":2,"-":73}},{"path":"src/main/java/seedu/address/logic/parser/CliSyntax.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-02-11"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":3,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-02-11"},{"lineNumber":4,"author":{"gitId":"-"},"content":" * Contains Command Line Interface (CLI) syntax definitions common to multiple commands","lastModifiedDate":"2017-02-11"},{"lineNumber":5,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-11"},{"lineNumber":6,"author":{"gitId":"-"},"content":"public class CliSyntax {","lastModifiedDate":"2017-02-11"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":8,"author":{"gitId":"-"},"content":" /* Prefix definitions */","lastModifiedDate":"2017-02-11"},{"lineNumber":9,"author":{"gitId":"eunrcn"},"content":" public static final Prefix PREFIX_INDEX \u003d new Prefix(\"i/\");","lastModifiedDate":"2024-02-28"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":" public static final Prefix PREFIX_NAME \u003d new Prefix(\"c/\");","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":" public static final Prefix PREFIX_PHONE \u003d new Prefix(\"p/\");","lastModifiedDate":"2017-02-11"},{"lineNumber":12,"author":{"gitId":"-"},"content":" public static final Prefix PREFIX_EMAIL \u003d new Prefix(\"e/\");","lastModifiedDate":"2017-02-11"},{"lineNumber":13,"author":{"gitId":"-"},"content":" public static final Prefix PREFIX_ADDRESS \u003d new Prefix(\"a/\");","lastModifiedDate":"2017-02-11"},{"lineNumber":14,"author":{"gitId":"-"},"content":" public static final Prefix PREFIX_TAG \u003d new Prefix(\"t/\");","lastModifiedDate":"2017-02-11"},{"lineNumber":15,"author":{"gitId":"ashleygoh1"},"content":" public static final Prefix PREFIX_JOB_DESCRIPTION \u003d new Prefix(\"jd/\");","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"ashleygoh1"},"content":" public static final Prefix PREFIX_INTERVIEW_DATE \u003d new Prefix(\"d/\");","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"ashleygoh1"},"content":" public static final Prefix PREFIX_INTERN_DURATION \u003d new Prefix(\"id/\");","lastModifiedDate":"2024-02-25"},{"lineNumber":18,"author":{"gitId":"ashleygoh1"},"content":" public static final Prefix PREFIX_SALARY \u003d new Prefix(\"s/\");","lastModifiedDate":"2024-02-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":20,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-02-11"}],"authorContributionMap":{"eunrcn":1,"ashleygoh1":5,"-":14}},{"path":"src/main/java/seedu/address/logic/parser/EditCommandParser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2024-02-28"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2024-02-28"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2024-02-28"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2024-02-28"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2024-02-28"},{"lineNumber":7,"author":{"gitId":"eunrcn"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INTERN_DURATION;","lastModifiedDate":"2024-02-28"},{"lineNumber":8,"author":{"gitId":"eunrcn"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INTERVIEW_DATE;","lastModifiedDate":"2024-02-28"},{"lineNumber":9,"author":{"gitId":"eunrcn"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_JOB_DESCRIPTION;","lastModifiedDate":"2024-02-28"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2024-02-28"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2024-02-28"},{"lineNumber":12,"author":{"gitId":"eunrcn"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_SALARY;","lastModifiedDate":"2024-02-28"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2024-02-28"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import java.util.Collection;","lastModifiedDate":"2024-02-28"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import java.util.Collections;","lastModifiedDate":"2024-02-28"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import java.util.Optional;","lastModifiedDate":"2024-02-28"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2024-02-28"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2024-02-28"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand;","lastModifiedDate":"2024-02-28"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand.EditPersonDescriptor;","lastModifiedDate":"2024-02-28"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2024-02-28"},{"lineNumber":24,"author":{"gitId":"Jawad280"},"content":"import seedu.address.model.person.InterviewDate;","lastModifiedDate":"2024-02-29"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2024-02-28"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":27,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":28,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2024-02-28"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * Parses input arguments and creates a new EditCommand object","lastModifiedDate":"2024-02-28"},{"lineNumber":30,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2024-02-28"},{"lineNumber":31,"author":{"gitId":"-"},"content":"public class EditCommandParser implements Parser\u003cEditCommand\u003e {","lastModifiedDate":"2024-02-28"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":33,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2024-02-28"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * Parses the given {@code String} of arguments in the context of the EditCommand","lastModifiedDate":"2024-02-28"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * and returns an EditCommand object for execution.","lastModifiedDate":"2024-02-28"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * @throws ParseException if the user input does not conform the expected format","lastModifiedDate":"2024-02-28"},{"lineNumber":37,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2024-02-28"},{"lineNumber":38,"author":{"gitId":"-"},"content":" public EditCommand parse(String args) throws ParseException {","lastModifiedDate":"2024-02-28"},{"lineNumber":39,"author":{"gitId":"-"},"content":" requireNonNull(args);","lastModifiedDate":"2024-02-28"},{"lineNumber":40,"author":{"gitId":"-"},"content":" ArgumentMultimap argMultimap \u003d","lastModifiedDate":"2024-02-28"},{"lineNumber":41,"author":{"gitId":"eunrcn"},"content":" ArgumentTokenizer.tokenize(args, PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS, PREFIX_TAG,","lastModifiedDate":"2024-02-28"},{"lineNumber":42,"author":{"gitId":"eunrcn"},"content":" PREFIX_JOB_DESCRIPTION, PREFIX_INTERVIEW_DATE, PREFIX_INTERN_DURATION, PREFIX_SALARY);","lastModifiedDate":"2024-02-28"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":44,"author":{"gitId":"-"},"content":" Index index;","lastModifiedDate":"2024-02-28"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":46,"author":{"gitId":"-"},"content":" try {","lastModifiedDate":"2024-02-28"},{"lineNumber":47,"author":{"gitId":"-"},"content":" index \u003d ParserUtil.parseIndex(argMultimap.getPreamble());","lastModifiedDate":"2024-02-28"},{"lineNumber":48,"author":{"gitId":"-"},"content":" } catch (ParseException pe) {","lastModifiedDate":"2024-02-28"},{"lineNumber":49,"author":{"gitId":"-"},"content":" throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, EditCommand.MESSAGE_USAGE), pe);","lastModifiedDate":"2024-02-28"},{"lineNumber":50,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":52,"author":{"gitId":"eunrcn"},"content":" argMultimap.verifyNoDuplicatePrefixesFor(PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS,","lastModifiedDate":"2024-02-28"},{"lineNumber":53,"author":{"gitId":"eunrcn"},"content":" PREFIX_TAG, PREFIX_JOB_DESCRIPTION, PREFIX_INTERVIEW_DATE, PREFIX_INTERN_DURATION,","lastModifiedDate":"2024-02-28"},{"lineNumber":54,"author":{"gitId":"eunrcn"},"content":" PREFIX_SALARY);","lastModifiedDate":"2024-02-28"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":56,"author":{"gitId":"-"},"content":" EditPersonDescriptor editPersonDescriptor \u003d new EditPersonDescriptor();","lastModifiedDate":"2024-02-28"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":58,"author":{"gitId":"-"},"content":" if (argMultimap.getValue(PREFIX_NAME).isPresent()) {","lastModifiedDate":"2024-02-28"},{"lineNumber":59,"author":{"gitId":"-"},"content":" editPersonDescriptor.setName(ParserUtil.parseName(argMultimap.getValue(PREFIX_NAME).get()));","lastModifiedDate":"2024-02-28"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":61,"author":{"gitId":"-"},"content":" if (argMultimap.getValue(PREFIX_PHONE).isPresent()) {","lastModifiedDate":"2024-02-28"},{"lineNumber":62,"author":{"gitId":"-"},"content":" editPersonDescriptor.setPhone(ParserUtil.parsePhone(argMultimap.getValue(PREFIX_PHONE).get()));","lastModifiedDate":"2024-02-28"},{"lineNumber":63,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":64,"author":{"gitId":"-"},"content":" if (argMultimap.getValue(PREFIX_EMAIL).isPresent()) {","lastModifiedDate":"2024-02-28"},{"lineNumber":65,"author":{"gitId":"-"},"content":" editPersonDescriptor.setEmail(ParserUtil.parseEmail(argMultimap.getValue(PREFIX_EMAIL).get()));","lastModifiedDate":"2024-02-28"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":67,"author":{"gitId":"-"},"content":" if (argMultimap.getValue(PREFIX_ADDRESS).isPresent()) {","lastModifiedDate":"2024-02-28"},{"lineNumber":68,"author":{"gitId":"-"},"content":" editPersonDescriptor.setAddress(ParserUtil.parseAddress(argMultimap.getValue(PREFIX_ADDRESS).get()));","lastModifiedDate":"2024-02-28"},{"lineNumber":69,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":70,"author":{"gitId":"eunrcn"},"content":" if (argMultimap.getValue(PREFIX_JOB_DESCRIPTION).isPresent()) {","lastModifiedDate":"2024-02-28"},{"lineNumber":71,"author":{"gitId":"Jawad280"},"content":" editPersonDescriptor.setJobDescription(","lastModifiedDate":"2024-02-29"},{"lineNumber":72,"author":{"gitId":"Jawad280"},"content":" ParserUtil.parseJobDescription(argMultimap.getValue(PREFIX_JOB_DESCRIPTION).get())","lastModifiedDate":"2024-02-29"},{"lineNumber":73,"author":{"gitId":"Jawad280"},"content":" );","lastModifiedDate":"2024-02-29"},{"lineNumber":74,"author":{"gitId":"eunrcn"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":75,"author":{"gitId":"eunrcn"},"content":" if (argMultimap.getValue(PREFIX_INTERVIEW_DATE).isPresent()) {","lastModifiedDate":"2024-02-28"},{"lineNumber":76,"author":{"gitId":"Jawad280"},"content":" String givenDate \u003d argMultimap.getValue(PREFIX_INTERVIEW_DATE).get();","lastModifiedDate":"2024-02-29"},{"lineNumber":77,"author":{"gitId":"Jawad280"},"content":" if (!givenDate.isEmpty()) {","lastModifiedDate":"2024-02-29"},{"lineNumber":78,"author":{"gitId":"Jawad280"},"content":" editPersonDescriptor.setInterviewDate(","lastModifiedDate":"2024-02-29"},{"lineNumber":79,"author":{"gitId":"Jawad280"},"content":" ParserUtil.parseInterviewDate(argMultimap.getValue(PREFIX_INTERVIEW_DATE).get())","lastModifiedDate":"2024-02-29"},{"lineNumber":80,"author":{"gitId":"Jawad280"},"content":" );","lastModifiedDate":"2024-02-29"},{"lineNumber":81,"author":{"gitId":"Jawad280"},"content":" } else {","lastModifiedDate":"2024-02-29"},{"lineNumber":82,"author":{"gitId":"Jawad280"},"content":" editPersonDescriptor.setInterviewDate(new InterviewDate(null));","lastModifiedDate":"2024-02-29"},{"lineNumber":83,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":84,"author":{"gitId":"eunrcn"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":85,"author":{"gitId":"eunrcn"},"content":" if (argMultimap.getValue(PREFIX_INTERN_DURATION).isPresent()) {","lastModifiedDate":"2024-02-28"},{"lineNumber":86,"author":{"gitId":"Jawad280"},"content":" editPersonDescriptor.setInternDuration(","lastModifiedDate":"2024-02-29"},{"lineNumber":87,"author":{"gitId":"Jawad280"},"content":" ParserUtil.parseInternDuration(argMultimap.getValue(PREFIX_INTERN_DURATION).get())","lastModifiedDate":"2024-02-29"},{"lineNumber":88,"author":{"gitId":"Jawad280"},"content":" );","lastModifiedDate":"2024-02-29"},{"lineNumber":89,"author":{"gitId":"eunrcn"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":90,"author":{"gitId":"eunrcn"},"content":" if (argMultimap.getValue(PREFIX_SALARY).isPresent()) {","lastModifiedDate":"2024-02-28"},{"lineNumber":91,"author":{"gitId":"eunrcn"},"content":" editPersonDescriptor.setSalary(ParserUtil.parseSalary(argMultimap.getValue(PREFIX_SALARY).get()));","lastModifiedDate":"2024-02-28"},{"lineNumber":92,"author":{"gitId":"eunrcn"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":93,"author":{"gitId":"eunrcn"},"content":" if (argMultimap.getValue(PREFIX_TAG).isPresent()) {","lastModifiedDate":"2024-02-28"},{"lineNumber":94,"author":{"gitId":"Jawad280"},"content":" editPersonDescriptor.setTag(ParserUtil.parseTag(argMultimap.getValue(PREFIX_TAG).get()));","lastModifiedDate":"2024-02-29"},{"lineNumber":95,"author":{"gitId":"eunrcn"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":96,"author":{"gitId":"-"},"content":" if (!editPersonDescriptor.isAnyFieldEdited()) {","lastModifiedDate":"2024-02-28"},{"lineNumber":97,"author":{"gitId":"-"},"content":" throw new ParseException(EditCommand.MESSAGE_NOT_EDITED);","lastModifiedDate":"2024-02-28"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":99,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":100,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":101,"author":{"gitId":"-"},"content":" return new EditCommand(index, editPersonDescriptor);","lastModifiedDate":"2024-02-28"},{"lineNumber":102,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":104,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2024-02-28"},{"lineNumber":105,"author":{"gitId":"-"},"content":" * Parses {@code Collection\u003cString\u003e tags} into a {@code Set\u003cTag\u003e} if {@code tags} is non-empty.","lastModifiedDate":"2024-02-28"},{"lineNumber":106,"author":{"gitId":"-"},"content":" * If {@code tags} contain only one element which is an empty string, it will be parsed into a","lastModifiedDate":"2024-02-28"},{"lineNumber":107,"author":{"gitId":"-"},"content":" * {@code Set\u003cTag\u003e} containing zero tags.","lastModifiedDate":"2024-02-28"},{"lineNumber":108,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2024-02-28"},{"lineNumber":109,"author":{"gitId":"-"},"content":" private Optional\u003cSet\u003cTag\u003e\u003e parseTagsForEdit(Collection\u003cString\u003e tags) throws ParseException {","lastModifiedDate":"2024-02-28"},{"lineNumber":110,"author":{"gitId":"-"},"content":" assert tags !\u003d null;","lastModifiedDate":"2024-02-28"},{"lineNumber":111,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":112,"author":{"gitId":"-"},"content":" if (tags.isEmpty()) {","lastModifiedDate":"2024-02-28"},{"lineNumber":113,"author":{"gitId":"-"},"content":" return Optional.empty();","lastModifiedDate":"2024-02-28"},{"lineNumber":114,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":115,"author":{"gitId":"-"},"content":" Collection\u003cString\u003e tagSet \u003d tags.size() \u003d\u003d 1 \u0026\u0026 tags.contains(\"\") ? Collections.emptySet() : tags;","lastModifiedDate":"2024-02-28"},{"lineNumber":116,"author":{"gitId":"-"},"content":" return Optional.of(ParserUtil.parseTags(tagSet));","lastModifiedDate":"2024-02-28"},{"lineNumber":117,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":118,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":119,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2024-02-28"}],"authorContributionMap":{"eunrcn":22,"Jawad280":16,"-":81}},{"path":"src/main/java/seedu/address/logic/parser/ParserUtil.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-02-11"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2017-05-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.Collection;","lastModifiedDate":"2024-02-29"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.HashSet;","lastModifiedDate":"2024-02-29"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2024-02-29"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2017-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.StringUtil;","lastModifiedDate":"2017-02-11"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2018-07-10"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.InternDuration;","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.InterviewDate;","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.JobDescription;","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2024-02-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2024-02-25"},{"lineNumber":19,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.Salary;","lastModifiedDate":"2024-02-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-02-11"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":22,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-02-11"},{"lineNumber":23,"author":{"gitId":"-"},"content":" * Contains utility methods used for parsing strings in the various *Parser classes.","lastModifiedDate":"2017-07-18"},{"lineNumber":24,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-11"},{"lineNumber":25,"author":{"gitId":"-"},"content":"public class ParserUtil {","lastModifiedDate":"2017-02-11"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":27,"author":{"gitId":"-"},"content":" public static final String MESSAGE_INVALID_INDEX \u003d \"Index is not a non-zero unsigned integer.\";","lastModifiedDate":"2017-06-02"},{"lineNumber":28,"author":{"gitId":"ashleygoh1"},"content":" public static final String MESSAGE_INVALID_NUMBER_OF_PEOPLE \u003d","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"ashleygoh1"},"content":" \"Number of people is not a non-zero unsigned integer.\";","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"ashleygoh1"},"content":" public static final String MESSAGE_INVALID_DATE_TIME_FORMAT \u003d","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"ashleygoh1"},"content":" \"Date time is wrongly formatted. You need to input a date in yyyy-mm-dd or dd-mm-yyyy \"","lastModifiedDate":"2024-02-25"},{"lineNumber":32,"author":{"gitId":"ashleygoh1"},"content":" + \"format and a time in HH:mm or HHmm (24hr clock) format (eg: 1800 or 18:00 for 6 pm). \"","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"ashleygoh1"},"content":" + \"You can choose to entire enter a date first or time first in any of the formats mentioned\";","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-02"},{"lineNumber":35,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-02-11"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * Parses {@code oneBasedIndex} into an {@code Index} and returns it. Leading and trailing whitespaces will be","lastModifiedDate":"2017-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * trimmed.","lastModifiedDate":"2017-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" * @throws ParseException if the specified index is invalid (not non-zero unsigned integer).","lastModifiedDate":"2018-07-10"},{"lineNumber":39,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-11"},{"lineNumber":40,"author":{"gitId":"-"},"content":" public static Index parseIndex(String oneBasedIndex) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":41,"author":{"gitId":"-"},"content":" String trimmedIndex \u003d oneBasedIndex.trim();","lastModifiedDate":"2017-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" if (!StringUtil.isNonZeroUnsignedInteger(trimmedIndex)) {","lastModifiedDate":"2017-06-02"},{"lineNumber":43,"author":{"gitId":"-"},"content":" throw new ParseException(MESSAGE_INVALID_INDEX);","lastModifiedDate":"2018-07-10"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-11"},{"lineNumber":45,"author":{"gitId":"-"},"content":" return Index.fromOneBased(Integer.parseInt(trimmedIndex));","lastModifiedDate":"2017-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-11"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":48,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-29"},{"lineNumber":49,"author":{"gitId":"-"},"content":" * Parses a {@code String name} into a {@code Name}.","lastModifiedDate":"2017-05-29"},{"lineNumber":50,"author":{"gitId":"-"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2017-05-29"},{"lineNumber":51,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2017-05-29"},{"lineNumber":52,"author":{"gitId":"-"},"content":" * @throws ParseException if the given {@code name} is invalid.","lastModifiedDate":"2018-07-10"},{"lineNumber":53,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-29"},{"lineNumber":54,"author":{"gitId":"-"},"content":" public static Name parseName(String name) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":55,"author":{"gitId":"-"},"content":" requireNonNull(name);","lastModifiedDate":"2017-05-29"},{"lineNumber":56,"author":{"gitId":"-"},"content":" String trimmedName \u003d name.trim();","lastModifiedDate":"2017-05-29"},{"lineNumber":57,"author":{"gitId":"-"},"content":" if (!Name.isValidName(trimmedName)) {","lastModifiedDate":"2017-05-30"},{"lineNumber":58,"author":{"gitId":"-"},"content":" throw new ParseException(Name.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":59,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":60,"author":{"gitId":"-"},"content":" return new Name(trimmedName);","lastModifiedDate":"2017-05-29"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-29"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-29"},{"lineNumber":63,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-30"},{"lineNumber":64,"author":{"gitId":"-"},"content":" * Parses a {@code String phone} into a {@code Phone}.","lastModifiedDate":"2017-05-30"},{"lineNumber":65,"author":{"gitId":"-"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2017-05-30"},{"lineNumber":66,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2017-05-30"},{"lineNumber":67,"author":{"gitId":"-"},"content":" * @throws ParseException if the given {@code phone} is invalid.","lastModifiedDate":"2018-07-10"},{"lineNumber":68,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-30"},{"lineNumber":69,"author":{"gitId":"-"},"content":" public static Phone parsePhone(String phone) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":70,"author":{"gitId":"-"},"content":" requireNonNull(phone);","lastModifiedDate":"2017-05-30"},{"lineNumber":71,"author":{"gitId":"-"},"content":" String trimmedPhone \u003d phone.trim();","lastModifiedDate":"2017-05-30"},{"lineNumber":72,"author":{"gitId":"-"},"content":" if (!Phone.isValidPhone(trimmedPhone)) {","lastModifiedDate":"2017-05-30"},{"lineNumber":73,"author":{"gitId":"-"},"content":" throw new ParseException(Phone.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":74,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":75,"author":{"gitId":"-"},"content":" return new Phone(trimmedPhone);","lastModifiedDate":"2017-05-30"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":78,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-30"},{"lineNumber":79,"author":{"gitId":"-"},"content":" * Parses a {@code String address} into an {@code Address}.","lastModifiedDate":"2017-05-30"},{"lineNumber":80,"author":{"gitId":"-"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2017-05-30"},{"lineNumber":81,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2017-05-30"},{"lineNumber":82,"author":{"gitId":"-"},"content":" * @throws ParseException if the given {@code address} is invalid.","lastModifiedDate":"2018-07-10"},{"lineNumber":83,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-30"},{"lineNumber":84,"author":{"gitId":"-"},"content":" public static Address parseAddress(String address) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":85,"author":{"gitId":"-"},"content":" String trimmedAddress \u003d address.trim();","lastModifiedDate":"2017-05-30"},{"lineNumber":86,"author":{"gitId":"-"},"content":" return new Address(trimmedAddress);","lastModifiedDate":"2017-05-30"},{"lineNumber":87,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":89,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-30"},{"lineNumber":90,"author":{"gitId":"-"},"content":" * Parses a {@code String email} into an {@code Email}.","lastModifiedDate":"2017-05-30"},{"lineNumber":91,"author":{"gitId":"-"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2017-05-30"},{"lineNumber":92,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2017-05-30"},{"lineNumber":93,"author":{"gitId":"-"},"content":" * @throws ParseException if the given {@code email} is invalid.","lastModifiedDate":"2018-07-10"},{"lineNumber":94,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-30"},{"lineNumber":95,"author":{"gitId":"-"},"content":" public static Email parseEmail(String email) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":96,"author":{"gitId":"-"},"content":" requireNonNull(email);","lastModifiedDate":"2017-05-30"},{"lineNumber":97,"author":{"gitId":"-"},"content":" String trimmedEmail \u003d email.trim();","lastModifiedDate":"2017-05-30"},{"lineNumber":98,"author":{"gitId":"-"},"content":" if (!Email.isValidEmail(trimmedEmail)) {","lastModifiedDate":"2017-05-30"},{"lineNumber":99,"author":{"gitId":"-"},"content":" throw new ParseException(Email.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":101,"author":{"gitId":"-"},"content":" return new Email(trimmedEmail);","lastModifiedDate":"2017-05-30"},{"lineNumber":102,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":104,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-30"},{"lineNumber":105,"author":{"gitId":"-"},"content":" * Parses a {@code String tag} into a {@code Tag}.","lastModifiedDate":"2017-05-30"},{"lineNumber":106,"author":{"gitId":"-"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2017-05-30"},{"lineNumber":107,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2017-05-30"},{"lineNumber":108,"author":{"gitId":"-"},"content":" * @throws ParseException if the given {@code tag} is invalid.","lastModifiedDate":"2018-07-10"},{"lineNumber":109,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-30"},{"lineNumber":110,"author":{"gitId":"-"},"content":" public static Tag parseTag(String tag) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":111,"author":{"gitId":"-"},"content":" requireNonNull(tag);","lastModifiedDate":"2017-05-30"},{"lineNumber":112,"author":{"gitId":"-"},"content":" String trimmedTag \u003d tag.trim();","lastModifiedDate":"2017-05-30"},{"lineNumber":113,"author":{"gitId":"-"},"content":" if (!Tag.isValidTagName(trimmedTag)) {","lastModifiedDate":"2017-05-30"},{"lineNumber":114,"author":{"gitId":"-"},"content":" throw new ParseException(Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":116,"author":{"gitId":"-"},"content":" return new Tag(trimmedTag);","lastModifiedDate":"2017-05-30"},{"lineNumber":117,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":118,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":119,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-02-11"},{"lineNumber":120,"author":{"gitId":"ashleygoh1"},"content":" * Parses a {@code String jobDescription} into an {@code jobDescription}.","lastModifiedDate":"2024-02-25"},{"lineNumber":121,"author":{"gitId":"ashleygoh1"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2024-02-25"},{"lineNumber":122,"author":{"gitId":"ashleygoh1"},"content":" *","lastModifiedDate":"2024-02-25"},{"lineNumber":123,"author":{"gitId":"ashleygoh1"},"content":" * @throws ParseException if the given {@code jobDescription} is invalid.","lastModifiedDate":"2024-02-25"},{"lineNumber":124,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":125,"author":{"gitId":"ashleygoh1"},"content":" public static JobDescription parseJobDescription(String jobDescription) throws ParseException {","lastModifiedDate":"2024-02-25"},{"lineNumber":126,"author":{"gitId":"ashleygoh1"},"content":" requireNonNull(jobDescription);","lastModifiedDate":"2024-02-25"},{"lineNumber":127,"author":{"gitId":"ashleygoh1"},"content":" String trimmedJobDescription \u003d jobDescription.trim();","lastModifiedDate":"2024-02-25"},{"lineNumber":128,"author":{"gitId":"ashleygoh1"},"content":" if (!JobDescription.isValidJobDescription(trimmedJobDescription)) {","lastModifiedDate":"2024-02-25"},{"lineNumber":129,"author":{"gitId":"ashleygoh1"},"content":" throw new ParseException(JobDescription.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":130,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":131,"author":{"gitId":"ashleygoh1"},"content":" return new JobDescription(trimmedJobDescription);","lastModifiedDate":"2024-02-25"},{"lineNumber":132,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":133,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":134,"author":{"gitId":"ashleygoh1"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":135,"author":{"gitId":"ashleygoh1"},"content":" * Parses {@code dateTime} into a {@code LocalDateTime} object.","lastModifiedDate":"2024-02-25"},{"lineNumber":136,"author":{"gitId":"ashleygoh1"},"content":" * @throws ParseException if {@code dateTime} is of invalid format.","lastModifiedDate":"2024-02-25"},{"lineNumber":137,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":138,"author":{"gitId":"ashleygoh1"},"content":" public static InterviewDate parseInterviewDate(String interviewDate) throws ParseException {","lastModifiedDate":"2024-02-25"},{"lineNumber":139,"author":{"gitId":"ashleygoh1"},"content":" String trimmedDateTime \u003d interviewDate.trim();","lastModifiedDate":"2024-02-25"},{"lineNumber":140,"author":{"gitId":"ashleygoh1"},"content":" return new InterviewDate(trimmedDateTime);","lastModifiedDate":"2024-02-25"},{"lineNumber":141,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":142,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":143,"author":{"gitId":"ashleygoh1"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":144,"author":{"gitId":"ashleygoh1"},"content":" * Parses a {@code String internDuration} into an {@code internDuration}.","lastModifiedDate":"2024-02-25"},{"lineNumber":145,"author":{"gitId":"ashleygoh1"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2024-02-25"},{"lineNumber":146,"author":{"gitId":"ashleygoh1"},"content":" *","lastModifiedDate":"2024-02-25"},{"lineNumber":147,"author":{"gitId":"ashleygoh1"},"content":" * @throws ParseException if the given {@code internDuration} is invalid.","lastModifiedDate":"2024-02-25"},{"lineNumber":148,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":149,"author":{"gitId":"ashleygoh1"},"content":" public static InternDuration parseInternDuration(String internDuration) throws ParseException {","lastModifiedDate":"2024-02-25"},{"lineNumber":150,"author":{"gitId":"ashleygoh1"},"content":" String trimmedInternDuration \u003d internDuration.trim();","lastModifiedDate":"2024-02-25"},{"lineNumber":151,"author":{"gitId":"ashleygoh1"},"content":" if (!InternDuration.isValidInternDuration(trimmedInternDuration)) {","lastModifiedDate":"2024-02-25"},{"lineNumber":152,"author":{"gitId":"ashleygoh1"},"content":" throw new ParseException(InternDuration.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":153,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":154,"author":{"gitId":"ashleygoh1"},"content":" return new InternDuration(trimmedInternDuration);","lastModifiedDate":"2024-02-25"},{"lineNumber":155,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":156,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":157,"author":{"gitId":"ashleygoh1"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":158,"author":{"gitId":"ashleygoh1"},"content":" * Parses a {@code String salary} into an {@code salary}.","lastModifiedDate":"2024-02-25"},{"lineNumber":159,"author":{"gitId":"ashleygoh1"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2024-02-25"},{"lineNumber":160,"author":{"gitId":"ashleygoh1"},"content":" *","lastModifiedDate":"2024-02-25"},{"lineNumber":161,"author":{"gitId":"ashleygoh1"},"content":" * @throws ParseException if the given {@code salary} is invalid.","lastModifiedDate":"2024-02-25"},{"lineNumber":162,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-11"},{"lineNumber":163,"author":{"gitId":"ashleygoh1"},"content":" public static Salary parseSalary(String salary) throws ParseException {","lastModifiedDate":"2024-02-25"},{"lineNumber":164,"author":{"gitId":"ashleygoh1"},"content":" String trimmedSalary \u003d salary.trim();","lastModifiedDate":"2024-02-25"},{"lineNumber":165,"author":{"gitId":"ashleygoh1"},"content":" if (!Salary.isValidSalary(trimmedSalary)) {","lastModifiedDate":"2024-02-25"},{"lineNumber":166,"author":{"gitId":"ashleygoh1"},"content":" throw new ParseException(Salary.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":167,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-11"},{"lineNumber":168,"author":{"gitId":"ashleygoh1"},"content":" return new Salary(trimmedSalary);","lastModifiedDate":"2024-02-25"},{"lineNumber":169,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-11"},{"lineNumber":170,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":171,"author":{"gitId":"eunrcn"},"content":" /**","lastModifiedDate":"2024-02-28"},{"lineNumber":172,"author":{"gitId":"eunrcn"},"content":" * Parses a collection of {@code String tags} into a {@code Set\u003cTag\u003e}.","lastModifiedDate":"2024-02-28"},{"lineNumber":173,"author":{"gitId":"eunrcn"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2024-02-28"},{"lineNumber":174,"author":{"gitId":"eunrcn"},"content":" *","lastModifiedDate":"2024-02-28"},{"lineNumber":175,"author":{"gitId":"eunrcn"},"content":" * @throws ParseException if any of the given {@code tags} is invalid.","lastModifiedDate":"2024-02-28"},{"lineNumber":176,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2024-02-28"},{"lineNumber":177,"author":{"gitId":"-"},"content":" public static Set\u003cTag\u003e parseTags(Collection\u003cString\u003e tags) throws ParseException {","lastModifiedDate":"2024-02-28"},{"lineNumber":178,"author":{"gitId":"-"},"content":" requireNonNull(tags);","lastModifiedDate":"2024-02-28"},{"lineNumber":179,"author":{"gitId":"eunrcn"},"content":" Set\u003cTag\u003e tagSet \u003d new HashSet\u003c\u003e();","lastModifiedDate":"2024-02-28"},{"lineNumber":180,"author":{"gitId":"eunrcn"},"content":" for (String tag : tags) {","lastModifiedDate":"2024-02-28"},{"lineNumber":181,"author":{"gitId":"eunrcn"},"content":" String trimmedTag \u003d tag.trim();","lastModifiedDate":"2024-02-28"},{"lineNumber":182,"author":{"gitId":"eunrcn"},"content":" if (!Tag.isValidTagName(trimmedTag)) {","lastModifiedDate":"2024-02-28"},{"lineNumber":183,"author":{"gitId":"eunrcn"},"content":" throw new ParseException(Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-28"},{"lineNumber":184,"author":{"gitId":"eunrcn"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":185,"author":{"gitId":"eunrcn"},"content":" tagSet.add(new Tag(trimmedTag));","lastModifiedDate":"2024-02-28"},{"lineNumber":186,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":187,"author":{"gitId":"-"},"content":" return tagSet;","lastModifiedDate":"2024-02-28"},{"lineNumber":188,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-28"},{"lineNumber":189,"author":{"gitId":"eunrcn"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":190,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-02-11"}],"authorContributionMap":{"eunrcn":14,"ashleygoh1":57,"-":119}},{"path":"src/main/java/seedu/address/logic/parser/ViewCommandParser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Jawad280"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2024-02-26"},{"lineNumber":2,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":3,"author":{"gitId":"Jawad280"},"content":"import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2024-02-26"},{"lineNumber":4,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":5,"author":{"gitId":"Jawad280"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2024-02-26"},{"lineNumber":6,"author":{"gitId":"Jawad280"},"content":"import seedu.address.logic.commands.ViewCommand;","lastModifiedDate":"2024-02-26"},{"lineNumber":7,"author":{"gitId":"Jawad280"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":9,"author":{"gitId":"Jawad280"},"content":"/**","lastModifiedDate":"2024-02-26"},{"lineNumber":10,"author":{"gitId":"Jawad280"},"content":" * Parses input arguments and creates a new ViewCommand object","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"Jawad280"},"content":" */","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"Jawad280"},"content":"public class ViewCommandParser {","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"Jawad280"},"content":" /**","lastModifiedDate":"2024-02-26"},{"lineNumber":14,"author":{"gitId":"Jawad280"},"content":" * Parses the given {@code String} of arguments in the context of the ViewCommand","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"Jawad280"},"content":" * and returns a ViewCommand object for execution.","lastModifiedDate":"2024-02-26"},{"lineNumber":16,"author":{"gitId":"Jawad280"},"content":" * @throws ParseException if the user input does not conform the expected format","lastModifiedDate":"2024-02-26"},{"lineNumber":17,"author":{"gitId":"Jawad280"},"content":" */","lastModifiedDate":"2024-02-26"},{"lineNumber":18,"author":{"gitId":"Jawad280"},"content":" public ViewCommand parse(String args) throws ParseException {","lastModifiedDate":"2024-02-26"},{"lineNumber":19,"author":{"gitId":"Jawad280"},"content":" try {","lastModifiedDate":"2024-02-26"},{"lineNumber":20,"author":{"gitId":"Jawad280"},"content":" Index index \u003d ParserUtil.parseIndex(args);","lastModifiedDate":"2024-02-26"},{"lineNumber":21,"author":{"gitId":"Jawad280"},"content":" return new ViewCommand(index);","lastModifiedDate":"2024-02-26"},{"lineNumber":22,"author":{"gitId":"Jawad280"},"content":" } catch (ParseException pe) {","lastModifiedDate":"2024-02-26"},{"lineNumber":23,"author":{"gitId":"Jawad280"},"content":" throw new ParseException(","lastModifiedDate":"2024-02-26"},{"lineNumber":24,"author":{"gitId":"Jawad280"},"content":" String.format(MESSAGE_INVALID_COMMAND_FORMAT, ViewCommand.MESSAGE_USAGE), pe);","lastModifiedDate":"2024-02-26"},{"lineNumber":25,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":26,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":27,"author":{"gitId":"Jawad280"},"content":"}","lastModifiedDate":"2024-02-26"}],"authorContributionMap":{"Jawad280":27}},{"path":"src/main/java/seedu/address/model/AddressBook.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model;","lastModifiedDate":"2016-09-21"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2017-05-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2017-01-19"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-19"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2017-01-19"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.ToStringBuilder;","lastModifiedDate":"2019-02-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2016-08-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import seedu.address.model.person.UniquePersonList;","lastModifiedDate":"2016-08-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":12,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-08"},{"lineNumber":13,"author":{"gitId":"-"},"content":" * Wraps all data at the address-book level","lastModifiedDate":"2016-08-08"},{"lineNumber":14,"author":{"gitId":"-"},"content":" * Duplicates are not allowed (by .isSamePerson comparison)","lastModifiedDate":"2018-04-19"},{"lineNumber":15,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-08"},{"lineNumber":16,"author":{"gitId":"-"},"content":"public class AddressBook implements ReadOnlyAddressBook {","lastModifiedDate":"2016-08-08"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":18,"author":{"gitId":"-"},"content":" private final UniquePersonList persons;","lastModifiedDate":"2016-08-26"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":20,"author":{"gitId":"-"},"content":" /*","lastModifiedDate":"2016-10-19"},{"lineNumber":21,"author":{"gitId":"-"},"content":" * The \u0027unusual\u0027 code block below is a non-static initialization block, sometimes used to avoid duplication","lastModifiedDate":"2019-05-11"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * between constructors. See https://docs.oracle.com/javase/tutorial/java/javaOO/initial.html","lastModifiedDate":"2016-10-19"},{"lineNumber":23,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2016-10-19"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * Note that non-static init blocks are not recommended to use. There are other ways to avoid duplication","lastModifiedDate":"2016-10-19"},{"lineNumber":25,"author":{"gitId":"-"},"content":" * among constructors.","lastModifiedDate":"2016-10-19"},{"lineNumber":26,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-10-19"},{"lineNumber":27,"author":{"gitId":"-"},"content":" {","lastModifiedDate":"2016-08-08"},{"lineNumber":28,"author":{"gitId":"-"},"content":" persons \u003d new UniquePersonList();","lastModifiedDate":"2016-08-26"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-08"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":31,"author":{"gitId":"-"},"content":" public AddressBook() {}","lastModifiedDate":"2016-08-08"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":33,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-08-08"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * Creates an AddressBook using the Persons in the {@code toBeCopied}","lastModifiedDate":"2018-03-29"},{"lineNumber":35,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-08"},{"lineNumber":36,"author":{"gitId":"-"},"content":" public AddressBook(ReadOnlyAddressBook toBeCopied) {","lastModifiedDate":"2016-08-08"},{"lineNumber":37,"author":{"gitId":"-"},"content":" this();","lastModifiedDate":"2016-12-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":" resetData(toBeCopied);","lastModifiedDate":"2016-12-24"},{"lineNumber":39,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-22"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-22"},{"lineNumber":41,"author":{"gitId":"-"},"content":" //// list overwrite operations","lastModifiedDate":"2016-08-08"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":43,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-07"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * Replaces the contents of the person list with {@code persons}.","lastModifiedDate":"2018-08-07"},{"lineNumber":45,"author":{"gitId":"-"},"content":" * {@code persons} must not contain duplicate persons.","lastModifiedDate":"2018-08-07"},{"lineNumber":46,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-07"},{"lineNumber":47,"author":{"gitId":"-"},"content":" public void setPersons(List\u003cPerson\u003e persons) {","lastModifiedDate":"2018-08-07"},{"lineNumber":48,"author":{"gitId":"-"},"content":" this.persons.setPersons(persons);","lastModifiedDate":"2016-10-19"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-08"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":51,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-08-16"},{"lineNumber":52,"author":{"gitId":"-"},"content":" * Resets the existing data of this {@code AddressBook} with {@code newData}.","lastModifiedDate":"2017-08-16"},{"lineNumber":53,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-08-16"},{"lineNumber":54,"author":{"gitId":"-"},"content":" public void resetData(ReadOnlyAddressBook newData) {","lastModifiedDate":"2016-08-08"},{"lineNumber":55,"author":{"gitId":"-"},"content":" requireNonNull(newData);","lastModifiedDate":"2017-05-15"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-20"},{"lineNumber":57,"author":{"gitId":"-"},"content":" setPersons(newData.getPersonList());","lastModifiedDate":"2018-03-29"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-08"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":60,"author":{"gitId":"-"},"content":" //// person-level operations","lastModifiedDate":"2016-08-08"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":62,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-06"},{"lineNumber":63,"author":{"gitId":"-"},"content":" * Returns true if a person with the same identity as {@code person} exists in the address book.","lastModifiedDate":"2018-08-06"},{"lineNumber":64,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-06"},{"lineNumber":65,"author":{"gitId":"-"},"content":" public boolean hasPerson(Person person) {","lastModifiedDate":"2018-08-06"},{"lineNumber":66,"author":{"gitId":"-"},"content":" requireNonNull(person);","lastModifiedDate":"2018-08-06"},{"lineNumber":67,"author":{"gitId":"-"},"content":" return persons.contains(person);","lastModifiedDate":"2018-08-06"},{"lineNumber":68,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-06"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-06"},{"lineNumber":70,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-09-21"},{"lineNumber":71,"author":{"gitId":"-"},"content":" * Adds a person to the address book.","lastModifiedDate":"2016-09-21"},{"lineNumber":72,"author":{"gitId":"-"},"content":" * The person must not already exist in the address book.","lastModifiedDate":"2018-08-07"},{"lineNumber":73,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-09-21"},{"lineNumber":74,"author":{"gitId":"-"},"content":" public void addPerson(Person p) {","lastModifiedDate":"2018-08-07"},{"lineNumber":75,"author":{"gitId":"-"},"content":" persons.add(p);","lastModifiedDate":"2018-03-29"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-08"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":78,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-12-13"},{"lineNumber":79,"author":{"gitId":"-"},"content":" * Replaces the given person {@code target} in the list with {@code editedPerson}.","lastModifiedDate":"2018-01-10"},{"lineNumber":80,"author":{"gitId":"-"},"content":" * {@code target} must exist in the address book.","lastModifiedDate":"2018-08-07"},{"lineNumber":81,"author":{"gitId":"-"},"content":" * The person identity of {@code editedPerson} must not be the same as another existing person in the address book.","lastModifiedDate":"2018-08-07"},{"lineNumber":82,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-13"},{"lineNumber":83,"author":{"gitId":"-"},"content":" public void setPerson(Person target, Person editedPerson) {","lastModifiedDate":"2018-08-17"},{"lineNumber":84,"author":{"gitId":"-"},"content":" requireNonNull(editedPerson);","lastModifiedDate":"2018-01-10"},{"lineNumber":85,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-13"},{"lineNumber":86,"author":{"gitId":"-"},"content":" persons.setPerson(target, editedPerson);","lastModifiedDate":"2018-03-29"},{"lineNumber":87,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-21"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":89,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-08-16"},{"lineNumber":90,"author":{"gitId":"-"},"content":" * Removes {@code key} from this {@code AddressBook}.","lastModifiedDate":"2017-08-16"},{"lineNumber":91,"author":{"gitId":"-"},"content":" * {@code key} must exist in the address book.","lastModifiedDate":"2018-08-07"},{"lineNumber":92,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-08-16"},{"lineNumber":93,"author":{"gitId":"-"},"content":" public void removePerson(Person key) {","lastModifiedDate":"2018-08-07"},{"lineNumber":94,"author":{"gitId":"-"},"content":" persons.remove(key);","lastModifiedDate":"2018-02-28"},{"lineNumber":95,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-08"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":97,"author":{"gitId":"-"},"content":" //// util methods","lastModifiedDate":"2016-08-08"},{"lineNumber":98,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":99,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-08"},{"lineNumber":100,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2016-08-08"},{"lineNumber":101,"author":{"gitId":"-"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2019-02-23"},{"lineNumber":102,"author":{"gitId":"-"},"content":" .add(\"persons\", persons)","lastModifiedDate":"2019-02-23"},{"lineNumber":103,"author":{"gitId":"-"},"content":" .toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":104,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-08"},{"lineNumber":105,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":106,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-08"},{"lineNumber":107,"author":{"gitId":"-"},"content":" public ObservableList\u003cPerson\u003e getPersonList() {","lastModifiedDate":"2018-01-10"},{"lineNumber":108,"author":{"gitId":"Jawad280"},"content":" ObservableList\u003cPerson\u003e personList \u003d persons.asUnmodifiableObservableList();","lastModifiedDate":"2024-02-26"},{"lineNumber":109,"author":{"gitId":"Jawad280"},"content":" // Sort the list","lastModifiedDate":"2024-02-26"},{"lineNumber":110,"author":{"gitId":"Jawad280"},"content":" personList \u003d personList.sorted();","lastModifiedDate":"2024-02-26"},{"lineNumber":111,"author":{"gitId":"Jawad280"},"content":" return personList;","lastModifiedDate":"2024-02-26"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-01"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-01"},{"lineNumber":114,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-09-21"},{"lineNumber":115,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2016-09-21"},{"lineNumber":116,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2023-07-13"},{"lineNumber":117,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2023-07-13"},{"lineNumber":118,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-13"},{"lineNumber":119,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-13"},{"lineNumber":120,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2023-07-13"},{"lineNumber":121,"author":{"gitId":"-"},"content":" if (!(other instanceof AddressBook)) {","lastModifiedDate":"2023-07-13"},{"lineNumber":122,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2023-07-13"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-13"},{"lineNumber":124,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-13"},{"lineNumber":125,"author":{"gitId":"-"},"content":" AddressBook otherAddressBook \u003d (AddressBook) other;","lastModifiedDate":"2023-07-13"},{"lineNumber":126,"author":{"gitId":"-"},"content":" return persons.equals(otherAddressBook.persons);","lastModifiedDate":"2023-07-13"},{"lineNumber":127,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-21"},{"lineNumber":128,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":129,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-09-21"},{"lineNumber":130,"author":{"gitId":"-"},"content":" public int hashCode() {","lastModifiedDate":"2016-09-21"},{"lineNumber":131,"author":{"gitId":"-"},"content":" return persons.hashCode();","lastModifiedDate":"2018-03-29"},{"lineNumber":132,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-21"},{"lineNumber":133,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"}],"authorContributionMap":{"Jawad280":4,"-":129}},{"path":"src/main/java/seedu/address/model/Model.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model;","lastModifiedDate":"2016-09-25"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.nio.file.Path;","lastModifiedDate":"2018-11-27"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.function.Predicate;","lastModifiedDate":"2017-06-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-19"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2017-09-01"},{"lineNumber":7,"author":{"gitId":"chenyixin0"},"content":"import javafx.collections.transformation.FilteredList;","lastModifiedDate":"2024-02-29"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.GuiSettings;","lastModifiedDate":"2018-11-27"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-01-10"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-09-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" * The API of the Model component.","lastModifiedDate":"2016-09-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-09-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"public interface Model {","lastModifiedDate":"2016-09-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":" /** {@code Predicate} that always evaluate to true */","lastModifiedDate":"2017-08-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":" Predicate\u003cPerson\u003e PREDICATE_SHOW_ALL_PERSONS \u003d unused -\u003e true;","lastModifiedDate":"2018-01-10"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-08-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-11-27"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * Replaces user prefs data with the data in {@code userPrefs}.","lastModifiedDate":"2018-12-06"},{"lineNumber":20,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-11-27"},{"lineNumber":21,"author":{"gitId":"-"},"content":" void setUserPrefs(ReadOnlyUserPrefs userPrefs);","lastModifiedDate":"2018-12-06"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":23,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-11-27"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * Returns the user prefs.","lastModifiedDate":"2018-11-27"},{"lineNumber":25,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-11-27"},{"lineNumber":26,"author":{"gitId":"-"},"content":" ReadOnlyUserPrefs getUserPrefs();","lastModifiedDate":"2018-11-27"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":28,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-11-27"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * Returns the user prefs\u0027 GUI settings.","lastModifiedDate":"2018-11-27"},{"lineNumber":30,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-11-27"},{"lineNumber":31,"author":{"gitId":"-"},"content":" GuiSettings getGuiSettings();","lastModifiedDate":"2018-11-27"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":33,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-11-27"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * Sets the user prefs\u0027 GUI settings.","lastModifiedDate":"2018-11-27"},{"lineNumber":35,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-11-27"},{"lineNumber":36,"author":{"gitId":"-"},"content":" void setGuiSettings(GuiSettings guiSettings);","lastModifiedDate":"2018-11-27"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":38,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-11-27"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * Returns the user prefs\u0027 address book file path.","lastModifiedDate":"2018-11-27"},{"lineNumber":40,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-11-27"},{"lineNumber":41,"author":{"gitId":"-"},"content":" Path getAddressBookFilePath();","lastModifiedDate":"2018-11-27"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":43,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-11-27"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * Sets the user prefs\u0027 address book file path.","lastModifiedDate":"2018-11-27"},{"lineNumber":45,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-11-27"},{"lineNumber":46,"author":{"gitId":"-"},"content":" void setAddressBookFilePath(Path addressBookFilePath);","lastModifiedDate":"2018-11-27"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":48,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-11-27"},{"lineNumber":49,"author":{"gitId":"-"},"content":" * Replaces address book data with the data in {@code addressBook}.","lastModifiedDate":"2018-11-27"},{"lineNumber":50,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-11-27"},{"lineNumber":51,"author":{"gitId":"-"},"content":" void setAddressBook(ReadOnlyAddressBook addressBook);","lastModifiedDate":"2018-11-27"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" /** Returns the AddressBook */","lastModifiedDate":"2016-09-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" ReadOnlyAddressBook getAddressBook();","lastModifiedDate":"2016-09-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-06"},{"lineNumber":57,"author":{"gitId":"-"},"content":" * Returns true if a person with the same identity as {@code person} exists in the address book.","lastModifiedDate":"2018-08-06"},{"lineNumber":58,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-06"},{"lineNumber":59,"author":{"gitId":"-"},"content":" boolean hasPerson(Person person);","lastModifiedDate":"2018-08-06"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-06"},{"lineNumber":61,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-07"},{"lineNumber":62,"author":{"gitId":"-"},"content":" * Deletes the given person.","lastModifiedDate":"2018-08-07"},{"lineNumber":63,"author":{"gitId":"-"},"content":" * The person must exist in the address book.","lastModifiedDate":"2018-08-07"},{"lineNumber":64,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-07"},{"lineNumber":65,"author":{"gitId":"-"},"content":" void deletePerson(Person target);","lastModifiedDate":"2018-08-07"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-07"},{"lineNumber":68,"author":{"gitId":"-"},"content":" * Adds the given person.","lastModifiedDate":"2018-08-07"},{"lineNumber":69,"author":{"gitId":"-"},"content":" * {@code person} must not already exist in the address book.","lastModifiedDate":"2018-08-07"},{"lineNumber":70,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-07"},{"lineNumber":71,"author":{"gitId":"-"},"content":" void addPerson(Person person);","lastModifiedDate":"2018-08-07"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-25"},{"lineNumber":73,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-12-13"},{"lineNumber":74,"author":{"gitId":"-"},"content":" * Replaces the given person {@code target} with {@code editedPerson}.","lastModifiedDate":"2017-06-07"},{"lineNumber":75,"author":{"gitId":"-"},"content":" * {@code target} must exist in the address book.","lastModifiedDate":"2018-08-07"},{"lineNumber":76,"author":{"gitId":"-"},"content":" * The person identity of {@code editedPerson} must not be the same as another existing person in the address book.","lastModifiedDate":"2018-08-07"},{"lineNumber":77,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-13"},{"lineNumber":78,"author":{"gitId":"-"},"content":" void setPerson(Person target, Person editedPerson);","lastModifiedDate":"2018-08-17"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-13"},{"lineNumber":80,"author":{"gitId":"-"},"content":" /** Returns an unmodifiable view of the filtered person list */","lastModifiedDate":"2017-09-01"},{"lineNumber":81,"author":{"gitId":"-"},"content":" ObservableList\u003cPerson\u003e getFilteredPersonList();","lastModifiedDate":"2018-01-10"},{"lineNumber":82,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-25"},{"lineNumber":83,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-08-05"},{"lineNumber":84,"author":{"gitId":"-"},"content":" * Updates the filter of the filtered person list to filter by the given {@code predicate}.","lastModifiedDate":"2017-08-05"},{"lineNumber":85,"author":{"gitId":"-"},"content":" * @throws NullPointerException if {@code predicate} is null.","lastModifiedDate":"2017-08-05"},{"lineNumber":86,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-08-05"},{"lineNumber":87,"author":{"gitId":"-"},"content":" void updateFilteredPersonList(Predicate\u003cPerson\u003e predicate);","lastModifiedDate":"2018-01-10"},{"lineNumber":88,"author":{"gitId":"Jawad280"},"content":" Person choosePersonToView(Predicate\u003cPerson\u003e predicate);","lastModifiedDate":"2024-02-26"},{"lineNumber":89,"author":{"gitId":"chenyixin0"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":90,"author":{"gitId":"chenyixin0"},"content":" FilteredList\u003cPerson\u003e generateNewFilteredPersonList(Predicate\u003cPerson\u003e predicate);","lastModifiedDate":"2024-02-29"},{"lineNumber":91,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-09-25"}],"authorContributionMap":{"chenyixin0":3,"Jawad280":1,"-":87}},{"path":"src/main/java/seedu/address/model/ModelManager.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model;","lastModifiedDate":"2016-08-08"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2017-08-05"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.commons.util.CollectionUtil.requireAllNonNull;","lastModifiedDate":"2017-05-19"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-15"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.nio.file.Path;","lastModifiedDate":"2018-11-27"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.function.Predicate;","lastModifiedDate":"2017-06-12"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2017-01-19"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-19"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2017-09-01"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import javafx.collections.transformation.FilteredList;","lastModifiedDate":"2016-08-26"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.GuiSettings;","lastModifiedDate":"2018-11-27"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.LogsCenter;","lastModifiedDate":"2016-09-23"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-01-10"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":16,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-08"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * Represents the in-memory model of the address book data.","lastModifiedDate":"2016-08-08"},{"lineNumber":18,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-08"},{"lineNumber":19,"author":{"gitId":"-"},"content":"public class ModelManager implements Model {","lastModifiedDate":"2018-12-09"},{"lineNumber":20,"author":{"gitId":"-"},"content":" private static final Logger logger \u003d LogsCenter.getLogger(ModelManager.class);","lastModifiedDate":"2016-09-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":22,"author":{"gitId":"-"},"content":" private final AddressBook addressBook;","lastModifiedDate":"2019-01-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" private final UserPrefs userPrefs;","lastModifiedDate":"2018-12-06"},{"lineNumber":24,"author":{"gitId":"-"},"content":" private final FilteredList\u003cPerson\u003e filteredPersons;","lastModifiedDate":"2018-01-10"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":26,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-08-08"},{"lineNumber":27,"author":{"gitId":"-"},"content":" * Initializes a ModelManager with the given addressBook and userPrefs.","lastModifiedDate":"2016-12-24"},{"lineNumber":28,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-08"},{"lineNumber":29,"author":{"gitId":"-"},"content":" public ModelManager(ReadOnlyAddressBook addressBook, ReadOnlyUserPrefs userPrefs) {","lastModifiedDate":"2018-12-06"},{"lineNumber":30,"author":{"gitId":"-"},"content":" requireAllNonNull(addressBook, userPrefs);","lastModifiedDate":"2017-05-19"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" logger.fine(\"Initializing with address book: \" + addressBook + \" and user prefs \" + userPrefs);","lastModifiedDate":"2016-12-24"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":34,"author":{"gitId":"-"},"content":" this.addressBook \u003d new AddressBook(addressBook);","lastModifiedDate":"2019-01-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" this.userPrefs \u003d new UserPrefs(userPrefs);","lastModifiedDate":"2018-12-06"},{"lineNumber":36,"author":{"gitId":"-"},"content":" filteredPersons \u003d new FilteredList\u003c\u003e(this.addressBook.getPersonList());","lastModifiedDate":"2019-01-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-08"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":39,"author":{"gitId":"-"},"content":" public ModelManager() {","lastModifiedDate":"2016-09-22"},{"lineNumber":40,"author":{"gitId":"-"},"content":" this(new AddressBook(), new UserPrefs());","lastModifiedDate":"2016-09-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-08"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":43,"author":{"gitId":"-"},"content":" //\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d UserPrefs \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\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":"2018-11-27"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":45,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":46,"author":{"gitId":"-"},"content":" public void setUserPrefs(ReadOnlyUserPrefs userPrefs) {","lastModifiedDate":"2018-12-06"},{"lineNumber":47,"author":{"gitId":"-"},"content":" requireNonNull(userPrefs);","lastModifiedDate":"2018-11-27"},{"lineNumber":48,"author":{"gitId":"-"},"content":" this.userPrefs.resetData(userPrefs);","lastModifiedDate":"2018-12-06"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":51,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":52,"author":{"gitId":"-"},"content":" public ReadOnlyUserPrefs getUserPrefs() {","lastModifiedDate":"2018-11-27"},{"lineNumber":53,"author":{"gitId":"-"},"content":" return userPrefs;","lastModifiedDate":"2018-11-27"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":56,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":57,"author":{"gitId":"-"},"content":" public GuiSettings getGuiSettings() {","lastModifiedDate":"2018-11-27"},{"lineNumber":58,"author":{"gitId":"-"},"content":" return userPrefs.getGuiSettings();","lastModifiedDate":"2018-11-27"},{"lineNumber":59,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":61,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":62,"author":{"gitId":"-"},"content":" public void setGuiSettings(GuiSettings guiSettings) {","lastModifiedDate":"2018-11-27"},{"lineNumber":63,"author":{"gitId":"-"},"content":" requireNonNull(guiSettings);","lastModifiedDate":"2018-11-27"},{"lineNumber":64,"author":{"gitId":"-"},"content":" userPrefs.setGuiSettings(guiSettings);","lastModifiedDate":"2018-11-27"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":67,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":68,"author":{"gitId":"-"},"content":" public Path getAddressBookFilePath() {","lastModifiedDate":"2018-11-27"},{"lineNumber":69,"author":{"gitId":"-"},"content":" return userPrefs.getAddressBookFilePath();","lastModifiedDate":"2018-11-27"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":72,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":73,"author":{"gitId":"-"},"content":" public void setAddressBookFilePath(Path addressBookFilePath) {","lastModifiedDate":"2018-11-27"},{"lineNumber":74,"author":{"gitId":"-"},"content":" requireNonNull(addressBookFilePath);","lastModifiedDate":"2018-11-27"},{"lineNumber":75,"author":{"gitId":"-"},"content":" userPrefs.setAddressBookFilePath(addressBookFilePath);","lastModifiedDate":"2018-11-27"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":78,"author":{"gitId":"-"},"content":" //\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d AddressBook \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\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":"2018-11-27"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":80,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-09-25"},{"lineNumber":81,"author":{"gitId":"-"},"content":" public void setAddressBook(ReadOnlyAddressBook addressBook) {","lastModifiedDate":"2018-11-27"},{"lineNumber":82,"author":{"gitId":"-"},"content":" this.addressBook.resetData(addressBook);","lastModifiedDate":"2019-01-25"},{"lineNumber":83,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-08"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":85,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-09-25"},{"lineNumber":86,"author":{"gitId":"-"},"content":" public ReadOnlyAddressBook getAddressBook() {","lastModifiedDate":"2016-09-21"},{"lineNumber":87,"author":{"gitId":"-"},"content":" return addressBook;","lastModifiedDate":"2019-01-25"},{"lineNumber":88,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-21"},{"lineNumber":89,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":90,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-08-06"},{"lineNumber":91,"author":{"gitId":"-"},"content":" public boolean hasPerson(Person person) {","lastModifiedDate":"2018-08-15"},{"lineNumber":92,"author":{"gitId":"-"},"content":" requireNonNull(person);","lastModifiedDate":"2018-08-06"},{"lineNumber":93,"author":{"gitId":"-"},"content":" return addressBook.hasPerson(person);","lastModifiedDate":"2019-01-25"},{"lineNumber":94,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-06"},{"lineNumber":95,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-06"},{"lineNumber":96,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-09-25"},{"lineNumber":97,"author":{"gitId":"-"},"content":" public void deletePerson(Person target) {","lastModifiedDate":"2018-08-15"},{"lineNumber":98,"author":{"gitId":"-"},"content":" addressBook.removePerson(target);","lastModifiedDate":"2019-01-25"},{"lineNumber":99,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-08"},{"lineNumber":100,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":101,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-09-25"},{"lineNumber":102,"author":{"gitId":"-"},"content":" public void addPerson(Person person) {","lastModifiedDate":"2018-08-15"},{"lineNumber":103,"author":{"gitId":"-"},"content":" addressBook.addPerson(person);","lastModifiedDate":"2019-01-25"},{"lineNumber":104,"author":{"gitId":"-"},"content":" updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS);","lastModifiedDate":"2017-08-05"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-26"},{"lineNumber":106,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-26"},{"lineNumber":107,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-12-13"},{"lineNumber":108,"author":{"gitId":"-"},"content":" public void setPerson(Person target, Person editedPerson) {","lastModifiedDate":"2018-08-17"},{"lineNumber":109,"author":{"gitId":"-"},"content":" requireAllNonNull(target, editedPerson);","lastModifiedDate":"2017-06-07"},{"lineNumber":110,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-13"},{"lineNumber":111,"author":{"gitId":"-"},"content":" addressBook.setPerson(target, editedPerson);","lastModifiedDate":"2019-01-25"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-13"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-13"},{"lineNumber":114,"author":{"gitId":"-"},"content":" //\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d Filtered Person List Accessors \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\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":"2016-10-12"},{"lineNumber":115,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":116,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-19"},{"lineNumber":117,"author":{"gitId":"-"},"content":" * Returns an unmodifiable view of the list of {@code Person} backed by the internal list of","lastModifiedDate":"2018-01-10"},{"lineNumber":118,"author":{"gitId":"-"},"content":" * {@code versionedAddressBook}","lastModifiedDate":"2018-06-11"},{"lineNumber":119,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-19"},{"lineNumber":120,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-09-25"},{"lineNumber":121,"author":{"gitId":"-"},"content":" public ObservableList\u003cPerson\u003e getFilteredPersonList() {","lastModifiedDate":"2018-01-10"},{"lineNumber":122,"author":{"gitId":"-"},"content":" return filteredPersons;","lastModifiedDate":"2018-12-09"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-22"},{"lineNumber":124,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-22"},{"lineNumber":125,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-09-25"},{"lineNumber":126,"author":{"gitId":"-"},"content":" public void updateFilteredPersonList(Predicate\u003cPerson\u003e predicate) {","lastModifiedDate":"2018-01-10"},{"lineNumber":127,"author":{"gitId":"-"},"content":" requireNonNull(predicate);","lastModifiedDate":"2017-08-05"},{"lineNumber":128,"author":{"gitId":"-"},"content":" filteredPersons.setPredicate(predicate);","lastModifiedDate":"2017-06-12"},{"lineNumber":129,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-22"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":131,"author":{"gitId":"chenyixin0"},"content":" @Override","lastModifiedDate":"2024-02-29"},{"lineNumber":132,"author":{"gitId":"chenyixin0"},"content":" public FilteredList\u003cPerson\u003e generateNewFilteredPersonList(Predicate\u003cPerson\u003e predicate) {","lastModifiedDate":"2024-02-29"},{"lineNumber":133,"author":{"gitId":"chenyixin0"},"content":" requireNonNull(predicate);","lastModifiedDate":"2024-02-29"},{"lineNumber":134,"author":{"gitId":"chenyixin0"},"content":" return new FilteredList\u003c\u003e(filteredPersons, predicate);","lastModifiedDate":"2024-02-29"},{"lineNumber":135,"author":{"gitId":"chenyixin0"},"content":" //return filteredPersons;","lastModifiedDate":"2024-02-29"},{"lineNumber":136,"author":{"gitId":"chenyixin0"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":137,"author":{"gitId":"chenyixin0"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":138,"author":{"gitId":"Jawad280"},"content":" @Override","lastModifiedDate":"2024-02-26"},{"lineNumber":139,"author":{"gitId":"Jawad280"},"content":" public Person choosePersonToView(Predicate\u003cPerson\u003e predicate) {","lastModifiedDate":"2024-02-26"},{"lineNumber":140,"author":{"gitId":"Jawad280"},"content":" requireNonNull(predicate);","lastModifiedDate":"2024-02-26"},{"lineNumber":141,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":142,"author":{"gitId":"Jawad280"},"content":" for (Person p : filteredPersons) {","lastModifiedDate":"2024-02-26"},{"lineNumber":143,"author":{"gitId":"Jawad280"},"content":" if (predicate.test(p)) {","lastModifiedDate":"2024-02-26"},{"lineNumber":144,"author":{"gitId":"Jawad280"},"content":" return p;","lastModifiedDate":"2024-02-26"},{"lineNumber":145,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":146,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":147,"author":{"gitId":"Jawad280"},"content":" return null;","lastModifiedDate":"2024-02-26"},{"lineNumber":148,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":149,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-22"},{"lineNumber":150,"author":{"gitId":"chenyixin0"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":151,"author":{"gitId":"chenyixin0"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":152,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-05-31"},{"lineNumber":153,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-07-13"},{"lineNumber":154,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2023-07-13"},{"lineNumber":155,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2017-05-31"},{"lineNumber":156,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-31"},{"lineNumber":157,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":158,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2017-05-31"},{"lineNumber":159,"author":{"gitId":"-"},"content":" if (!(other instanceof ModelManager)) {","lastModifiedDate":"2023-07-13"},{"lineNumber":160,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2017-05-31"},{"lineNumber":161,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-31"},{"lineNumber":162,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":163,"author":{"gitId":"-"},"content":" ModelManager otherModelManager \u003d (ModelManager) other;","lastModifiedDate":"2023-07-13"},{"lineNumber":164,"author":{"gitId":"-"},"content":" return addressBook.equals(otherModelManager.addressBook)","lastModifiedDate":"2023-07-13"},{"lineNumber":165,"author":{"gitId":"-"},"content":" \u0026\u0026 userPrefs.equals(otherModelManager.userPrefs)","lastModifiedDate":"2023-07-13"},{"lineNumber":166,"author":{"gitId":"-"},"content":" \u0026\u0026 filteredPersons.equals(otherModelManager.filteredPersons);","lastModifiedDate":"2023-07-13"},{"lineNumber":167,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-31"},{"lineNumber":168,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"}],"authorContributionMap":{"chenyixin0":9,"Jawad280":11,"-":148}},{"path":"src/main/java/seedu/address/model/person/Address.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model.person;","lastModifiedDate":"2016-08-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.commons.util.AppUtil.checkArgument;","lastModifiedDate":"2024-02-26"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":5,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":" * Represents a Person\u0027s address in the address book.","lastModifiedDate":"2016-08-24"},{"lineNumber":7,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":"public class Address {","lastModifiedDate":"2016-09-21"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":" public static final String MESSAGE_CONSTRAINTS \u003d \"Addresses can take any values, and it should not be blank\";","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"-"},"content":" /*","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"-"},"content":" * The first character of the address must not be a whitespace,","lastModifiedDate":"2024-02-26"},{"lineNumber":14,"author":{"gitId":"-"},"content":" * otherwise \" \" (a blank string) becomes a valid input.","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2024-02-26"},{"lineNumber":16,"author":{"gitId":"-"},"content":" public static final String VALIDATION_REGEX \u003d \"[^\\\\s].*\";","lastModifiedDate":"2024-02-26"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":18,"author":{"gitId":"-"},"content":" public final String value;","lastModifiedDate":"2016-08-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":20,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-08-24"},{"lineNumber":21,"author":{"gitId":"-"},"content":" * Constructs an {@code Address}.","lastModifiedDate":"2017-05-30"},{"lineNumber":22,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2016-08-24"},{"lineNumber":23,"author":{"gitId":"-"},"content":" * @param address A valid address.","lastModifiedDate":"2017-05-30"},{"lineNumber":24,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":25,"author":{"gitId":"-"},"content":" public Address(String address) {","lastModifiedDate":"2017-05-30"},{"lineNumber":26,"author":{"gitId":"ashleygoh1"},"content":" if (address.isEmpty()) {","lastModifiedDate":"2024-02-26"},{"lineNumber":27,"author":{"gitId":"-"},"content":" value \u003d address;","lastModifiedDate":"2018-08-14"},{"lineNumber":28,"author":{"gitId":"ashleygoh1"},"content":" } else {","lastModifiedDate":"2024-02-26"},{"lineNumber":29,"author":{"gitId":"ashleygoh1"},"content":" checkArgument(isValidAddress(address), MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-26"},{"lineNumber":30,"author":{"gitId":"ashleygoh1"},"content":" value \u003d address;","lastModifiedDate":"2024-02-26"},{"lineNumber":31,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":34,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2024-02-26"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * Returns true if a given string is a valid email.","lastModifiedDate":"2024-02-26"},{"lineNumber":36,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2024-02-26"},{"lineNumber":37,"author":{"gitId":"-"},"content":" public static boolean isValidAddress(String test) {","lastModifiedDate":"2024-02-26"},{"lineNumber":38,"author":{"gitId":"-"},"content":" return test.matches(VALIDATION_REGEX);","lastModifiedDate":"2024-02-26"},{"lineNumber":39,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":41,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":42,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2016-08-24"},{"lineNumber":43,"author":{"gitId":"-"},"content":" return value;","lastModifiedDate":"2016-08-24"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":46,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":47,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2016-08-24"},{"lineNumber":48,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2023-07-13"},{"lineNumber":49,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2023-07-13"},{"lineNumber":50,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-13"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-13"},{"lineNumber":52,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2023-07-13"},{"lineNumber":53,"author":{"gitId":"-"},"content":" if (!(other instanceof Address)) {","lastModifiedDate":"2023-07-13"},{"lineNumber":54,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2023-07-13"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-13"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-13"},{"lineNumber":57,"author":{"gitId":"-"},"content":" Address otherAddress \u003d (Address) other;","lastModifiedDate":"2023-07-13"},{"lineNumber":58,"author":{"gitId":"-"},"content":" return value.equals(otherAddress.value);","lastModifiedDate":"2023-07-13"},{"lineNumber":59,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":61,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":62,"author":{"gitId":"-"},"content":" public int hashCode() {","lastModifiedDate":"2016-08-24"},{"lineNumber":63,"author":{"gitId":"-"},"content":" return value.hashCode();","lastModifiedDate":"2016-08-24"},{"lineNumber":64,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":66,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-24"}],"authorContributionMap":{"ashleygoh1":5,"-":61}},{"path":"src/main/java/seedu/address/model/person/InternDuration.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ashleygoh1"},"content":"package seedu.address.model.person;","lastModifiedDate":"2024-02-25"},{"lineNumber":2,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":3,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.commons.util.AppUtil.checkArgument;","lastModifiedDate":"2024-02-25"},{"lineNumber":4,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":5,"author":{"gitId":"ashleygoh1"},"content":"/**","lastModifiedDate":"2024-02-25"},{"lineNumber":6,"author":{"gitId":"ashleygoh1"},"content":" * Represents a Person\u0027s Intern Duration in the address book.","lastModifiedDate":"2024-02-25"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":" * Guarantees: immutable; is valid as declared in {@link #isValidInternDuration(String)}","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"ashleygoh1"},"content":"public class InternDuration {","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":" public static final String MESSAGE_CONSTRAINTS \u003d \"Intern Duration can take any values, and it should not be blank\";","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"ashleygoh1"},"content":" /*","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"ashleygoh1"},"content":" * The first character of the intern duration must not be a whitespace,","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"ashleygoh1"},"content":" * otherwise \" \" (a blank string) becomes a valid input.","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"ashleygoh1"},"content":" public static final String VALIDATION_REGEX \u003d \"[^\\\\s].*\";","lastModifiedDate":"2024-02-25"},{"lineNumber":18,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":19,"author":{"gitId":"ashleygoh1"},"content":" public final String value;","lastModifiedDate":"2024-02-25"},{"lineNumber":20,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":21,"author":{"gitId":"ashleygoh1"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":22,"author":{"gitId":"ashleygoh1"},"content":" * Constructs an {@code internDuration}.","lastModifiedDate":"2024-02-25"},{"lineNumber":23,"author":{"gitId":"ashleygoh1"},"content":" *","lastModifiedDate":"2024-02-25"},{"lineNumber":24,"author":{"gitId":"ashleygoh1"},"content":" * @param internDuration A valid intern duration.","lastModifiedDate":"2024-02-25"},{"lineNumber":25,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":26,"author":{"gitId":"ashleygoh1"},"content":" public InternDuration(String internDuration) {","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"ashleygoh1"},"content":" checkArgument(isValidInternDuration(internDuration), MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"ashleygoh1"},"content":" value \u003d internDuration;","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"ashleygoh1"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":32,"author":{"gitId":"ashleygoh1"},"content":" * Returns true if a given string is a valid intern duration.","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":" public static boolean isValidInternDuration(String test) {","lastModifiedDate":"2024-02-25"},{"lineNumber":35,"author":{"gitId":"ashleygoh1"},"content":" return test.matches(VALIDATION_REGEX);","lastModifiedDate":"2024-02-25"},{"lineNumber":36,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"ashleygoh1"},"content":" @Override","lastModifiedDate":"2024-02-25"},{"lineNumber":39,"author":{"gitId":"ashleygoh1"},"content":" public String toString() {","lastModifiedDate":"2024-02-25"},{"lineNumber":40,"author":{"gitId":"ashleygoh1"},"content":" return value;","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"ashleygoh1"},"content":" @Override","lastModifiedDate":"2024-02-25"},{"lineNumber":44,"author":{"gitId":"ashleygoh1"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2024-02-25"},{"lineNumber":45,"author":{"gitId":"ashleygoh1"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2024-02-25"},{"lineNumber":46,"author":{"gitId":"ashleygoh1"},"content":" return true;","lastModifiedDate":"2024-02-25"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":48,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":49,"author":{"gitId":"ashleygoh1"},"content":" // instanceof handles nulls","lastModifiedDate":"2024-02-25"},{"lineNumber":50,"author":{"gitId":"ashleygoh1"},"content":" if (!(other instanceof InternDuration)) {","lastModifiedDate":"2024-02-25"},{"lineNumber":51,"author":{"gitId":"ashleygoh1"},"content":" return false;","lastModifiedDate":"2024-02-25"},{"lineNumber":52,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":53,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":54,"author":{"gitId":"ashleygoh1"},"content":" InternDuration otherInternDuration \u003d (InternDuration) other;","lastModifiedDate":"2024-02-25"},{"lineNumber":55,"author":{"gitId":"ashleygoh1"},"content":" return value.equals(otherInternDuration.value);","lastModifiedDate":"2024-02-25"},{"lineNumber":56,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":57,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":58,"author":{"gitId":"ashleygoh1"},"content":" @Override","lastModifiedDate":"2024-02-25"},{"lineNumber":59,"author":{"gitId":"ashleygoh1"},"content":" public int hashCode() {","lastModifiedDate":"2024-02-25"},{"lineNumber":60,"author":{"gitId":"ashleygoh1"},"content":" return value.hashCode();","lastModifiedDate":"2024-02-25"},{"lineNumber":61,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":62,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":63,"author":{"gitId":"ashleygoh1"},"content":"}","lastModifiedDate":"2024-02-25"}],"authorContributionMap":{"ashleygoh1":63}},{"path":"src/main/java/seedu/address/model/person/InterviewDate.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ashleygoh1"},"content":"package seedu.address.model.person;","lastModifiedDate":"2024-02-25"},{"lineNumber":2,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":3,"author":{"gitId":"ashleygoh1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2024-02-25"},{"lineNumber":4,"author":{"gitId":"ashleygoh1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2024-02-25"},{"lineNumber":5,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":6,"author":{"gitId":"ashleygoh1"},"content":"/**","lastModifiedDate":"2024-02-25"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":" * Represents a Person\u0027s interview date in the address book.","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"ashleygoh1"},"content":"public class InterviewDate {","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":" public final LocalDateTime value;","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"ashleygoh1"},"content":" private DateTimeFormatter formatter \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\");","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"ashleygoh1"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"ashleygoh1"},"content":" * Constructs an {@code interview date}.","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"ashleygoh1"},"content":" *","lastModifiedDate":"2024-02-25"},{"lineNumber":18,"author":{"gitId":"ashleygoh1"},"content":" * @param interviewDate A valid interview date.","lastModifiedDate":"2024-02-25"},{"lineNumber":19,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":20,"author":{"gitId":"ashleygoh1"},"content":" public InterviewDate(String interviewDate) {","lastModifiedDate":"2024-02-25"},{"lineNumber":21,"author":{"gitId":"ashleygoh1"},"content":" if (interviewDate \u003d\u003d null) {","lastModifiedDate":"2024-02-26"},{"lineNumber":22,"author":{"gitId":"ashleygoh1"},"content":" value \u003d null;","lastModifiedDate":"2024-02-26"},{"lineNumber":23,"author":{"gitId":"ashleygoh1"},"content":" } else {","lastModifiedDate":"2024-02-26"},{"lineNumber":24,"author":{"gitId":"ashleygoh1"},"content":" value \u003d LocalDateTime.parse(interviewDate, formatter);","lastModifiedDate":"2024-02-25"},{"lineNumber":25,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":26,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"ashleygoh1"},"content":" @Override","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"ashleygoh1"},"content":" public String toString() {","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"ashleygoh1"},"content":" String str \u003d \"\";","lastModifiedDate":"2024-02-26"},{"lineNumber":31,"author":{"gitId":"ashleygoh1"},"content":" if (value !\u003d null) {","lastModifiedDate":"2024-02-26"},{"lineNumber":32,"author":{"gitId":"ashleygoh1"},"content":" str \u003d value.format(DateTimeFormatter.ofPattern(\"dd-MM-yyyy HHmm\"));","lastModifiedDate":"2024-02-26"},{"lineNumber":33,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":" return str;","lastModifiedDate":"2024-02-26"},{"lineNumber":35,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":36,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"ashleygoh1"},"content":" @Override","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"ashleygoh1"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2024-02-25"},{"lineNumber":39,"author":{"gitId":"ashleygoh1"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2024-02-25"},{"lineNumber":40,"author":{"gitId":"ashleygoh1"},"content":" return true;","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"ashleygoh1"},"content":" // instanceof handles nulls","lastModifiedDate":"2024-02-25"},{"lineNumber":44,"author":{"gitId":"ashleygoh1"},"content":" // if (!(other instanceof InterviewDate)) {","lastModifiedDate":"2024-02-26"},{"lineNumber":45,"author":{"gitId":"ashleygoh1"},"content":" // return false;","lastModifiedDate":"2024-02-26"},{"lineNumber":46,"author":{"gitId":"ashleygoh1"},"content":" // }","lastModifiedDate":"2024-02-26"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":48,"author":{"gitId":"ashleygoh1"},"content":" if (other \u003d\u003d null || getClass() !\u003d other.getClass()) {","lastModifiedDate":"2024-02-26"},{"lineNumber":49,"author":{"gitId":"ashleygoh1"},"content":" return false;","lastModifiedDate":"2024-02-26"},{"lineNumber":50,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":51,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":52,"author":{"gitId":"ashleygoh1"},"content":" InterviewDate otherInterviewDate \u003d (InterviewDate) other;","lastModifiedDate":"2024-02-25"},{"lineNumber":53,"author":{"gitId":"ashleygoh1"},"content":" if (value \u003d\u003d null) {","lastModifiedDate":"2024-02-26"},{"lineNumber":54,"author":{"gitId":"ashleygoh1"},"content":" return otherInterviewDate.value \u003d\u003d null;","lastModifiedDate":"2024-02-26"},{"lineNumber":55,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":56,"author":{"gitId":"ashleygoh1"},"content":" return value.equals(otherInterviewDate.value);","lastModifiedDate":"2024-02-25"},{"lineNumber":57,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":58,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":59,"author":{"gitId":"ashleygoh1"},"content":" @Override","lastModifiedDate":"2024-02-25"},{"lineNumber":60,"author":{"gitId":"ashleygoh1"},"content":" public int hashCode() {","lastModifiedDate":"2024-02-25"},{"lineNumber":61,"author":{"gitId":"ashleygoh1"},"content":" return value.hashCode();","lastModifiedDate":"2024-02-25"},{"lineNumber":62,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":63,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":64,"author":{"gitId":"ashleygoh1"},"content":"}","lastModifiedDate":"2024-02-25"}],"authorContributionMap":{"ashleygoh1":64}},{"path":"src/main/java/seedu/address/model/person/JobDescription.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ashleygoh1"},"content":"package seedu.address.model.person;","lastModifiedDate":"2024-02-25"},{"lineNumber":2,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":3,"author":{"gitId":"ashleygoh1"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2024-02-25"},{"lineNumber":4,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.commons.util.AppUtil.checkArgument;","lastModifiedDate":"2024-02-25"},{"lineNumber":5,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":6,"author":{"gitId":"ashleygoh1"},"content":"/**","lastModifiedDate":"2024-02-25"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":" * Represents a Person\u0027s job description in the address book.","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"ashleygoh1"},"content":" * Guarantees: immutable; is valid as declared in {@link #isValidJobDescription(String)}","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":"public class JobDescription {","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"ashleygoh1"},"content":" public static final String MESSAGE_CONSTRAINTS \u003d \"Job Description can take any values, and it should not be blank\";","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"ashleygoh1"},"content":" /*","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"ashleygoh1"},"content":" * The first character of the job description must not be a whitespace,","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"ashleygoh1"},"content":" * otherwise \" \" (a blank string) becomes a valid input.","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":18,"author":{"gitId":"ashleygoh1"},"content":" public static final String VALIDATION_REGEX \u003d \"\\\\S.*\";","lastModifiedDate":"2024-02-25"},{"lineNumber":19,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":20,"author":{"gitId":"ashleygoh1"},"content":" public final String value;","lastModifiedDate":"2024-02-25"},{"lineNumber":21,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":22,"author":{"gitId":"ashleygoh1"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":23,"author":{"gitId":"ashleygoh1"},"content":" * Constructs an {@code Job Description}.","lastModifiedDate":"2024-02-25"},{"lineNumber":24,"author":{"gitId":"ashleygoh1"},"content":" *","lastModifiedDate":"2024-02-25"},{"lineNumber":25,"author":{"gitId":"ashleygoh1"},"content":" * @param jobDescription A valid Job Description.","lastModifiedDate":"2024-02-25"},{"lineNumber":26,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"ashleygoh1"},"content":" public JobDescription(String jobDescription) {","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"ashleygoh1"},"content":" requireNonNull(jobDescription);","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"ashleygoh1"},"content":" checkArgument(isValidJobDescription(jobDescription), MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"ashleygoh1"},"content":" value \u003d jobDescription;","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":32,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"ashleygoh1"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":" * Returns true if a given string is a valid job description.","lastModifiedDate":"2024-02-25"},{"lineNumber":35,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":36,"author":{"gitId":"ashleygoh1"},"content":" public static boolean isValidJobDescription(String test) {","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"ashleygoh1"},"content":" return test.matches(VALIDATION_REGEX);","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":39,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":40,"author":{"gitId":"ashleygoh1"},"content":" @Override","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"ashleygoh1"},"content":" public String toString() {","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":" return value;","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":44,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":45,"author":{"gitId":"ashleygoh1"},"content":" @Override","lastModifiedDate":"2024-02-25"},{"lineNumber":46,"author":{"gitId":"ashleygoh1"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2024-02-25"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2024-02-25"},{"lineNumber":48,"author":{"gitId":"ashleygoh1"},"content":" return true;","lastModifiedDate":"2024-02-25"},{"lineNumber":49,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":50,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":51,"author":{"gitId":"ashleygoh1"},"content":" // instanceof handles nulls","lastModifiedDate":"2024-02-25"},{"lineNumber":52,"author":{"gitId":"ashleygoh1"},"content":" if (!(other instanceof JobDescription)) {","lastModifiedDate":"2024-02-25"},{"lineNumber":53,"author":{"gitId":"ashleygoh1"},"content":" return false;","lastModifiedDate":"2024-02-25"},{"lineNumber":54,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":55,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":56,"author":{"gitId":"ashleygoh1"},"content":" JobDescription otherJobDescription \u003d (JobDescription) other;","lastModifiedDate":"2024-02-25"},{"lineNumber":57,"author":{"gitId":"ashleygoh1"},"content":" return value.equals(otherJobDescription.value);","lastModifiedDate":"2024-02-25"},{"lineNumber":58,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":59,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":60,"author":{"gitId":"ashleygoh1"},"content":" @Override","lastModifiedDate":"2024-02-25"},{"lineNumber":61,"author":{"gitId":"ashleygoh1"},"content":" public int hashCode() {","lastModifiedDate":"2024-02-25"},{"lineNumber":62,"author":{"gitId":"ashleygoh1"},"content":" return value.hashCode();","lastModifiedDate":"2024-02-25"},{"lineNumber":63,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":64,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":65,"author":{"gitId":"ashleygoh1"},"content":"}","lastModifiedDate":"2024-02-25"}],"authorContributionMap":{"ashleygoh1":65}},{"path":"src/main/java/seedu/address/model/person/NameContainsKeywordsPredicate.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model.person;","lastModifiedDate":"2017-06-12"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2017-06-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.function.Predicate;","lastModifiedDate":"2017-06-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-12"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.StringUtil;","lastModifiedDate":"2017-06-12"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.ToStringBuilder;","lastModifiedDate":"2019-02-23"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-12"},{"lineNumber":9,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-06-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":" * Tests that a {@code Person}\u0027s {@code Name} matches any of the keywords given.","lastModifiedDate":"2018-01-10"},{"lineNumber":11,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-06-12"},{"lineNumber":12,"author":{"gitId":"-"},"content":"public class NameContainsKeywordsPredicate implements Predicate\u003cPerson\u003e {","lastModifiedDate":"2018-01-10"},{"lineNumber":13,"author":{"gitId":"-"},"content":" private final List\u003cString\u003e keywords;","lastModifiedDate":"2017-06-12"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-12"},{"lineNumber":15,"author":{"gitId":"-"},"content":" public NameContainsKeywordsPredicate(List\u003cString\u003e keywords) {","lastModifiedDate":"2017-06-12"},{"lineNumber":16,"author":{"gitId":"-"},"content":" this.keywords \u003d keywords;","lastModifiedDate":"2017-06-12"},{"lineNumber":17,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-12"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-12"},{"lineNumber":19,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-06-12"},{"lineNumber":20,"author":{"gitId":"-"},"content":" public boolean test(Person person) {","lastModifiedDate":"2018-01-10"},{"lineNumber":21,"author":{"gitId":"-"},"content":" return keywords.stream()","lastModifiedDate":"2017-06-12"},{"lineNumber":22,"author":{"gitId":"ashleygoh1"},"content":" .anyMatch(keyword -\u003e StringUtil.containsWordIgnoreCase(person.getCompanyName().fullName, keyword));","lastModifiedDate":"2024-02-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-12"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-12"},{"lineNumber":25,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-06-12"},{"lineNumber":26,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2017-06-12"},{"lineNumber":27,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2023-07-13"},{"lineNumber":28,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2023-07-13"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-13"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-13"},{"lineNumber":31,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2023-07-13"},{"lineNumber":32,"author":{"gitId":"-"},"content":" if (!(other instanceof NameContainsKeywordsPredicate)) {","lastModifiedDate":"2023-07-13"},{"lineNumber":33,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2023-07-13"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-13"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-13"},{"lineNumber":36,"author":{"gitId":"-"},"content":" NameContainsKeywordsPredicate otherNameContainsKeywordsPredicate \u003d (NameContainsKeywordsPredicate) other;","lastModifiedDate":"2023-07-13"},{"lineNumber":37,"author":{"gitId":"-"},"content":" return keywords.equals(otherNameContainsKeywordsPredicate.keywords);","lastModifiedDate":"2023-07-13"},{"lineNumber":38,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-12"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-12"},{"lineNumber":40,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2019-02-23"},{"lineNumber":41,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2019-02-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":" return new ToStringBuilder(this).add(\"keywords\", keywords).toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-06-12"}],"authorContributionMap":{"ashleygoh1":1,"-":43}},{"path":"src/main/java/seedu/address/model/person/Person.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model.person;","lastModifiedDate":"2016-08-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.commons.util.CollectionUtil.requireAllNonNull;","lastModifiedDate":"2017-05-19"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.Objects;","lastModifiedDate":"2017-01-19"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-19"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.ToStringBuilder;","lastModifiedDate":"2019-02-23"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-03-07"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":" * Represents a Person in the address book.","lastModifiedDate":"2016-08-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":" * Guarantees: details are present and not null, field values are validated, immutable.","lastModifiedDate":"2017-12-20"},{"lineNumber":13,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":14,"author":{"gitId":"Jawad280"},"content":"public class Person implements Comparable\u003cPerson\u003e {","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":16,"author":{"gitId":"-"},"content":" // Identity fields","lastModifiedDate":"2018-04-19"},{"lineNumber":17,"author":{"gitId":"ashleygoh1"},"content":" private final Name companyName;","lastModifiedDate":"2024-02-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" private final Phone phone;","lastModifiedDate":"2017-12-20"},{"lineNumber":19,"author":{"gitId":"-"},"content":" private final Email email;","lastModifiedDate":"2017-12-20"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":21,"author":{"gitId":"-"},"content":" // Data fields","lastModifiedDate":"2018-04-19"},{"lineNumber":22,"author":{"gitId":"-"},"content":" private final Address address;","lastModifiedDate":"2018-04-19"},{"lineNumber":23,"author":{"gitId":"ashleygoh1"},"content":" private final Tag tag;","lastModifiedDate":"2024-02-25"},{"lineNumber":24,"author":{"gitId":"ashleygoh1"},"content":" private final JobDescription jobDescription;","lastModifiedDate":"2024-02-25"},{"lineNumber":25,"author":{"gitId":"ashleygoh1"},"content":" private final InterviewDate interviewDate;","lastModifiedDate":"2024-02-25"},{"lineNumber":26,"author":{"gitId":"ashleygoh1"},"content":" private final InternDuration internDuration;","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"ashleygoh1"},"content":" private final Salary salary;","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":29,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-08-24"},{"lineNumber":30,"author":{"gitId":"-"},"content":" * Every field must be present and not null.","lastModifiedDate":"2016-08-24"},{"lineNumber":31,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":32,"author":{"gitId":"ashleygoh1"},"content":" public Person(Name companyName, Phone phone, Email email, Address address, Tag tag,","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"ashleygoh1"},"content":" JobDescription jobDescription, InterviewDate interviewDate,","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":" InternDuration internDuration, Salary salary) {","lastModifiedDate":"2024-02-25"},{"lineNumber":35,"author":{"gitId":"ashleygoh1"},"content":" requireAllNonNull(companyName, phone, email, tag, jobDescription);","lastModifiedDate":"2024-02-26"},{"lineNumber":36,"author":{"gitId":"ashleygoh1"},"content":" this.companyName \u003d companyName;","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" this.phone \u003d phone;","lastModifiedDate":"2017-12-20"},{"lineNumber":38,"author":{"gitId":"-"},"content":" this.email \u003d email;","lastModifiedDate":"2017-12-20"},{"lineNumber":39,"author":{"gitId":"-"},"content":" this.address \u003d address;","lastModifiedDate":"2017-12-20"},{"lineNumber":40,"author":{"gitId":"ashleygoh1"},"content":" this.tag \u003d tag;","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"ashleygoh1"},"content":" this.jobDescription \u003d jobDescription;","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":" this.interviewDate \u003d interviewDate;","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"ashleygoh1"},"content":" this.internDuration \u003d internDuration;","lastModifiedDate":"2024-02-25"},{"lineNumber":44,"author":{"gitId":"ashleygoh1"},"content":" this.salary \u003d salary;","lastModifiedDate":"2024-02-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":" public Name getCompanyName() {","lastModifiedDate":"2024-02-25"},{"lineNumber":48,"author":{"gitId":"ashleygoh1"},"content":" return companyName;","lastModifiedDate":"2024-02-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":51,"author":{"gitId":"-"},"content":" public Phone getPhone() {","lastModifiedDate":"2017-07-12"},{"lineNumber":52,"author":{"gitId":"-"},"content":" return phone;","lastModifiedDate":"2017-12-20"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":55,"author":{"gitId":"-"},"content":" public Email getEmail() {","lastModifiedDate":"2017-07-12"},{"lineNumber":56,"author":{"gitId":"-"},"content":" return email;","lastModifiedDate":"2017-12-20"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":59,"author":{"gitId":"-"},"content":" public Address getAddress() {","lastModifiedDate":"2017-07-12"},{"lineNumber":60,"author":{"gitId":"-"},"content":" return address;","lastModifiedDate":"2017-12-20"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-07-12"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-12"},{"lineNumber":63,"author":{"gitId":"ashleygoh1"},"content":" public Tag getTag() {","lastModifiedDate":"2024-02-25"},{"lineNumber":64,"author":{"gitId":"ashleygoh1"},"content":" return tag;","lastModifiedDate":"2024-02-25"},{"lineNumber":65,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":66,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":67,"author":{"gitId":"ashleygoh1"},"content":" public JobDescription getJobDescription() {","lastModifiedDate":"2024-02-25"},{"lineNumber":68,"author":{"gitId":"ashleygoh1"},"content":" return jobDescription;","lastModifiedDate":"2024-02-25"},{"lineNumber":69,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":70,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":71,"author":{"gitId":"ashleygoh1"},"content":" public InterviewDate getInterviewDate() {","lastModifiedDate":"2024-02-25"},{"lineNumber":72,"author":{"gitId":"ashleygoh1"},"content":" return interviewDate;","lastModifiedDate":"2024-02-25"},{"lineNumber":73,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":74,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":75,"author":{"gitId":"ashleygoh1"},"content":" public InternDuration getInternDuration() {","lastModifiedDate":"2024-02-25"},{"lineNumber":76,"author":{"gitId":"ashleygoh1"},"content":" return internDuration;","lastModifiedDate":"2024-02-25"},{"lineNumber":77,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":78,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":79,"author":{"gitId":"ashleygoh1"},"content":" public Salary getSalary() {","lastModifiedDate":"2024-02-25"},{"lineNumber":80,"author":{"gitId":"ashleygoh1"},"content":" return salary;","lastModifiedDate":"2024-02-25"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-21"},{"lineNumber":82,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":83,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-04-19"},{"lineNumber":84,"author":{"gitId":"ashleygoh1"},"content":" * Returns true if both inputs have the same company name and job description.","lastModifiedDate":"2024-02-25"},{"lineNumber":85,"author":{"gitId":"ashleygoh1"},"content":" * This defines a weaker notion of equality between two inputs.","lastModifiedDate":"2024-02-25"},{"lineNumber":86,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-04-19"},{"lineNumber":87,"author":{"gitId":"-"},"content":" public boolean isSamePerson(Person otherPerson) {","lastModifiedDate":"2018-04-19"},{"lineNumber":88,"author":{"gitId":"-"},"content":" if (otherPerson \u003d\u003d this) {","lastModifiedDate":"2018-04-19"},{"lineNumber":89,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2018-04-19"},{"lineNumber":90,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-04-19"},{"lineNumber":91,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":92,"author":{"gitId":"-"},"content":" return otherPerson !\u003d null","lastModifiedDate":"2018-04-19"},{"lineNumber":93,"author":{"gitId":"ashleygoh1"},"content":" \u0026\u0026 otherPerson.getCompanyName().equals(getCompanyName())","lastModifiedDate":"2024-02-25"},{"lineNumber":94,"author":{"gitId":"ashleygoh1"},"content":" \u0026\u0026 otherPerson.getJobDescription().equals(getJobDescription());","lastModifiedDate":"2024-02-25"},{"lineNumber":95,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-04-19"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":97,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-04-19"},{"lineNumber":98,"author":{"gitId":"ashleygoh1"},"content":" * Returns true if both inputs have the same identity and data fields.","lastModifiedDate":"2024-02-25"},{"lineNumber":99,"author":{"gitId":"ashleygoh1"},"content":" * This defines a stronger notion of equality between two inputs.","lastModifiedDate":"2024-02-25"},{"lineNumber":100,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-04-19"},{"lineNumber":101,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":102,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2016-08-24"},{"lineNumber":103,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2018-01-10"},{"lineNumber":104,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2018-01-10"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-01-10"},{"lineNumber":106,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-01-10"},{"lineNumber":107,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2023-07-13"},{"lineNumber":108,"author":{"gitId":"-"},"content":" if (!(other instanceof Person)) {","lastModifiedDate":"2018-01-10"},{"lineNumber":109,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2018-01-10"},{"lineNumber":110,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-01-10"},{"lineNumber":111,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-01-10"},{"lineNumber":112,"author":{"gitId":"-"},"content":" Person otherPerson \u003d (Person) other;","lastModifiedDate":"2018-01-10"},{"lineNumber":113,"author":{"gitId":"ashleygoh1"},"content":" return companyName.equals(otherPerson.companyName)","lastModifiedDate":"2024-02-25"},{"lineNumber":114,"author":{"gitId":"-"},"content":" \u0026\u0026 phone.equals(otherPerson.phone)","lastModifiedDate":"2023-07-13"},{"lineNumber":115,"author":{"gitId":"-"},"content":" \u0026\u0026 email.equals(otherPerson.email)","lastModifiedDate":"2023-07-13"},{"lineNumber":116,"author":{"gitId":"-"},"content":" \u0026\u0026 address.equals(otherPerson.address)","lastModifiedDate":"2023-07-13"},{"lineNumber":117,"author":{"gitId":"ashleygoh1"},"content":" \u0026\u0026 tag.equals(otherPerson.tag)","lastModifiedDate":"2024-02-25"},{"lineNumber":118,"author":{"gitId":"ashleygoh1"},"content":" \u0026\u0026 jobDescription.equals(otherPerson.jobDescription)","lastModifiedDate":"2024-02-25"},{"lineNumber":119,"author":{"gitId":"ashleygoh1"},"content":" \u0026\u0026 interviewDate.equals(otherPerson.interviewDate)","lastModifiedDate":"2024-02-25"},{"lineNumber":120,"author":{"gitId":"ashleygoh1"},"content":" \u0026\u0026 internDuration.equals(otherPerson.internDuration)","lastModifiedDate":"2024-02-25"},{"lineNumber":121,"author":{"gitId":"ashleygoh1"},"content":" \u0026\u0026 salary.equals(otherPerson.salary);","lastModifiedDate":"2024-02-25"},{"lineNumber":122,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":123,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":124,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":125,"author":{"gitId":"-"},"content":" public int hashCode() {","lastModifiedDate":"2016-08-24"},{"lineNumber":126,"author":{"gitId":"-"},"content":" // use this method for custom fields hashing instead of implementing your own","lastModifiedDate":"2016-08-24"},{"lineNumber":127,"author":{"gitId":"ashleygoh1"},"content":" return Objects.hash(companyName, phone, email, address, tag,","lastModifiedDate":"2024-02-25"},{"lineNumber":128,"author":{"gitId":"ashleygoh1"},"content":" jobDescription, interviewDate, internDuration, salary);","lastModifiedDate":"2024-02-25"},{"lineNumber":129,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":131,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":132,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2016-08-24"},{"lineNumber":133,"author":{"gitId":"-"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2019-02-23"},{"lineNumber":134,"author":{"gitId":"ashleygoh1"},"content":" .add(\"name\", companyName)","lastModifiedDate":"2024-02-25"},{"lineNumber":135,"author":{"gitId":"-"},"content":" .add(\"phone\", phone)","lastModifiedDate":"2019-02-23"},{"lineNumber":136,"author":{"gitId":"-"},"content":" .add(\"email\", email)","lastModifiedDate":"2019-02-23"},{"lineNumber":137,"author":{"gitId":"-"},"content":" .add(\"address\", address)","lastModifiedDate":"2019-02-23"},{"lineNumber":138,"author":{"gitId":"ashleygoh1"},"content":" .add(\"tag\", tag)","lastModifiedDate":"2024-02-25"},{"lineNumber":139,"author":{"gitId":"ashleygoh1"},"content":" .add(\"job description\", jobDescription)","lastModifiedDate":"2024-02-25"},{"lineNumber":140,"author":{"gitId":"ashleygoh1"},"content":" .add(\"interview date\", interviewDate)","lastModifiedDate":"2024-02-25"},{"lineNumber":141,"author":{"gitId":"ashleygoh1"},"content":" .add(\"intern duration\", internDuration)","lastModifiedDate":"2024-02-25"},{"lineNumber":142,"author":{"gitId":"ashleygoh1"},"content":" .add(\"salary\", salary)","lastModifiedDate":"2024-02-25"},{"lineNumber":143,"author":{"gitId":"-"},"content":" .toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":144,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":145,"author":{"gitId":"Jawad280"},"content":" @Override","lastModifiedDate":"2024-02-26"},{"lineNumber":146,"author":{"gitId":"Jawad280"},"content":" public int compareTo(Person otherPerson) {","lastModifiedDate":"2024-02-26"},{"lineNumber":147,"author":{"gitId":"Jawad280"},"content":" if (this.interviewDate.value !\u003d null \u0026\u0026 otherPerson.getInterviewDate().value !\u003d null) {","lastModifiedDate":"2024-02-26"},{"lineNumber":148,"author":{"gitId":"Jawad280"},"content":" return this.interviewDate.value.compareTo(otherPerson.getInterviewDate().value);","lastModifiedDate":"2024-02-26"},{"lineNumber":149,"author":{"gitId":"Jawad280"},"content":" } else if (this.interviewDate.value !\u003d null) {","lastModifiedDate":"2024-02-26"},{"lineNumber":150,"author":{"gitId":"Jawad280"},"content":" return -1;","lastModifiedDate":"2024-02-26"},{"lineNumber":151,"author":{"gitId":"Jawad280"},"content":" } else if (otherPerson.getInterviewDate().value !\u003d null) {","lastModifiedDate":"2024-02-26"},{"lineNumber":152,"author":{"gitId":"Jawad280"},"content":" return 1;","lastModifiedDate":"2024-02-26"},{"lineNumber":153,"author":{"gitId":"Jawad280"},"content":" } else {","lastModifiedDate":"2024-02-26"},{"lineNumber":154,"author":{"gitId":"Jawad280"},"content":" return 0;","lastModifiedDate":"2024-02-26"},{"lineNumber":155,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":156,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":157,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":158,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-24"}],"authorContributionMap":{"Jawad280":13,"ashleygoh1":56,"-":89}},{"path":"src/main/java/seedu/address/model/person/Salary.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ashleygoh1"},"content":"package seedu.address.model.person;","lastModifiedDate":"2024-02-25"},{"lineNumber":2,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":3,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.commons.util.AppUtil.checkArgument;","lastModifiedDate":"2024-02-25"},{"lineNumber":4,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":5,"author":{"gitId":"ashleygoh1"},"content":"/**","lastModifiedDate":"2024-02-25"},{"lineNumber":6,"author":{"gitId":"ashleygoh1"},"content":" * Represents a Person\u0027s salary in the address book.","lastModifiedDate":"2024-02-25"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":" * Guarantees: immutable; is valid as declared in {@link #isValidSalary(String)}","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"ashleygoh1"},"content":"public class Salary {","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"ashleygoh1"},"content":" public static final String MESSAGE_CONSTRAINTS \u003d \"Salary should only contain numbers\";","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"ashleygoh1"},"content":" public static final String VALIDATION_REGEX \u003d \"[1-9]\\\\d*\";","lastModifiedDate":"2024-02-26"},{"lineNumber":14,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"ashleygoh1"},"content":" public final String value;","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"ashleygoh1"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":18,"author":{"gitId":"ashleygoh1"},"content":" * Constructs a {@code Salary}.","lastModifiedDate":"2024-02-25"},{"lineNumber":19,"author":{"gitId":"ashleygoh1"},"content":" *","lastModifiedDate":"2024-02-25"},{"lineNumber":20,"author":{"gitId":"ashleygoh1"},"content":" * @param salary A valid salary.","lastModifiedDate":"2024-02-25"},{"lineNumber":21,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":22,"author":{"gitId":"ashleygoh1"},"content":" public Salary(String salary) {","lastModifiedDate":"2024-02-25"},{"lineNumber":23,"author":{"gitId":"ashleygoh1"},"content":" checkArgument(isValidSalary(salary), MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":24,"author":{"gitId":"ashleygoh1"},"content":" value \u003d salary;","lastModifiedDate":"2024-02-25"},{"lineNumber":25,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":26,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"ashleygoh1"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"ashleygoh1"},"content":" * Returns true if a given string is a valid phone number.","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"ashleygoh1"},"content":" public static boolean isValidSalary(String test) {","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"ashleygoh1"},"content":" return test.matches(VALIDATION_REGEX);","lastModifiedDate":"2024-02-25"},{"lineNumber":32,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":" @Override","lastModifiedDate":"2024-02-25"},{"lineNumber":35,"author":{"gitId":"ashleygoh1"},"content":" public String toString() {","lastModifiedDate":"2024-02-25"},{"lineNumber":36,"author":{"gitId":"ashleygoh1"},"content":" return value;","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":39,"author":{"gitId":"ashleygoh1"},"content":" @Override","lastModifiedDate":"2024-02-25"},{"lineNumber":40,"author":{"gitId":"ashleygoh1"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"ashleygoh1"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":" return true;","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":44,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":45,"author":{"gitId":"ashleygoh1"},"content":" // instanceof handles nulls","lastModifiedDate":"2024-02-25"},{"lineNumber":46,"author":{"gitId":"ashleygoh1"},"content":" if (!(other instanceof Salary)) {","lastModifiedDate":"2024-02-25"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":" return false;","lastModifiedDate":"2024-02-25"},{"lineNumber":48,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":49,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":50,"author":{"gitId":"ashleygoh1"},"content":" Salary otherSalary \u003d (Salary) other;","lastModifiedDate":"2024-02-25"},{"lineNumber":51,"author":{"gitId":"ashleygoh1"},"content":" return value.equals(otherSalary.value);","lastModifiedDate":"2024-02-25"},{"lineNumber":52,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":53,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":54,"author":{"gitId":"ashleygoh1"},"content":" @Override","lastModifiedDate":"2024-02-25"},{"lineNumber":55,"author":{"gitId":"ashleygoh1"},"content":" public int hashCode() {","lastModifiedDate":"2024-02-25"},{"lineNumber":56,"author":{"gitId":"ashleygoh1"},"content":" return value.hashCode();","lastModifiedDate":"2024-02-25"},{"lineNumber":57,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":58,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":59,"author":{"gitId":"ashleygoh1"},"content":"}","lastModifiedDate":"2024-02-25"}],"authorContributionMap":{"ashleygoh1":59}},{"path":"src/main/java/seedu/address/model/util/SampleDataUtil.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model.util;","lastModifiedDate":"2016-12-20"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-20"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.Arrays;","lastModifiedDate":"2018-01-21"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-03-14"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2018-01-21"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-14"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import seedu.address.model.AddressBook;","lastModifiedDate":"2016-12-20"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import seedu.address.model.ReadOnlyAddressBook;","lastModifiedDate":"2016-12-20"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.InternDuration;","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.InterviewDate;","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.JobDescription;","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.Salary;","lastModifiedDate":"2024-02-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-03-14"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-20"},{"lineNumber":20,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-08-16"},{"lineNumber":21,"author":{"gitId":"-"},"content":" * Contains utility methods for populating {@code AddressBook} with sample data.","lastModifiedDate":"2017-08-16"},{"lineNumber":22,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-08-16"},{"lineNumber":23,"author":{"gitId":"-"},"content":"public class SampleDataUtil {","lastModifiedDate":"2016-12-20"},{"lineNumber":24,"author":{"gitId":"-"},"content":" public static Person[] getSamplePersons() {","lastModifiedDate":"2016-12-20"},{"lineNumber":25,"author":{"gitId":"-"},"content":" return new Person[] {","lastModifiedDate":"2016-12-20"},{"lineNumber":26,"author":{"gitId":"ashleygoh1"},"content":" new Person(new Name(\"FoodPanda\"), new Phone(\"12345678\"), new Email(\"panda@food.com\"),","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"ashleygoh1"},"content":" new Address(\"CBD\"), new Tag(\"F\"), new JobDescription(\"Front End Intern\"),","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"ashleygoh1"},"content":" new InterviewDate(\"15-04-2024 0900\"), new InternDuration(\"6 months\"), new Salary(\"500\"))","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" };","lastModifiedDate":"2016-12-20"},{"lineNumber":30,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-20"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-20"},{"lineNumber":32,"author":{"gitId":"-"},"content":" public static ReadOnlyAddressBook getSampleAddressBook() {","lastModifiedDate":"2016-12-20"},{"lineNumber":33,"author":{"gitId":"-"},"content":" AddressBook sampleAb \u003d new AddressBook();","lastModifiedDate":"2017-04-07"},{"lineNumber":34,"author":{"gitId":"-"},"content":" for (Person samplePerson : getSamplePersons()) {","lastModifiedDate":"2016-12-20"},{"lineNumber":35,"author":{"gitId":"-"},"content":" sampleAb.addPerson(samplePerson);","lastModifiedDate":"2017-04-07"},{"lineNumber":36,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-20"},{"lineNumber":37,"author":{"gitId":"-"},"content":" return sampleAb;","lastModifiedDate":"2017-04-07"},{"lineNumber":38,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-20"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-14"},{"lineNumber":40,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-03-14"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * Returns a tag set containing the list of strings given.","lastModifiedDate":"2017-03-14"},{"lineNumber":42,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-03-14"},{"lineNumber":43,"author":{"gitId":"-"},"content":" public static Set\u003cTag\u003e getTagSet(String... strings) {","lastModifiedDate":"2017-05-30"},{"lineNumber":44,"author":{"gitId":"-"},"content":" return Arrays.stream(strings)","lastModifiedDate":"2018-01-21"},{"lineNumber":45,"author":{"gitId":"-"},"content":" .map(Tag::new)","lastModifiedDate":"2018-01-21"},{"lineNumber":46,"author":{"gitId":"-"},"content":" .collect(Collectors.toSet());","lastModifiedDate":"2018-01-21"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-03-14"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-14"},{"lineNumber":49,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-12-20"}],"authorContributionMap":{"ashleygoh1":7,"-":42}},{"path":"src/main/java/seedu/address/storage/JsonAdaptedPerson.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.storage;","lastModifiedDate":"2018-08-13"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import com.fasterxml.jackson.annotation.JsonCreator;","lastModifiedDate":"2018-08-13"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import com.fasterxml.jackson.annotation.JsonProperty;","lastModifiedDate":"2018-08-13"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import seedu.address.commons.exceptions.IllegalValueException;","lastModifiedDate":"2018-08-13"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.InternDuration;","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.InterviewDate;","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.JobDescription;","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.Salary;","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2018-08-13"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":18,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2018-08-13"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * Jackson-friendly version of {@link Person}.","lastModifiedDate":"2018-08-13"},{"lineNumber":20,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-13"},{"lineNumber":21,"author":{"gitId":"-"},"content":"class JsonAdaptedPerson {","lastModifiedDate":"2018-12-03"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":23,"author":{"gitId":"-"},"content":" public static final String MISSING_FIELD_MESSAGE_FORMAT \u003d \"Person\u0027s %s field is missing!\";","lastModifiedDate":"2018-08-13"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":25,"author":{"gitId":"ashleygoh1"},"content":" private final String companyName;","lastModifiedDate":"2024-02-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" private final String phone;","lastModifiedDate":"2018-08-13"},{"lineNumber":27,"author":{"gitId":"-"},"content":" private final String email;","lastModifiedDate":"2018-08-13"},{"lineNumber":28,"author":{"gitId":"-"},"content":" private final String address;","lastModifiedDate":"2018-08-13"},{"lineNumber":29,"author":{"gitId":"ashleygoh1"},"content":" private final String tag;","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"ashleygoh1"},"content":" private final String jobDescription;","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"ashleygoh1"},"content":" private final String interviewDate;","lastModifiedDate":"2024-02-25"},{"lineNumber":32,"author":{"gitId":"ashleygoh1"},"content":" private final String internDuration;","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"ashleygoh1"},"content":" private final String salary;","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":36,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-13"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * Constructs a {@code JsonAdaptedPerson} with the given person details.","lastModifiedDate":"2018-08-13"},{"lineNumber":38,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-13"},{"lineNumber":39,"author":{"gitId":"-"},"content":" @JsonCreator","lastModifiedDate":"2018-08-13"},{"lineNumber":40,"author":{"gitId":"ashleygoh1"},"content":" public JsonAdaptedPerson(@JsonProperty(\"companyName\") String name, @JsonProperty(\"phone\") String phone,","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" @JsonProperty(\"email\") String email, @JsonProperty(\"address\") String address,","lastModifiedDate":"2018-08-13"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":" @JsonProperty(\"tag\") String tag, @JsonProperty(\"jobDescription\") String jobDescription,","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"ashleygoh1"},"content":" @JsonProperty(\"interviewDate\") String interviewDate,","lastModifiedDate":"2024-02-25"},{"lineNumber":44,"author":{"gitId":"ashleygoh1"},"content":" @JsonProperty(\"internDuration\") String internDuration,","lastModifiedDate":"2024-02-25"},{"lineNumber":45,"author":{"gitId":"ashleygoh1"},"content":" @JsonProperty(\"salary\") String salary) {","lastModifiedDate":"2024-02-25"},{"lineNumber":46,"author":{"gitId":"ashleygoh1"},"content":" this.companyName \u003d name;","lastModifiedDate":"2024-02-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" this.phone \u003d phone;","lastModifiedDate":"2018-08-13"},{"lineNumber":48,"author":{"gitId":"-"},"content":" this.email \u003d email;","lastModifiedDate":"2018-08-13"},{"lineNumber":49,"author":{"gitId":"-"},"content":" this.address \u003d address;","lastModifiedDate":"2018-08-13"},{"lineNumber":50,"author":{"gitId":"ashleygoh1"},"content":" this.tag \u003d tag;","lastModifiedDate":"2024-02-25"},{"lineNumber":51,"author":{"gitId":"ashleygoh1"},"content":" this.jobDescription \u003d jobDescription;","lastModifiedDate":"2024-02-25"},{"lineNumber":52,"author":{"gitId":"ashleygoh1"},"content":" this.interviewDate \u003d interviewDate;","lastModifiedDate":"2024-02-25"},{"lineNumber":53,"author":{"gitId":"ashleygoh1"},"content":" this.internDuration \u003d internDuration;","lastModifiedDate":"2024-02-25"},{"lineNumber":54,"author":{"gitId":"ashleygoh1"},"content":" this.salary \u003d salary;","lastModifiedDate":"2024-02-25"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":57,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-13"},{"lineNumber":58,"author":{"gitId":"-"},"content":" * Converts a given {@code Person} into this class for Jackson use.","lastModifiedDate":"2018-08-13"},{"lineNumber":59,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-13"},{"lineNumber":60,"author":{"gitId":"-"},"content":" public JsonAdaptedPerson(Person source) {","lastModifiedDate":"2018-08-13"},{"lineNumber":61,"author":{"gitId":"ashleygoh1"},"content":" companyName \u003d source.getCompanyName().fullName;","lastModifiedDate":"2024-02-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" phone \u003d source.getPhone().value;","lastModifiedDate":"2018-08-13"},{"lineNumber":63,"author":{"gitId":"-"},"content":" email \u003d source.getEmail().value;","lastModifiedDate":"2018-08-13"},{"lineNumber":64,"author":{"gitId":"-"},"content":" address \u003d source.getAddress().value;","lastModifiedDate":"2018-08-13"},{"lineNumber":65,"author":{"gitId":"ashleygoh1"},"content":" tag \u003d source.getTag().tagName;","lastModifiedDate":"2024-02-25"},{"lineNumber":66,"author":{"gitId":"ashleygoh1"},"content":" jobDescription \u003d source.getJobDescription().value;","lastModifiedDate":"2024-02-25"},{"lineNumber":67,"author":{"gitId":"ashleygoh1"},"content":" interviewDate \u003d source.getInterviewDate().toString();","lastModifiedDate":"2024-02-25"},{"lineNumber":68,"author":{"gitId":"ashleygoh1"},"content":" internDuration \u003d source.getInternDuration().value;","lastModifiedDate":"2024-02-25"},{"lineNumber":69,"author":{"gitId":"ashleygoh1"},"content":" salary \u003d source.getSalary().value;","lastModifiedDate":"2024-02-25"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":72,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-13"},{"lineNumber":73,"author":{"gitId":"-"},"content":" * Converts this Jackson-friendly adapted person object into the model\u0027s {@code Person} object.","lastModifiedDate":"2018-08-13"},{"lineNumber":74,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2018-08-13"},{"lineNumber":75,"author":{"gitId":"-"},"content":" * @throws IllegalValueException if there were any data constraints violated in the adapted person.","lastModifiedDate":"2018-08-13"},{"lineNumber":76,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-13"},{"lineNumber":77,"author":{"gitId":"-"},"content":" public Person toModelType() throws IllegalValueException {","lastModifiedDate":"2018-08-13"},{"lineNumber":78,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":79,"author":{"gitId":"ashleygoh1"},"content":" if (companyName \u003d\u003d null) {","lastModifiedDate":"2024-02-25"},{"lineNumber":80,"author":{"gitId":"-"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Name.class.getSimpleName()));","lastModifiedDate":"2018-08-13"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":82,"author":{"gitId":"ashleygoh1"},"content":" if (!Name.isValidName(companyName)) {","lastModifiedDate":"2024-02-25"},{"lineNumber":83,"author":{"gitId":"-"},"content":" throw new IllegalValueException(Name.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-08-13"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":85,"author":{"gitId":"ashleygoh1"},"content":" final Name modelCompanyName \u003d new Name(companyName);","lastModifiedDate":"2024-02-25"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":87,"author":{"gitId":"-"},"content":" if (phone \u003d\u003d null) {","lastModifiedDate":"2018-08-13"},{"lineNumber":88,"author":{"gitId":"-"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Phone.class.getSimpleName()));","lastModifiedDate":"2018-08-13"},{"lineNumber":89,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":90,"author":{"gitId":"-"},"content":" if (!Phone.isValidPhone(phone)) {","lastModifiedDate":"2018-08-13"},{"lineNumber":91,"author":{"gitId":"-"},"content":" throw new IllegalValueException(Phone.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-08-13"},{"lineNumber":92,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":93,"author":{"gitId":"-"},"content":" final Phone modelPhone \u003d new Phone(phone);","lastModifiedDate":"2018-08-13"},{"lineNumber":94,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":95,"author":{"gitId":"-"},"content":" if (email \u003d\u003d null) {","lastModifiedDate":"2018-08-13"},{"lineNumber":96,"author":{"gitId":"-"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Email.class.getSimpleName()));","lastModifiedDate":"2018-08-13"},{"lineNumber":97,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":98,"author":{"gitId":"-"},"content":" if (!Email.isValidEmail(email)) {","lastModifiedDate":"2018-08-13"},{"lineNumber":99,"author":{"gitId":"-"},"content":" throw new IllegalValueException(Email.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-08-13"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":101,"author":{"gitId":"-"},"content":" final Email modelEmail \u003d new Email(email);","lastModifiedDate":"2018-08-13"},{"lineNumber":102,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":103,"author":{"gitId":"-"},"content":" if (address \u003d\u003d null) {","lastModifiedDate":"2018-08-13"},{"lineNumber":104,"author":{"gitId":"-"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Address.class.getSimpleName()));","lastModifiedDate":"2018-08-13"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":106,"author":{"gitId":"-"},"content":" final Address modelAddress \u003d new Address(address);","lastModifiedDate":"2018-08-13"},{"lineNumber":107,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":108,"author":{"gitId":"ashleygoh1"},"content":" if (tag \u003d\u003d null) {","lastModifiedDate":"2024-02-25"},{"lineNumber":109,"author":{"gitId":"ashleygoh1"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Tag.class.getSimpleName()));","lastModifiedDate":"2024-02-25"},{"lineNumber":110,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":111,"author":{"gitId":"ashleygoh1"},"content":" if (!Tag.isValidTagName(tag)) {","lastModifiedDate":"2024-02-25"},{"lineNumber":112,"author":{"gitId":"ashleygoh1"},"content":" throw new IllegalValueException(Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-26"},{"lineNumber":113,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":114,"author":{"gitId":"ashleygoh1"},"content":" final Tag modelTag \u003d new Tag(tag);","lastModifiedDate":"2024-02-25"},{"lineNumber":115,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":116,"author":{"gitId":"ashleygoh1"},"content":" if (jobDescription \u003d\u003d null) {","lastModifiedDate":"2024-02-25"},{"lineNumber":117,"author":{"gitId":"ashleygoh1"},"content":" throw new IllegalValueException(","lastModifiedDate":"2024-02-25"},{"lineNumber":118,"author":{"gitId":"ashleygoh1"},"content":" String.format(MISSING_FIELD_MESSAGE_FORMAT, JobDescription.class.getSimpleName()));","lastModifiedDate":"2024-02-25"},{"lineNumber":119,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":120,"author":{"gitId":"ashleygoh1"},"content":" if (!JobDescription.isValidJobDescription(jobDescription)) {","lastModifiedDate":"2024-02-25"},{"lineNumber":121,"author":{"gitId":"ashleygoh1"},"content":" throw new IllegalValueException(JobDescription.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":122,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":123,"author":{"gitId":"ashleygoh1"},"content":" final JobDescription modelJobDescription \u003d new JobDescription(jobDescription);","lastModifiedDate":"2024-02-25"},{"lineNumber":124,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":125,"author":{"gitId":"ashleygoh1"},"content":" final InterviewDate modelInterviewDate;","lastModifiedDate":"2024-02-26"},{"lineNumber":126,"author":{"gitId":"ashleygoh1"},"content":" if (interviewDate.isEmpty()) {","lastModifiedDate":"2024-02-26"},{"lineNumber":127,"author":{"gitId":"ashleygoh1"},"content":" modelInterviewDate \u003d new InterviewDate(null);","lastModifiedDate":"2024-02-26"},{"lineNumber":128,"author":{"gitId":"ashleygoh1"},"content":" } else {","lastModifiedDate":"2024-02-26"},{"lineNumber":129,"author":{"gitId":"ashleygoh1"},"content":" modelInterviewDate \u003d new InterviewDate(interviewDate);","lastModifiedDate":"2024-02-26"},{"lineNumber":130,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":131,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":132,"author":{"gitId":"ashleygoh1"},"content":" if (internDuration \u003d\u003d null) {","lastModifiedDate":"2024-02-25"},{"lineNumber":133,"author":{"gitId":"ashleygoh1"},"content":" throw new IllegalValueException(","lastModifiedDate":"2024-02-25"},{"lineNumber":134,"author":{"gitId":"ashleygoh1"},"content":" String.format(MISSING_FIELD_MESSAGE_FORMAT, InternDuration.class.getSimpleName()));","lastModifiedDate":"2024-02-25"},{"lineNumber":135,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":136,"author":{"gitId":"ashleygoh1"},"content":" if (!InternDuration.isValidInternDuration(internDuration)) {","lastModifiedDate":"2024-02-26"},{"lineNumber":137,"author":{"gitId":"ashleygoh1"},"content":" throw new IllegalValueException(InternDuration.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":138,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":139,"author":{"gitId":"ashleygoh1"},"content":" final InternDuration modelInternDuration \u003d new InternDuration(internDuration);","lastModifiedDate":"2024-02-25"},{"lineNumber":140,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":141,"author":{"gitId":"ashleygoh1"},"content":" if (salary \u003d\u003d null) {","lastModifiedDate":"2024-02-25"},{"lineNumber":142,"author":{"gitId":"ashleygoh1"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Salary.class.getSimpleName()));","lastModifiedDate":"2024-02-25"},{"lineNumber":143,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":144,"author":{"gitId":"ashleygoh1"},"content":" if (!Salary.isValidSalary(salary)) {","lastModifiedDate":"2024-02-25"},{"lineNumber":145,"author":{"gitId":"ashleygoh1"},"content":" throw new IllegalValueException(Salary.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-26"},{"lineNumber":146,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":147,"author":{"gitId":"ashleygoh1"},"content":" final Salary modelSalary \u003d new Salary(salary);","lastModifiedDate":"2024-02-25"},{"lineNumber":148,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":149,"author":{"gitId":"ashleygoh1"},"content":" return new Person(modelCompanyName, modelPhone, modelEmail, modelAddress, modelTag,","lastModifiedDate":"2024-02-25"},{"lineNumber":150,"author":{"gitId":"ashleygoh1"},"content":" modelJobDescription, modelInterviewDate, modelInternDuration, modelSalary);","lastModifiedDate":"2024-02-25"},{"lineNumber":151,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":152,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":153,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2018-08-13"}],"authorContributionMap":{"ashleygoh1":74,"-":79}},{"path":"src/main/java/seedu/address/ui/MainWindow.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.ui;","lastModifiedDate":"2016-09-22"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-18"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2017-06-16"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-16"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import javafx.event.ActionEvent;","lastModifiedDate":"2016-12-18"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2016-08-26"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import javafx.scene.control.MenuItem;","lastModifiedDate":"2016-08-26"},{"lineNumber":8,"author":{"gitId":"chenyixin0"},"content":"import javafx.scene.control.ScrollPane;","lastModifiedDate":"2024-02-29"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import javafx.scene.control.TextInputControl;","lastModifiedDate":"2016-12-18"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import javafx.scene.input.KeyCombination;","lastModifiedDate":"2016-08-26"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import javafx.scene.input.KeyEvent;","lastModifiedDate":"2016-12-18"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import javafx.scene.layout.StackPane;","lastModifiedDate":"2017-05-09"},{"lineNumber":13,"author":{"gitId":"Jawad280"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2024-02-26"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import javafx.stage.Stage;","lastModifiedDate":"2016-08-18"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.GuiSettings;","lastModifiedDate":"2016-09-28"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.LogsCenter;","lastModifiedDate":"2017-06-16"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.logic.Logic;","lastModifiedDate":"2016-09-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.CommandResult;","lastModifiedDate":"2018-12-09"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.exceptions.CommandException;","lastModifiedDate":"2018-12-09"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2018-12-09"},{"lineNumber":21,"author":{"gitId":"Jawad280"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2024-02-26"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-09"},{"lineNumber":23,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-18"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * The Main Window. Provides the basic application layout containing","lastModifiedDate":"2016-08-18"},{"lineNumber":25,"author":{"gitId":"-"},"content":" * a menu bar and space where other JavaFX elements can be placed.","lastModifiedDate":"2016-08-18"},{"lineNumber":26,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-18"},{"lineNumber":27,"author":{"gitId":"-"},"content":"public class MainWindow extends UiPart\u003cStage\u003e {","lastModifiedDate":"2017-11-29"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-28"},{"lineNumber":29,"author":{"gitId":"-"},"content":" private static final String FXML \u003d \"MainWindow.fxml\";","lastModifiedDate":"2016-08-18"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-18"},{"lineNumber":31,"author":{"gitId":"-"},"content":" private final Logger logger \u003d LogsCenter.getLogger(getClass());","lastModifiedDate":"2018-08-14"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-16"},{"lineNumber":33,"author":{"gitId":"-"},"content":" private Stage primaryStage;","lastModifiedDate":"2016-12-02"},{"lineNumber":34,"author":{"gitId":"-"},"content":" private Logic logic;","lastModifiedDate":"2016-09-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-18"},{"lineNumber":36,"author":{"gitId":"-"},"content":" // Independent Ui parts residing in this Ui container","lastModifiedDate":"2016-08-18"},{"lineNumber":37,"author":{"gitId":"-"},"content":" private PersonListPanel personListPanel;","lastModifiedDate":"2016-08-18"},{"lineNumber":38,"author":{"gitId":"-"},"content":" private ResultDisplay resultDisplay;","lastModifiedDate":"2018-12-09"},{"lineNumber":39,"author":{"gitId":"-"},"content":" private HelpWindow helpWindow;","lastModifiedDate":"2018-03-15"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-18"},{"lineNumber":41,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2016-09-21"},{"lineNumber":42,"author":{"gitId":"-"},"content":" private StackPane commandBoxPlaceholder;","lastModifiedDate":"2017-05-09"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-18"},{"lineNumber":44,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2016-08-18"},{"lineNumber":45,"author":{"gitId":"-"},"content":" private MenuItem helpMenuItem;","lastModifiedDate":"2016-08-18"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-18"},{"lineNumber":47,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2016-09-21"},{"lineNumber":48,"author":{"gitId":"-"},"content":" private StackPane personListPanelPlaceholder;","lastModifiedDate":"2017-05-09"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":50,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2016-09-21"},{"lineNumber":51,"author":{"gitId":"-"},"content":" private StackPane resultDisplayPlaceholder;","lastModifiedDate":"2017-05-09"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":53,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2016-09-21"},{"lineNumber":54,"author":{"gitId":"-"},"content":" private StackPane statusbarPlaceholder;","lastModifiedDate":"2017-05-09"},{"lineNumber":55,"author":{"gitId":"Jawad280"},"content":" @FXML","lastModifiedDate":"2024-02-26"},{"lineNumber":56,"author":{"gitId":"chenyixin0"},"content":" private ScrollPane viewPanelPlaceHolder;","lastModifiedDate":"2024-02-29"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":58,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2020-05-27"},{"lineNumber":59,"author":{"gitId":"-"},"content":" * Creates a {@code MainWindow} with the given {@code Stage} and {@code Logic}.","lastModifiedDate":"2020-05-27"},{"lineNumber":60,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2020-05-27"},{"lineNumber":61,"author":{"gitId":"-"},"content":" public MainWindow(Stage primaryStage, Logic logic) {","lastModifiedDate":"2018-12-08"},{"lineNumber":62,"author":{"gitId":"-"},"content":" super(FXML, primaryStage);","lastModifiedDate":"2017-11-29"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":64,"author":{"gitId":"-"},"content":" // Set dependencies","lastModifiedDate":"2016-09-21"},{"lineNumber":65,"author":{"gitId":"-"},"content":" this.primaryStage \u003d primaryStage;","lastModifiedDate":"2016-12-02"},{"lineNumber":66,"author":{"gitId":"-"},"content":" this.logic \u003d logic;","lastModifiedDate":"2016-09-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":68,"author":{"gitId":"-"},"content":" // Configure the UI","lastModifiedDate":"2016-09-21"},{"lineNumber":69,"author":{"gitId":"-"},"content":" setWindowDefaultSize(logic.getGuiSettings());","lastModifiedDate":"2018-11-27"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-18"},{"lineNumber":71,"author":{"gitId":"-"},"content":" setAccelerators();","lastModifiedDate":"2016-09-21"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-03-15"},{"lineNumber":73,"author":{"gitId":"-"},"content":" helpWindow \u003d new HelpWindow();","lastModifiedDate":"2018-03-15"},{"lineNumber":74,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-18"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-18"},{"lineNumber":76,"author":{"gitId":"-"},"content":" public Stage getPrimaryStage() {","lastModifiedDate":"2016-12-24"},{"lineNumber":77,"author":{"gitId":"-"},"content":" return primaryStage;","lastModifiedDate":"2016-12-24"},{"lineNumber":78,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-24"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-24"},{"lineNumber":80,"author":{"gitId":"-"},"content":" private void setAccelerators() {","lastModifiedDate":"2016-09-21"},{"lineNumber":81,"author":{"gitId":"-"},"content":" setAccelerator(helpMenuItem, KeyCombination.valueOf(\"F1\"));","lastModifiedDate":"2016-12-18"},{"lineNumber":82,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-18"},{"lineNumber":83,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-18"},{"lineNumber":84,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-12-18"},{"lineNumber":85,"author":{"gitId":"-"},"content":" * Sets the accelerator of a MenuItem.","lastModifiedDate":"2016-12-18"},{"lineNumber":86,"author":{"gitId":"-"},"content":" * @param keyCombination the KeyCombination value of the accelerator","lastModifiedDate":"2016-12-18"},{"lineNumber":87,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-18"},{"lineNumber":88,"author":{"gitId":"-"},"content":" private void setAccelerator(MenuItem menuItem, KeyCombination keyCombination) {","lastModifiedDate":"2016-12-18"},{"lineNumber":89,"author":{"gitId":"-"},"content":" menuItem.setAccelerator(keyCombination);","lastModifiedDate":"2016-12-18"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-18"},{"lineNumber":91,"author":{"gitId":"-"},"content":" /*","lastModifiedDate":"2016-12-18"},{"lineNumber":92,"author":{"gitId":"-"},"content":" * TODO: the code below can be removed once the bug reported here","lastModifiedDate":"2016-12-18"},{"lineNumber":93,"author":{"gitId":"-"},"content":" * https://bugs.openjdk.java.net/browse/JDK-8131666","lastModifiedDate":"2016-12-18"},{"lineNumber":94,"author":{"gitId":"-"},"content":" * is fixed in later version of SDK.","lastModifiedDate":"2016-12-18"},{"lineNumber":95,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2016-12-18"},{"lineNumber":96,"author":{"gitId":"-"},"content":" * According to the bug report, TextInputControl (TextField, TextArea) will","lastModifiedDate":"2016-12-18"},{"lineNumber":97,"author":{"gitId":"-"},"content":" * consume function-key events. Because CommandBox contains a TextField, and","lastModifiedDate":"2016-12-18"},{"lineNumber":98,"author":{"gitId":"-"},"content":" * ResultDisplay contains a TextArea, thus some accelerators (e.g F1) will","lastModifiedDate":"2016-12-18"},{"lineNumber":99,"author":{"gitId":"-"},"content":" * not work when the focus is in them because the key event is consumed by","lastModifiedDate":"2016-12-18"},{"lineNumber":100,"author":{"gitId":"-"},"content":" * the TextInputControl(s).","lastModifiedDate":"2016-12-18"},{"lineNumber":101,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2016-12-18"},{"lineNumber":102,"author":{"gitId":"-"},"content":" * For now, we add following event filter to capture such key events and open","lastModifiedDate":"2016-12-18"},{"lineNumber":103,"author":{"gitId":"-"},"content":" * help window purposely so to support accelerators even when focus is","lastModifiedDate":"2016-12-18"},{"lineNumber":104,"author":{"gitId":"-"},"content":" * in CommandBox or ResultDisplay.","lastModifiedDate":"2016-12-18"},{"lineNumber":105,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-18"},{"lineNumber":106,"author":{"gitId":"-"},"content":" getRoot().addEventFilter(KeyEvent.KEY_PRESSED, event -\u003e {","lastModifiedDate":"2016-12-24"},{"lineNumber":107,"author":{"gitId":"-"},"content":" if (event.getTarget() instanceof TextInputControl \u0026\u0026 keyCombination.match(event)) {","lastModifiedDate":"2016-12-18"},{"lineNumber":108,"author":{"gitId":"-"},"content":" menuItem.getOnAction().handle(new ActionEvent());","lastModifiedDate":"2016-12-18"},{"lineNumber":109,"author":{"gitId":"-"},"content":" event.consume();","lastModifiedDate":"2016-12-18"},{"lineNumber":110,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-18"},{"lineNumber":111,"author":{"gitId":"-"},"content":" });","lastModifiedDate":"2016-12-18"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-21"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":114,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-08-16"},{"lineNumber":115,"author":{"gitId":"-"},"content":" * Fills up all the placeholders of this window.","lastModifiedDate":"2017-08-16"},{"lineNumber":116,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-08-16"},{"lineNumber":117,"author":{"gitId":"-"},"content":" void fillInnerParts() {","lastModifiedDate":"2016-09-21"},{"lineNumber":118,"author":{"gitId":"-"},"content":" personListPanel \u003d new PersonListPanel(logic.getFilteredPersonList());","lastModifiedDate":"2019-01-25"},{"lineNumber":119,"author":{"gitId":"-"},"content":" personListPanelPlaceholder.getChildren().add(personListPanel.getRoot());","lastModifiedDate":"2017-06-14"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-14"},{"lineNumber":121,"author":{"gitId":"-"},"content":" resultDisplay \u003d new ResultDisplay();","lastModifiedDate":"2018-12-09"},{"lineNumber":122,"author":{"gitId":"-"},"content":" resultDisplayPlaceholder.getChildren().add(resultDisplay.getRoot());","lastModifiedDate":"2017-06-14"},{"lineNumber":123,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-14"},{"lineNumber":124,"author":{"gitId":"-"},"content":" StatusBarFooter statusBarFooter \u003d new StatusBarFooter(logic.getAddressBookFilePath());","lastModifiedDate":"2019-01-25"},{"lineNumber":125,"author":{"gitId":"-"},"content":" statusbarPlaceholder.getChildren().add(statusBarFooter.getRoot());","lastModifiedDate":"2017-06-14"},{"lineNumber":126,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-14"},{"lineNumber":127,"author":{"gitId":"-"},"content":" CommandBox commandBox \u003d new CommandBox(this::executeCommand);","lastModifiedDate":"2019-01-25"},{"lineNumber":128,"author":{"gitId":"-"},"content":" commandBoxPlaceholder.getChildren().add(commandBox.getRoot());","lastModifiedDate":"2017-06-14"},{"lineNumber":129,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-18"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-18"},{"lineNumber":131,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-08-18"},{"lineNumber":132,"author":{"gitId":"-"},"content":" * Sets the default size based on {@code guiSettings}.","lastModifiedDate":"2018-11-27"},{"lineNumber":133,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-18"},{"lineNumber":134,"author":{"gitId":"-"},"content":" private void setWindowDefaultSize(GuiSettings guiSettings) {","lastModifiedDate":"2018-11-27"},{"lineNumber":135,"author":{"gitId":"-"},"content":" primaryStage.setHeight(guiSettings.getWindowHeight());","lastModifiedDate":"2018-11-27"},{"lineNumber":136,"author":{"gitId":"-"},"content":" primaryStage.setWidth(guiSettings.getWindowWidth());","lastModifiedDate":"2018-11-27"},{"lineNumber":137,"author":{"gitId":"-"},"content":" if (guiSettings.getWindowCoordinates() !\u003d null) {","lastModifiedDate":"2018-11-27"},{"lineNumber":138,"author":{"gitId":"-"},"content":" primaryStage.setX(guiSettings.getWindowCoordinates().getX());","lastModifiedDate":"2018-11-27"},{"lineNumber":139,"author":{"gitId":"-"},"content":" primaryStage.setY(guiSettings.getWindowCoordinates().getY());","lastModifiedDate":"2018-11-27"},{"lineNumber":140,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-18"},{"lineNumber":141,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-18"},{"lineNumber":142,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-18"},{"lineNumber":143,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-08-16"},{"lineNumber":144,"author":{"gitId":"-"},"content":" * Opens the help window or focuses on it if it\u0027s already opened.","lastModifiedDate":"2018-03-15"},{"lineNumber":145,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-08-16"},{"lineNumber":146,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2016-08-18"},{"lineNumber":147,"author":{"gitId":"-"},"content":" public void handleHelp() {","lastModifiedDate":"2016-08-31"},{"lineNumber":148,"author":{"gitId":"-"},"content":" if (!helpWindow.isShowing()) {","lastModifiedDate":"2018-03-15"},{"lineNumber":149,"author":{"gitId":"-"},"content":" helpWindow.show();","lastModifiedDate":"2016-08-18"},{"lineNumber":150,"author":{"gitId":"-"},"content":" } else {","lastModifiedDate":"2018-03-15"},{"lineNumber":151,"author":{"gitId":"-"},"content":" helpWindow.focus();","lastModifiedDate":"2018-03-15"},{"lineNumber":152,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-03-15"},{"lineNumber":153,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-18"},{"lineNumber":154,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-18"},{"lineNumber":155,"author":{"gitId":"-"},"content":" void show() {","lastModifiedDate":"2016-10-15"},{"lineNumber":156,"author":{"gitId":"-"},"content":" primaryStage.show();","lastModifiedDate":"2016-08-18"},{"lineNumber":157,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-18"},{"lineNumber":158,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-18"},{"lineNumber":159,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-08-18"},{"lineNumber":160,"author":{"gitId":"-"},"content":" * Closes the application.","lastModifiedDate":"2016-08-18"},{"lineNumber":161,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-18"},{"lineNumber":162,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2016-08-18"},{"lineNumber":163,"author":{"gitId":"-"},"content":" private void handleExit() {","lastModifiedDate":"2016-08-18"},{"lineNumber":164,"author":{"gitId":"-"},"content":" GuiSettings guiSettings \u003d new GuiSettings(primaryStage.getWidth(), primaryStage.getHeight(),","lastModifiedDate":"2018-12-08"},{"lineNumber":165,"author":{"gitId":"-"},"content":" (int) primaryStage.getX(), (int) primaryStage.getY());","lastModifiedDate":"2018-12-08"},{"lineNumber":166,"author":{"gitId":"-"},"content":" logic.setGuiSettings(guiSettings);","lastModifiedDate":"2018-12-08"},{"lineNumber":167,"author":{"gitId":"-"},"content":" helpWindow.hide();","lastModifiedDate":"2018-12-08"},{"lineNumber":168,"author":{"gitId":"-"},"content":" primaryStage.hide();","lastModifiedDate":"2018-12-08"},{"lineNumber":169,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-18"},{"lineNumber":170,"author":{"gitId":"Jawad280"},"content":" /**","lastModifiedDate":"2024-02-26"},{"lineNumber":171,"author":{"gitId":"Jawad280"},"content":" * Views the person on the View Panel.","lastModifiedDate":"2024-02-26"},{"lineNumber":172,"author":{"gitId":"Jawad280"},"content":" */","lastModifiedDate":"2024-02-26"},{"lineNumber":173,"author":{"gitId":"Jawad280"},"content":" @FXML","lastModifiedDate":"2024-02-26"},{"lineNumber":174,"author":{"gitId":"chenyixin0"},"content":" // private void handleView(Person p, int displayIndex) {","lastModifiedDate":"2024-02-29"},{"lineNumber":175,"author":{"gitId":"chenyixin0"},"content":" // PersonCard viewPanel \u003d new PersonCard(p, displayIndex);","lastModifiedDate":"2024-02-29"},{"lineNumber":176,"author":{"gitId":"chenyixin0"},"content":" // //ViewPanel viewPanel \u003d new ViewPanel(p);","lastModifiedDate":"2024-02-29"},{"lineNumber":177,"author":{"gitId":"chenyixin0"},"content":" // //viewPanelPlaceHolder.getChildren().clear();","lastModifiedDate":"2024-02-29"},{"lineNumber":178,"author":{"gitId":"chenyixin0"},"content":" // viewPanelPlaceHolder.getChildren().add(viewPanel.getRoot());","lastModifiedDate":"2024-02-29"},{"lineNumber":179,"author":{"gitId":"chenyixin0"},"content":" // }","lastModifiedDate":"2024-02-29"},{"lineNumber":180,"author":{"gitId":"chenyixin0"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":181,"author":{"gitId":"chenyixin0"},"content":" private void handleView(Person p) {","lastModifiedDate":"2024-02-29"},{"lineNumber":182,"author":{"gitId":"chenyixin0"},"content":" ViewPanel viewPanel \u003d new ViewPanel(p);","lastModifiedDate":"2024-02-29"},{"lineNumber":183,"author":{"gitId":"chenyixin0"},"content":" //viewPanelPlaceHolder.getChildren().clear();","lastModifiedDate":"2024-02-29"},{"lineNumber":184,"author":{"gitId":"chenyixin0"},"content":" VBox holder \u003d viewPanelPlaceHolder.getContent() \u003d\u003d null ? new VBox()","lastModifiedDate":"2024-02-29"},{"lineNumber":185,"author":{"gitId":"chenyixin0"},"content":" : (VBox) viewPanelPlaceHolder.getContent();","lastModifiedDate":"2024-02-29"},{"lineNumber":186,"author":{"gitId":"chenyixin0"},"content":" holder.getChildren().add(viewPanel.getRoot());","lastModifiedDate":"2024-02-29"},{"lineNumber":187,"author":{"gitId":"chenyixin0"},"content":" viewPanelPlaceHolder.setContent(holder);","lastModifiedDate":"2024-02-29"},{"lineNumber":188,"author":{"gitId":"chenyixin0"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":189,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":190,"author":{"gitId":"-"},"content":" public PersonListPanel getPersonListPanel() {","lastModifiedDate":"2016-08-25"},{"lineNumber":191,"author":{"gitId":"-"},"content":" return personListPanel;","lastModifiedDate":"2018-08-14"},{"lineNumber":192,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-25"},{"lineNumber":193,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":194,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-12-09"},{"lineNumber":195,"author":{"gitId":"-"},"content":" * Executes the command and returns the result.","lastModifiedDate":"2018-12-09"},{"lineNumber":196,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2018-12-09"},{"lineNumber":197,"author":{"gitId":"-"},"content":" * @see seedu.address.logic.Logic#execute(String)","lastModifiedDate":"2018-12-09"},{"lineNumber":198,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-12-09"},{"lineNumber":199,"author":{"gitId":"-"},"content":" private CommandResult executeCommand(String commandText) throws CommandException, ParseException {","lastModifiedDate":"2018-12-09"},{"lineNumber":200,"author":{"gitId":"-"},"content":" try {","lastModifiedDate":"2018-12-09"},{"lineNumber":201,"author":{"gitId":"chenyixin0"},"content":" viewPanelPlaceHolder.setContent(null);","lastModifiedDate":"2024-02-29"},{"lineNumber":202,"author":{"gitId":"-"},"content":" CommandResult commandResult \u003d logic.execute(commandText);","lastModifiedDate":"2018-12-09"},{"lineNumber":203,"author":{"gitId":"-"},"content":" logger.info(\"Result: \" + commandResult.getFeedbackToUser());","lastModifiedDate":"2018-12-09"},{"lineNumber":204,"author":{"gitId":"-"},"content":" resultDisplay.setFeedbackToUser(commandResult.getFeedbackToUser());","lastModifiedDate":"2018-12-09"},{"lineNumber":205,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":206,"author":{"gitId":"-"},"content":" if (commandResult.isShowHelp()) {","lastModifiedDate":"2018-12-09"},{"lineNumber":207,"author":{"gitId":"-"},"content":" handleHelp();","lastModifiedDate":"2018-12-09"},{"lineNumber":208,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":209,"author":{"gitId":"Jawad280"},"content":" if (commandResult.getViewPerson() !\u003d null) {","lastModifiedDate":"2024-02-26"},{"lineNumber":210,"author":{"gitId":"Jawad280"},"content":" Person p \u003d commandResult.getViewPerson();","lastModifiedDate":"2024-02-26"},{"lineNumber":211,"author":{"gitId":"chenyixin0"},"content":" handleView(p);","lastModifiedDate":"2024-02-29"},{"lineNumber":212,"author":{"gitId":"chenyixin0"},"content":" //handleView(p, 1);","lastModifiedDate":"2024-02-29"},{"lineNumber":213,"author":{"gitId":"chenyixin0"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":214,"author":{"gitId":"chenyixin0"},"content":" if (commandResult.getViewList() !\u003d null) {","lastModifiedDate":"2024-02-29"},{"lineNumber":215,"author":{"gitId":"chenyixin0"},"content":" //int index \u003d 1;","lastModifiedDate":"2024-02-29"},{"lineNumber":216,"author":{"gitId":"chenyixin0"},"content":" for (Person p : commandResult.getViewList()) {","lastModifiedDate":"2024-02-29"},{"lineNumber":217,"author":{"gitId":"chenyixin0"},"content":" handleView(p);","lastModifiedDate":"2024-02-29"},{"lineNumber":218,"author":{"gitId":"chenyixin0"},"content":" //handleView(p, index);","lastModifiedDate":"2024-02-29"},{"lineNumber":219,"author":{"gitId":"chenyixin0"},"content":" //index++;","lastModifiedDate":"2024-02-29"},{"lineNumber":220,"author":{"gitId":"chenyixin0"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":221,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":222,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":223,"author":{"gitId":"-"},"content":" if (commandResult.isExit()) {","lastModifiedDate":"2018-12-09"},{"lineNumber":224,"author":{"gitId":"-"},"content":" handleExit();","lastModifiedDate":"2018-12-09"},{"lineNumber":225,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":226,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":227,"author":{"gitId":"-"},"content":" return commandResult;","lastModifiedDate":"2018-12-09"},{"lineNumber":228,"author":{"gitId":"-"},"content":" } catch (CommandException | ParseException e) {","lastModifiedDate":"2018-12-09"},{"lineNumber":229,"author":{"gitId":"-"},"content":" logger.info(\"An error occurred while executing command: \" + commandText);","lastModifiedDate":"2023-06-13"},{"lineNumber":230,"author":{"gitId":"-"},"content":" resultDisplay.setFeedbackToUser(e.getMessage());","lastModifiedDate":"2018-12-09"},{"lineNumber":231,"author":{"gitId":"-"},"content":" throw e;","lastModifiedDate":"2018-12-09"},{"lineNumber":232,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":233,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":234,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-18"}],"authorContributionMap":{"chenyixin0":28,"Jawad280":10,"-":196}},{"path":"src/main/java/seedu/address/ui/PersonCard.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.ui;","lastModifiedDate":"2016-09-22"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2016-09-21"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2016-09-21"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import javafx.scene.layout.HBox;","lastModifiedDate":"2016-09-21"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2016-12-24"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-01-10"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":9,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-08-16"},{"lineNumber":10,"author":{"gitId":"-"},"content":" * An UI component that displays information of a {@code Person}.","lastModifiedDate":"2017-08-16"},{"lineNumber":11,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-08-16"},{"lineNumber":12,"author":{"gitId":"-"},"content":"public class PersonCard extends UiPart\u003cRegion\u003e {","lastModifiedDate":"2016-12-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":14,"author":{"gitId":"-"},"content":" private static final String FXML \u003d \"PersonListCard.fxml\";","lastModifiedDate":"2016-09-21"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":16,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-03-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * Note: Certain keywords such as \"location\" and \"resources\" are reserved keywords in JavaFX.","lastModifiedDate":"2017-03-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * As a consequence, UI elements\u0027 variable names cannot be set to such keywords","lastModifiedDate":"2017-03-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * or an exception will be thrown by JavaFX during runtime.","lastModifiedDate":"2017-03-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2017-03-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" * @see \u003ca href\u003d\"https://github.com/se-edu/addressbook-level4/issues/336\"\u003eThe issue on AddressBook level 4\u003c/a\u003e","lastModifiedDate":"2017-03-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-03-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" public final Person person;","lastModifiedDate":"2018-01-10"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-12"},{"lineNumber":26,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2016-09-21"},{"lineNumber":27,"author":{"gitId":"-"},"content":" private HBox cardPane;","lastModifiedDate":"2016-09-21"},{"lineNumber":28,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2016-09-21"},{"lineNumber":29,"author":{"gitId":"-"},"content":" private Label name;","lastModifiedDate":"2016-09-21"},{"lineNumber":30,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2016-09-21"},{"lineNumber":31,"author":{"gitId":"-"},"content":" private Label id;","lastModifiedDate":"2016-09-21"},{"lineNumber":32,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2016-09-21"},{"lineNumber":33,"author":{"gitId":"-"},"content":" private Label phone;","lastModifiedDate":"2016-09-21"},{"lineNumber":34,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2016-09-21"},{"lineNumber":35,"author":{"gitId":"-"},"content":" private Label address;","lastModifiedDate":"2016-09-21"},{"lineNumber":36,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2016-09-21"},{"lineNumber":37,"author":{"gitId":"-"},"content":" private Label email;","lastModifiedDate":"2016-09-21"},{"lineNumber":38,"author":{"gitId":"-"},"content":" @FXML","lastModifiedDate":"2016-09-21"},{"lineNumber":39,"author":{"gitId":"ashleygoh1"},"content":" private Label tags;","lastModifiedDate":"2024-02-25"},{"lineNumber":40,"author":{"gitId":"ashleygoh1"},"content":" @FXML","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"ashleygoh1"},"content":" private Label jobDescription;","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":" @FXML","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"ashleygoh1"},"content":" private Label interviewDate;","lastModifiedDate":"2024-02-25"},{"lineNumber":44,"author":{"gitId":"ashleygoh1"},"content":" @FXML","lastModifiedDate":"2024-02-25"},{"lineNumber":45,"author":{"gitId":"ashleygoh1"},"content":" private Label internDuration;","lastModifiedDate":"2024-02-25"},{"lineNumber":46,"author":{"gitId":"ashleygoh1"},"content":" @FXML","lastModifiedDate":"2024-02-25"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":" private Label salary;","lastModifiedDate":"2024-02-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":49,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2020-05-27"},{"lineNumber":50,"author":{"gitId":"-"},"content":" * Creates a {@code PersonCode} with the given {@code Person} and index to display.","lastModifiedDate":"2020-05-27"},{"lineNumber":51,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2020-05-27"},{"lineNumber":52,"author":{"gitId":"-"},"content":" public PersonCard(Person person, int displayedIndex) {","lastModifiedDate":"2018-01-10"},{"lineNumber":53,"author":{"gitId":"-"},"content":" super(FXML);","lastModifiedDate":"2016-12-24"},{"lineNumber":54,"author":{"gitId":"-"},"content":" this.person \u003d person;","lastModifiedDate":"2017-07-12"},{"lineNumber":55,"author":{"gitId":"-"},"content":" id.setText(displayedIndex + \". \");","lastModifiedDate":"2016-09-21"},{"lineNumber":56,"author":{"gitId":"ashleygoh1"},"content":" name.setText(person.getCompanyName().fullName);","lastModifiedDate":"2024-02-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" phone.setText(person.getPhone().value);","lastModifiedDate":"2017-12-20"},{"lineNumber":58,"author":{"gitId":"-"},"content":" address.setText(person.getAddress().value);","lastModifiedDate":"2017-12-20"},{"lineNumber":59,"author":{"gitId":"-"},"content":" email.setText(person.getEmail().value);","lastModifiedDate":"2017-12-20"},{"lineNumber":60,"author":{"gitId":"ashleygoh1"},"content":" tags.setText(person.getTag().tagName);","lastModifiedDate":"2024-02-25"},{"lineNumber":61,"author":{"gitId":"ashleygoh1"},"content":" jobDescription.setText(person.getJobDescription().value);","lastModifiedDate":"2024-02-25"},{"lineNumber":62,"author":{"gitId":"ashleygoh1"},"content":" interviewDate.setText(person.getInterviewDate().toString());","lastModifiedDate":"2024-02-25"},{"lineNumber":63,"author":{"gitId":"ashleygoh1"},"content":" internDuration.setText(person.getInternDuration().value);","lastModifiedDate":"2024-02-25"},{"lineNumber":64,"author":{"gitId":"ashleygoh1"},"content":" salary.setText(person.getSalary().value);","lastModifiedDate":"2024-02-25"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-18"},{"lineNumber":66,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-09-21"}],"authorContributionMap":{"ashleygoh1":15,"-":51}},{"path":"src/main/java/seedu/address/ui/ViewPanel.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Jawad280"},"content":"package seedu.address.ui;","lastModifiedDate":"2024-02-26"},{"lineNumber":2,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":3,"author":{"gitId":"Jawad280"},"content":"import javafx.fxml.FXML;","lastModifiedDate":"2024-02-26"},{"lineNumber":4,"author":{"gitId":"Jawad280"},"content":"import javafx.scene.control.Label;","lastModifiedDate":"2024-02-26"},{"lineNumber":5,"author":{"gitId":"Jawad280"},"content":"import javafx.scene.layout.FlowPane;","lastModifiedDate":"2024-02-26"},{"lineNumber":6,"author":{"gitId":"Jawad280"},"content":"import javafx.scene.layout.Region;","lastModifiedDate":"2024-02-26"},{"lineNumber":7,"author":{"gitId":"Jawad280"},"content":"import javafx.scene.layout.VBox;","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"Jawad280"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2024-02-26"},{"lineNumber":9,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":10,"author":{"gitId":"Jawad280"},"content":"/**","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"Jawad280"},"content":" * A UI component that displays information of a {@code Person}.","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"Jawad280"},"content":" */","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"Jawad280"},"content":"public class ViewPanel extends UiPart\u003cRegion\u003e {","lastModifiedDate":"2024-02-26"},{"lineNumber":14,"author":{"gitId":"Jawad280"},"content":" private static final String FXML \u003d \"ViewPanel.fxml\";","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":16,"author":{"gitId":"Jawad280"},"content":" public final Person person;","lastModifiedDate":"2024-02-26"},{"lineNumber":17,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":18,"author":{"gitId":"Jawad280"},"content":" @FXML","lastModifiedDate":"2024-02-26"},{"lineNumber":19,"author":{"gitId":"Jawad280"},"content":" private VBox viewPanel;","lastModifiedDate":"2024-02-26"},{"lineNumber":20,"author":{"gitId":"Jawad280"},"content":" @FXML","lastModifiedDate":"2024-02-26"},{"lineNumber":21,"author":{"gitId":"Jawad280"},"content":" private Label companyName;","lastModifiedDate":"2024-02-26"},{"lineNumber":22,"author":{"gitId":"Jawad280"},"content":" @FXML","lastModifiedDate":"2024-02-26"},{"lineNumber":23,"author":{"gitId":"Jawad280"},"content":" private Label phone;","lastModifiedDate":"2024-02-26"},{"lineNumber":24,"author":{"gitId":"Jawad280"},"content":" @FXML","lastModifiedDate":"2024-02-26"},{"lineNumber":25,"author":{"gitId":"Jawad280"},"content":" private Label address;","lastModifiedDate":"2024-02-26"},{"lineNumber":26,"author":{"gitId":"Jawad280"},"content":" @FXML","lastModifiedDate":"2024-02-26"},{"lineNumber":27,"author":{"gitId":"Jawad280"},"content":" private Label email;","lastModifiedDate":"2024-02-26"},{"lineNumber":28,"author":{"gitId":"Jawad280"},"content":" @FXML","lastModifiedDate":"2024-02-26"},{"lineNumber":29,"author":{"gitId":"Jawad280"},"content":" private FlowPane tag;","lastModifiedDate":"2024-02-26"},{"lineNumber":30,"author":{"gitId":"Jawad280"},"content":" @FXML","lastModifiedDate":"2024-02-26"},{"lineNumber":31,"author":{"gitId":"Jawad280"},"content":" private Label interviewDate;","lastModifiedDate":"2024-02-26"},{"lineNumber":32,"author":{"gitId":"Jawad280"},"content":" @FXML","lastModifiedDate":"2024-02-26"},{"lineNumber":33,"author":{"gitId":"Jawad280"},"content":" private Label internDuration;","lastModifiedDate":"2024-02-26"},{"lineNumber":34,"author":{"gitId":"Jawad280"},"content":" @FXML","lastModifiedDate":"2024-02-26"},{"lineNumber":35,"author":{"gitId":"Jawad280"},"content":" private Label salary;","lastModifiedDate":"2024-02-26"},{"lineNumber":36,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":37,"author":{"gitId":"Jawad280"},"content":" /**","lastModifiedDate":"2024-02-26"},{"lineNumber":38,"author":{"gitId":"Jawad280"},"content":" * Creates a {@code PersonCode} with the given {@code Person} to display.","lastModifiedDate":"2024-02-26"},{"lineNumber":39,"author":{"gitId":"Jawad280"},"content":" */","lastModifiedDate":"2024-02-26"},{"lineNumber":40,"author":{"gitId":"Jawad280"},"content":" public ViewPanel(Person person) {","lastModifiedDate":"2024-02-26"},{"lineNumber":41,"author":{"gitId":"Jawad280"},"content":" super(FXML);","lastModifiedDate":"2024-02-26"},{"lineNumber":42,"author":{"gitId":"Jawad280"},"content":" this.person \u003d person;","lastModifiedDate":"2024-02-26"},{"lineNumber":43,"author":{"gitId":"Jawad280"},"content":" companyName.setText(person.getCompanyName().fullName);","lastModifiedDate":"2024-02-26"},{"lineNumber":44,"author":{"gitId":"Jawad280"},"content":" phone.setText(person.getPhone().value);","lastModifiedDate":"2024-02-26"},{"lineNumber":45,"author":{"gitId":"Jawad280"},"content":" address.setText(person.getAddress().value);","lastModifiedDate":"2024-02-26"},{"lineNumber":46,"author":{"gitId":"Jawad280"},"content":" email.setText(person.getEmail().value);","lastModifiedDate":"2024-02-26"},{"lineNumber":47,"author":{"gitId":"Jawad280"},"content":" interviewDate.setText(person.getInterviewDate().toString());","lastModifiedDate":"2024-02-26"},{"lineNumber":48,"author":{"gitId":"Jawad280"},"content":" tag.getChildren().add(new Label(person.getTag().tagName));","lastModifiedDate":"2024-02-26"},{"lineNumber":49,"author":{"gitId":"Jawad280"},"content":" internDuration.setText(person.getInternDuration().value);","lastModifiedDate":"2024-02-26"},{"lineNumber":50,"author":{"gitId":"Jawad280"},"content":" salary.setText(person.getSalary().value);","lastModifiedDate":"2024-02-26"},{"lineNumber":51,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":52,"author":{"gitId":"Jawad280"},"content":"}","lastModifiedDate":"2024-02-26"}],"authorContributionMap":{"Jawad280":52}},{"path":"src/main/resources/view/DarkTheme.css","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":".background {","lastModifiedDate":"2016-08-08"},{"lineNumber":2,"author":{"gitId":"-"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2016-08-15"},{"lineNumber":3,"author":{"gitId":"-"},"content":" background-color: #383838; /* Used in the default.html file */","lastModifiedDate":"2017-03-02"},{"lineNumber":4,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":6,"author":{"gitId":"-"},"content":".label {","lastModifiedDate":"2016-08-08"},{"lineNumber":7,"author":{"gitId":"-"},"content":" -fx-font-size: 11pt;","lastModifiedDate":"2016-08-08"},{"lineNumber":8,"author":{"gitId":"-"},"content":" -fx-font-family: \"Segoe UI Semibold\";","lastModifiedDate":"2022-01-13"},{"lineNumber":9,"author":{"gitId":"-"},"content":" -fx-text-fill: #555555;","lastModifiedDate":"2016-08-15"},{"lineNumber":10,"author":{"gitId":"-"},"content":" -fx-opacity: 0.9;","lastModifiedDate":"2016-08-08"},{"lineNumber":11,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":13,"author":{"gitId":"-"},"content":".label-bright {","lastModifiedDate":"2016-08-08"},{"lineNumber":14,"author":{"gitId":"-"},"content":" -fx-font-size: 11pt;","lastModifiedDate":"2016-08-08"},{"lineNumber":15,"author":{"gitId":"-"},"content":" -fx-font-family: \"Segoe UI Semibold\";","lastModifiedDate":"2022-01-13"},{"lineNumber":16,"author":{"gitId":"-"},"content":" -fx-text-fill: white;","lastModifiedDate":"2016-08-08"},{"lineNumber":17,"author":{"gitId":"-"},"content":" -fx-opacity: 1;","lastModifiedDate":"2016-08-08"},{"lineNumber":18,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":20,"author":{"gitId":"-"},"content":".label-header {","lastModifiedDate":"2016-08-08"},{"lineNumber":21,"author":{"gitId":"-"},"content":" -fx-font-size: 32pt;","lastModifiedDate":"2016-08-08"},{"lineNumber":22,"author":{"gitId":"-"},"content":" -fx-font-family: \"Segoe UI Light\";","lastModifiedDate":"2022-01-13"},{"lineNumber":23,"author":{"gitId":"-"},"content":" -fx-text-fill: white;","lastModifiedDate":"2016-08-08"},{"lineNumber":24,"author":{"gitId":"-"},"content":" -fx-opacity: 1;","lastModifiedDate":"2016-08-08"},{"lineNumber":25,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":27,"author":{"gitId":"-"},"content":".text-field {","lastModifiedDate":"2016-08-08"},{"lineNumber":28,"author":{"gitId":"-"},"content":" -fx-font-size: 12pt;","lastModifiedDate":"2016-08-08"},{"lineNumber":29,"author":{"gitId":"-"},"content":" -fx-font-family: \"Segoe UI Semibold\";","lastModifiedDate":"2022-01-13"},{"lineNumber":30,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":32,"author":{"gitId":"-"},"content":".tab-pane {","lastModifiedDate":"2016-08-08"},{"lineNumber":33,"author":{"gitId":"-"},"content":" -fx-padding: 0 0 0 1;","lastModifiedDate":"2016-08-08"},{"lineNumber":34,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":36,"author":{"gitId":"-"},"content":".tab-pane .tab-header-area {","lastModifiedDate":"2016-08-08"},{"lineNumber":37,"author":{"gitId":"-"},"content":" -fx-padding: 0 0 0 0;","lastModifiedDate":"2016-08-08"},{"lineNumber":38,"author":{"gitId":"-"},"content":" -fx-min-height: 0;","lastModifiedDate":"2016-08-08"},{"lineNumber":39,"author":{"gitId":"-"},"content":" -fx-max-height: 0;","lastModifiedDate":"2016-08-08"},{"lineNumber":40,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":42,"author":{"gitId":"-"},"content":".table-view {","lastModifiedDate":"2016-08-08"},{"lineNumber":43,"author":{"gitId":"-"},"content":" -fx-base: #1d1d1d;","lastModifiedDate":"2016-08-15"},{"lineNumber":44,"author":{"gitId":"-"},"content":" -fx-control-inner-background: #1d1d1d;","lastModifiedDate":"2016-08-15"},{"lineNumber":45,"author":{"gitId":"-"},"content":" -fx-background-color: #1d1d1d;","lastModifiedDate":"2016-08-15"},{"lineNumber":46,"author":{"gitId":"-"},"content":" -fx-table-cell-border-color: transparent;","lastModifiedDate":"2016-08-08"},{"lineNumber":47,"author":{"gitId":"-"},"content":" -fx-table-header-border-color: transparent;","lastModifiedDate":"2016-08-08"},{"lineNumber":48,"author":{"gitId":"-"},"content":" -fx-padding: 5;","lastModifiedDate":"2016-08-08"},{"lineNumber":49,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":51,"author":{"gitId":"-"},"content":".table-view .column-header-background {","lastModifiedDate":"2016-08-08"},{"lineNumber":52,"author":{"gitId":"-"},"content":" -fx-background-color: transparent;","lastModifiedDate":"2016-08-08"},{"lineNumber":53,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":55,"author":{"gitId":"-"},"content":".table-view .column-header, .table-view .filler {","lastModifiedDate":"2016-08-08"},{"lineNumber":56,"author":{"gitId":"-"},"content":" -fx-size: 35;","lastModifiedDate":"2016-08-08"},{"lineNumber":57,"author":{"gitId":"-"},"content":" -fx-border-width: 0 0 1 0;","lastModifiedDate":"2016-08-08"},{"lineNumber":58,"author":{"gitId":"-"},"content":" -fx-background-color: transparent;","lastModifiedDate":"2016-08-08"},{"lineNumber":59,"author":{"gitId":"-"},"content":" -fx-border-color:","lastModifiedDate":"2016-08-08"},{"lineNumber":60,"author":{"gitId":"-"},"content":" transparent","lastModifiedDate":"2016-08-08"},{"lineNumber":61,"author":{"gitId":"-"},"content":" transparent","lastModifiedDate":"2016-08-08"},{"lineNumber":62,"author":{"gitId":"-"},"content":" derive(-fx-base, 80%)","lastModifiedDate":"2016-08-08"},{"lineNumber":63,"author":{"gitId":"-"},"content":" transparent;","lastModifiedDate":"2016-08-08"},{"lineNumber":64,"author":{"gitId":"-"},"content":" -fx-border-insets: 0 10 1 0;","lastModifiedDate":"2016-08-08"},{"lineNumber":65,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":67,"author":{"gitId":"-"},"content":".table-view .column-header .label {","lastModifiedDate":"2016-08-08"},{"lineNumber":68,"author":{"gitId":"-"},"content":" -fx-font-size: 20pt;","lastModifiedDate":"2016-08-08"},{"lineNumber":69,"author":{"gitId":"-"},"content":" -fx-font-family: \"Segoe UI Light\";","lastModifiedDate":"2022-01-13"},{"lineNumber":70,"author":{"gitId":"-"},"content":" -fx-text-fill: white;","lastModifiedDate":"2016-08-08"},{"lineNumber":71,"author":{"gitId":"-"},"content":" -fx-alignment: center-left;","lastModifiedDate":"2016-08-08"},{"lineNumber":72,"author":{"gitId":"-"},"content":" -fx-opacity: 1;","lastModifiedDate":"2016-08-08"},{"lineNumber":73,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":75,"author":{"gitId":"-"},"content":".table-view:focused .table-row-cell:filled:focused:selected {","lastModifiedDate":"2016-08-08"},{"lineNumber":76,"author":{"gitId":"-"},"content":" -fx-background-color: -fx-focus-color;","lastModifiedDate":"2016-08-08"},{"lineNumber":77,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":78,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":79,"author":{"gitId":"-"},"content":".split-pane:horizontal .split-pane-divider {","lastModifiedDate":"2016-08-08"},{"lineNumber":80,"author":{"gitId":"-"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2017-03-02"},{"lineNumber":81,"author":{"gitId":"-"},"content":" -fx-border-color: transparent transparent transparent #4d4d4d;","lastModifiedDate":"2017-03-02"},{"lineNumber":82,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-15"},{"lineNumber":83,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-15"},{"lineNumber":84,"author":{"gitId":"-"},"content":".split-pane {","lastModifiedDate":"2016-08-15"},{"lineNumber":85,"author":{"gitId":"-"},"content":" -fx-border-radius: 1;","lastModifiedDate":"2016-08-15"},{"lineNumber":86,"author":{"gitId":"-"},"content":" -fx-border-width: 1;","lastModifiedDate":"2016-08-15"},{"lineNumber":87,"author":{"gitId":"-"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2016-08-15"},{"lineNumber":88,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":89,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":90,"author":{"gitId":"-"},"content":".list-view {","lastModifiedDate":"2017-03-02"},{"lineNumber":91,"author":{"gitId":"-"},"content":" -fx-background-insets: 0;","lastModifiedDate":"2017-03-02"},{"lineNumber":92,"author":{"gitId":"-"},"content":" -fx-padding: 0;","lastModifiedDate":"2017-03-02"},{"lineNumber":93,"author":{"gitId":"-"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2018-01-10"},{"lineNumber":94,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-03-02"},{"lineNumber":95,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-02"},{"lineNumber":96,"author":{"gitId":"-"},"content":".list-cell {","lastModifiedDate":"2016-08-08"},{"lineNumber":97,"author":{"gitId":"-"},"content":" -fx-label-padding: 0 0 0 0;","lastModifiedDate":"2016-08-08"},{"lineNumber":98,"author":{"gitId":"-"},"content":" -fx-graphic-text-gap : 0;","lastModifiedDate":"2016-08-08"},{"lineNumber":99,"author":{"gitId":"-"},"content":" -fx-padding: 0 0 0 0;","lastModifiedDate":"2016-08-08"},{"lineNumber":100,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":101,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":102,"author":{"gitId":"-"},"content":".list-cell:filled:even {","lastModifiedDate":"2017-03-02"},{"lineNumber":103,"author":{"gitId":"-"},"content":" -fx-background-color: #3c3e3f;","lastModifiedDate":"2017-03-02"},{"lineNumber":104,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-03-02"},{"lineNumber":105,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-02"},{"lineNumber":106,"author":{"gitId":"-"},"content":".list-cell:filled:odd {","lastModifiedDate":"2017-03-02"},{"lineNumber":107,"author":{"gitId":"-"},"content":" -fx-background-color: #515658;","lastModifiedDate":"2017-03-02"},{"lineNumber":108,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-03-02"},{"lineNumber":109,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-02"},{"lineNumber":110,"author":{"gitId":"-"},"content":".list-cell:filled:selected {","lastModifiedDate":"2017-03-02"},{"lineNumber":111,"author":{"gitId":"-"},"content":" -fx-background-color: #424d5f;","lastModifiedDate":"2017-03-02"},{"lineNumber":112,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-03-02"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-02"},{"lineNumber":114,"author":{"gitId":"-"},"content":".list-cell:filled:selected #cardPane {","lastModifiedDate":"2017-03-02"},{"lineNumber":115,"author":{"gitId":"-"},"content":" -fx-border-color: #3e7b91;","lastModifiedDate":"2017-03-02"},{"lineNumber":116,"author":{"gitId":"-"},"content":" -fx-border-width: 1;","lastModifiedDate":"2017-03-02"},{"lineNumber":117,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-03-02"},{"lineNumber":118,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-02"},{"lineNumber":119,"author":{"gitId":"-"},"content":".list-cell .label {","lastModifiedDate":"2016-08-08"},{"lineNumber":120,"author":{"gitId":"-"},"content":" -fx-text-fill: white;","lastModifiedDate":"2017-03-02"},{"lineNumber":121,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":122,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":123,"author":{"gitId":"-"},"content":".cell_big_label {","lastModifiedDate":"2016-08-08"},{"lineNumber":124,"author":{"gitId":"-"},"content":" -fx-font-family: \"Segoe UI Semibold\";","lastModifiedDate":"2022-01-13"},{"lineNumber":125,"author":{"gitId":"-"},"content":" -fx-font-size: 16px;","lastModifiedDate":"2016-08-08"},{"lineNumber":126,"author":{"gitId":"-"},"content":" -fx-text-fill: #010504;","lastModifiedDate":"2016-08-08"},{"lineNumber":127,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":128,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":129,"author":{"gitId":"-"},"content":".cell_small_label {","lastModifiedDate":"2016-08-08"},{"lineNumber":130,"author":{"gitId":"-"},"content":" -fx-font-family: \"Segoe UI\";","lastModifiedDate":"2022-01-13"},{"lineNumber":131,"author":{"gitId":"-"},"content":" -fx-font-size: 13px;","lastModifiedDate":"2017-03-02"},{"lineNumber":132,"author":{"gitId":"-"},"content":" -fx-text-fill: #010504;","lastModifiedDate":"2016-08-08"},{"lineNumber":133,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":134,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":135,"author":{"gitId":"Jawad280"},"content":".cell_custom {","lastModifiedDate":"2024-02-26"},{"lineNumber":136,"author":{"gitId":"Jawad280"},"content":" -fx-font-family: \"Segoe UI Semibold\";","lastModifiedDate":"2024-02-26"},{"lineNumber":137,"author":{"gitId":"Jawad280"},"content":" -fx-font-size: 24px;","lastModifiedDate":"2024-02-26"},{"lineNumber":138,"author":{"gitId":"Jawad280"},"content":" -fx-text-fill: #360078;","lastModifiedDate":"2024-02-26"},{"lineNumber":139,"author":{"gitId":"Jawad280"},"content":"}","lastModifiedDate":"2024-02-26"},{"lineNumber":140,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":141,"author":{"gitId":"-"},"content":".stack-pane {","lastModifiedDate":"2018-04-01"},{"lineNumber":142,"author":{"gitId":"-"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2016-08-15"},{"lineNumber":143,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":144,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":145,"author":{"gitId":"-"},"content":".pane-with-border {","lastModifiedDate":"2017-05-15"},{"lineNumber":146,"author":{"gitId":"-"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2017-05-09"},{"lineNumber":147,"author":{"gitId":"-"},"content":" -fx-border-color: derive(#1d1d1d, 10%);","lastModifiedDate":"2017-05-09"},{"lineNumber":148,"author":{"gitId":"-"},"content":" -fx-border-top-width: 1px;","lastModifiedDate":"2017-05-09"},{"lineNumber":149,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-05-09"},{"lineNumber":150,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-09"},{"lineNumber":151,"author":{"gitId":"-"},"content":".status-bar {","lastModifiedDate":"2016-08-08"},{"lineNumber":152,"author":{"gitId":"-"},"content":" -fx-background-color: derive(#1d1d1d, 30%);","lastModifiedDate":"2018-12-08"},{"lineNumber":153,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-09-14"},{"lineNumber":154,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-14"},{"lineNumber":155,"author":{"gitId":"-"},"content":".result-display {","lastModifiedDate":"2016-09-14"},{"lineNumber":156,"author":{"gitId":"-"},"content":" -fx-background-color: transparent;","lastModifiedDate":"2017-03-02"},{"lineNumber":157,"author":{"gitId":"-"},"content":" -fx-font-family: \"Segoe UI Light\";","lastModifiedDate":"2022-01-13"},{"lineNumber":158,"author":{"gitId":"-"},"content":" -fx-font-size: 13pt;","lastModifiedDate":"2017-03-02"},{"lineNumber":159,"author":{"gitId":"-"},"content":" -fx-text-fill: white;","lastModifiedDate":"2017-03-02"},{"lineNumber":160,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-09-14"},{"lineNumber":161,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-14"},{"lineNumber":162,"author":{"gitId":"-"},"content":".result-display .label {","lastModifiedDate":"2016-09-14"},{"lineNumber":163,"author":{"gitId":"-"},"content":" -fx-text-fill: black !important;","lastModifiedDate":"2016-09-14"},{"lineNumber":164,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":165,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":166,"author":{"gitId":"-"},"content":".status-bar .label {","lastModifiedDate":"2016-08-08"},{"lineNumber":167,"author":{"gitId":"-"},"content":" -fx-font-family: \"Segoe UI Light\";","lastModifiedDate":"2022-01-13"},{"lineNumber":168,"author":{"gitId":"-"},"content":" -fx-text-fill: white;","lastModifiedDate":"2016-08-08"},{"lineNumber":169,"author":{"gitId":"-"},"content":" -fx-padding: 4px;","lastModifiedDate":"2018-12-08"},{"lineNumber":170,"author":{"gitId":"-"},"content":" -fx-pref-height: 30px;","lastModifiedDate":"2018-12-08"},{"lineNumber":171,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":172,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":173,"author":{"gitId":"-"},"content":".status-bar-with-border {","lastModifiedDate":"2016-08-08"},{"lineNumber":174,"author":{"gitId":"-"},"content":" -fx-background-color: derive(#1d1d1d, 30%);","lastModifiedDate":"2016-08-15"},{"lineNumber":175,"author":{"gitId":"-"},"content":" -fx-border-color: derive(#1d1d1d, 25%);","lastModifiedDate":"2016-08-15"},{"lineNumber":176,"author":{"gitId":"-"},"content":" -fx-border-width: 1px;","lastModifiedDate":"2016-08-08"},{"lineNumber":177,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":178,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":179,"author":{"gitId":"-"},"content":".status-bar-with-border .label {","lastModifiedDate":"2016-08-08"},{"lineNumber":180,"author":{"gitId":"-"},"content":" -fx-text-fill: white;","lastModifiedDate":"2016-08-08"},{"lineNumber":181,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":182,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":183,"author":{"gitId":"-"},"content":".grid-pane {","lastModifiedDate":"2016-08-08"},{"lineNumber":184,"author":{"gitId":"-"},"content":" -fx-background-color: derive(#1d1d1d, 30%);","lastModifiedDate":"2016-08-15"},{"lineNumber":185,"author":{"gitId":"-"},"content":" -fx-border-color: derive(#1d1d1d, 30%);","lastModifiedDate":"2016-08-15"},{"lineNumber":186,"author":{"gitId":"-"},"content":" -fx-border-width: 1px;","lastModifiedDate":"2016-08-08"},{"lineNumber":187,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":188,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":189,"author":{"gitId":"-"},"content":".grid-pane .stack-pane {","lastModifiedDate":"2018-04-01"},{"lineNumber":190,"author":{"gitId":"-"},"content":" -fx-background-color: derive(#1d1d1d, 30%);","lastModifiedDate":"2016-08-15"},{"lineNumber":191,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":192,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":193,"author":{"gitId":"-"},"content":".context-menu {","lastModifiedDate":"2016-08-08"},{"lineNumber":194,"author":{"gitId":"-"},"content":" -fx-background-color: derive(#1d1d1d, 50%);","lastModifiedDate":"2016-08-15"},{"lineNumber":195,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":196,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":197,"author":{"gitId":"-"},"content":".context-menu .label {","lastModifiedDate":"2016-08-08"},{"lineNumber":198,"author":{"gitId":"-"},"content":" -fx-text-fill: white;","lastModifiedDate":"2016-08-08"},{"lineNumber":199,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":200,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":201,"author":{"gitId":"-"},"content":".menu-bar {","lastModifiedDate":"2016-08-08"},{"lineNumber":202,"author":{"gitId":"-"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2016-08-15"},{"lineNumber":203,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":204,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":205,"author":{"gitId":"-"},"content":".menu-bar .label {","lastModifiedDate":"2016-08-08"},{"lineNumber":206,"author":{"gitId":"-"},"content":" -fx-font-size: 14pt;","lastModifiedDate":"2016-08-08"},{"lineNumber":207,"author":{"gitId":"-"},"content":" -fx-font-family: \"Segoe UI Light\";","lastModifiedDate":"2022-01-13"},{"lineNumber":208,"author":{"gitId":"-"},"content":" -fx-text-fill: white;","lastModifiedDate":"2016-08-08"},{"lineNumber":209,"author":{"gitId":"-"},"content":" -fx-opacity: 0.9;","lastModifiedDate":"2016-08-08"},{"lineNumber":210,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":211,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":212,"author":{"gitId":"-"},"content":".menu .left-container {","lastModifiedDate":"2016-08-08"},{"lineNumber":213,"author":{"gitId":"-"},"content":" -fx-background-color: black;","lastModifiedDate":"2016-08-08"},{"lineNumber":214,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":215,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":216,"author":{"gitId":"-"},"content":"/*","lastModifiedDate":"2016-08-08"},{"lineNumber":217,"author":{"gitId":"-"},"content":" * Metro style Push Button","lastModifiedDate":"2016-08-08"},{"lineNumber":218,"author":{"gitId":"-"},"content":" * Author: Pedro Duque Vieira","lastModifiedDate":"2016-08-08"},{"lineNumber":219,"author":{"gitId":"-"},"content":" * http://pixelduke.wordpress.com/2012/10/23/jmetro-windows-8-controls-on-java/","lastModifiedDate":"2016-08-08"},{"lineNumber":220,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-08"},{"lineNumber":221,"author":{"gitId":"-"},"content":".button {","lastModifiedDate":"2016-08-08"},{"lineNumber":222,"author":{"gitId":"-"},"content":" -fx-padding: 5 22 5 22;","lastModifiedDate":"2016-08-08"},{"lineNumber":223,"author":{"gitId":"-"},"content":" -fx-border-color: #e2e2e2;","lastModifiedDate":"2016-08-08"},{"lineNumber":224,"author":{"gitId":"-"},"content":" -fx-border-width: 2;","lastModifiedDate":"2016-08-08"},{"lineNumber":225,"author":{"gitId":"-"},"content":" -fx-background-radius: 0;","lastModifiedDate":"2016-08-08"},{"lineNumber":226,"author":{"gitId":"-"},"content":" -fx-background-color: #1d1d1d;","lastModifiedDate":"2016-08-15"},{"lineNumber":227,"author":{"gitId":"-"},"content":" -fx-font-family: \"Segoe UI\", Helvetica, Arial, sans-serif;","lastModifiedDate":"2022-01-13"},{"lineNumber":228,"author":{"gitId":"-"},"content":" -fx-font-size: 11pt;","lastModifiedDate":"2016-08-08"},{"lineNumber":229,"author":{"gitId":"-"},"content":" -fx-text-fill: #d8d8d8;","lastModifiedDate":"2016-08-08"},{"lineNumber":230,"author":{"gitId":"-"},"content":" -fx-background-insets: 0 0 0 0, 0, 1, 2;","lastModifiedDate":"2016-08-08"},{"lineNumber":231,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":232,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":233,"author":{"gitId":"-"},"content":".button:hover {","lastModifiedDate":"2016-08-08"},{"lineNumber":234,"author":{"gitId":"-"},"content":" -fx-background-color: #3a3a3a;","lastModifiedDate":"2016-08-08"},{"lineNumber":235,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":236,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":237,"author":{"gitId":"-"},"content":".button:pressed, .button:default:hover:pressed {","lastModifiedDate":"2016-08-08"},{"lineNumber":238,"author":{"gitId":"-"},"content":" -fx-background-color: white;","lastModifiedDate":"2016-08-08"},{"lineNumber":239,"author":{"gitId":"-"},"content":" -fx-text-fill: #1d1d1d;","lastModifiedDate":"2016-08-15"},{"lineNumber":240,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":241,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":242,"author":{"gitId":"-"},"content":".button:focused {","lastModifiedDate":"2016-08-08"},{"lineNumber":243,"author":{"gitId":"-"},"content":" -fx-border-color: white, white;","lastModifiedDate":"2016-08-08"},{"lineNumber":244,"author":{"gitId":"-"},"content":" -fx-border-width: 1, 1;","lastModifiedDate":"2016-08-08"},{"lineNumber":245,"author":{"gitId":"-"},"content":" -fx-border-style: solid, segments(1, 1);","lastModifiedDate":"2016-08-08"},{"lineNumber":246,"author":{"gitId":"-"},"content":" -fx-border-radius: 0, 0;","lastModifiedDate":"2016-08-08"},{"lineNumber":247,"author":{"gitId":"-"},"content":" -fx-border-insets: 1 1 1 1, 0;","lastModifiedDate":"2016-08-08"},{"lineNumber":248,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":249,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":250,"author":{"gitId":"-"},"content":".button:disabled, .button:default:disabled {","lastModifiedDate":"2016-08-08"},{"lineNumber":251,"author":{"gitId":"-"},"content":" -fx-opacity: 0.4;","lastModifiedDate":"2016-08-08"},{"lineNumber":252,"author":{"gitId":"-"},"content":" -fx-background-color: #1d1d1d;","lastModifiedDate":"2016-08-15"},{"lineNumber":253,"author":{"gitId":"-"},"content":" -fx-text-fill: white;","lastModifiedDate":"2016-08-08"},{"lineNumber":254,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":255,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":256,"author":{"gitId":"-"},"content":".button:default {","lastModifiedDate":"2016-08-08"},{"lineNumber":257,"author":{"gitId":"-"},"content":" -fx-background-color: -fx-focus-color;","lastModifiedDate":"2016-08-08"},{"lineNumber":258,"author":{"gitId":"-"},"content":" -fx-text-fill: #ffffff;","lastModifiedDate":"2016-08-08"},{"lineNumber":259,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":260,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":261,"author":{"gitId":"-"},"content":".button:default:hover {","lastModifiedDate":"2016-08-08"},{"lineNumber":262,"author":{"gitId":"-"},"content":" -fx-background-color: derive(-fx-focus-color, 30%);","lastModifiedDate":"2016-08-08"},{"lineNumber":263,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":264,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":265,"author":{"gitId":"-"},"content":".dialog-pane {","lastModifiedDate":"2016-08-08"},{"lineNumber":266,"author":{"gitId":"-"},"content":" -fx-background-color: #1d1d1d;","lastModifiedDate":"2016-08-15"},{"lineNumber":267,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":268,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":269,"author":{"gitId":"-"},"content":".dialog-pane \u003e *.button-bar \u003e *.container {","lastModifiedDate":"2016-08-08"},{"lineNumber":270,"author":{"gitId":"-"},"content":" -fx-background-color: #1d1d1d;","lastModifiedDate":"2016-08-15"},{"lineNumber":271,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":272,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":273,"author":{"gitId":"-"},"content":".dialog-pane \u003e *.label.content {","lastModifiedDate":"2016-08-08"},{"lineNumber":274,"author":{"gitId":"-"},"content":" -fx-font-size: 14px;","lastModifiedDate":"2016-08-08"},{"lineNumber":275,"author":{"gitId":"-"},"content":" -fx-font-weight: bold;","lastModifiedDate":"2016-08-08"},{"lineNumber":276,"author":{"gitId":"-"},"content":" -fx-text-fill: white;","lastModifiedDate":"2016-08-08"},{"lineNumber":277,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":278,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":279,"author":{"gitId":"-"},"content":".dialog-pane:header *.header-panel {","lastModifiedDate":"2016-08-08"},{"lineNumber":280,"author":{"gitId":"-"},"content":" -fx-background-color: derive(#1d1d1d, 25%);","lastModifiedDate":"2016-08-15"},{"lineNumber":281,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":282,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":283,"author":{"gitId":"-"},"content":".dialog-pane:header *.header-panel *.label {","lastModifiedDate":"2016-08-08"},{"lineNumber":284,"author":{"gitId":"-"},"content":" -fx-font-size: 18px;","lastModifiedDate":"2016-08-08"},{"lineNumber":285,"author":{"gitId":"-"},"content":" -fx-font-style: italic;","lastModifiedDate":"2016-08-08"},{"lineNumber":286,"author":{"gitId":"-"},"content":" -fx-fill: white;","lastModifiedDate":"2016-08-08"},{"lineNumber":287,"author":{"gitId":"-"},"content":" -fx-text-fill: white;","lastModifiedDate":"2016-08-08"},{"lineNumber":288,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":289,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":290,"author":{"gitId":"-"},"content":".scroll-bar {","lastModifiedDate":"2017-03-02"},{"lineNumber":291,"author":{"gitId":"-"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2017-03-02"},{"lineNumber":292,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-03-02"},{"lineNumber":293,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-02"},{"lineNumber":294,"author":{"gitId":"-"},"content":".scroll-bar .thumb {","lastModifiedDate":"2016-08-15"},{"lineNumber":295,"author":{"gitId":"-"},"content":" -fx-background-color: derive(#1d1d1d, 50%);","lastModifiedDate":"2016-08-15"},{"lineNumber":296,"author":{"gitId":"-"},"content":" -fx-background-insets: 3;","lastModifiedDate":"2016-08-15"},{"lineNumber":297,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-15"},{"lineNumber":298,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-15"},{"lineNumber":299,"author":{"gitId":"-"},"content":".scroll-bar .increment-button, .scroll-bar .decrement-button {","lastModifiedDate":"2016-08-15"},{"lineNumber":300,"author":{"gitId":"-"},"content":" -fx-background-color: transparent;","lastModifiedDate":"2016-08-15"},{"lineNumber":301,"author":{"gitId":"-"},"content":" -fx-padding: 0 0 0 0;","lastModifiedDate":"2016-08-15"},{"lineNumber":302,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-15"},{"lineNumber":303,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-15"},{"lineNumber":304,"author":{"gitId":"-"},"content":".scroll-bar .increment-arrow, .scroll-bar .decrement-arrow {","lastModifiedDate":"2016-08-15"},{"lineNumber":305,"author":{"gitId":"-"},"content":" -fx-shape: \" \";","lastModifiedDate":"2016-08-15"},{"lineNumber":306,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-18"},{"lineNumber":307,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-18"},{"lineNumber":308,"author":{"gitId":"-"},"content":".scroll-bar:vertical .increment-arrow, .scroll-bar:vertical .decrement-arrow {","lastModifiedDate":"2016-08-18"},{"lineNumber":309,"author":{"gitId":"-"},"content":" -fx-padding: 1 8 1 8;","lastModifiedDate":"2016-08-15"},{"lineNumber":310,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-15"},{"lineNumber":311,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-15"},{"lineNumber":312,"author":{"gitId":"-"},"content":".scroll-bar:horizontal .increment-arrow, .scroll-bar:horizontal .decrement-arrow {","lastModifiedDate":"2016-08-18"},{"lineNumber":313,"author":{"gitId":"-"},"content":" -fx-padding: 8 1 8 1;","lastModifiedDate":"2016-08-18"},{"lineNumber":314,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-18"},{"lineNumber":315,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-18"},{"lineNumber":316,"author":{"gitId":"-"},"content":"#cardPane {","lastModifiedDate":"2016-08-08"},{"lineNumber":317,"author":{"gitId":"-"},"content":" -fx-background-color: transparent;","lastModifiedDate":"2016-08-08"},{"lineNumber":318,"author":{"gitId":"-"},"content":" -fx-border-width: 0;","lastModifiedDate":"2017-03-02"},{"lineNumber":319,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":320,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":321,"author":{"gitId":"-"},"content":"#commandTypeLabel {","lastModifiedDate":"2016-08-08"},{"lineNumber":322,"author":{"gitId":"-"},"content":" -fx-font-size: 11px;","lastModifiedDate":"2016-08-08"},{"lineNumber":323,"author":{"gitId":"-"},"content":" -fx-text-fill: #F70D1A;","lastModifiedDate":"2016-08-08"},{"lineNumber":324,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":325,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":326,"author":{"gitId":"-"},"content":"#commandTextField {","lastModifiedDate":"2017-03-02"},{"lineNumber":327,"author":{"gitId":"-"},"content":" -fx-background-color: transparent #383838 transparent #383838;","lastModifiedDate":"2017-03-02"},{"lineNumber":328,"author":{"gitId":"-"},"content":" -fx-background-insets: 0;","lastModifiedDate":"2017-03-02"},{"lineNumber":329,"author":{"gitId":"-"},"content":" -fx-border-color: #383838 #383838 #ffffff #383838;","lastModifiedDate":"2017-03-02"},{"lineNumber":330,"author":{"gitId":"-"},"content":" -fx-border-insets: 0;","lastModifiedDate":"2017-03-02"},{"lineNumber":331,"author":{"gitId":"-"},"content":" -fx-border-width: 1;","lastModifiedDate":"2017-03-02"},{"lineNumber":332,"author":{"gitId":"-"},"content":" -fx-font-family: \"Segoe UI Light\";","lastModifiedDate":"2022-01-13"},{"lineNumber":333,"author":{"gitId":"-"},"content":" -fx-font-size: 13pt;","lastModifiedDate":"2017-03-02"},{"lineNumber":334,"author":{"gitId":"-"},"content":" -fx-text-fill: white;","lastModifiedDate":"2017-03-02"},{"lineNumber":335,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-03-02"},{"lineNumber":336,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-02"},{"lineNumber":337,"author":{"gitId":"-"},"content":"#filterField, #personListPanel, #personWebpage {","lastModifiedDate":"2016-08-15"},{"lineNumber":338,"author":{"gitId":"-"},"content":" -fx-effect: innershadow(gaussian, black, 10, 0, 0, 0);","lastModifiedDate":"2016-08-15"},{"lineNumber":339,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-08"},{"lineNumber":340,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-18"},{"lineNumber":341,"author":{"gitId":"-"},"content":"#resultDisplay .content {","lastModifiedDate":"2017-03-02"},{"lineNumber":342,"author":{"gitId":"-"},"content":" -fx-background-color: transparent, #383838, transparent, #383838;","lastModifiedDate":"2017-03-02"},{"lineNumber":343,"author":{"gitId":"-"},"content":" -fx-background-radius: 0;","lastModifiedDate":"2017-03-02"},{"lineNumber":344,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-03-02"},{"lineNumber":345,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-02"},{"lineNumber":346,"author":{"gitId":"-"},"content":"#tags {","lastModifiedDate":"2016-12-18"},{"lineNumber":347,"author":{"gitId":"-"},"content":" -fx-hgap: 7;","lastModifiedDate":"2016-12-18"},{"lineNumber":348,"author":{"gitId":"-"},"content":" -fx-vgap: 3;","lastModifiedDate":"2016-12-18"},{"lineNumber":349,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-12-18"},{"lineNumber":350,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-18"},{"lineNumber":351,"author":{"gitId":"-"},"content":"#tags .label {","lastModifiedDate":"2016-12-18"},{"lineNumber":352,"author":{"gitId":"-"},"content":" -fx-text-fill: white;","lastModifiedDate":"2016-12-18"},{"lineNumber":353,"author":{"gitId":"-"},"content":" -fx-background-color: #3e7b91;","lastModifiedDate":"2017-03-02"},{"lineNumber":354,"author":{"gitId":"-"},"content":" -fx-padding: 1 3 1 3;","lastModifiedDate":"2016-12-18"},{"lineNumber":355,"author":{"gitId":"-"},"content":" -fx-border-radius: 2;","lastModifiedDate":"2016-12-18"},{"lineNumber":356,"author":{"gitId":"-"},"content":" -fx-background-radius: 2;","lastModifiedDate":"2016-12-18"},{"lineNumber":357,"author":{"gitId":"-"},"content":" -fx-font-size: 11;","lastModifiedDate":"2016-12-18"},{"lineNumber":358,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-12-18"}],"authorContributionMap":{"Jawad280":6,"-":352}},{"path":"src/main/resources/view/MainWindow.fxml","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003c?import java.net.URL?\u003e","lastModifiedDate":"2016-08-26"},{"lineNumber":4,"author":{"gitId":"-"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2017-03-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003c?import javafx.scene.Scene?\u003e","lastModifiedDate":"2017-11-29"},{"lineNumber":6,"author":{"gitId":"-"},"content":"\u003c?import javafx.scene.control.Menu?\u003e","lastModifiedDate":"2017-03-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"\u003c?import javafx.scene.control.MenuBar?\u003e","lastModifiedDate":"2017-03-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"\u003c?import javafx.scene.control.MenuItem?\u003e","lastModifiedDate":"2017-03-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c?import javafx.scene.control.SplitPane?\u003e","lastModifiedDate":"2017-03-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003c?import javafx.scene.image.Image?\u003e","lastModifiedDate":"2017-11-29"},{"lineNumber":11,"author":{"gitId":"-"},"content":"\u003c?import javafx.scene.layout.StackPane?\u003e","lastModifiedDate":"2017-05-09"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2017-03-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-25"},{"lineNumber":14,"author":{"gitId":"Jawad280"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"chenyixin0"},"content":"\u003c?import javafx.scene.control.ScrollPane?\u003e","lastModifiedDate":"2024-02-29"},{"lineNumber":16,"author":{"gitId":"-"},"content":"\u003cfx:root type\u003d\"javafx.stage.Stage\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"","lastModifiedDate":"2023-07-27"},{"lineNumber":17,"author":{"gitId":"-"},"content":" title\u003d\"Address App\" minWidth\u003d\"450\" minHeight\u003d\"600\" onCloseRequest\u003d\"#handleExit\"\u003e","lastModifiedDate":"2018-12-08"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003cicons\u003e","lastModifiedDate":"2017-11-29"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003cImage url\u003d\"@/images/address_book_32.png\" /\u003e","lastModifiedDate":"2017-11-29"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003c/icons\u003e","lastModifiedDate":"2017-11-29"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003cscene\u003e","lastModifiedDate":"2017-11-29"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003cScene\u003e","lastModifiedDate":"2017-11-29"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003cstylesheets\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003cURL value\u003d\"@DarkTheme.css\" /\u003e","lastModifiedDate":"2016-08-20"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003cURL value\u003d\"@Extensions.css\" /\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003c/stylesheets\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003cVBox\u003e","lastModifiedDate":"2017-11-29"},{"lineNumber":29,"author":{"gitId":"-"},"content":" \u003cMenuBar fx:id\u003d\"menuBar\" VBox.vgrow\u003d\"NEVER\"\u003e","lastModifiedDate":"2017-06-13"},{"lineNumber":30,"author":{"gitId":"-"},"content":" \u003cMenu mnemonicParsing\u003d\"false\" text\u003d\"File\"\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \u003cMenuItem mnemonicParsing\u003d\"false\" onAction\u003d\"#handleExit\" text\u003d\"Exit\" /\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u003c/Menu\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003cMenu mnemonicParsing\u003d\"false\" text\u003d\"Help\"\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":34,"author":{"gitId":"-"},"content":" \u003cMenuItem fx:id\u003d\"helpMenuItem\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleHelp\" text\u003d\"Help\" /\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":35,"author":{"gitId":"-"},"content":" \u003c/Menu\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":36,"author":{"gitId":"-"},"content":" \u003c/MenuBar\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" \u003cStackPane VBox.vgrow\u003d\"NEVER\" fx:id\u003d\"commandBoxPlaceholder\" styleClass\u003d\"pane-with-border\"\u003e","lastModifiedDate":"2017-05-15"},{"lineNumber":39,"author":{"gitId":"-"},"content":" \u003cpadding\u003e","lastModifiedDate":"2016-09-14"},{"lineNumber":40,"author":{"gitId":"-"},"content":" \u003cInsets top\u003d\"5\" right\u003d\"10\" bottom\u003d\"5\" left\u003d\"10\" /\u003e","lastModifiedDate":"2017-03-27"},{"lineNumber":41,"author":{"gitId":"-"},"content":" \u003c/padding\u003e","lastModifiedDate":"2016-09-14"},{"lineNumber":42,"author":{"gitId":"-"},"content":" \u003c/StackPane\u003e","lastModifiedDate":"2017-05-09"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" \u003cStackPane VBox.vgrow\u003d\"NEVER\" fx:id\u003d\"resultDisplayPlaceholder\" styleClass\u003d\"pane-with-border\"","lastModifiedDate":"2017-05-15"},{"lineNumber":45,"author":{"gitId":"-"},"content":" minHeight\u003d\"100\" prefHeight\u003d\"100\" maxHeight\u003d\"100\"\u003e","lastModifiedDate":"2017-03-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" \u003cpadding\u003e","lastModifiedDate":"2016-09-14"},{"lineNumber":47,"author":{"gitId":"-"},"content":" \u003cInsets top\u003d\"5\" right\u003d\"10\" bottom\u003d\"5\" left\u003d\"10\" /\u003e","lastModifiedDate":"2017-03-27"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003c/padding\u003e","lastModifiedDate":"2016-09-14"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003c/StackPane\u003e","lastModifiedDate":"2017-05-09"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-25"},{"lineNumber":51,"author":{"gitId":"Jawad280"},"content":" \u003cSplitPane VBox.vgrow\u003d\"ALWAYS\" HBox.hgrow\u003d\"ALWAYS\"\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":52,"author":{"gitId":"Jawad280"},"content":" \u003cVBox fx:id\u003d\"personList\" styleClass\u003d\"pane-with-border\" minWidth\u003d\"300\" prefWidth\u003d\"400\" VBox.vgrow\u003d\"ALWAYS\"\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003cpadding\u003e","lastModifiedDate":"2016-08-15"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003cInsets top\u003d\"10\" right\u003d\"10\" bottom\u003d\"10\" left\u003d\"10\" /\u003e","lastModifiedDate":"2017-03-27"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003c/padding\u003e","lastModifiedDate":"2016-08-15"},{"lineNumber":56,"author":{"gitId":"-"},"content":" \u003cStackPane fx:id\u003d\"personListPanelPlaceholder\" VBox.vgrow\u003d\"ALWAYS\"/\u003e","lastModifiedDate":"2017-06-21"},{"lineNumber":57,"author":{"gitId":"-"},"content":" \u003c/VBox\u003e","lastModifiedDate":"2016-08-15"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-25"},{"lineNumber":59,"author":{"gitId":"Jawad280"},"content":" \u003cVBox styleClass\u003d\"pane-with-border\" VBox.vgrow\u003d\"ALWAYS\" HBox.hgrow\u003d\"ALWAYS\" minWidth\u003d\"300\"\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":60,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":61,"author":{"gitId":"chenyixin0"},"content":" \u003cScrollPane fx:id\u003d\"viewPanelPlaceHolder\"\u003e","lastModifiedDate":"2024-02-29"},{"lineNumber":62,"author":{"gitId":"chenyixin0"},"content":" \u003ccontent\u003e","lastModifiedDate":"2024-02-29"},{"lineNumber":63,"author":{"gitId":"chenyixin0"},"content":" \u003cVBox\u003e","lastModifiedDate":"2024-02-29"},{"lineNumber":64,"author":{"gitId":"chenyixin0"},"content":" \u003c!-- Add padding to the VBox --\u003e","lastModifiedDate":"2024-02-29"},{"lineNumber":65,"author":{"gitId":"Jawad280"},"content":" \u003cpadding\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":66,"author":{"gitId":"Jawad280"},"content":" \u003cInsets top\u003d\"10\" right\u003d\"10\" bottom\u003d\"10\" left\u003d\"10\" /\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":67,"author":{"gitId":"Jawad280"},"content":" \u003c/padding\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":68,"author":{"gitId":"Jawad280"},"content":" \u003c/VBox\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":69,"author":{"gitId":"chenyixin0"},"content":" \u003c/content\u003e","lastModifiedDate":"2024-02-29"},{"lineNumber":70,"author":{"gitId":"chenyixin0"},"content":" \u003c/ScrollPane\u003e","lastModifiedDate":"2024-02-29"},{"lineNumber":71,"author":{"gitId":"chenyixin0"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":72,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":73,"author":{"gitId":"Jawad280"},"content":" \u003c/VBox\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":74,"author":{"gitId":"Jawad280"},"content":" \u003c/SplitPane\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":76,"author":{"gitId":"-"},"content":" \u003cStackPane fx:id\u003d\"statusbarPlaceholder\" VBox.vgrow\u003d\"NEVER\" /\u003e","lastModifiedDate":"2017-05-09"},{"lineNumber":77,"author":{"gitId":"-"},"content":" \u003c/VBox\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":78,"author":{"gitId":"-"},"content":" \u003c/Scene\u003e","lastModifiedDate":"2017-11-29"},{"lineNumber":79,"author":{"gitId":"-"},"content":" \u003c/scene\u003e","lastModifiedDate":"2017-11-29"},{"lineNumber":80,"author":{"gitId":"-"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2017-11-29"}],"authorContributionMap":{"chenyixin0":8,"Jawad280":12,"-":60}},{"path":"src/main/resources/view/PersonListCard.fxml","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-08"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2016-12-18"},{"lineNumber":4,"author":{"gitId":"-"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2016-12-18"},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003c?import javafx.scene.layout.ColumnConstraints?\u003e","lastModifiedDate":"2016-12-18"},{"lineNumber":6,"author":{"gitId":"-"},"content":"\u003c?import javafx.scene.layout.FlowPane?\u003e","lastModifiedDate":"2016-12-18"},{"lineNumber":7,"author":{"gitId":"-"},"content":"\u003c?import javafx.scene.layout.GridPane?\u003e","lastModifiedDate":"2016-12-18"},{"lineNumber":8,"author":{"gitId":"-"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2016-12-18"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c?import javafx.scene.layout.Region?\u003e","lastModifiedDate":"2017-03-20"},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2016-12-18"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-18"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003cHBox id\u003d\"cardPane\" fx:id\u003d\"cardPane\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2023-07-27"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003cGridPane HBox.hgrow\u003d\"ALWAYS\"\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003ccolumnConstraints\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003cColumnConstraints hgrow\u003d\"SOMETIMES\" minWidth\u003d\"10\" prefWidth\u003d\"150\" /\u003e","lastModifiedDate":"2017-03-28"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003c/columnConstraints\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003cVBox alignment\u003d\"CENTER_LEFT\" minHeight\u003d\"105\" GridPane.columnIndex\u003d\"0\"\u003e","lastModifiedDate":"2017-03-28"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003cpadding\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003cInsets top\u003d\"5\" right\u003d\"5\" bottom\u003d\"5\" left\u003d\"15\" /\u003e","lastModifiedDate":"2017-03-27"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \u003c/padding\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":21,"author":{"gitId":"-"},"content":" \u003cHBox spacing\u003d\"5\" alignment\u003d\"CENTER_LEFT\"\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":22,"author":{"gitId":"-"},"content":" \u003cLabel fx:id\u003d\"id\" styleClass\u003d\"cell_big_label\"\u003e","lastModifiedDate":"2017-03-20"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003cminWidth\u003e","lastModifiedDate":"2017-03-20"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003c!-- Ensures that the label text is never truncated --\u003e","lastModifiedDate":"2017-03-20"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003cRegion fx:constant\u003d\"USE_PREF_SIZE\" /\u003e","lastModifiedDate":"2017-03-20"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003c/minWidth\u003e","lastModifiedDate":"2017-03-20"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003c/Label\u003e","lastModifiedDate":"2017-03-20"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003cLabel fx:id\u003d\"name\" text\u003d\"\\$first\" styleClass\u003d\"cell_big_label\" /\u003e","lastModifiedDate":"2016-08-24"},{"lineNumber":29,"author":{"gitId":"-"},"content":" \u003c/HBox\u003e","lastModifiedDate":"2016-09-03"},{"lineNumber":30,"author":{"gitId":"ashleygoh1"},"content":" \u003cLabel fx:id\u003d\"tags\" /\u003e","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" \u003cLabel fx:id\u003d\"phone\" styleClass\u003d\"cell_small_label\" text\u003d\"\\$phone\" /\u003e","lastModifiedDate":"2016-08-24"},{"lineNumber":32,"author":{"gitId":"-"},"content":" \u003cLabel fx:id\u003d\"address\" styleClass\u003d\"cell_small_label\" text\u003d\"\\$address\" /\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":33,"author":{"gitId":"-"},"content":" \u003cLabel fx:id\u003d\"email\" styleClass\u003d\"cell_small_label\" text\u003d\"\\$email\" /\u003e","lastModifiedDate":"2016-08-24"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":" \u003cLabel fx:id\u003d\"jobDescription\" styleClass\u003d\"cell_small_label\" text\u003d\"\\$job description\" /\u003e","lastModifiedDate":"2024-02-25"},{"lineNumber":35,"author":{"gitId":"ashleygoh1"},"content":" \u003cLabel fx:id\u003d\"interviewDate\" styleClass\u003d\"cell_small_label\" text\u003d\"\\$interview date\" /\u003e","lastModifiedDate":"2024-02-25"},{"lineNumber":36,"author":{"gitId":"ashleygoh1"},"content":" \u003cLabel fx:id\u003d\"internDuration\" styleClass\u003d\"cell_small_label\" text\u003d\"\\$intern duration\" /\u003e","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"ashleygoh1"},"content":" \u003cLabel fx:id\u003d\"salary\" styleClass\u003d\"cell_small_label\" text\u003d\"\\$salary\" /\u003e","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" \u003c/VBox\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":39,"author":{"gitId":"-"},"content":" \u003c/GridPane\u003e","lastModifiedDate":"2016-08-08"},{"lineNumber":40,"author":{"gitId":"-"},"content":"\u003c/HBox\u003e","lastModifiedDate":"2016-08-08"}],"authorContributionMap":{"ashleygoh1":5,"-":35}},{"path":"src/main/resources/view/ViewPanel.fxml","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Jawad280"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":2,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":3,"author":{"gitId":"Jawad280"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":4,"author":{"gitId":"Jawad280"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":5,"author":{"gitId":"Jawad280"},"content":"\u003c?import javafx.scene.layout.FlowPane?\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":6,"author":{"gitId":"Jawad280"},"content":"\u003c?import javafx.scene.layout.GridPane?\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":7,"author":{"gitId":"Jawad280"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"Jawad280"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":9,"author":{"gitId":"Jawad280"},"content":"\u003cVBox id\u003d\"viewPanel\" fx:id\u003d\"ViewPanel\" xmlns\u003d\"http://javafx.com/javafx/21\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":10,"author":{"gitId":"Jawad280"},"content":" \u003cVBox alignment\u003d\"CENTER_LEFT\" style\u003d\"-fx-background-color: #FFFEEF;\" GridPane.columnIndex\u003d\"0\"\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"Jawad280"},"content":" \u003cpadding\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"Jawad280"},"content":" \u003cInsets bottom\u003d\"15.0\" left\u003d\"15.0\" right\u003d\"15.0\" top\u003d\"15.0\" /\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"Jawad280"},"content":" \u003c/padding\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":14,"author":{"gitId":"Jawad280"},"content":" \u003cFlowPane fx:id\u003d\"tag\" /\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"Jawad280"},"content":" \u003cLabel fx:id\u003d\"companyName\" text\u003d\"\\$first\" styleClass\u003d\"cell_custom\" /\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":16,"author":{"gitId":"Jawad280"},"content":" \u003cLabel fx:id\u003d\"phone\" styleClass\u003d\"cell_custom\" text\u003d\"\\$phone\" /\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":17,"author":{"gitId":"Jawad280"},"content":" \u003cLabel fx:id\u003d\"address\" styleClass\u003d\"cell_custom\" text\u003d\"\\$address\" /\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":18,"author":{"gitId":"Jawad280"},"content":" \u003cLabel fx:id\u003d\"email\" styleClass\u003d\"cell_custom\" text\u003d\"\\$email\" /\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":19,"author":{"gitId":"Jawad280"},"content":" \u003cLabel fx:id\u003d\"interviewDate\" styleClass\u003d\"cell_custom\" text\u003d\"\\$interviewDate\" /\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":20,"author":{"gitId":"Jawad280"},"content":" \u003cLabel fx:id\u003d\"internDuration\" styleClass\u003d\"cell_custom\" text\u003d\"\\$internDuration\" /\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":21,"author":{"gitId":"Jawad280"},"content":" \u003cLabel fx:id\u003d\"salary\" styleClass\u003d\"cell_custom\" text\u003d\"\\$salary\" /\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":22,"author":{"gitId":"Jawad280"},"content":" \u003c/VBox\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":23,"author":{"gitId":"Jawad280"},"content":"\u003c/VBox\u003e","lastModifiedDate":"2024-02-26"}],"authorContributionMap":{"Jawad280":23}},{"path":"src/test/java/seedu/address/logic/LogicManagerTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic;","lastModifiedDate":"2016-09-21"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-03-15"},{"lineNumber":4,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX;","lastModifiedDate":"2024-02-26"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_UNKNOWN_COMMAND;","lastModifiedDate":"2023-07-13"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.ADDRESS_DESC_AMY;","lastModifiedDate":"2018-12-09"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.EMAIL_DESC_AMY;","lastModifiedDate":"2018-12-09"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.NAME_DESC_AMY;","lastModifiedDate":"2018-12-09"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.PHONE_DESC_AMY;","lastModifiedDate":"2018-12-09"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.TAG_DESC_NO_REPLY;","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-14"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.AMY;","lastModifiedDate":"2018-12-09"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-19"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import java.io.IOException;","lastModifiedDate":"2018-12-09"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import java.nio.file.AccessDeniedException;","lastModifiedDate":"2023-06-13"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import java.nio.file.Path;","lastModifiedDate":"2018-12-09"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2019-04-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2019-04-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-19"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.AddCommand;","lastModifiedDate":"2018-12-09"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.CommandResult;","lastModifiedDate":"2017-01-18"},{"lineNumber":24,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.logic.commands.ListCommand;","lastModifiedDate":"2024-02-26"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.exceptions.CommandException;","lastModifiedDate":"2017-02-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2017-03-11"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import seedu.address.model.Model;","lastModifiedDate":"2016-09-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import seedu.address.model.ModelManager;","lastModifiedDate":"2016-09-21"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import seedu.address.model.ReadOnlyAddressBook;","lastModifiedDate":"2018-12-09"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import seedu.address.model.UserPrefs;","lastModifiedDate":"2017-05-31"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-12-09"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import seedu.address.storage.JsonAddressBookStorage;","lastModifiedDate":"2018-12-09"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import seedu.address.storage.JsonUserPrefsStorage;","lastModifiedDate":"2018-12-09"},{"lineNumber":34,"author":{"gitId":"-"},"content":"import seedu.address.storage.StorageManager;","lastModifiedDate":"2018-12-09"},{"lineNumber":35,"author":{"gitId":"-"},"content":"import seedu.address.testutil.PersonBuilder;","lastModifiedDate":"2018-12-09"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":37,"author":{"gitId":"-"},"content":"public class LogicManagerTest {","lastModifiedDate":"2016-09-22"},{"lineNumber":38,"author":{"gitId":"-"},"content":" private static final IOException DUMMY_IO_EXCEPTION \u003d new IOException(\"dummy IO exception\");","lastModifiedDate":"2023-06-13"},{"lineNumber":39,"author":{"gitId":"-"},"content":" private static final IOException DUMMY_AD_EXCEPTION \u003d new AccessDeniedException(\"dummy access denied exception\");","lastModifiedDate":"2023-06-13"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":41,"author":{"gitId":"-"},"content":" @TempDir","lastModifiedDate":"2019-04-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" public Path temporaryFolder;","lastModifiedDate":"2019-04-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":44,"author":{"gitId":"-"},"content":" private Model model \u003d new ModelManager();","lastModifiedDate":"2017-06-20"},{"lineNumber":45,"author":{"gitId":"-"},"content":" private Logic logic;","lastModifiedDate":"2018-12-09"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":47,"author":{"gitId":"-"},"content":" @BeforeEach","lastModifiedDate":"2019-04-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" public void setUp() {","lastModifiedDate":"2019-04-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" JsonAddressBookStorage addressBookStorage \u003d","lastModifiedDate":"2019-04-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":" new JsonAddressBookStorage(temporaryFolder.resolve(\"addressBook.json\"));","lastModifiedDate":"2019-04-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" JsonUserPrefsStorage userPrefsStorage \u003d new JsonUserPrefsStorage(temporaryFolder.resolve(\"userPrefs.json\"));","lastModifiedDate":"2019-04-25"},{"lineNumber":52,"author":{"gitId":"-"},"content":" StorageManager storage \u003d new StorageManager(addressBookStorage, userPrefsStorage);","lastModifiedDate":"2018-12-09"},{"lineNumber":53,"author":{"gitId":"-"},"content":" logic \u003d new LogicManager(model, storage);","lastModifiedDate":"2018-12-09"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":56,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-20"},{"lineNumber":57,"author":{"gitId":"-"},"content":" public void execute_invalidCommandFormat_throwsParseException() {","lastModifiedDate":"2017-08-15"},{"lineNumber":58,"author":{"gitId":"-"},"content":" String invalidCommand \u003d \"uicfhmowqewca\";","lastModifiedDate":"2017-06-20"},{"lineNumber":59,"author":{"gitId":"-"},"content":" assertParseException(invalidCommand, MESSAGE_UNKNOWN_COMMAND);","lastModifiedDate":"2017-06-20"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-20"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-20"},{"lineNumber":62,"author":{"gitId":"ashleygoh1"},"content":" // @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":63,"author":{"gitId":"ashleygoh1"},"content":" // public void execute_commandExecutionError_throwsCommandException() {","lastModifiedDate":"2024-02-26"},{"lineNumber":64,"author":{"gitId":"ashleygoh1"},"content":" // String deleteCommand \u003d \"delete 9\";","lastModifiedDate":"2024-02-26"},{"lineNumber":65,"author":{"gitId":"ashleygoh1"},"content":" // assertCommandException(deleteCommand, MESSAGE_INVALID_PERSON_DISPLAYED_INDEX);","lastModifiedDate":"2024-02-26"},{"lineNumber":66,"author":{"gitId":"ashleygoh1"},"content":" // }","lastModifiedDate":"2024-02-26"},{"lineNumber":67,"author":{"gitId":"ashleygoh1"},"content":" //","lastModifiedDate":"2024-02-26"},{"lineNumber":68,"author":{"gitId":"ashleygoh1"},"content":" // @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":69,"author":{"gitId":"ashleygoh1"},"content":" // public void execute_validCommand_success() throws Exception {","lastModifiedDate":"2024-02-26"},{"lineNumber":70,"author":{"gitId":"ashleygoh1"},"content":" // String listCommand \u003d ListCommand.COMMAND_WORD;","lastModifiedDate":"2024-02-26"},{"lineNumber":71,"author":{"gitId":"ashleygoh1"},"content":" // assertCommandSuccess(listCommand, ListCommand.MESSAGE_SUCCESS, model);","lastModifiedDate":"2024-02-26"},{"lineNumber":72,"author":{"gitId":"ashleygoh1"},"content":" // }","lastModifiedDate":"2024-02-26"},{"lineNumber":73,"author":{"gitId":"ashleygoh1"},"content":" //","lastModifiedDate":"2024-02-26"},{"lineNumber":74,"author":{"gitId":"ashleygoh1"},"content":" // @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":75,"author":{"gitId":"ashleygoh1"},"content":" // public void execute_storageThrowsIoException_throwsCommandException() {","lastModifiedDate":"2024-02-26"},{"lineNumber":76,"author":{"gitId":"ashleygoh1"},"content":" // assertCommandFailureForExceptionFromStorage(DUMMY_IO_EXCEPTION, String.format(","lastModifiedDate":"2024-02-26"},{"lineNumber":77,"author":{"gitId":"ashleygoh1"},"content":" // LogicManager.FILE_OPS_ERROR_FORMAT, DUMMY_IO_EXCEPTION.getMessage()));","lastModifiedDate":"2024-02-26"},{"lineNumber":78,"author":{"gitId":"ashleygoh1"},"content":" // }","lastModifiedDate":"2024-02-26"},{"lineNumber":79,"author":{"gitId":"ashleygoh1"},"content":" //","lastModifiedDate":"2024-02-26"},{"lineNumber":80,"author":{"gitId":"ashleygoh1"},"content":" // @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":81,"author":{"gitId":"ashleygoh1"},"content":" // public void execute_storageThrowsAdException_throwsCommandException() {","lastModifiedDate":"2024-02-26"},{"lineNumber":82,"author":{"gitId":"ashleygoh1"},"content":" // assertCommandFailureForExceptionFromStorage(DUMMY_AD_EXCEPTION, String.format(","lastModifiedDate":"2024-02-26"},{"lineNumber":83,"author":{"gitId":"ashleygoh1"},"content":" // LogicManager.FILE_OPS_PERMISSION_ERROR_FORMAT, DUMMY_AD_EXCEPTION.getMessage()));","lastModifiedDate":"2024-02-26"},{"lineNumber":84,"author":{"gitId":"ashleygoh1"},"content":" // }","lastModifiedDate":"2024-02-26"},{"lineNumber":85,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":86,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-09-01"},{"lineNumber":87,"author":{"gitId":"-"},"content":" public void getFilteredPersonList_modifyList_throwsUnsupportedOperationException() {","lastModifiedDate":"2017-09-01"},{"lineNumber":88,"author":{"gitId":"-"},"content":" assertThrows(UnsupportedOperationException.class, () -\u003e logic.getFilteredPersonList().remove(0));","lastModifiedDate":"2019-03-23"},{"lineNumber":89,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-09-01"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":91,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-09-21"},{"lineNumber":92,"author":{"gitId":"-"},"content":" * Executes the command and confirms that","lastModifiedDate":"2019-03-14"},{"lineNumber":93,"author":{"gitId":"-"},"content":" * - no exceptions are thrown \u003cbr\u003e","lastModifiedDate":"2019-03-14"},{"lineNumber":94,"author":{"gitId":"-"},"content":" * - the feedback message is equal to {@code expectedMessage} \u003cbr\u003e","lastModifiedDate":"2019-03-14"},{"lineNumber":95,"author":{"gitId":"-"},"content":" * - the internal model manager state is the same as that in {@code expectedModel} \u003cbr\u003e","lastModifiedDate":"2019-03-14"},{"lineNumber":96,"author":{"gitId":"-"},"content":" * @see #assertCommandFailure(String, Class, String, Model)","lastModifiedDate":"2019-03-14"},{"lineNumber":97,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-09-21"},{"lineNumber":98,"author":{"gitId":"-"},"content":" private void assertCommandSuccess(String inputCommand, String expectedMessage,","lastModifiedDate":"2019-03-14"},{"lineNumber":99,"author":{"gitId":"-"},"content":" Model expectedModel) throws CommandException, ParseException {","lastModifiedDate":"2019-03-14"},{"lineNumber":100,"author":{"gitId":"-"},"content":" CommandResult result \u003d logic.execute(inputCommand);","lastModifiedDate":"2019-03-14"},{"lineNumber":101,"author":{"gitId":"-"},"content":" assertEquals(expectedMessage, result.getFeedbackToUser());","lastModifiedDate":"2019-03-14"},{"lineNumber":102,"author":{"gitId":"-"},"content":" assertEquals(expectedModel, model);","lastModifiedDate":"2019-03-14"},{"lineNumber":103,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-21"},{"lineNumber":104,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":105,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-03-11"},{"lineNumber":106,"author":{"gitId":"-"},"content":" * Executes the command, confirms that a ParseException is thrown and that the result message is correct.","lastModifiedDate":"2017-03-11"},{"lineNumber":107,"author":{"gitId":"-"},"content":" * @see #assertCommandFailure(String, Class, String, Model)","lastModifiedDate":"2019-03-14"},{"lineNumber":108,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-03-11"},{"lineNumber":109,"author":{"gitId":"-"},"content":" private void assertParseException(String inputCommand, String expectedMessage) {","lastModifiedDate":"2017-03-11"},{"lineNumber":110,"author":{"gitId":"-"},"content":" assertCommandFailure(inputCommand, ParseException.class, expectedMessage);","lastModifiedDate":"2017-03-11"},{"lineNumber":111,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-03-11"},{"lineNumber":112,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-11"},{"lineNumber":113,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-06-14"},{"lineNumber":114,"author":{"gitId":"-"},"content":" * Executes the command, confirms that a CommandException is thrown and that the result message is correct.","lastModifiedDate":"2017-06-14"},{"lineNumber":115,"author":{"gitId":"-"},"content":" * @see #assertCommandFailure(String, Class, String, Model)","lastModifiedDate":"2019-03-14"},{"lineNumber":116,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-06-14"},{"lineNumber":117,"author":{"gitId":"-"},"content":" private void assertCommandException(String inputCommand, String expectedMessage) {","lastModifiedDate":"2017-06-14"},{"lineNumber":118,"author":{"gitId":"-"},"content":" assertCommandFailure(inputCommand, CommandException.class, expectedMessage);","lastModifiedDate":"2017-06-14"},{"lineNumber":119,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-14"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-14"},{"lineNumber":121,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-03-11"},{"lineNumber":122,"author":{"gitId":"-"},"content":" * Executes the command, confirms that the exception is thrown and that the result message is correct.","lastModifiedDate":"2017-03-11"},{"lineNumber":123,"author":{"gitId":"-"},"content":" * @see #assertCommandFailure(String, Class, String, Model)","lastModifiedDate":"2019-03-14"},{"lineNumber":124,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-03-11"},{"lineNumber":125,"author":{"gitId":"-"},"content":" private void assertCommandFailure(String inputCommand, Class\u003c? extends Throwable\u003e expectedException,","lastModifiedDate":"2019-03-14"},{"lineNumber":126,"author":{"gitId":"-"},"content":" String expectedMessage) {","lastModifiedDate":"2019-03-14"},{"lineNumber":127,"author":{"gitId":"-"},"content":" Model expectedModel \u003d new ModelManager(model.getAddressBook(), new UserPrefs());","lastModifiedDate":"2017-05-31"},{"lineNumber":128,"author":{"gitId":"-"},"content":" assertCommandFailure(inputCommand, expectedException, expectedMessage, expectedModel);","lastModifiedDate":"2019-03-14"},{"lineNumber":129,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-05"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":131,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-02-05"},{"lineNumber":132,"author":{"gitId":"-"},"content":" * Executes the command and confirms that","lastModifiedDate":"2019-03-14"},{"lineNumber":133,"author":{"gitId":"-"},"content":" * - the {@code expectedException} is thrown \u003cbr\u003e","lastModifiedDate":"2019-03-14"},{"lineNumber":134,"author":{"gitId":"-"},"content":" * - the resulting error message is equal to {@code expectedMessage} \u003cbr\u003e","lastModifiedDate":"2019-03-14"},{"lineNumber":135,"author":{"gitId":"-"},"content":" * - the internal model manager state is the same as that in {@code expectedModel} \u003cbr\u003e","lastModifiedDate":"2019-03-14"},{"lineNumber":136,"author":{"gitId":"-"},"content":" * @see #assertCommandSuccess(String, String, Model)","lastModifiedDate":"2019-03-14"},{"lineNumber":137,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-09-21"},{"lineNumber":138,"author":{"gitId":"-"},"content":" private void assertCommandFailure(String inputCommand, Class\u003c? extends Throwable\u003e expectedException,","lastModifiedDate":"2019-03-14"},{"lineNumber":139,"author":{"gitId":"-"},"content":" String expectedMessage, Model expectedModel) {","lastModifiedDate":"2017-05-31"},{"lineNumber":140,"author":{"gitId":"-"},"content":" assertThrows(expectedException, expectedMessage, () -\u003e logic.execute(inputCommand));","lastModifiedDate":"2019-03-14"},{"lineNumber":141,"author":{"gitId":"-"},"content":" assertEquals(expectedModel, model);","lastModifiedDate":"2017-05-31"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-21"},{"lineNumber":143,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-19"},{"lineNumber":144,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-12-09"},{"lineNumber":145,"author":{"gitId":"-"},"content":" * Tests the Logic component\u0027s handling of an {@code IOException} thrown by the Storage component.","lastModifiedDate":"2023-06-13"},{"lineNumber":146,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2023-06-13"},{"lineNumber":147,"author":{"gitId":"-"},"content":" * @param e the exception to be thrown by the Storage component","lastModifiedDate":"2023-06-13"},{"lineNumber":148,"author":{"gitId":"-"},"content":" * @param expectedMessage the message expected inside exception thrown by the Logic component","lastModifiedDate":"2023-06-13"},{"lineNumber":149,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-12-09"},{"lineNumber":150,"author":{"gitId":"-"},"content":" private void assertCommandFailureForExceptionFromStorage(IOException e, String expectedMessage) {","lastModifiedDate":"2023-06-13"},{"lineNumber":151,"author":{"gitId":"-"},"content":" Path prefPath \u003d temporaryFolder.resolve(\"ExceptionUserPrefs.json\");","lastModifiedDate":"2023-06-13"},{"lineNumber":152,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":153,"author":{"gitId":"-"},"content":" // Inject LogicManager with an AddressBookStorage that throws the IOException e when saving","lastModifiedDate":"2023-06-13"},{"lineNumber":154,"author":{"gitId":"-"},"content":" JsonAddressBookStorage addressBookStorage \u003d new JsonAddressBookStorage(prefPath) {","lastModifiedDate":"2023-06-13"},{"lineNumber":155,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-12-09"},{"lineNumber":156,"author":{"gitId":"-"},"content":" public void saveAddressBook(ReadOnlyAddressBook addressBook, Path filePath)","lastModifiedDate":"2023-06-13"},{"lineNumber":157,"author":{"gitId":"-"},"content":" throws IOException {","lastModifiedDate":"2023-06-13"},{"lineNumber":158,"author":{"gitId":"-"},"content":" throw e;","lastModifiedDate":"2023-06-13"},{"lineNumber":159,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":160,"author":{"gitId":"-"},"content":" };","lastModifiedDate":"2023-06-13"},{"lineNumber":161,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-06-13"},{"lineNumber":162,"author":{"gitId":"-"},"content":" JsonUserPrefsStorage userPrefsStorage \u003d","lastModifiedDate":"2023-06-13"},{"lineNumber":163,"author":{"gitId":"-"},"content":" new JsonUserPrefsStorage(temporaryFolder.resolve(\"ExceptionUserPrefs.json\"));","lastModifiedDate":"2023-06-13"},{"lineNumber":164,"author":{"gitId":"-"},"content":" StorageManager storage \u003d new StorageManager(addressBookStorage, userPrefsStorage);","lastModifiedDate":"2023-06-13"},{"lineNumber":165,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-06-13"},{"lineNumber":166,"author":{"gitId":"-"},"content":" logic \u003d new LogicManager(model, storage);","lastModifiedDate":"2023-06-13"},{"lineNumber":167,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-06-13"},{"lineNumber":168,"author":{"gitId":"-"},"content":" // Triggers the saveAddressBook method by executing an add command","lastModifiedDate":"2023-06-13"},{"lineNumber":169,"author":{"gitId":"-"},"content":" String addCommand \u003d AddCommand.COMMAND_WORD + NAME_DESC_AMY + PHONE_DESC_AMY","lastModifiedDate":"2023-06-13"},{"lineNumber":170,"author":{"gitId":"-"},"content":" + EMAIL_DESC_AMY + ADDRESS_DESC_AMY;","lastModifiedDate":"2023-06-13"},{"lineNumber":171,"author":{"gitId":"ashleygoh1"},"content":" Person expectedPerson \u003d new PersonBuilder(AMY).withTags(TAG_DESC_NO_REPLY).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":172,"author":{"gitId":"-"},"content":" ModelManager expectedModel \u003d new ModelManager();","lastModifiedDate":"2023-06-13"},{"lineNumber":173,"author":{"gitId":"-"},"content":" expectedModel.addPerson(expectedPerson);","lastModifiedDate":"2023-06-13"},{"lineNumber":174,"author":{"gitId":"-"},"content":" assertCommandFailure(addCommand, CommandException.class, expectedMessage, expectedModel);","lastModifiedDate":"2023-06-13"},{"lineNumber":175,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":176,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-09-21"}],"authorContributionMap":{"ashleygoh1":27,"-":149}},{"path":"src/test/java/seedu/address/logic/commands/AddCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.commands;","lastModifiedDate":"2017-05-12"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2018-01-10"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-03-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2019-03-15"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2019-03-15"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-23"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.ALICE;","lastModifiedDate":"2019-02-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import java.nio.file.Path;","lastModifiedDate":"2018-11-27"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import java.util.ArrayList;","lastModifiedDate":"2017-05-12"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import java.util.Arrays;","lastModifiedDate":"2017-05-12"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import java.util.function.Predicate;","lastModifiedDate":"2017-06-12"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2017-09-01"},{"lineNumber":18,"author":{"gitId":"Jawad280"},"content":"import javafx.collections.transformation.FilteredList;","lastModifiedDate":"2024-03-01"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.GuiSettings;","lastModifiedDate":"2018-11-27"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.logic.Messages;","lastModifiedDate":"2023-07-13"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.exceptions.CommandException;","lastModifiedDate":"2017-05-12"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import seedu.address.model.AddressBook;","lastModifiedDate":"2017-05-04"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import seedu.address.model.Model;","lastModifiedDate":"2017-05-12"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import seedu.address.model.ReadOnlyAddressBook;","lastModifiedDate":"2017-05-12"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import seedu.address.model.ReadOnlyUserPrefs;","lastModifiedDate":"2018-11-27"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2017-05-12"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import seedu.address.testutil.PersonBuilder;","lastModifiedDate":"2017-05-12"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":29,"author":{"gitId":"-"},"content":"public class AddCommandTest {","lastModifiedDate":"2017-05-12"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":31,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-12"},{"lineNumber":32,"author":{"gitId":"-"},"content":" public void constructor_nullPerson_throwsNullPointerException() {","lastModifiedDate":"2017-08-15"},{"lineNumber":33,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e new AddCommand(null));","lastModifiedDate":"2019-03-23"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-12"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":36,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-12"},{"lineNumber":37,"author":{"gitId":"-"},"content":" public void execute_personAcceptedByModel_addSuccessful() throws Exception {","lastModifiedDate":"2017-05-12"},{"lineNumber":38,"author":{"gitId":"-"},"content":" ModelStubAcceptingPersonAdded modelStub \u003d new ModelStubAcceptingPersonAdded();","lastModifiedDate":"2017-05-12"},{"lineNumber":39,"author":{"gitId":"-"},"content":" Person validPerson \u003d new PersonBuilder().build();","lastModifiedDate":"2017-05-12"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":41,"author":{"gitId":"-"},"content":" CommandResult commandResult \u003d new AddCommand(validPerson).execute(modelStub);","lastModifiedDate":"2019-01-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":43,"author":{"gitId":"-"},"content":" assertEquals(String.format(AddCommand.MESSAGE_SUCCESS, Messages.format(validPerson)),","lastModifiedDate":"2019-02-23"},{"lineNumber":44,"author":{"gitId":"-"},"content":" commandResult.getFeedbackToUser());","lastModifiedDate":"2019-02-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":" assertEquals(Arrays.asList(validPerson), modelStub.personsAdded);","lastModifiedDate":"2017-05-12"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-12"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":48,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-12"},{"lineNumber":49,"author":{"gitId":"-"},"content":" public void execute_duplicatePerson_throwsCommandException() {","lastModifiedDate":"2019-03-23"},{"lineNumber":50,"author":{"gitId":"-"},"content":" Person validPerson \u003d new PersonBuilder().build();","lastModifiedDate":"2017-05-12"},{"lineNumber":51,"author":{"gitId":"-"},"content":" AddCommand addCommand \u003d new AddCommand(validPerson);","lastModifiedDate":"2018-08-08"},{"lineNumber":52,"author":{"gitId":"-"},"content":" ModelStub modelStub \u003d new ModelStubWithPerson(validPerson);","lastModifiedDate":"2018-08-07"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":54,"author":{"gitId":"-"},"content":" assertThrows(CommandException.class, AddCommand.MESSAGE_DUPLICATE_PERSON, () -\u003e addCommand.execute(modelStub));","lastModifiedDate":"2019-05-03"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-12"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":57,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-22"},{"lineNumber":58,"author":{"gitId":"-"},"content":" public void equals() {","lastModifiedDate":"2017-08-15"},{"lineNumber":59,"author":{"gitId":"-"},"content":" Person alice \u003d new PersonBuilder().withName(\"Alice\").build();","lastModifiedDate":"2017-06-22"},{"lineNumber":60,"author":{"gitId":"-"},"content":" Person bob \u003d new PersonBuilder().withName(\"Bob\").build();","lastModifiedDate":"2017-06-22"},{"lineNumber":61,"author":{"gitId":"-"},"content":" AddCommand addAliceCommand \u003d new AddCommand(alice);","lastModifiedDate":"2017-06-22"},{"lineNumber":62,"author":{"gitId":"-"},"content":" AddCommand addBobCommand \u003d new AddCommand(bob);","lastModifiedDate":"2017-06-22"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-22"},{"lineNumber":64,"author":{"gitId":"-"},"content":" // same object -\u003e returns true","lastModifiedDate":"2017-06-22"},{"lineNumber":65,"author":{"gitId":"-"},"content":" assertTrue(addAliceCommand.equals(addAliceCommand));","lastModifiedDate":"2017-06-22"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-22"},{"lineNumber":67,"author":{"gitId":"-"},"content":" // same values -\u003e returns true","lastModifiedDate":"2017-06-22"},{"lineNumber":68,"author":{"gitId":"-"},"content":" AddCommand addAliceCommandCopy \u003d new AddCommand(alice);","lastModifiedDate":"2017-06-22"},{"lineNumber":69,"author":{"gitId":"-"},"content":" assertTrue(addAliceCommand.equals(addAliceCommandCopy));","lastModifiedDate":"2017-06-22"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-22"},{"lineNumber":71,"author":{"gitId":"-"},"content":" // different types -\u003e returns false","lastModifiedDate":"2017-06-22"},{"lineNumber":72,"author":{"gitId":"-"},"content":" assertFalse(addAliceCommand.equals(1));","lastModifiedDate":"2017-06-22"},{"lineNumber":73,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-22"},{"lineNumber":74,"author":{"gitId":"-"},"content":" // null -\u003e returns false","lastModifiedDate":"2017-06-22"},{"lineNumber":75,"author":{"gitId":"-"},"content":" assertFalse(addAliceCommand.equals(null));","lastModifiedDate":"2017-06-22"},{"lineNumber":76,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-22"},{"lineNumber":77,"author":{"gitId":"-"},"content":" // different person -\u003e returns false","lastModifiedDate":"2017-06-22"},{"lineNumber":78,"author":{"gitId":"-"},"content":" assertFalse(addAliceCommand.equals(addBobCommand));","lastModifiedDate":"2017-06-22"},{"lineNumber":79,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-22"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-22"},{"lineNumber":81,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2019-02-23"},{"lineNumber":82,"author":{"gitId":"-"},"content":" public void toStringMethod() {","lastModifiedDate":"2019-02-23"},{"lineNumber":83,"author":{"gitId":"-"},"content":" AddCommand addCommand \u003d new AddCommand(ALICE);","lastModifiedDate":"2019-02-23"},{"lineNumber":84,"author":{"gitId":"-"},"content":" String expected \u003d AddCommand.class.getCanonicalName() + \"{toAdd\u003d\" + ALICE + \"}\";","lastModifiedDate":"2019-02-23"},{"lineNumber":85,"author":{"gitId":"-"},"content":" assertEquals(expected, addCommand.toString());","lastModifiedDate":"2019-02-23"},{"lineNumber":86,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":87,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":88,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-12"},{"lineNumber":89,"author":{"gitId":"-"},"content":" * A default model stub that have all of the methods failing.","lastModifiedDate":"2017-05-12"},{"lineNumber":90,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-12"},{"lineNumber":91,"author":{"gitId":"-"},"content":" private class ModelStub implements Model {","lastModifiedDate":"2017-05-12"},{"lineNumber":92,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":93,"author":{"gitId":"-"},"content":" public void setUserPrefs(ReadOnlyUserPrefs userPrefs) {","lastModifiedDate":"2018-12-06"},{"lineNumber":94,"author":{"gitId":"-"},"content":" throw new AssertionError(\"This method should not be called.\");","lastModifiedDate":"2018-11-27"},{"lineNumber":95,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":97,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":98,"author":{"gitId":"-"},"content":" public ReadOnlyUserPrefs getUserPrefs() {","lastModifiedDate":"2018-11-27"},{"lineNumber":99,"author":{"gitId":"-"},"content":" throw new AssertionError(\"This method should not be called.\");","lastModifiedDate":"2018-11-27"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":101,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":102,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":103,"author":{"gitId":"-"},"content":" public GuiSettings getGuiSettings() {","lastModifiedDate":"2018-11-27"},{"lineNumber":104,"author":{"gitId":"-"},"content":" throw new AssertionError(\"This method should not be called.\");","lastModifiedDate":"2018-11-27"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":106,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":107,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":108,"author":{"gitId":"-"},"content":" public void setGuiSettings(GuiSettings guiSettings) {","lastModifiedDate":"2018-11-27"},{"lineNumber":109,"author":{"gitId":"-"},"content":" throw new AssertionError(\"This method should not be called.\");","lastModifiedDate":"2018-11-27"},{"lineNumber":110,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":111,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":112,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":113,"author":{"gitId":"-"},"content":" public Path getAddressBookFilePath() {","lastModifiedDate":"2018-11-27"},{"lineNumber":114,"author":{"gitId":"-"},"content":" throw new AssertionError(\"This method should not be called.\");","lastModifiedDate":"2018-11-27"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":116,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":117,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-11-27"},{"lineNumber":118,"author":{"gitId":"-"},"content":" public void setAddressBookFilePath(Path addressBookFilePath) {","lastModifiedDate":"2018-11-27"},{"lineNumber":119,"author":{"gitId":"-"},"content":" throw new AssertionError(\"This method should not be called.\");","lastModifiedDate":"2018-11-27"},{"lineNumber":120,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":121,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":122,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-05-12"},{"lineNumber":123,"author":{"gitId":"-"},"content":" public void addPerson(Person person) {","lastModifiedDate":"2018-08-07"},{"lineNumber":124,"author":{"gitId":"-"},"content":" throw new AssertionError(\"This method should not be called.\");","lastModifiedDate":"2018-08-06"},{"lineNumber":125,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-12"},{"lineNumber":126,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":127,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-05-12"},{"lineNumber":128,"author":{"gitId":"-"},"content":" public void setAddressBook(ReadOnlyAddressBook newData) {","lastModifiedDate":"2018-11-27"},{"lineNumber":129,"author":{"gitId":"-"},"content":" throw new AssertionError(\"This method should not be called.\");","lastModifiedDate":"2018-08-06"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-12"},{"lineNumber":131,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":132,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-05-12"},{"lineNumber":133,"author":{"gitId":"-"},"content":" public ReadOnlyAddressBook getAddressBook() {","lastModifiedDate":"2017-05-12"},{"lineNumber":134,"author":{"gitId":"-"},"content":" throw new AssertionError(\"This method should not be called.\");","lastModifiedDate":"2018-08-06"},{"lineNumber":135,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-12"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":137,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-08-06"},{"lineNumber":138,"author":{"gitId":"-"},"content":" public boolean hasPerson(Person person) {","lastModifiedDate":"2018-08-06"},{"lineNumber":139,"author":{"gitId":"-"},"content":" throw new AssertionError(\"This method should not be called.\");","lastModifiedDate":"2018-08-06"},{"lineNumber":140,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-06"},{"lineNumber":141,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-06"},{"lineNumber":142,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-05-12"},{"lineNumber":143,"author":{"gitId":"-"},"content":" public void deletePerson(Person target) {","lastModifiedDate":"2018-08-08"},{"lineNumber":144,"author":{"gitId":"-"},"content":" throw new AssertionError(\"This method should not be called.\");","lastModifiedDate":"2018-08-06"},{"lineNumber":145,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-12"},{"lineNumber":146,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":147,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-05-12"},{"lineNumber":148,"author":{"gitId":"-"},"content":" public void setPerson(Person target, Person editedPerson) {","lastModifiedDate":"2018-08-17"},{"lineNumber":149,"author":{"gitId":"-"},"content":" throw new AssertionError(\"This method should not be called.\");","lastModifiedDate":"2018-08-06"},{"lineNumber":150,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-12"},{"lineNumber":151,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":152,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-05-12"},{"lineNumber":153,"author":{"gitId":"-"},"content":" public ObservableList\u003cPerson\u003e getFilteredPersonList() {","lastModifiedDate":"2018-01-10"},{"lineNumber":154,"author":{"gitId":"-"},"content":" throw new AssertionError(\"This method should not be called.\");","lastModifiedDate":"2018-08-06"},{"lineNumber":155,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-12"},{"lineNumber":156,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":157,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-05-12"},{"lineNumber":158,"author":{"gitId":"-"},"content":" public void updateFilteredPersonList(Predicate\u003cPerson\u003e predicate) {","lastModifiedDate":"2018-01-10"},{"lineNumber":159,"author":{"gitId":"-"},"content":" throw new AssertionError(\"This method should not be called.\");","lastModifiedDate":"2018-08-06"},{"lineNumber":160,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-12"},{"lineNumber":161,"author":{"gitId":"Jawad280"},"content":" @Override","lastModifiedDate":"2024-02-29"},{"lineNumber":162,"author":{"gitId":"Jawad280"},"content":" public Person choosePersonToView(Predicate\u003cPerson\u003e predicate) {","lastModifiedDate":"2024-02-29"},{"lineNumber":163,"author":{"gitId":"Jawad280"},"content":" throw new AssertionError(\"This method should not be called.\");","lastModifiedDate":"2024-02-29"},{"lineNumber":164,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-02-29"},{"lineNumber":165,"author":{"gitId":"Jawad280"},"content":" @Override","lastModifiedDate":"2024-03-01"},{"lineNumber":166,"author":{"gitId":"Jawad280"},"content":" public FilteredList\u003cPerson\u003e generateNewFilteredPersonList(Predicate\u003cPerson\u003e predicate) {","lastModifiedDate":"2024-03-01"},{"lineNumber":167,"author":{"gitId":"Jawad280"},"content":" throw new AssertionError(\"This method should not be called.\");","lastModifiedDate":"2024-03-01"},{"lineNumber":168,"author":{"gitId":"Jawad280"},"content":" }","lastModifiedDate":"2024-03-01"},{"lineNumber":169,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-12"},{"lineNumber":170,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":171,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-12"},{"lineNumber":172,"author":{"gitId":"-"},"content":" * A Model stub that contains a single person.","lastModifiedDate":"2018-08-07"},{"lineNumber":173,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-12"},{"lineNumber":174,"author":{"gitId":"-"},"content":" private class ModelStubWithPerson extends ModelStub {","lastModifiedDate":"2018-08-07"},{"lineNumber":175,"author":{"gitId":"-"},"content":" private final Person person;","lastModifiedDate":"2018-08-07"},{"lineNumber":176,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-07"},{"lineNumber":177,"author":{"gitId":"-"},"content":" ModelStubWithPerson(Person person) {","lastModifiedDate":"2018-08-07"},{"lineNumber":178,"author":{"gitId":"-"},"content":" requireNonNull(person);","lastModifiedDate":"2018-08-07"},{"lineNumber":179,"author":{"gitId":"-"},"content":" this.person \u003d person;","lastModifiedDate":"2018-08-07"},{"lineNumber":180,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-12"},{"lineNumber":181,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":182,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-05-04"},{"lineNumber":183,"author":{"gitId":"-"},"content":" public boolean hasPerson(Person person) {","lastModifiedDate":"2018-08-07"},{"lineNumber":184,"author":{"gitId":"-"},"content":" requireNonNull(person);","lastModifiedDate":"2018-08-07"},{"lineNumber":185,"author":{"gitId":"-"},"content":" return this.person.isSamePerson(person);","lastModifiedDate":"2018-08-07"},{"lineNumber":186,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":187,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-12"},{"lineNumber":188,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":189,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-12"},{"lineNumber":190,"author":{"gitId":"-"},"content":" * A Model stub that always accept the person being added.","lastModifiedDate":"2017-05-12"},{"lineNumber":191,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-12"},{"lineNumber":192,"author":{"gitId":"-"},"content":" private class ModelStubAcceptingPersonAdded extends ModelStub {","lastModifiedDate":"2017-05-12"},{"lineNumber":193,"author":{"gitId":"-"},"content":" final ArrayList\u003cPerson\u003e personsAdded \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2017-05-12"},{"lineNumber":194,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":195,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-08-07"},{"lineNumber":196,"author":{"gitId":"-"},"content":" public boolean hasPerson(Person person) {","lastModifiedDate":"2018-08-07"},{"lineNumber":197,"author":{"gitId":"-"},"content":" requireNonNull(person);","lastModifiedDate":"2018-08-07"},{"lineNumber":198,"author":{"gitId":"-"},"content":" return personsAdded.stream().anyMatch(person::isSamePerson);","lastModifiedDate":"2018-08-07"},{"lineNumber":199,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-07"},{"lineNumber":200,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-07"},{"lineNumber":201,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-05-12"},{"lineNumber":202,"author":{"gitId":"-"},"content":" public void addPerson(Person person) {","lastModifiedDate":"2018-08-08"},{"lineNumber":203,"author":{"gitId":"-"},"content":" requireNonNull(person);","lastModifiedDate":"2018-01-10"},{"lineNumber":204,"author":{"gitId":"-"},"content":" personsAdded.add(person);","lastModifiedDate":"2018-01-10"},{"lineNumber":205,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-12"},{"lineNumber":206,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":207,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-05-04"},{"lineNumber":208,"author":{"gitId":"-"},"content":" public ReadOnlyAddressBook getAddressBook() {","lastModifiedDate":"2017-05-04"},{"lineNumber":209,"author":{"gitId":"-"},"content":" return new AddressBook();","lastModifiedDate":"2017-05-04"},{"lineNumber":210,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":211,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-12"},{"lineNumber":212,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-12"},{"lineNumber":213,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-05-12"}],"authorContributionMap":{"Jawad280":9,"-":204}},{"path":"src/test/java/seedu/address/logic/commands/CommandTestUtil.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.commands;","lastModifiedDate":"2017-06-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-03-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2019-03-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2017-07-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2017-07-05"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INTERN_DURATION;","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INTERVIEW_DATE;","lastModifiedDate":"2024-02-26"},{"lineNumber":9,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_JOB_DESCRIPTION;","lastModifiedDate":"2024-02-26"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2017-07-05"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2017-07-05"},{"lineNumber":12,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_SALARY;","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2017-07-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-23"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import java.util.ArrayList;","lastModifiedDate":"2017-06-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import java.util.Arrays;","lastModifiedDate":"2017-07-20"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2017-06-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2018-01-31"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.exceptions.CommandException;","lastModifiedDate":"2017-06-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import seedu.address.model.AddressBook;","lastModifiedDate":"2017-06-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import seedu.address.model.Model;","lastModifiedDate":"2017-06-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import seedu.address.model.person.NameContainsKeywordsPredicate;","lastModifiedDate":"2017-07-20"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-01-10"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":27,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-06-05"},{"lineNumber":28,"author":{"gitId":"-"},"content":" * Contains helper methods for testing commands.","lastModifiedDate":"2017-06-05"},{"lineNumber":29,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-06-05"},{"lineNumber":30,"author":{"gitId":"-"},"content":"public class CommandTestUtil {","lastModifiedDate":"2017-06-05"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":" public static final String VALID_NAME_AMY \u003d \"Amy Bee\";","lastModifiedDate":"2017-07-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":" public static final String VALID_NAME_BOB \u003d \"Bob Choo\";","lastModifiedDate":"2017-07-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":" public static final String VALID_PHONE_AMY \u003d \"11111111\";","lastModifiedDate":"2017-07-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":" public static final String VALID_PHONE_BOB \u003d \"22222222\";","lastModifiedDate":"2017-07-05"},{"lineNumber":36,"author":{"gitId":"-"},"content":" public static final String VALID_EMAIL_AMY \u003d \"amy@example.com\";","lastModifiedDate":"2017-07-05"},{"lineNumber":37,"author":{"gitId":"-"},"content":" public static final String VALID_EMAIL_BOB \u003d \"bob@example.com\";","lastModifiedDate":"2017-07-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":" public static final String VALID_ADDRESS_AMY \u003d \"Block 312, Amy Street 1\";","lastModifiedDate":"2017-07-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":" public static final String VALID_ADDRESS_BOB \u003d \"Block 123, Bobby Street 3\";","lastModifiedDate":"2017-07-05"},{"lineNumber":40,"author":{"gitId":"ashleygoh1"},"content":" public static final String VALID_TAG_NO_REPLY \u003d \"NR\";","lastModifiedDate":"2024-02-26"},{"lineNumber":41,"author":{"gitId":"ashleygoh1"},"content":" public static final String VALID_TAG_FIRST_INTERVIEW \u003d \"F\";","lastModifiedDate":"2024-02-26"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":" public static final String VALID_JOB_DESCRIPTION_AMY \u003d \"Data Science intern\";","lastModifiedDate":"2024-02-26"},{"lineNumber":43,"author":{"gitId":"ashleygoh1"},"content":" public static final String VALID_JOB_DESCRIPTION_BOB \u003d \"Front end developer intern\";","lastModifiedDate":"2024-02-26"},{"lineNumber":44,"author":{"gitId":"ashleygoh1"},"content":" public static final String VALID_INTERVIEW_DATE_AMY \u003d \"15-04-2024 0900\";","lastModifiedDate":"2024-02-26"},{"lineNumber":45,"author":{"gitId":"ashleygoh1"},"content":" public static final String VALID_INTERVIEW_DATE_BOB \u003d \"15-04-2024 1200\";","lastModifiedDate":"2024-02-26"},{"lineNumber":46,"author":{"gitId":"ashleygoh1"},"content":" public static final String VALID_INTERN_DURATION_AMY \u003d \"6 months\";","lastModifiedDate":"2024-02-26"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":" public static final String VALID_INTERN_DURATION_BOB \u003d \"3 months\";","lastModifiedDate":"2024-02-26"},{"lineNumber":48,"author":{"gitId":"ashleygoh1"},"content":" public static final String VALID_SALARY_AMY \u003d \"500\";","lastModifiedDate":"2024-02-26"},{"lineNumber":49,"author":{"gitId":"ashleygoh1"},"content":" public static final String VALID_SALARY_BOB \u003d \"1000\";","lastModifiedDate":"2024-02-26"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-05"},{"lineNumber":51,"author":{"gitId":"-"},"content":" public static final String NAME_DESC_AMY \u003d \" \" + PREFIX_NAME + VALID_NAME_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":52,"author":{"gitId":"-"},"content":" public static final String NAME_DESC_BOB \u003d \" \" + PREFIX_NAME + VALID_NAME_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":53,"author":{"gitId":"-"},"content":" public static final String PHONE_DESC_AMY \u003d \" \" + PREFIX_PHONE + VALID_PHONE_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":" public static final String PHONE_DESC_BOB \u003d \" \" + PREFIX_PHONE + VALID_PHONE_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":55,"author":{"gitId":"-"},"content":" public static final String EMAIL_DESC_AMY \u003d \" \" + PREFIX_EMAIL + VALID_EMAIL_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":56,"author":{"gitId":"-"},"content":" public static final String EMAIL_DESC_BOB \u003d \" \" + PREFIX_EMAIL + VALID_EMAIL_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":57,"author":{"gitId":"-"},"content":" public static final String ADDRESS_DESC_AMY \u003d \" \" + PREFIX_ADDRESS + VALID_ADDRESS_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":58,"author":{"gitId":"-"},"content":" public static final String ADDRESS_DESC_BOB \u003d \" \" + PREFIX_ADDRESS + VALID_ADDRESS_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":59,"author":{"gitId":"ashleygoh1"},"content":" public static final String TAG_DESC_NO_REPLY \u003d \" \" + PREFIX_TAG + VALID_TAG_NO_REPLY;","lastModifiedDate":"2024-02-26"},{"lineNumber":60,"author":{"gitId":"ashleygoh1"},"content":" public static final String TAG_DESC_FIRST_INTERVIEW \u003d \" \" + PREFIX_TAG + VALID_TAG_FIRST_INTERVIEW;","lastModifiedDate":"2024-02-26"},{"lineNumber":61,"author":{"gitId":"ashleygoh1"},"content":" public static final String JOB_DESCRIPTION_DESC_AMY \u003d \" \" + PREFIX_JOB_DESCRIPTION + VALID_JOB_DESCRIPTION_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":62,"author":{"gitId":"ashleygoh1"},"content":" public static final String JOB_DESCRIPTION_DESC_BOB \u003d \" \" + PREFIX_JOB_DESCRIPTION + VALID_JOB_DESCRIPTION_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":63,"author":{"gitId":"ashleygoh1"},"content":" public static final String INTERVIEW_DATE_DESC_AMY \u003d \" \" + PREFIX_INTERVIEW_DATE + VALID_INTERVIEW_DATE_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":64,"author":{"gitId":"ashleygoh1"},"content":" public static final String INTERVIEW_DATE_DESC_BOB \u003d \" \" + PREFIX_INTERVIEW_DATE + VALID_INTERVIEW_DATE_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":65,"author":{"gitId":"ashleygoh1"},"content":" public static final String INTERN_DURATION_DESC_AMY \u003d \" \" + PREFIX_INTERN_DURATION + VALID_INTERN_DURATION_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":66,"author":{"gitId":"ashleygoh1"},"content":" public static final String INTERN_DURATION_DESC_BOB \u003d \" \" + PREFIX_INTERN_DURATION + VALID_INTERN_DURATION_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":67,"author":{"gitId":"ashleygoh1"},"content":" public static final String SALARY_DESC_AMY \u003d \" \" + PREFIX_SALARY + VALID_SALARY_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":68,"author":{"gitId":"ashleygoh1"},"content":" public static final String SALARY_DESC_BOB \u003d \" \" + PREFIX_SALARY + VALID_SALARY_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-05"},{"lineNumber":70,"author":{"gitId":"-"},"content":" public static final String INVALID_NAME_DESC \u003d \" \" + PREFIX_NAME + \"James\u0026\"; // \u0027\u0026\u0027 not allowed in names","lastModifiedDate":"2017-07-05"},{"lineNumber":71,"author":{"gitId":"-"},"content":" public static final String INVALID_PHONE_DESC \u003d \" \" + PREFIX_PHONE + \"911a\"; // \u0027a\u0027 not allowed in phones","lastModifiedDate":"2017-07-05"},{"lineNumber":72,"author":{"gitId":"-"},"content":" public static final String INVALID_EMAIL_DESC \u003d \" \" + PREFIX_EMAIL + \"bob!yahoo\"; // missing \u0027@\u0027 symbol","lastModifiedDate":"2017-07-05"},{"lineNumber":73,"author":{"gitId":"-"},"content":" public static final String INVALID_ADDRESS_DESC \u003d \" \" + PREFIX_ADDRESS; // empty string not allowed for addresses","lastModifiedDate":"2017-07-05"},{"lineNumber":74,"author":{"gitId":"ashleygoh1"},"content":" public static final String INVALID_TAG_DESC \u003d \" \" + PREFIX_TAG + \"*\"; // \u0027*\u0027 not allowed in tags","lastModifiedDate":"2024-02-26"},{"lineNumber":75,"author":{"gitId":"ashleygoh1"},"content":" public static final String INVALID_JOB_DESCRIPTION_DESC \u003d \" \" + PREFIX_JOB_DESCRIPTION;","lastModifiedDate":"2024-02-26"},{"lineNumber":76,"author":{"gitId":"ashleygoh1"},"content":" // empty string not allowed for job description","lastModifiedDate":"2024-02-26"},{"lineNumber":77,"author":{"gitId":"ashleygoh1"},"content":" public static final String INVALID_INTERN_DURATION_DESC \u003d \" \" + PREFIX_INTERN_DURATION;","lastModifiedDate":"2024-02-26"},{"lineNumber":78,"author":{"gitId":"ashleygoh1"},"content":" // empty string not allowed for intern duration","lastModifiedDate":"2024-02-26"},{"lineNumber":79,"author":{"gitId":"ashleygoh1"},"content":" public static final String INVALID_SALARY_DESC \u003d \" \" + PREFIX_SALARY + \"0\";","lastModifiedDate":"2024-02-26"},{"lineNumber":80,"author":{"gitId":"ashleygoh1"},"content":" // salary need to be above 0 dollar","lastModifiedDate":"2024-02-26"},{"lineNumber":81,"author":{"gitId":"-"},"content":" public static final String PREAMBLE_WHITESPACE \u003d \"\\t \\r \\n\";","lastModifiedDate":"2017-12-23"},{"lineNumber":82,"author":{"gitId":"-"},"content":" public static final String PREAMBLE_NON_EMPTY \u003d \"NonEmptyPreamble\";","lastModifiedDate":"2017-12-23"},{"lineNumber":83,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-23"},{"lineNumber":84,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-06-05"},{"lineNumber":85,"author":{"gitId":"-"},"content":" * Executes the given {@code command}, confirms that \u003cbr\u003e","lastModifiedDate":"2017-06-05"},{"lineNumber":86,"author":{"gitId":"-"},"content":" * - the returned {@link CommandResult} matches {@code expectedCommandResult} \u003cbr\u003e","lastModifiedDate":"2018-12-09"},{"lineNumber":87,"author":{"gitId":"-"},"content":" * - the {@code actualModel} matches {@code expectedModel}","lastModifiedDate":"2019-01-25"},{"lineNumber":88,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-06-05"},{"lineNumber":89,"author":{"gitId":"-"},"content":" public static void assertCommandSuccess(Command command, Model actualModel, CommandResult expectedCommandResult,","lastModifiedDate":"2019-01-25"},{"lineNumber":90,"author":{"gitId":"-"},"content":" Model expectedModel) {","lastModifiedDate":"2019-01-25"},{"lineNumber":91,"author":{"gitId":"-"},"content":" try {","lastModifiedDate":"2017-08-15"},{"lineNumber":92,"author":{"gitId":"-"},"content":" CommandResult result \u003d command.execute(actualModel);","lastModifiedDate":"2019-01-25"},{"lineNumber":93,"author":{"gitId":"-"},"content":" assertEquals(expectedCommandResult, result);","lastModifiedDate":"2018-12-09"},{"lineNumber":94,"author":{"gitId":"-"},"content":" assertEquals(expectedModel, actualModel);","lastModifiedDate":"2017-06-05"},{"lineNumber":95,"author":{"gitId":"-"},"content":" } catch (CommandException ce) {","lastModifiedDate":"2017-08-15"},{"lineNumber":96,"author":{"gitId":"-"},"content":" throw new AssertionError(\"Execution of command should not fail.\", ce);","lastModifiedDate":"2017-08-15"},{"lineNumber":97,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-08-15"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-05"},{"lineNumber":99,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":100,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-12-09"},{"lineNumber":101,"author":{"gitId":"-"},"content":" * Convenience wrapper to {@link #assertCommandSuccess(Command, Model, CommandResult, Model)}","lastModifiedDate":"2019-01-25"},{"lineNumber":102,"author":{"gitId":"-"},"content":" * that takes a string {@code expectedMessage}.","lastModifiedDate":"2018-12-09"},{"lineNumber":103,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-12-09"},{"lineNumber":104,"author":{"gitId":"-"},"content":" public static void assertCommandSuccess(Command command, Model actualModel, String expectedMessage,","lastModifiedDate":"2019-01-25"},{"lineNumber":105,"author":{"gitId":"-"},"content":" Model expectedModel) {","lastModifiedDate":"2019-01-25"},{"lineNumber":106,"author":{"gitId":"-"},"content":" CommandResult expectedCommandResult \u003d new CommandResult(expectedMessage);","lastModifiedDate":"2018-12-09"},{"lineNumber":107,"author":{"gitId":"-"},"content":" assertCommandSuccess(command, actualModel, expectedCommandResult, expectedModel);","lastModifiedDate":"2019-01-25"},{"lineNumber":108,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":109,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":110,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-06-05"},{"lineNumber":111,"author":{"gitId":"-"},"content":" * Executes the given {@code command}, confirms that \u003cbr\u003e","lastModifiedDate":"2017-06-05"},{"lineNumber":112,"author":{"gitId":"-"},"content":" * - a {@code CommandException} is thrown \u003cbr\u003e","lastModifiedDate":"2017-06-05"},{"lineNumber":113,"author":{"gitId":"-"},"content":" * - the CommandException message matches {@code expectedMessage} \u003cbr\u003e","lastModifiedDate":"2017-06-05"},{"lineNumber":114,"author":{"gitId":"-"},"content":" * - the address book, filtered person list and selected person in {@code actualModel} remain unchanged","lastModifiedDate":"2019-01-25"},{"lineNumber":115,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-06-05"},{"lineNumber":116,"author":{"gitId":"-"},"content":" public static void assertCommandFailure(Command command, Model actualModel, String expectedMessage) {","lastModifiedDate":"2019-01-25"},{"lineNumber":117,"author":{"gitId":"-"},"content":" // we are unable to defensively copy the model for comparison later, so we can","lastModifiedDate":"2017-06-05"},{"lineNumber":118,"author":{"gitId":"-"},"content":" // only do so by copying its components.","lastModifiedDate":"2017-06-05"},{"lineNumber":119,"author":{"gitId":"-"},"content":" AddressBook expectedAddressBook \u003d new AddressBook(actualModel.getAddressBook());","lastModifiedDate":"2017-06-05"},{"lineNumber":120,"author":{"gitId":"-"},"content":" List\u003cPerson\u003e expectedFilteredList \u003d new ArrayList\u003c\u003e(actualModel.getFilteredPersonList());","lastModifiedDate":"2018-01-10"},{"lineNumber":121,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":122,"author":{"gitId":"-"},"content":" assertThrows(CommandException.class, expectedMessage, () -\u003e command.execute(actualModel));","lastModifiedDate":"2019-05-03"},{"lineNumber":123,"author":{"gitId":"-"},"content":" assertEquals(expectedAddressBook, actualModel.getAddressBook());","lastModifiedDate":"2017-06-05"},{"lineNumber":124,"author":{"gitId":"-"},"content":" assertEquals(expectedFilteredList, actualModel.getFilteredPersonList());","lastModifiedDate":"2017-06-05"},{"lineNumber":125,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-05"},{"lineNumber":126,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-20"},{"lineNumber":127,"author":{"gitId":"-"},"content":" * Updates {@code model}\u0027s filtered list to show only the person at the given {@code targetIndex} in the","lastModifiedDate":"2018-01-31"},{"lineNumber":128,"author":{"gitId":"-"},"content":" * {@code model}\u0027s address book.","lastModifiedDate":"2018-01-31"},{"lineNumber":129,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-20"},{"lineNumber":130,"author":{"gitId":"-"},"content":" public static void showPersonAtIndex(Model model, Index targetIndex) {","lastModifiedDate":"2018-01-31"},{"lineNumber":131,"author":{"gitId":"-"},"content":" assertTrue(targetIndex.getZeroBased() \u003c model.getFilteredPersonList().size());","lastModifiedDate":"2018-01-31"},{"lineNumber":132,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-01-31"},{"lineNumber":133,"author":{"gitId":"-"},"content":" Person person \u003d model.getFilteredPersonList().get(targetIndex.getZeroBased());","lastModifiedDate":"2018-01-31"},{"lineNumber":134,"author":{"gitId":"ashleygoh1"},"content":" final String[] splitName \u003d person.getCompanyName().fullName.split(\"\\\\s+\");","lastModifiedDate":"2024-02-25"},{"lineNumber":135,"author":{"gitId":"-"},"content":" model.updateFilteredPersonList(new NameContainsKeywordsPredicate(Arrays.asList(splitName[0])));","lastModifiedDate":"2017-07-20"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-20"},{"lineNumber":137,"author":{"gitId":"-"},"content":" assertEquals(1, model.getFilteredPersonList().size());","lastModifiedDate":"2018-02-08"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-07-20"},{"lineNumber":139,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":140,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-06-05"}],"authorContributionMap":{"ashleygoh1":32,"-":108}},{"path":"src/test/java/seedu/address/logic/commands/EditCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ashleygoh1"},"content":"//package seedu.address.logic.commands;","lastModifiedDate":"2024-02-26"},{"lineNumber":2,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":3,"author":{"gitId":"ashleygoh1"},"content":"//import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2024-02-26"},{"lineNumber":4,"author":{"gitId":"ashleygoh1"},"content":"//import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2024-02-26"},{"lineNumber":5,"author":{"gitId":"ashleygoh1"},"content":"//import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2024-02-26"},{"lineNumber":6,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.DESC_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.DESC_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":9,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND;","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.assertCommandFailure;","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.assertCommandSuccess;","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.showPersonAtIndex;","lastModifiedDate":"2024-02-26"},{"lineNumber":14,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON;","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.testutil.TypicalIndexes.INDEX_SECOND_PERSON;","lastModifiedDate":"2024-02-26"},{"lineNumber":16,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook;","lastModifiedDate":"2024-02-26"},{"lineNumber":17,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":18,"author":{"gitId":"ashleygoh1"},"content":"//import org.junit.jupiter.api.Test;","lastModifiedDate":"2024-02-26"},{"lineNumber":19,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":20,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.commons.core.index.Index;","lastModifiedDate":"2024-02-26"},{"lineNumber":21,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.logic.Messages;","lastModifiedDate":"2024-02-26"},{"lineNumber":22,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.logic.commands.EditCommand.EditPersonDescriptor;","lastModifiedDate":"2024-02-26"},{"lineNumber":23,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.AddressBook;","lastModifiedDate":"2024-02-26"},{"lineNumber":24,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.Model;","lastModifiedDate":"2024-02-26"},{"lineNumber":25,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.ModelManager;","lastModifiedDate":"2024-02-26"},{"lineNumber":26,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.UserPrefs;","lastModifiedDate":"2024-02-26"},{"lineNumber":27,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.person.Person;","lastModifiedDate":"2024-02-26"},{"lineNumber":28,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.testutil.EditPersonDescriptorBuilder;","lastModifiedDate":"2024-02-26"},{"lineNumber":29,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.testutil.PersonBuilder;","lastModifiedDate":"2024-02-26"},{"lineNumber":30,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":31,"author":{"gitId":"ashleygoh1"},"content":"///**","lastModifiedDate":"2024-02-26"},{"lineNumber":32,"author":{"gitId":"ashleygoh1"},"content":"// * Contains integration tests (interaction with the Model) and unit tests for EditCommand.","lastModifiedDate":"2024-02-26"},{"lineNumber":33,"author":{"gitId":"ashleygoh1"},"content":"// */","lastModifiedDate":"2024-02-26"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":"//public class EditCommandTest {","lastModifiedDate":"2024-02-26"},{"lineNumber":35,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":36,"author":{"gitId":"ashleygoh1"},"content":"// private Model model \u003d new ModelManager(getTypicalAddressBook(), new UserPrefs());","lastModifiedDate":"2024-02-26"},{"lineNumber":37,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":38,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":39,"author":{"gitId":"ashleygoh1"},"content":"// public void execute_allFieldsSpecifiedUnfilteredList_success() {","lastModifiedDate":"2024-02-26"},{"lineNumber":40,"author":{"gitId":"ashleygoh1"},"content":"// Person editedPerson \u003d new PersonBuilder().build();","lastModifiedDate":"2024-02-26"},{"lineNumber":41,"author":{"gitId":"ashleygoh1"},"content":"// EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder(editedPerson).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":"// EditCommand editCommand \u003d new EditCommand(INDEX_FIRST_PERSON, descriptor);","lastModifiedDate":"2024-02-26"},{"lineNumber":43,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":44,"author":{"gitId":"ashleygoh1"},"content":"// String expectedMessage \u003d String.format(EditCommand.MESSAGE_EDIT_PERSON_SUCCESS,","lastModifiedDate":"2024-02-26"},{"lineNumber":45,"author":{"gitId":"ashleygoh1"},"content":"// Messages.format(editedPerson));","lastModifiedDate":"2024-02-26"},{"lineNumber":46,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":"// Model expectedModel \u003d new ModelManager(new AddressBook(model.getAddressBook()), new UserPrefs());","lastModifiedDate":"2024-02-26"},{"lineNumber":48,"author":{"gitId":"ashleygoh1"},"content":"// expectedModel.setPerson(model.getFilteredPersonList().get(0), editedPerson);","lastModifiedDate":"2024-02-26"},{"lineNumber":49,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":50,"author":{"gitId":"ashleygoh1"},"content":"// assertCommandSuccess(editCommand, model, expectedMessage, expectedModel);","lastModifiedDate":"2024-02-26"},{"lineNumber":51,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":52,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":53,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":54,"author":{"gitId":"ashleygoh1"},"content":"// public void execute_someFieldsSpecifiedUnfilteredList_success() {","lastModifiedDate":"2024-02-26"},{"lineNumber":55,"author":{"gitId":"ashleygoh1"},"content":"// Index indexLastPerson \u003d Index.fromOneBased(model.getFilteredPersonList().size());","lastModifiedDate":"2024-02-26"},{"lineNumber":56,"author":{"gitId":"ashleygoh1"},"content":"// Person lastPerson \u003d model.getFilteredPersonList().get(indexLastPerson.getZeroBased());","lastModifiedDate":"2024-02-26"},{"lineNumber":57,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":58,"author":{"gitId":"ashleygoh1"},"content":"// PersonBuilder personInList \u003d new PersonBuilder(lastPerson);","lastModifiedDate":"2024-02-26"},{"lineNumber":59,"author":{"gitId":"ashleygoh1"},"content":"// Person editedPerson \u003d personInList.withName(VALID_NAME_BOB).withPhone(VALID_PHONE_BOB)","lastModifiedDate":"2024-02-26"},{"lineNumber":60,"author":{"gitId":"ashleygoh1"},"content":"// .withTags(VALID_TAG_HUSBAND).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":61,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":62,"author":{"gitId":"ashleygoh1"},"content":"// EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder().withName(VALID_NAME_BOB)","lastModifiedDate":"2024-02-26"},{"lineNumber":63,"author":{"gitId":"ashleygoh1"},"content":"// .withPhone(VALID_PHONE_BOB).withTags(VALID_TAG_HUSBAND).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":64,"author":{"gitId":"ashleygoh1"},"content":"// EditCommand editCommand \u003d new EditCommand(indexLastPerson, descriptor);","lastModifiedDate":"2024-02-26"},{"lineNumber":65,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":66,"author":{"gitId":"ashleygoh1"},"content":"// String expectedMessage \u003d String.format(EditCommand.MESSAGE_EDIT_PERSON_SUCCESS,","lastModifiedDate":"2024-02-26"},{"lineNumber":67,"author":{"gitId":"ashleygoh1"},"content":"// Messages.format(editedPerson));","lastModifiedDate":"2024-02-26"},{"lineNumber":68,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":69,"author":{"gitId":"ashleygoh1"},"content":"// Model expectedModel \u003d new ModelManager(new AddressBook(model.getAddressBook()), new UserPrefs());","lastModifiedDate":"2024-02-26"},{"lineNumber":70,"author":{"gitId":"ashleygoh1"},"content":"// expectedModel.setPerson(lastPerson, editedPerson);","lastModifiedDate":"2024-02-26"},{"lineNumber":71,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":72,"author":{"gitId":"ashleygoh1"},"content":"// assertCommandSuccess(editCommand, model, expectedMessage, expectedModel);","lastModifiedDate":"2024-02-26"},{"lineNumber":73,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":74,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":75,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":76,"author":{"gitId":"ashleygoh1"},"content":"// public void execute_noFieldSpecifiedUnfilteredList_success() {","lastModifiedDate":"2024-02-26"},{"lineNumber":77,"author":{"gitId":"ashleygoh1"},"content":"// EditCommand editCommand \u003d new EditCommand(INDEX_FIRST_PERSON, new EditPersonDescriptor());","lastModifiedDate":"2024-02-26"},{"lineNumber":78,"author":{"gitId":"ashleygoh1"},"content":"// Person editedPerson \u003d model.getFilteredPersonList().get(INDEX_FIRST_PERSON.getZeroBased());","lastModifiedDate":"2024-02-26"},{"lineNumber":79,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":80,"author":{"gitId":"ashleygoh1"},"content":"// String expectedMessage \u003d String.format(EditCommand.MESSAGE_EDIT_PERSON_SUCCESS,","lastModifiedDate":"2024-02-26"},{"lineNumber":81,"author":{"gitId":"ashleygoh1"},"content":"// Messages.format(editedPerson));","lastModifiedDate":"2024-02-26"},{"lineNumber":82,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":83,"author":{"gitId":"ashleygoh1"},"content":"// Model expectedModel \u003d new ModelManager(new AddressBook(model.getAddressBook()), new UserPrefs());","lastModifiedDate":"2024-02-26"},{"lineNumber":84,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":85,"author":{"gitId":"ashleygoh1"},"content":"// assertCommandSuccess(editCommand, model, expectedMessage, expectedModel);","lastModifiedDate":"2024-02-26"},{"lineNumber":86,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":87,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":88,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":89,"author":{"gitId":"ashleygoh1"},"content":"// public void execute_filteredList_success() {","lastModifiedDate":"2024-02-26"},{"lineNumber":90,"author":{"gitId":"ashleygoh1"},"content":"// showPersonAtIndex(model, INDEX_FIRST_PERSON);","lastModifiedDate":"2024-02-26"},{"lineNumber":91,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":92,"author":{"gitId":"ashleygoh1"},"content":"// Person personInFilteredList \u003d model.getFilteredPersonList().get(INDEX_FIRST_PERSON.getZeroBased());","lastModifiedDate":"2024-02-26"},{"lineNumber":93,"author":{"gitId":"ashleygoh1"},"content":"// Person editedPerson \u003d new PersonBuilder(personInFilteredList).withName(VALID_NAME_BOB).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":94,"author":{"gitId":"ashleygoh1"},"content":"// EditCommand editCommand \u003d new EditCommand(INDEX_FIRST_PERSON,","lastModifiedDate":"2024-02-26"},{"lineNumber":95,"author":{"gitId":"ashleygoh1"},"content":"// new EditPersonDescriptorBuilder().withName(VALID_NAME_BOB).build());","lastModifiedDate":"2024-02-26"},{"lineNumber":96,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":97,"author":{"gitId":"ashleygoh1"},"content":"// String expectedMessage \u003d String.format(EditCommand.MESSAGE_EDIT_PERSON_SUCCESS,","lastModifiedDate":"2024-02-26"},{"lineNumber":98,"author":{"gitId":"ashleygoh1"},"content":"// Messages.format(editedPerson));","lastModifiedDate":"2024-02-26"},{"lineNumber":99,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":100,"author":{"gitId":"ashleygoh1"},"content":"// Model expectedModel \u003d new ModelManager(new AddressBook(model.getAddressBook()), new UserPrefs());","lastModifiedDate":"2024-02-26"},{"lineNumber":101,"author":{"gitId":"ashleygoh1"},"content":"// expectedModel.setPerson(model.getFilteredPersonList().get(0), editedPerson);","lastModifiedDate":"2024-02-26"},{"lineNumber":102,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":103,"author":{"gitId":"ashleygoh1"},"content":"// assertCommandSuccess(editCommand, model, expectedMessage, expectedModel);","lastModifiedDate":"2024-02-26"},{"lineNumber":104,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":105,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":106,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":107,"author":{"gitId":"ashleygoh1"},"content":"// public void execute_duplicatePersonUnfilteredList_failure() {","lastModifiedDate":"2024-02-26"},{"lineNumber":108,"author":{"gitId":"ashleygoh1"},"content":"// Person firstPerson \u003d model.getFilteredPersonList().get(INDEX_FIRST_PERSON.getZeroBased());","lastModifiedDate":"2024-02-26"},{"lineNumber":109,"author":{"gitId":"ashleygoh1"},"content":"// EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder(firstPerson).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":110,"author":{"gitId":"ashleygoh1"},"content":"// EditCommand editCommand \u003d new EditCommand(INDEX_SECOND_PERSON, descriptor);","lastModifiedDate":"2024-02-26"},{"lineNumber":111,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":112,"author":{"gitId":"ashleygoh1"},"content":"// assertCommandFailure(editCommand, model, EditCommand.MESSAGE_DUPLICATE_PERSON);","lastModifiedDate":"2024-02-26"},{"lineNumber":113,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":114,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":115,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":116,"author":{"gitId":"ashleygoh1"},"content":"// public void execute_duplicatePersonFilteredList_failure() {","lastModifiedDate":"2024-02-26"},{"lineNumber":117,"author":{"gitId":"ashleygoh1"},"content":"// showPersonAtIndex(model, INDEX_FIRST_PERSON);","lastModifiedDate":"2024-02-26"},{"lineNumber":118,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":119,"author":{"gitId":"ashleygoh1"},"content":"// // edit person in filtered list into a duplicate in address book","lastModifiedDate":"2024-02-26"},{"lineNumber":120,"author":{"gitId":"ashleygoh1"},"content":"// Person personInList \u003d model.getAddressBook().getPersonList().get(INDEX_SECOND_PERSON.getZeroBased());","lastModifiedDate":"2024-02-26"},{"lineNumber":121,"author":{"gitId":"ashleygoh1"},"content":"// EditCommand editCommand \u003d new EditCommand(INDEX_FIRST_PERSON,","lastModifiedDate":"2024-02-26"},{"lineNumber":122,"author":{"gitId":"ashleygoh1"},"content":"// new EditPersonDescriptorBuilder(personInList).build());","lastModifiedDate":"2024-02-26"},{"lineNumber":123,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":124,"author":{"gitId":"ashleygoh1"},"content":"// assertCommandFailure(editCommand, model, EditCommand.MESSAGE_DUPLICATE_PERSON);","lastModifiedDate":"2024-02-26"},{"lineNumber":125,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":126,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":127,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":128,"author":{"gitId":"ashleygoh1"},"content":"// public void execute_invalidPersonIndexUnfilteredList_failure() {","lastModifiedDate":"2024-02-26"},{"lineNumber":129,"author":{"gitId":"ashleygoh1"},"content":"// Index outOfBoundIndex \u003d Index.fromOneBased(model.getFilteredPersonList().size() + 1);","lastModifiedDate":"2024-02-26"},{"lineNumber":130,"author":{"gitId":"ashleygoh1"},"content":"// EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder().withName(VALID_NAME_BOB).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":131,"author":{"gitId":"ashleygoh1"},"content":"// EditCommand editCommand \u003d new EditCommand(outOfBoundIndex, descriptor);","lastModifiedDate":"2024-02-26"},{"lineNumber":132,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":133,"author":{"gitId":"ashleygoh1"},"content":"// assertCommandFailure(editCommand, model, Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX);","lastModifiedDate":"2024-02-26"},{"lineNumber":134,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":135,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":136,"author":{"gitId":"ashleygoh1"},"content":"// /**","lastModifiedDate":"2024-02-26"},{"lineNumber":137,"author":{"gitId":"ashleygoh1"},"content":"// * Edit filtered list where index is larger than size of filtered list,","lastModifiedDate":"2024-02-26"},{"lineNumber":138,"author":{"gitId":"ashleygoh1"},"content":"// * but smaller than size of address book","lastModifiedDate":"2024-02-26"},{"lineNumber":139,"author":{"gitId":"ashleygoh1"},"content":"// */","lastModifiedDate":"2024-02-26"},{"lineNumber":140,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":141,"author":{"gitId":"ashleygoh1"},"content":"// public void execute_invalidPersonIndexFilteredList_failure() {","lastModifiedDate":"2024-02-26"},{"lineNumber":142,"author":{"gitId":"ashleygoh1"},"content":"// showPersonAtIndex(model, INDEX_FIRST_PERSON);","lastModifiedDate":"2024-02-26"},{"lineNumber":143,"author":{"gitId":"ashleygoh1"},"content":"// Index outOfBoundIndex \u003d INDEX_SECOND_PERSON;","lastModifiedDate":"2024-02-26"},{"lineNumber":144,"author":{"gitId":"ashleygoh1"},"content":"// // ensures that outOfBoundIndex is still in bounds of address book list","lastModifiedDate":"2024-02-26"},{"lineNumber":145,"author":{"gitId":"ashleygoh1"},"content":"// assertTrue(outOfBoundIndex.getZeroBased() \u003c model.getAddressBook().getPersonList().size());","lastModifiedDate":"2024-02-26"},{"lineNumber":146,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":147,"author":{"gitId":"ashleygoh1"},"content":"// EditCommand editCommand \u003d new EditCommand(outOfBoundIndex,","lastModifiedDate":"2024-02-26"},{"lineNumber":148,"author":{"gitId":"ashleygoh1"},"content":"// new EditPersonDescriptorBuilder().withName(VALID_NAME_BOB).build());","lastModifiedDate":"2024-02-26"},{"lineNumber":149,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":150,"author":{"gitId":"ashleygoh1"},"content":"// assertCommandFailure(editCommand, model, Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX);","lastModifiedDate":"2024-02-26"},{"lineNumber":151,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":152,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":153,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":154,"author":{"gitId":"ashleygoh1"},"content":"// public void equals() {","lastModifiedDate":"2024-02-26"},{"lineNumber":155,"author":{"gitId":"ashleygoh1"},"content":"// final EditCommand standardCommand \u003d new EditCommand(INDEX_FIRST_PERSON, DESC_AMY);","lastModifiedDate":"2024-02-26"},{"lineNumber":156,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":157,"author":{"gitId":"ashleygoh1"},"content":"// // same values -\u003e returns true","lastModifiedDate":"2024-02-26"},{"lineNumber":158,"author":{"gitId":"ashleygoh1"},"content":"// EditPersonDescriptor copyDescriptor \u003d new EditPersonDescriptor(DESC_AMY);","lastModifiedDate":"2024-02-26"},{"lineNumber":159,"author":{"gitId":"ashleygoh1"},"content":"// EditCommand commandWithSameValues \u003d new EditCommand(INDEX_FIRST_PERSON, copyDescriptor);","lastModifiedDate":"2024-02-26"},{"lineNumber":160,"author":{"gitId":"ashleygoh1"},"content":"// assertTrue(standardCommand.equals(commandWithSameValues));","lastModifiedDate":"2024-02-26"},{"lineNumber":161,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":162,"author":{"gitId":"ashleygoh1"},"content":"// // same object -\u003e returns true","lastModifiedDate":"2024-02-26"},{"lineNumber":163,"author":{"gitId":"ashleygoh1"},"content":"// assertTrue(standardCommand.equals(standardCommand));","lastModifiedDate":"2024-02-26"},{"lineNumber":164,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":165,"author":{"gitId":"ashleygoh1"},"content":"// // null -\u003e returns false","lastModifiedDate":"2024-02-26"},{"lineNumber":166,"author":{"gitId":"ashleygoh1"},"content":"// assertFalse(standardCommand.equals(null));","lastModifiedDate":"2024-02-26"},{"lineNumber":167,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":168,"author":{"gitId":"ashleygoh1"},"content":"// // different types -\u003e returns false","lastModifiedDate":"2024-02-26"},{"lineNumber":169,"author":{"gitId":"ashleygoh1"},"content":"// assertFalse(standardCommand.equals(new ClearCommand()));","lastModifiedDate":"2024-02-26"},{"lineNumber":170,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":171,"author":{"gitId":"ashleygoh1"},"content":"// // different index -\u003e returns false","lastModifiedDate":"2024-02-26"},{"lineNumber":172,"author":{"gitId":"ashleygoh1"},"content":"// assertFalse(standardCommand.equals(new EditCommand(INDEX_SECOND_PERSON, DESC_AMY)));","lastModifiedDate":"2024-02-26"},{"lineNumber":173,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":174,"author":{"gitId":"ashleygoh1"},"content":"// // different descriptor -\u003e returns false","lastModifiedDate":"2024-02-26"},{"lineNumber":175,"author":{"gitId":"ashleygoh1"},"content":"// assertFalse(standardCommand.equals(new EditCommand(INDEX_FIRST_PERSON, DESC_BOB)));","lastModifiedDate":"2024-02-26"},{"lineNumber":176,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":177,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":178,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":179,"author":{"gitId":"ashleygoh1"},"content":"// public void toStringMethod() {","lastModifiedDate":"2024-02-26"},{"lineNumber":180,"author":{"gitId":"ashleygoh1"},"content":"// Index index \u003d Index.fromOneBased(1);","lastModifiedDate":"2024-02-26"},{"lineNumber":181,"author":{"gitId":"ashleygoh1"},"content":"// EditPersonDescriptor editPersonDescriptor \u003d new EditPersonDescriptor();","lastModifiedDate":"2024-02-26"},{"lineNumber":182,"author":{"gitId":"ashleygoh1"},"content":"// EditCommand editCommand \u003d new EditCommand(index, editPersonDescriptor);","lastModifiedDate":"2024-02-26"},{"lineNumber":183,"author":{"gitId":"ashleygoh1"},"content":"// String expected \u003d EditCommand.class.getCanonicalName() + \"{index\u003d\" + index + \", editPersonDescriptor\u003d\"","lastModifiedDate":"2024-02-26"},{"lineNumber":184,"author":{"gitId":"ashleygoh1"},"content":"// + editPersonDescriptor + \"}\";","lastModifiedDate":"2024-02-26"},{"lineNumber":185,"author":{"gitId":"ashleygoh1"},"content":"// assertEquals(expected, editCommand.toString());","lastModifiedDate":"2024-02-26"},{"lineNumber":186,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":187,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":188,"author":{"gitId":"ashleygoh1"},"content":"//}","lastModifiedDate":"2024-02-26"}],"authorContributionMap":{"ashleygoh1":188}},{"path":"src/test/java/seedu/address/logic/commands/EditPersonDescriptorTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ashleygoh1"},"content":"//package seedu.address.logic.commands;","lastModifiedDate":"2024-02-26"},{"lineNumber":2,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":3,"author":{"gitId":"ashleygoh1"},"content":"//import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2024-02-26"},{"lineNumber":4,"author":{"gitId":"ashleygoh1"},"content":"//import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2024-02-26"},{"lineNumber":5,"author":{"gitId":"ashleygoh1"},"content":"//import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2024-02-26"},{"lineNumber":6,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.DESC_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.DESC_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":9,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND;","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":14,"author":{"gitId":"ashleygoh1"},"content":"//import org.junit.jupiter.api.Test;","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":16,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.logic.commands.EditCommand.EditPersonDescriptor;","lastModifiedDate":"2024-02-26"},{"lineNumber":17,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.testutil.EditPersonDescriptorBuilder;","lastModifiedDate":"2024-02-26"},{"lineNumber":18,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":19,"author":{"gitId":"ashleygoh1"},"content":"//public class EditPersonDescriptorTest {","lastModifiedDate":"2024-02-26"},{"lineNumber":20,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":21,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":22,"author":{"gitId":"ashleygoh1"},"content":"// public void equals() {","lastModifiedDate":"2024-02-26"},{"lineNumber":23,"author":{"gitId":"ashleygoh1"},"content":"// // same values -\u003e returns true","lastModifiedDate":"2024-02-26"},{"lineNumber":24,"author":{"gitId":"ashleygoh1"},"content":"// EditPersonDescriptor descriptorWithSameValues \u003d new EditPersonDescriptor(DESC_AMY);","lastModifiedDate":"2024-02-26"},{"lineNumber":25,"author":{"gitId":"ashleygoh1"},"content":"// assertTrue(DESC_AMY.equals(descriptorWithSameValues));","lastModifiedDate":"2024-02-26"},{"lineNumber":26,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":27,"author":{"gitId":"ashleygoh1"},"content":"// // same object -\u003e returns true","lastModifiedDate":"2024-02-26"},{"lineNumber":28,"author":{"gitId":"ashleygoh1"},"content":"// assertTrue(DESC_AMY.equals(DESC_AMY));","lastModifiedDate":"2024-02-26"},{"lineNumber":29,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":30,"author":{"gitId":"ashleygoh1"},"content":"// // null -\u003e returns false","lastModifiedDate":"2024-02-26"},{"lineNumber":31,"author":{"gitId":"ashleygoh1"},"content":"// assertFalse(DESC_AMY.equals(null));","lastModifiedDate":"2024-02-26"},{"lineNumber":32,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":33,"author":{"gitId":"ashleygoh1"},"content":"// // different types -\u003e returns false","lastModifiedDate":"2024-02-26"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":"// assertFalse(DESC_AMY.equals(5));","lastModifiedDate":"2024-02-26"},{"lineNumber":35,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":36,"author":{"gitId":"ashleygoh1"},"content":"// // different values -\u003e returns false","lastModifiedDate":"2024-02-26"},{"lineNumber":37,"author":{"gitId":"ashleygoh1"},"content":"// assertFalse(DESC_AMY.equals(DESC_BOB));","lastModifiedDate":"2024-02-26"},{"lineNumber":38,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":39,"author":{"gitId":"ashleygoh1"},"content":"// // different name -\u003e returns false","lastModifiedDate":"2024-02-26"},{"lineNumber":40,"author":{"gitId":"ashleygoh1"},"content":"// EditPersonDescriptor editedAmy \u003d new EditPersonDescriptorBuilder(DESC_AMY).withName(VALID_NAME_BOB).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":41,"author":{"gitId":"ashleygoh1"},"content":"// assertFalse(DESC_AMY.equals(editedAmy));","lastModifiedDate":"2024-02-26"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":43,"author":{"gitId":"ashleygoh1"},"content":"// // different phone -\u003e returns false","lastModifiedDate":"2024-02-26"},{"lineNumber":44,"author":{"gitId":"ashleygoh1"},"content":"// editedAmy \u003d new EditPersonDescriptorBuilder(DESC_AMY).withPhone(VALID_PHONE_BOB).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":45,"author":{"gitId":"ashleygoh1"},"content":"// assertFalse(DESC_AMY.equals(editedAmy));","lastModifiedDate":"2024-02-26"},{"lineNumber":46,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":"// // different email -\u003e returns false","lastModifiedDate":"2024-02-26"},{"lineNumber":48,"author":{"gitId":"ashleygoh1"},"content":"// editedAmy \u003d new EditPersonDescriptorBuilder(DESC_AMY).withEmail(VALID_EMAIL_BOB).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":49,"author":{"gitId":"ashleygoh1"},"content":"// assertFalse(DESC_AMY.equals(editedAmy));","lastModifiedDate":"2024-02-26"},{"lineNumber":50,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":51,"author":{"gitId":"ashleygoh1"},"content":"// // different address -\u003e returns false","lastModifiedDate":"2024-02-26"},{"lineNumber":52,"author":{"gitId":"ashleygoh1"},"content":"// editedAmy \u003d new EditPersonDescriptorBuilder(DESC_AMY).withAddress(VALID_ADDRESS_BOB).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":53,"author":{"gitId":"ashleygoh1"},"content":"// assertFalse(DESC_AMY.equals(editedAmy));","lastModifiedDate":"2024-02-26"},{"lineNumber":54,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":55,"author":{"gitId":"ashleygoh1"},"content":"// // different tags -\u003e returns false","lastModifiedDate":"2024-02-26"},{"lineNumber":56,"author":{"gitId":"ashleygoh1"},"content":"// editedAmy \u003d new EditPersonDescriptorBuilder(DESC_AMY).withTags(VALID_TAG_HUSBAND).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":57,"author":{"gitId":"ashleygoh1"},"content":"// assertFalse(DESC_AMY.equals(editedAmy));","lastModifiedDate":"2024-02-26"},{"lineNumber":58,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":59,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":60,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":61,"author":{"gitId":"ashleygoh1"},"content":"// public void toStringMethod() {","lastModifiedDate":"2024-02-26"},{"lineNumber":62,"author":{"gitId":"ashleygoh1"},"content":"// EditPersonDescriptor editPersonDescriptor \u003d new EditPersonDescriptor();","lastModifiedDate":"2024-02-26"},{"lineNumber":63,"author":{"gitId":"ashleygoh1"},"content":"// String expected \u003d EditPersonDescriptor.class.getCanonicalName() + \"{name\u003d\"","lastModifiedDate":"2024-02-26"},{"lineNumber":64,"author":{"gitId":"ashleygoh1"},"content":"// + editPersonDescriptor.getName().orElse(null) + \", phone\u003d\"","lastModifiedDate":"2024-02-26"},{"lineNumber":65,"author":{"gitId":"ashleygoh1"},"content":"// + editPersonDescriptor.getPhone().orElse(null) + \", email\u003d\"","lastModifiedDate":"2024-02-26"},{"lineNumber":66,"author":{"gitId":"ashleygoh1"},"content":"// + editPersonDescriptor.getEmail().orElse(null) + \", address\u003d\"","lastModifiedDate":"2024-02-26"},{"lineNumber":67,"author":{"gitId":"ashleygoh1"},"content":"// + editPersonDescriptor.getAddress().orElse(null) + \", tags\u003d\"","lastModifiedDate":"2024-02-26"},{"lineNumber":68,"author":{"gitId":"ashleygoh1"},"content":"// + editPersonDescriptor.getTags().orElse(null) + \"}\";","lastModifiedDate":"2024-02-26"},{"lineNumber":69,"author":{"gitId":"ashleygoh1"},"content":"// assertEquals(expected, editPersonDescriptor.toString());","lastModifiedDate":"2024-02-26"},{"lineNumber":70,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":71,"author":{"gitId":"ashleygoh1"},"content":"//}","lastModifiedDate":"2024-02-26"}],"authorContributionMap":{"ashleygoh1":71}},{"path":"src/test/java/seedu/address/logic/parser/AddCommandParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-06-15"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-07-13"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.ADDRESS_DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.ADDRESS_DESC_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.EMAIL_DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.EMAIL_DESC_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":8,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INTERN_DURATION_DESC_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":9,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INTERN_DURATION_DESC_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INTERVIEW_DATE_DESC_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INTERVIEW_DATE_DESC_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_ADDRESS_DESC;","lastModifiedDate":"2017-07-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_EMAIL_DESC;","lastModifiedDate":"2017-07-05"},{"lineNumber":14,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_INTERN_DURATION_DESC;","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_JOB_DESCRIPTION_DESC;","lastModifiedDate":"2024-02-26"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_NAME_DESC;","lastModifiedDate":"2017-07-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_PHONE_DESC;","lastModifiedDate":"2017-07-05"},{"lineNumber":18,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_SALARY_DESC;","lastModifiedDate":"2024-02-26"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.INVALID_TAG_DESC;","lastModifiedDate":"2017-07-05"},{"lineNumber":20,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.JOB_DESCRIPTION_DESC_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":21,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.JOB_DESCRIPTION_DESC_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.NAME_DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.NAME_DESC_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.PHONE_DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.PHONE_DESC_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.PREAMBLE_NON_EMPTY;","lastModifiedDate":"2017-12-23"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.PREAMBLE_WHITESPACE;","lastModifiedDate":"2017-12-23"},{"lineNumber":28,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.SALARY_DESC_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":29,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.SALARY_DESC_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":30,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.TAG_DESC_FIRST_INTERVIEW;","lastModifiedDate":"2024-02-26"},{"lineNumber":31,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.TAG_DESC_NO_REPLY;","lastModifiedDate":"2024-02-26"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_INTERN_DURATION_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":35,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_INTERVIEW_DATE_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":36,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_JOB_DESCRIPTION_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":37,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2023-07-14"},{"lineNumber":40,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2023-07-14"},{"lineNumber":41,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INTERN_DURATION;","lastModifiedDate":"2024-02-26"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INTERVIEW_DATE;","lastModifiedDate":"2024-02-26"},{"lineNumber":43,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_JOB_DESCRIPTION;","lastModifiedDate":"2024-02-26"},{"lineNumber":44,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2023-07-14"},{"lineNumber":45,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2023-07-14"},{"lineNumber":46,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_SALARY;","lastModifiedDate":"2024-02-26"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2024-02-26"},{"lineNumber":48,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CommandParserTestUtil.assertParseFailure;","lastModifiedDate":"2017-07-06"},{"lineNumber":49,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CommandParserTestUtil.assertParseSuccess;","lastModifiedDate":"2017-07-06"},{"lineNumber":50,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.BOB;","lastModifiedDate":"2018-07-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":52,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":54,"author":{"gitId":"-"},"content":"import seedu.address.logic.Messages;","lastModifiedDate":"2023-07-14"},{"lineNumber":55,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.AddCommand;","lastModifiedDate":"2017-06-15"},{"lineNumber":56,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2017-06-15"},{"lineNumber":57,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.InternDuration;","lastModifiedDate":"2024-02-26"},{"lineNumber":58,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.JobDescription;","lastModifiedDate":"2024-02-26"},{"lineNumber":59,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2017-06-15"},{"lineNumber":60,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2017-06-15"},{"lineNumber":61,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2017-06-15"},{"lineNumber":62,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.Salary;","lastModifiedDate":"2024-02-26"},{"lineNumber":63,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-06-15"},{"lineNumber":64,"author":{"gitId":"-"},"content":"import seedu.address.testutil.PersonBuilder;","lastModifiedDate":"2017-06-15"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":66,"author":{"gitId":"-"},"content":"public class AddCommandParserTest {","lastModifiedDate":"2017-06-15"},{"lineNumber":67,"author":{"gitId":"-"},"content":" private AddCommandParser parser \u003d new AddCommandParser();","lastModifiedDate":"2017-06-15"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":69,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-15"},{"lineNumber":70,"author":{"gitId":"-"},"content":" public void parse_allFieldsPresent_success() {","lastModifiedDate":"2017-08-15"},{"lineNumber":71,"author":{"gitId":"ashleygoh1"},"content":" Person expectedPerson \u003d new PersonBuilder(BOB).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":73,"author":{"gitId":"-"},"content":" // whitespace only preamble","lastModifiedDate":"2017-12-23"},{"lineNumber":74,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, PREAMBLE_WHITESPACE + NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB","lastModifiedDate":"2017-12-23"},{"lineNumber":75,"author":{"gitId":"ashleygoh1"},"content":" + ADDRESS_DESC_BOB + TAG_DESC_FIRST_INTERVIEW","lastModifiedDate":"2024-02-26"},{"lineNumber":76,"author":{"gitId":"ashleygoh1"},"content":" + JOB_DESCRIPTION_DESC_BOB + INTERVIEW_DATE_DESC_BOB","lastModifiedDate":"2024-02-26"},{"lineNumber":77,"author":{"gitId":"ashleygoh1"},"content":" + INTERN_DURATION_DESC_BOB + SALARY_DESC_BOB, new AddCommand(expectedPerson));","lastModifiedDate":"2024-02-26"},{"lineNumber":78,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-23"},{"lineNumber":79,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-14"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":81,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-07-14"},{"lineNumber":82,"author":{"gitId":"-"},"content":" public void parse_repeatedNonTagValue_failure() {","lastModifiedDate":"2023-07-14"},{"lineNumber":83,"author":{"gitId":"-"},"content":" String validExpectedPersonString \u003d NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB","lastModifiedDate":"2023-07-14"},{"lineNumber":84,"author":{"gitId":"ashleygoh1"},"content":" + ADDRESS_DESC_BOB + TAG_DESC_FIRST_INTERVIEW","lastModifiedDate":"2024-02-26"},{"lineNumber":85,"author":{"gitId":"ashleygoh1"},"content":" + JOB_DESCRIPTION_DESC_BOB + INTERVIEW_DATE_DESC_BOB","lastModifiedDate":"2024-02-26"},{"lineNumber":86,"author":{"gitId":"ashleygoh1"},"content":" + INTERN_DURATION_DESC_BOB + SALARY_DESC_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":87,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":88,"author":{"gitId":"-"},"content":" // multiple names","lastModifiedDate":"2023-07-14"},{"lineNumber":89,"author":{"gitId":"-"},"content":" assertParseFailure(parser, NAME_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":90,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_NAME));","lastModifiedDate":"2023-07-14"},{"lineNumber":91,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":92,"author":{"gitId":"-"},"content":" // multiple phones","lastModifiedDate":"2023-07-14"},{"lineNumber":93,"author":{"gitId":"-"},"content":" assertParseFailure(parser, PHONE_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":94,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE));","lastModifiedDate":"2023-07-14"},{"lineNumber":95,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":96,"author":{"gitId":"-"},"content":" // multiple emails","lastModifiedDate":"2023-07-14"},{"lineNumber":97,"author":{"gitId":"-"},"content":" assertParseFailure(parser, EMAIL_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":98,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_EMAIL));","lastModifiedDate":"2023-07-14"},{"lineNumber":99,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":100,"author":{"gitId":"-"},"content":" // multiple addresses","lastModifiedDate":"2023-07-14"},{"lineNumber":101,"author":{"gitId":"-"},"content":" assertParseFailure(parser, ADDRESS_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":102,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_ADDRESS));","lastModifiedDate":"2023-07-14"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":104,"author":{"gitId":"ashleygoh1"},"content":" // multiple job description","lastModifiedDate":"2024-02-26"},{"lineNumber":105,"author":{"gitId":"ashleygoh1"},"content":" assertParseFailure(parser, JOB_DESCRIPTION_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2024-02-26"},{"lineNumber":106,"author":{"gitId":"ashleygoh1"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_JOB_DESCRIPTION));","lastModifiedDate":"2024-02-26"},{"lineNumber":107,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":108,"author":{"gitId":"ashleygoh1"},"content":" // multiple interview date","lastModifiedDate":"2024-02-26"},{"lineNumber":109,"author":{"gitId":"ashleygoh1"},"content":" assertParseFailure(parser, INTERVIEW_DATE_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2024-02-26"},{"lineNumber":110,"author":{"gitId":"ashleygoh1"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_INTERVIEW_DATE));","lastModifiedDate":"2024-02-26"},{"lineNumber":111,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":112,"author":{"gitId":"ashleygoh1"},"content":" // multiple intern duration","lastModifiedDate":"2024-02-26"},{"lineNumber":113,"author":{"gitId":"ashleygoh1"},"content":" assertParseFailure(parser, INTERN_DURATION_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2024-02-26"},{"lineNumber":114,"author":{"gitId":"ashleygoh1"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_INTERN_DURATION));","lastModifiedDate":"2024-02-26"},{"lineNumber":115,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":116,"author":{"gitId":"ashleygoh1"},"content":" // multiple salary","lastModifiedDate":"2024-02-26"},{"lineNumber":117,"author":{"gitId":"ashleygoh1"},"content":" assertParseFailure(parser, SALARY_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2024-02-26"},{"lineNumber":118,"author":{"gitId":"ashleygoh1"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_SALARY));","lastModifiedDate":"2024-02-26"},{"lineNumber":119,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":120,"author":{"gitId":"-"},"content":" // multiple fields repeated","lastModifiedDate":"2023-07-14"},{"lineNumber":121,"author":{"gitId":"-"},"content":" assertParseFailure(parser,","lastModifiedDate":"2023-07-14"},{"lineNumber":122,"author":{"gitId":"-"},"content":" validExpectedPersonString + PHONE_DESC_AMY + EMAIL_DESC_AMY + NAME_DESC_AMY + ADDRESS_DESC_AMY","lastModifiedDate":"2023-07-14"},{"lineNumber":123,"author":{"gitId":"-"},"content":" + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":124,"author":{"gitId":"ashleygoh1"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_NAME, PREFIX_ADDRESS, PREFIX_EMAIL, PREFIX_PHONE,","lastModifiedDate":"2024-02-26"},{"lineNumber":125,"author":{"gitId":"ashleygoh1"},"content":" PREFIX_TAG, PREFIX_JOB_DESCRIPTION, PREFIX_INTERVIEW_DATE, PREFIX_INTERN_DURATION,","lastModifiedDate":"2024-02-26"},{"lineNumber":126,"author":{"gitId":"ashleygoh1"},"content":" PREFIX_SALARY));","lastModifiedDate":"2024-02-26"},{"lineNumber":127,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":128,"author":{"gitId":"-"},"content":" // invalid value followed by valid value","lastModifiedDate":"2023-07-14"},{"lineNumber":129,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":130,"author":{"gitId":"-"},"content":" // invalid name","lastModifiedDate":"2023-07-14"},{"lineNumber":131,"author":{"gitId":"-"},"content":" assertParseFailure(parser, INVALID_NAME_DESC + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":132,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_NAME));","lastModifiedDate":"2023-07-14"},{"lineNumber":133,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":134,"author":{"gitId":"-"},"content":" // invalid email","lastModifiedDate":"2023-07-14"},{"lineNumber":135,"author":{"gitId":"-"},"content":" assertParseFailure(parser, INVALID_EMAIL_DESC + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":136,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_EMAIL));","lastModifiedDate":"2023-07-14"},{"lineNumber":137,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":138,"author":{"gitId":"-"},"content":" // invalid phone","lastModifiedDate":"2023-07-14"},{"lineNumber":139,"author":{"gitId":"-"},"content":" assertParseFailure(parser, INVALID_PHONE_DESC + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":140,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE));","lastModifiedDate":"2023-07-14"},{"lineNumber":141,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":142,"author":{"gitId":"-"},"content":" // invalid address","lastModifiedDate":"2023-07-14"},{"lineNumber":143,"author":{"gitId":"-"},"content":" assertParseFailure(parser, INVALID_ADDRESS_DESC + validExpectedPersonString,","lastModifiedDate":"2023-07-14"},{"lineNumber":144,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_ADDRESS));","lastModifiedDate":"2023-07-14"},{"lineNumber":145,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":146,"author":{"gitId":"-"},"content":" // valid value followed by invalid value","lastModifiedDate":"2023-07-14"},{"lineNumber":147,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":148,"author":{"gitId":"-"},"content":" // invalid name","lastModifiedDate":"2023-07-14"},{"lineNumber":149,"author":{"gitId":"-"},"content":" assertParseFailure(parser, validExpectedPersonString + INVALID_NAME_DESC,","lastModifiedDate":"2023-07-14"},{"lineNumber":150,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_NAME));","lastModifiedDate":"2023-07-14"},{"lineNumber":151,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":152,"author":{"gitId":"-"},"content":" // invalid email","lastModifiedDate":"2023-07-14"},{"lineNumber":153,"author":{"gitId":"-"},"content":" assertParseFailure(parser, validExpectedPersonString + INVALID_EMAIL_DESC,","lastModifiedDate":"2023-07-14"},{"lineNumber":154,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_EMAIL));","lastModifiedDate":"2023-07-14"},{"lineNumber":155,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":156,"author":{"gitId":"-"},"content":" // invalid phone","lastModifiedDate":"2023-07-14"},{"lineNumber":157,"author":{"gitId":"-"},"content":" assertParseFailure(parser, validExpectedPersonString + INVALID_PHONE_DESC,","lastModifiedDate":"2023-07-14"},{"lineNumber":158,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE));","lastModifiedDate":"2023-07-14"},{"lineNumber":159,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":160,"author":{"gitId":"-"},"content":" // invalid address","lastModifiedDate":"2023-07-14"},{"lineNumber":161,"author":{"gitId":"-"},"content":" assertParseFailure(parser, validExpectedPersonString + INVALID_ADDRESS_DESC,","lastModifiedDate":"2023-07-14"},{"lineNumber":162,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_ADDRESS));","lastModifiedDate":"2023-07-14"},{"lineNumber":163,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-15"},{"lineNumber":164,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":165,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-15"},{"lineNumber":166,"author":{"gitId":"-"},"content":" public void parse_compulsoryFieldMissing_failure() {","lastModifiedDate":"2017-06-15"},{"lineNumber":167,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddCommand.MESSAGE_USAGE);","lastModifiedDate":"2017-06-15"},{"lineNumber":168,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":169,"author":{"gitId":"-"},"content":" // missing name prefix","lastModifiedDate":"2017-06-15"},{"lineNumber":170,"author":{"gitId":"-"},"content":" assertParseFailure(parser, VALID_NAME_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + ADDRESS_DESC_BOB,","lastModifiedDate":"2017-12-23"},{"lineNumber":171,"author":{"gitId":"-"},"content":" expectedMessage);","lastModifiedDate":"2017-12-23"},{"lineNumber":172,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":173,"author":{"gitId":"-"},"content":" // missing phone prefix","lastModifiedDate":"2017-06-15"},{"lineNumber":174,"author":{"gitId":"-"},"content":" assertParseFailure(parser, NAME_DESC_BOB + VALID_PHONE_BOB + EMAIL_DESC_BOB + ADDRESS_DESC_BOB,","lastModifiedDate":"2017-12-23"},{"lineNumber":175,"author":{"gitId":"-"},"content":" expectedMessage);","lastModifiedDate":"2017-12-23"},{"lineNumber":176,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":177,"author":{"gitId":"-"},"content":" // missing email prefix","lastModifiedDate":"2017-06-15"},{"lineNumber":178,"author":{"gitId":"-"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + VALID_EMAIL_BOB + ADDRESS_DESC_BOB,","lastModifiedDate":"2017-12-23"},{"lineNumber":179,"author":{"gitId":"-"},"content":" expectedMessage);","lastModifiedDate":"2017-12-23"},{"lineNumber":180,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":181,"author":{"gitId":"-"},"content":" // missing address prefix","lastModifiedDate":"2017-06-15"},{"lineNumber":182,"author":{"gitId":"-"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + VALID_ADDRESS_BOB,","lastModifiedDate":"2017-12-23"},{"lineNumber":183,"author":{"gitId":"-"},"content":" expectedMessage);","lastModifiedDate":"2017-12-23"},{"lineNumber":184,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":185,"author":{"gitId":"ashleygoh1"},"content":" // missing tag prefix","lastModifiedDate":"2024-02-26"},{"lineNumber":186,"author":{"gitId":"ashleygoh1"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + VALID_ADDRESS_BOB,","lastModifiedDate":"2024-02-26"},{"lineNumber":187,"author":{"gitId":"ashleygoh1"},"content":" expectedMessage);","lastModifiedDate":"2024-02-26"},{"lineNumber":188,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":189,"author":{"gitId":"ashleygoh1"},"content":" // missing job description prefix","lastModifiedDate":"2024-02-26"},{"lineNumber":190,"author":{"gitId":"ashleygoh1"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + VALID_ADDRESS_BOB","lastModifiedDate":"2024-02-26"},{"lineNumber":191,"author":{"gitId":"ashleygoh1"},"content":" + VALID_JOB_DESCRIPTION_BOB,","lastModifiedDate":"2024-02-26"},{"lineNumber":192,"author":{"gitId":"ashleygoh1"},"content":" expectedMessage);","lastModifiedDate":"2024-02-26"},{"lineNumber":193,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":194,"author":{"gitId":"ashleygoh1"},"content":" // missing interview date prefix","lastModifiedDate":"2024-02-26"},{"lineNumber":195,"author":{"gitId":"ashleygoh1"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + VALID_ADDRESS_BOB","lastModifiedDate":"2024-02-26"},{"lineNumber":196,"author":{"gitId":"ashleygoh1"},"content":" + VALID_INTERVIEW_DATE_BOB,","lastModifiedDate":"2024-02-26"},{"lineNumber":197,"author":{"gitId":"ashleygoh1"},"content":" expectedMessage);","lastModifiedDate":"2024-02-26"},{"lineNumber":198,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":199,"author":{"gitId":"ashleygoh1"},"content":" // missing intern duration prefix","lastModifiedDate":"2024-02-26"},{"lineNumber":200,"author":{"gitId":"ashleygoh1"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + VALID_ADDRESS_BOB","lastModifiedDate":"2024-02-26"},{"lineNumber":201,"author":{"gitId":"ashleygoh1"},"content":" + VALID_INTERN_DURATION_BOB,","lastModifiedDate":"2024-02-26"},{"lineNumber":202,"author":{"gitId":"ashleygoh1"},"content":" expectedMessage);","lastModifiedDate":"2024-02-26"},{"lineNumber":203,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":204,"author":{"gitId":"ashleygoh1"},"content":" // missing salary prefix","lastModifiedDate":"2024-02-26"},{"lineNumber":205,"author":{"gitId":"ashleygoh1"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + VALID_ADDRESS_BOB,","lastModifiedDate":"2024-02-26"},{"lineNumber":206,"author":{"gitId":"ashleygoh1"},"content":" expectedMessage);","lastModifiedDate":"2024-02-26"},{"lineNumber":207,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":208,"author":{"gitId":"-"},"content":" // all prefixes missing","lastModifiedDate":"2017-06-15"},{"lineNumber":209,"author":{"gitId":"-"},"content":" assertParseFailure(parser, VALID_NAME_BOB + VALID_PHONE_BOB + VALID_EMAIL_BOB + VALID_ADDRESS_BOB,","lastModifiedDate":"2017-12-23"},{"lineNumber":210,"author":{"gitId":"-"},"content":" expectedMessage);","lastModifiedDate":"2017-12-23"},{"lineNumber":211,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-15"},{"lineNumber":212,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":213,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-15"},{"lineNumber":214,"author":{"gitId":"-"},"content":" public void parse_invalidValue_failure() {","lastModifiedDate":"2017-06-15"},{"lineNumber":215,"author":{"gitId":"-"},"content":" // invalid name","lastModifiedDate":"2017-06-15"},{"lineNumber":216,"author":{"gitId":"-"},"content":" assertParseFailure(parser, INVALID_NAME_DESC + PHONE_DESC_BOB + EMAIL_DESC_BOB + ADDRESS_DESC_BOB","lastModifiedDate":"2017-12-23"},{"lineNumber":217,"author":{"gitId":"ashleygoh1"},"content":" + TAG_DESC_FIRST_INTERVIEW + JOB_DESCRIPTION_DESC_BOB + INTERVIEW_DATE_DESC_BOB","lastModifiedDate":"2024-02-26"},{"lineNumber":218,"author":{"gitId":"ashleygoh1"},"content":" + INTERN_DURATION_DESC_BOB + SALARY_DESC_BOB, Name.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-26"},{"lineNumber":219,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":220,"author":{"gitId":"-"},"content":" // invalid phone","lastModifiedDate":"2017-06-15"},{"lineNumber":221,"author":{"gitId":"-"},"content":" assertParseFailure(parser, NAME_DESC_BOB + INVALID_PHONE_DESC + EMAIL_DESC_BOB + ADDRESS_DESC_BOB","lastModifiedDate":"2017-12-23"},{"lineNumber":222,"author":{"gitId":"ashleygoh1"},"content":" + TAG_DESC_FIRST_INTERVIEW + JOB_DESCRIPTION_DESC_BOB + INTERVIEW_DATE_DESC_BOB","lastModifiedDate":"2024-02-26"},{"lineNumber":223,"author":{"gitId":"ashleygoh1"},"content":" + INTERN_DURATION_DESC_BOB + SALARY_DESC_BOB, Phone.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-26"},{"lineNumber":224,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":225,"author":{"gitId":"-"},"content":" // invalid email","lastModifiedDate":"2017-06-15"},{"lineNumber":226,"author":{"gitId":"-"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + INVALID_EMAIL_DESC + ADDRESS_DESC_BOB","lastModifiedDate":"2017-12-23"},{"lineNumber":227,"author":{"gitId":"ashleygoh1"},"content":" + TAG_DESC_FIRST_INTERVIEW + JOB_DESCRIPTION_DESC_BOB + INTERVIEW_DATE_DESC_BOB","lastModifiedDate":"2024-02-26"},{"lineNumber":228,"author":{"gitId":"ashleygoh1"},"content":" + INTERN_DURATION_DESC_BOB + SALARY_DESC_BOB, Email.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-26"},{"lineNumber":229,"author":{"gitId":"-"},"content":" // invalid tag","lastModifiedDate":"2017-06-15"},{"lineNumber":230,"author":{"gitId":"-"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + ADDRESS_DESC_BOB","lastModifiedDate":"2017-12-23"},{"lineNumber":231,"author":{"gitId":"ashleygoh1"},"content":" + INVALID_TAG_DESC + JOB_DESCRIPTION_DESC_BOB + INTERVIEW_DATE_DESC_BOB","lastModifiedDate":"2024-02-26"},{"lineNumber":232,"author":{"gitId":"ashleygoh1"},"content":" + INTERN_DURATION_DESC_BOB + SALARY_DESC_BOB, Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-26"},{"lineNumber":233,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":234,"author":{"gitId":"ashleygoh1"},"content":" // invalid job description","lastModifiedDate":"2024-02-26"},{"lineNumber":235,"author":{"gitId":"ashleygoh1"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + ADDRESS_DESC_BOB","lastModifiedDate":"2024-02-26"},{"lineNumber":236,"author":{"gitId":"ashleygoh1"},"content":" + TAG_DESC_FIRST_INTERVIEW + INVALID_JOB_DESCRIPTION_DESC + INTERVIEW_DATE_DESC_BOB","lastModifiedDate":"2024-02-26"},{"lineNumber":237,"author":{"gitId":"ashleygoh1"},"content":" + INTERN_DURATION_DESC_BOB + SALARY_DESC_BOB, JobDescription.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-26"},{"lineNumber":238,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":239,"author":{"gitId":"ashleygoh1"},"content":" // invalid intern duration","lastModifiedDate":"2024-02-26"},{"lineNumber":240,"author":{"gitId":"ashleygoh1"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + ADDRESS_DESC_BOB","lastModifiedDate":"2024-02-26"},{"lineNumber":241,"author":{"gitId":"ashleygoh1"},"content":" + TAG_DESC_FIRST_INTERVIEW + JOB_DESCRIPTION_DESC_BOB + INTERVIEW_DATE_DESC_BOB","lastModifiedDate":"2024-02-26"},{"lineNumber":242,"author":{"gitId":"ashleygoh1"},"content":" + INVALID_INTERN_DURATION_DESC + SALARY_DESC_BOB, InternDuration.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-26"},{"lineNumber":243,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":244,"author":{"gitId":"ashleygoh1"},"content":" // invalid salary","lastModifiedDate":"2024-02-26"},{"lineNumber":245,"author":{"gitId":"-"},"content":" assertParseFailure(parser, NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB + ADDRESS_DESC_BOB","lastModifiedDate":"2024-02-26"},{"lineNumber":246,"author":{"gitId":"ashleygoh1"},"content":" + TAG_DESC_FIRST_INTERVIEW + JOB_DESCRIPTION_DESC_BOB + INTERVIEW_DATE_DESC_BOB","lastModifiedDate":"2024-02-26"},{"lineNumber":247,"author":{"gitId":"ashleygoh1"},"content":" + INTERN_DURATION_DESC_BOB + INVALID_SALARY_DESC, Salary.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-26"},{"lineNumber":248,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":249,"author":{"gitId":"-"},"content":" // two invalid values, only first invalid value reported","lastModifiedDate":"2017-06-15"},{"lineNumber":250,"author":{"gitId":"ashleygoh1"},"content":" assertParseFailure(parser, INVALID_NAME_DESC + PHONE_DESC_BOB + EMAIL_DESC_BOB + INVALID_ADDRESS_DESC","lastModifiedDate":"2024-02-26"},{"lineNumber":251,"author":{"gitId":"ashleygoh1"},"content":" + TAG_DESC_FIRST_INTERVIEW + JOB_DESCRIPTION_DESC_BOB + INTERVIEW_DATE_DESC_BOB","lastModifiedDate":"2024-02-26"},{"lineNumber":252,"author":{"gitId":"ashleygoh1"},"content":" + INTERN_DURATION_DESC_BOB + INVALID_SALARY_DESC,","lastModifiedDate":"2024-02-26"},{"lineNumber":253,"author":{"gitId":"-"},"content":" Name.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":254,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-23"},{"lineNumber":255,"author":{"gitId":"-"},"content":" // non-empty preamble","lastModifiedDate":"2017-12-23"},{"lineNumber":256,"author":{"gitId":"-"},"content":" assertParseFailure(parser, PREAMBLE_NON_EMPTY + NAME_DESC_BOB + PHONE_DESC_BOB + EMAIL_DESC_BOB","lastModifiedDate":"2017-12-23"},{"lineNumber":257,"author":{"gitId":"ashleygoh1"},"content":" + ADDRESS_DESC_BOB + TAG_DESC_FIRST_INTERVIEW + TAG_DESC_NO_REPLY,","lastModifiedDate":"2024-02-26"},{"lineNumber":258,"author":{"gitId":"-"},"content":" String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddCommand.MESSAGE_USAGE));","lastModifiedDate":"2017-12-23"},{"lineNumber":259,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-15"},{"lineNumber":260,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-06-15"}],"authorContributionMap":{"ashleygoh1":97,"-":163}},{"path":"src/test/java/seedu/address/logic/parser/AddressBookParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-03-15"},{"lineNumber":4,"author":{"gitId":"ashleygoh1"},"content":"//import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2024-02-26"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-07-13"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_UNKNOWN_COMMAND;","lastModifiedDate":"2023-07-13"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-23"},{"lineNumber":8,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON;","lastModifiedDate":"2024-02-26"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-27"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":"//import java.util.Arrays;","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":"//import java.util.List;","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"ashleygoh1"},"content":"//import java.util.stream.Collectors;","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.AddCommand;","lastModifiedDate":"2017-06-27"},{"lineNumber":16,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.logic.commands.ClearCommand;","lastModifiedDate":"2024-02-26"},{"lineNumber":17,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.logic.commands.DeleteCommand;","lastModifiedDate":"2024-02-26"},{"lineNumber":18,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.logic.commands.ExitCommand;","lastModifiedDate":"2024-02-26"},{"lineNumber":19,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.logic.commands.FindCommand;","lastModifiedDate":"2024-02-26"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.HelpCommand;","lastModifiedDate":"2017-06-27"},{"lineNumber":21,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.logic.commands.ListCommand;","lastModifiedDate":"2024-02-26"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2017-05-24"},{"lineNumber":23,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.person.NameContainsKeywordsPredicate;","lastModifiedDate":"2024-02-26"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2017-06-27"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import seedu.address.testutil.PersonBuilder;","lastModifiedDate":"2017-06-27"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import seedu.address.testutil.PersonUtil;","lastModifiedDate":"2017-06-27"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-24"},{"lineNumber":28,"author":{"gitId":"-"},"content":"public class AddressBookParserTest {","lastModifiedDate":"2017-07-07"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-27"},{"lineNumber":30,"author":{"gitId":"-"},"content":" private final AddressBookParser parser \u003d new AddressBookParser();","lastModifiedDate":"2017-07-07"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-24"},{"lineNumber":32,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-27"},{"lineNumber":33,"author":{"gitId":"-"},"content":" public void parseCommand_add() throws Exception {","lastModifiedDate":"2017-06-27"},{"lineNumber":34,"author":{"gitId":"-"},"content":" Person person \u003d new PersonBuilder().build();","lastModifiedDate":"2017-06-27"},{"lineNumber":35,"author":{"gitId":"-"},"content":" AddCommand command \u003d (AddCommand) parser.parseCommand(PersonUtil.getAddCommand(person));","lastModifiedDate":"2017-06-27"},{"lineNumber":36,"author":{"gitId":"-"},"content":" assertEquals(new AddCommand(person), command);","lastModifiedDate":"2017-06-27"},{"lineNumber":37,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-27"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-27"},{"lineNumber":39,"author":{"gitId":"ashleygoh1"},"content":" // @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":40,"author":{"gitId":"ashleygoh1"},"content":" // public void parseCommand_clear() throws Exception {","lastModifiedDate":"2024-02-26"},{"lineNumber":41,"author":{"gitId":"ashleygoh1"},"content":" // assertTrue(parser.parseCommand(ClearCommand.COMMAND_WORD) instanceof ClearCommand);","lastModifiedDate":"2024-02-26"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":" // assertTrue(parser.parseCommand(ClearCommand.COMMAND_WORD + \" 3\") instanceof ClearCommand);","lastModifiedDate":"2024-02-26"},{"lineNumber":43,"author":{"gitId":"ashleygoh1"},"content":" // }","lastModifiedDate":"2024-02-26"},{"lineNumber":44,"author":{"gitId":"ashleygoh1"},"content":" //","lastModifiedDate":"2024-02-26"},{"lineNumber":45,"author":{"gitId":"ashleygoh1"},"content":" // @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":46,"author":{"gitId":"ashleygoh1"},"content":" // public void parseCommand_delete() throws Exception {","lastModifiedDate":"2024-02-26"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":" // DeleteCommand command \u003d (DeleteCommand) parser.parseCommand(","lastModifiedDate":"2024-02-26"},{"lineNumber":48,"author":{"gitId":"ashleygoh1"},"content":" // DeleteCommand.COMMAND_WORD + \" \" + INDEX_FIRST_PERSON.getOneBased());","lastModifiedDate":"2024-02-26"},{"lineNumber":49,"author":{"gitId":"ashleygoh1"},"content":" // assertEquals(new DeleteCommand(INDEX_FIRST_PERSON), command);","lastModifiedDate":"2024-02-26"},{"lineNumber":50,"author":{"gitId":"ashleygoh1"},"content":" // }","lastModifiedDate":"2024-02-26"},{"lineNumber":51,"author":{"gitId":"ashleygoh1"},"content":" //","lastModifiedDate":"2024-02-26"},{"lineNumber":52,"author":{"gitId":"ashleygoh1"},"content":" // @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":53,"author":{"gitId":"ashleygoh1"},"content":" // public void parseCommand_exit() throws Exception {","lastModifiedDate":"2024-02-26"},{"lineNumber":54,"author":{"gitId":"ashleygoh1"},"content":" // assertTrue(parser.parseCommand(ExitCommand.COMMAND_WORD) instanceof ExitCommand);","lastModifiedDate":"2024-02-26"},{"lineNumber":55,"author":{"gitId":"ashleygoh1"},"content":" // assertTrue(parser.parseCommand(ExitCommand.COMMAND_WORD + \" 3\") instanceof ExitCommand);","lastModifiedDate":"2024-02-26"},{"lineNumber":56,"author":{"gitId":"ashleygoh1"},"content":" // }","lastModifiedDate":"2024-02-26"},{"lineNumber":57,"author":{"gitId":"ashleygoh1"},"content":" //","lastModifiedDate":"2024-02-26"},{"lineNumber":58,"author":{"gitId":"ashleygoh1"},"content":" // @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":59,"author":{"gitId":"ashleygoh1"},"content":" // public void parseCommand_find() throws Exception {","lastModifiedDate":"2024-02-26"},{"lineNumber":60,"author":{"gitId":"ashleygoh1"},"content":" // List\u003cString\u003e keywords \u003d Arrays.asList(\"foo\", \"bar\", \"baz\");","lastModifiedDate":"2024-02-26"},{"lineNumber":61,"author":{"gitId":"ashleygoh1"},"content":" // FindCommand command \u003d (FindCommand) parser.parseCommand(","lastModifiedDate":"2024-02-26"},{"lineNumber":62,"author":{"gitId":"ashleygoh1"},"content":" // FindCommand.COMMAND_WORD + \" \" + keywords.stream().collect(Collectors.joining(\" \")));","lastModifiedDate":"2024-02-26"},{"lineNumber":63,"author":{"gitId":"ashleygoh1"},"content":" // assertEquals(new FindCommand(new NameContainsKeywordsPredicate(keywords)), command);","lastModifiedDate":"2024-02-26"},{"lineNumber":64,"author":{"gitId":"ashleygoh1"},"content":" // }","lastModifiedDate":"2024-02-26"},{"lineNumber":65,"author":{"gitId":"ashleygoh1"},"content":" //","lastModifiedDate":"2024-02-26"},{"lineNumber":66,"author":{"gitId":"ashleygoh1"},"content":" // @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":67,"author":{"gitId":"ashleygoh1"},"content":" // public void parseCommand_help() throws Exception {","lastModifiedDate":"2024-02-26"},{"lineNumber":68,"author":{"gitId":"ashleygoh1"},"content":" // assertTrue(parser.parseCommand(HelpCommand.COMMAND_WORD) instanceof HelpCommand);","lastModifiedDate":"2024-02-26"},{"lineNumber":69,"author":{"gitId":"ashleygoh1"},"content":" // assertTrue(parser.parseCommand(HelpCommand.COMMAND_WORD + \" 3\") instanceof HelpCommand);","lastModifiedDate":"2024-02-26"},{"lineNumber":70,"author":{"gitId":"ashleygoh1"},"content":" // }","lastModifiedDate":"2024-02-26"},{"lineNumber":71,"author":{"gitId":"ashleygoh1"},"content":" //","lastModifiedDate":"2024-02-26"},{"lineNumber":72,"author":{"gitId":"ashleygoh1"},"content":" // @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":73,"author":{"gitId":"ashleygoh1"},"content":" // public void parseCommand_list() throws Exception {","lastModifiedDate":"2024-02-26"},{"lineNumber":74,"author":{"gitId":"ashleygoh1"},"content":" // assertTrue(parser.parseCommand(ListCommand.COMMAND_WORD) instanceof ListCommand);","lastModifiedDate":"2024-02-26"},{"lineNumber":75,"author":{"gitId":"ashleygoh1"},"content":" // assertTrue(parser.parseCommand(ListCommand.COMMAND_WORD + \" 3\") instanceof ListCommand);","lastModifiedDate":"2024-02-26"},{"lineNumber":76,"author":{"gitId":"ashleygoh1"},"content":" // }","lastModifiedDate":"2024-02-26"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-27"},{"lineNumber":78,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-27"},{"lineNumber":79,"author":{"gitId":"-"},"content":" public void parseCommand_unrecognisedInput_throwsParseException() {","lastModifiedDate":"2019-03-23"},{"lineNumber":80,"author":{"gitId":"-"},"content":" assertThrows(ParseException.class, String.format(MESSAGE_INVALID_COMMAND_FORMAT, HelpCommand.MESSAGE_USAGE), ()","lastModifiedDate":"2019-03-23"},{"lineNumber":81,"author":{"gitId":"-"},"content":" -\u003e parser.parseCommand(\"\"));","lastModifiedDate":"2019-03-23"},{"lineNumber":82,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-27"},{"lineNumber":83,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-27"},{"lineNumber":84,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-27"},{"lineNumber":85,"author":{"gitId":"-"},"content":" public void parseCommand_unknownCommand_throwsParseException() {","lastModifiedDate":"2019-03-23"},{"lineNumber":86,"author":{"gitId":"-"},"content":" assertThrows(ParseException.class, MESSAGE_UNKNOWN_COMMAND, () -\u003e parser.parseCommand(\"unknownCommand\"));","lastModifiedDate":"2019-03-23"},{"lineNumber":87,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-27"},{"lineNumber":88,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-05-24"}],"authorContributionMap":{"ashleygoh1":49,"-":39}},{"path":"src/test/java/seedu/address/logic/parser/EditCommandParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ashleygoh1"},"content":"//package seedu.address.logic.parser;","lastModifiedDate":"2024-02-26"},{"lineNumber":2,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":3,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2024-02-26"},{"lineNumber":4,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.ADDRESS_DESC_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":5,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.ADDRESS_DESC_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":6,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.EMAIL_DESC_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.EMAIL_DESC_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.INVALID_ADDRESS_DESC;","lastModifiedDate":"2024-02-26"},{"lineNumber":9,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.INVALID_EMAIL_DESC;","lastModifiedDate":"2024-02-26"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.INVALID_NAME_DESC;","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.INVALID_PHONE_DESC;","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.INVALID_TAG_DESC;","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.NAME_DESC_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":14,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.PHONE_DESC_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.PHONE_DESC_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":16,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.TAG_DESC_FRIEND;","lastModifiedDate":"2024-02-26"},{"lineNumber":17,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.TAG_DESC_HUSBAND;","lastModifiedDate":"2024-02-26"},{"lineNumber":18,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":19,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":20,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":21,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":22,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":23,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_FRIEND;","lastModifiedDate":"2024-02-26"},{"lineNumber":24,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND;","lastModifiedDate":"2024-02-26"},{"lineNumber":25,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2024-02-26"},{"lineNumber":26,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2024-02-26"},{"lineNumber":27,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2024-02-26"},{"lineNumber":28,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2024-02-26"},{"lineNumber":29,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.parser.CommandParserTestUtil.assertParseFailure;","lastModifiedDate":"2024-02-26"},{"lineNumber":30,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.logic.parser.CommandParserTestUtil.assertParseSuccess;","lastModifiedDate":"2024-02-26"},{"lineNumber":31,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON;","lastModifiedDate":"2024-02-26"},{"lineNumber":32,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.testutil.TypicalIndexes.INDEX_SECOND_PERSON;","lastModifiedDate":"2024-02-26"},{"lineNumber":33,"author":{"gitId":"ashleygoh1"},"content":"//import static seedu.address.testutil.TypicalIndexes.INDEX_THIRD_PERSON;","lastModifiedDate":"2024-02-26"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":35,"author":{"gitId":"ashleygoh1"},"content":"//import org.junit.jupiter.api.Test;","lastModifiedDate":"2024-02-26"},{"lineNumber":36,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":37,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.commons.core.index.Index;","lastModifiedDate":"2024-02-26"},{"lineNumber":38,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.logic.Messages;","lastModifiedDate":"2024-02-26"},{"lineNumber":39,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.logic.commands.EditCommand;","lastModifiedDate":"2024-02-26"},{"lineNumber":40,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.logic.commands.EditCommand.EditPersonDescriptor;","lastModifiedDate":"2024-02-26"},{"lineNumber":41,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.person.Address;","lastModifiedDate":"2024-02-26"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.person.Email;","lastModifiedDate":"2024-02-26"},{"lineNumber":43,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.person.Name;","lastModifiedDate":"2024-02-26"},{"lineNumber":44,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.person.Phone;","lastModifiedDate":"2024-02-26"},{"lineNumber":45,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.tag.Tag;","lastModifiedDate":"2024-02-26"},{"lineNumber":46,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.testutil.EditPersonDescriptorBuilder;","lastModifiedDate":"2024-02-26"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":48,"author":{"gitId":"ashleygoh1"},"content":"//public class EditCommandParserTest {","lastModifiedDate":"2024-02-26"},{"lineNumber":49,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":50,"author":{"gitId":"ashleygoh1"},"content":"// private static final String TAG_EMPTY \u003d \" \" + PREFIX_TAG;","lastModifiedDate":"2024-02-26"},{"lineNumber":51,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":52,"author":{"gitId":"ashleygoh1"},"content":"// private static final String MESSAGE_INVALID_FORMAT \u003d","lastModifiedDate":"2024-02-26"},{"lineNumber":53,"author":{"gitId":"ashleygoh1"},"content":"// String.format(MESSAGE_INVALID_COMMAND_FORMAT, EditCommand.MESSAGE_USAGE);","lastModifiedDate":"2024-02-26"},{"lineNumber":54,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":55,"author":{"gitId":"ashleygoh1"},"content":"// private EditCommandParser parser \u003d new EditCommandParser();","lastModifiedDate":"2024-02-26"},{"lineNumber":56,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":57,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":58,"author":{"gitId":"ashleygoh1"},"content":"// public void parse_missingParts_failure() {","lastModifiedDate":"2024-02-26"},{"lineNumber":59,"author":{"gitId":"ashleygoh1"},"content":"// // no index specified","lastModifiedDate":"2024-02-26"},{"lineNumber":60,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, VALID_NAME_AMY, MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2024-02-26"},{"lineNumber":61,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":62,"author":{"gitId":"ashleygoh1"},"content":"// // no field specified","lastModifiedDate":"2024-02-26"},{"lineNumber":63,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, \"1\", EditCommand.MESSAGE_NOT_EDITED);","lastModifiedDate":"2024-02-26"},{"lineNumber":64,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":65,"author":{"gitId":"ashleygoh1"},"content":"// // no index and no field specified","lastModifiedDate":"2024-02-26"},{"lineNumber":66,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, \"\", MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2024-02-26"},{"lineNumber":67,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":68,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":69,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":70,"author":{"gitId":"ashleygoh1"},"content":"// public void parse_invalidPreamble_failure() {","lastModifiedDate":"2024-02-26"},{"lineNumber":71,"author":{"gitId":"ashleygoh1"},"content":"// // negative index","lastModifiedDate":"2024-02-26"},{"lineNumber":72,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, \"-5\" + NAME_DESC_AMY, MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2024-02-26"},{"lineNumber":73,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":74,"author":{"gitId":"ashleygoh1"},"content":"// // zero index","lastModifiedDate":"2024-02-26"},{"lineNumber":75,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, \"0\" + NAME_DESC_AMY, MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2024-02-26"},{"lineNumber":76,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":77,"author":{"gitId":"ashleygoh1"},"content":"// // invalid arguments being parsed as preamble","lastModifiedDate":"2024-02-26"},{"lineNumber":78,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, \"1 some random string\", MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2024-02-26"},{"lineNumber":79,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":80,"author":{"gitId":"ashleygoh1"},"content":"// // invalid prefix being parsed as preamble","lastModifiedDate":"2024-02-26"},{"lineNumber":81,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, \"1 i/ string\", MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2024-02-26"},{"lineNumber":82,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":83,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":84,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":85,"author":{"gitId":"ashleygoh1"},"content":"// public void parse_invalidValue_failure() {","lastModifiedDate":"2024-02-26"},{"lineNumber":86,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, \"1\" + INVALID_NAME_DESC, Name.MESSAGE_CONSTRAINTS); // invalid name","lastModifiedDate":"2024-02-26"},{"lineNumber":87,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, \"1\" + INVALID_PHONE_DESC, Phone.MESSAGE_CONSTRAINTS); // invalid phone","lastModifiedDate":"2024-02-26"},{"lineNumber":88,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, \"1\" + INVALID_EMAIL_DESC, Email.MESSAGE_CONSTRAINTS); // invalid email","lastModifiedDate":"2024-02-26"},{"lineNumber":89,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, \"1\" + INVALID_ADDRESS_DESC, Address.MESSAGE_CONSTRAINTS); // invalid address","lastModifiedDate":"2024-02-26"},{"lineNumber":90,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, \"1\" + INVALID_TAG_DESC, Tag.MESSAGE_CONSTRAINTS); // invalid tag","lastModifiedDate":"2024-02-26"},{"lineNumber":91,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":92,"author":{"gitId":"ashleygoh1"},"content":"// // invalid phone followed by valid email","lastModifiedDate":"2024-02-26"},{"lineNumber":93,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, \"1\" + INVALID_PHONE_DESC + EMAIL_DESC_AMY, Phone.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-26"},{"lineNumber":94,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":95,"author":{"gitId":"ashleygoh1"},"content":"// // while parsing {@code PREFIX_TAG} alone will reset the tags of the {@code Person} being edited,","lastModifiedDate":"2024-02-26"},{"lineNumber":96,"author":{"gitId":"ashleygoh1"},"content":"// // parsing it together with a valid tag results in error","lastModifiedDate":"2024-02-26"},{"lineNumber":97,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, \"1\" + TAG_DESC_FRIEND + TAG_DESC_HUSBAND + TAG_EMPTY, Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-26"},{"lineNumber":98,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, \"1\" + TAG_DESC_FRIEND + TAG_EMPTY + TAG_DESC_HUSBAND, Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-26"},{"lineNumber":99,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, \"1\" + TAG_EMPTY + TAG_DESC_FRIEND + TAG_DESC_HUSBAND, Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-26"},{"lineNumber":100,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":101,"author":{"gitId":"ashleygoh1"},"content":"// // multiple invalid values, but only the first invalid value is captured","lastModifiedDate":"2024-02-26"},{"lineNumber":102,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, \"1\" + INVALID_NAME_DESC + INVALID_EMAIL_DESC + VALID_ADDRESS_AMY + VALID_PHONE_AMY,","lastModifiedDate":"2024-02-26"},{"lineNumber":103,"author":{"gitId":"ashleygoh1"},"content":"// Name.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-26"},{"lineNumber":104,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":105,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":106,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":107,"author":{"gitId":"ashleygoh1"},"content":"// public void parse_allFieldsSpecified_success() {","lastModifiedDate":"2024-02-26"},{"lineNumber":108,"author":{"gitId":"ashleygoh1"},"content":"// Index targetIndex \u003d INDEX_SECOND_PERSON;","lastModifiedDate":"2024-02-26"},{"lineNumber":109,"author":{"gitId":"ashleygoh1"},"content":"// String userInput \u003d targetIndex.getOneBased() + PHONE_DESC_BOB + TAG_DESC_HUSBAND","lastModifiedDate":"2024-02-26"},{"lineNumber":110,"author":{"gitId":"ashleygoh1"},"content":"// + EMAIL_DESC_AMY + ADDRESS_DESC_AMY + NAME_DESC_AMY + TAG_DESC_FRIEND;","lastModifiedDate":"2024-02-26"},{"lineNumber":111,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":112,"author":{"gitId":"ashleygoh1"},"content":"// EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder().withName(VALID_NAME_AMY)","lastModifiedDate":"2024-02-26"},{"lineNumber":113,"author":{"gitId":"ashleygoh1"},"content":"// .withPhone(VALID_PHONE_BOB).withEmail(VALID_EMAIL_AMY).withAddress(VALID_ADDRESS_AMY)","lastModifiedDate":"2024-02-26"},{"lineNumber":114,"author":{"gitId":"ashleygoh1"},"content":"// .withTags(VALID_TAG_HUSBAND, VALID_TAG_FRIEND).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":115,"author":{"gitId":"ashleygoh1"},"content":"// EditCommand expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2024-02-26"},{"lineNumber":116,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":117,"author":{"gitId":"ashleygoh1"},"content":"// assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2024-02-26"},{"lineNumber":118,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":119,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":120,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":121,"author":{"gitId":"ashleygoh1"},"content":"// public void parse_someFieldsSpecified_success() {","lastModifiedDate":"2024-02-26"},{"lineNumber":122,"author":{"gitId":"ashleygoh1"},"content":"// Index targetIndex \u003d INDEX_FIRST_PERSON;","lastModifiedDate":"2024-02-26"},{"lineNumber":123,"author":{"gitId":"ashleygoh1"},"content":"// String userInput \u003d targetIndex.getOneBased() + PHONE_DESC_BOB + EMAIL_DESC_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":124,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":125,"author":{"gitId":"ashleygoh1"},"content":"// EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder().withPhone(VALID_PHONE_BOB)","lastModifiedDate":"2024-02-26"},{"lineNumber":126,"author":{"gitId":"ashleygoh1"},"content":"// .withEmail(VALID_EMAIL_AMY).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":127,"author":{"gitId":"ashleygoh1"},"content":"// EditCommand expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2024-02-26"},{"lineNumber":128,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":129,"author":{"gitId":"ashleygoh1"},"content":"// assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2024-02-26"},{"lineNumber":130,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":131,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":132,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":133,"author":{"gitId":"ashleygoh1"},"content":"// public void parse_oneFieldSpecified_success() {","lastModifiedDate":"2024-02-26"},{"lineNumber":134,"author":{"gitId":"ashleygoh1"},"content":"// // name","lastModifiedDate":"2024-02-26"},{"lineNumber":135,"author":{"gitId":"ashleygoh1"},"content":"// Index targetIndex \u003d INDEX_THIRD_PERSON;","lastModifiedDate":"2024-02-26"},{"lineNumber":136,"author":{"gitId":"ashleygoh1"},"content":"// String userInput \u003d targetIndex.getOneBased() + NAME_DESC_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":137,"author":{"gitId":"ashleygoh1"},"content":"// EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder().withName(VALID_NAME_AMY).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":138,"author":{"gitId":"ashleygoh1"},"content":"// EditCommand expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2024-02-26"},{"lineNumber":139,"author":{"gitId":"ashleygoh1"},"content":"// assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2024-02-26"},{"lineNumber":140,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":141,"author":{"gitId":"ashleygoh1"},"content":"// // phone","lastModifiedDate":"2024-02-26"},{"lineNumber":142,"author":{"gitId":"ashleygoh1"},"content":"// userInput \u003d targetIndex.getOneBased() + PHONE_DESC_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":143,"author":{"gitId":"ashleygoh1"},"content":"// descriptor \u003d new EditPersonDescriptorBuilder().withPhone(VALID_PHONE_AMY).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":144,"author":{"gitId":"ashleygoh1"},"content":"// expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2024-02-26"},{"lineNumber":145,"author":{"gitId":"ashleygoh1"},"content":"// assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2024-02-26"},{"lineNumber":146,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":147,"author":{"gitId":"ashleygoh1"},"content":"// // email","lastModifiedDate":"2024-02-26"},{"lineNumber":148,"author":{"gitId":"ashleygoh1"},"content":"// userInput \u003d targetIndex.getOneBased() + EMAIL_DESC_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":149,"author":{"gitId":"ashleygoh1"},"content":"// descriptor \u003d new EditPersonDescriptorBuilder().withEmail(VALID_EMAIL_AMY).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":150,"author":{"gitId":"ashleygoh1"},"content":"// expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2024-02-26"},{"lineNumber":151,"author":{"gitId":"ashleygoh1"},"content":"// assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2024-02-26"},{"lineNumber":152,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":153,"author":{"gitId":"ashleygoh1"},"content":"// // address","lastModifiedDate":"2024-02-26"},{"lineNumber":154,"author":{"gitId":"ashleygoh1"},"content":"// userInput \u003d targetIndex.getOneBased() + ADDRESS_DESC_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":155,"author":{"gitId":"ashleygoh1"},"content":"// descriptor \u003d new EditPersonDescriptorBuilder().withAddress(VALID_ADDRESS_AMY).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":156,"author":{"gitId":"ashleygoh1"},"content":"// expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2024-02-26"},{"lineNumber":157,"author":{"gitId":"ashleygoh1"},"content":"// assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2024-02-26"},{"lineNumber":158,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":159,"author":{"gitId":"ashleygoh1"},"content":"// // tags","lastModifiedDate":"2024-02-26"},{"lineNumber":160,"author":{"gitId":"ashleygoh1"},"content":"// userInput \u003d targetIndex.getOneBased() + TAG_DESC_FRIEND;","lastModifiedDate":"2024-02-26"},{"lineNumber":161,"author":{"gitId":"ashleygoh1"},"content":"// descriptor \u003d new EditPersonDescriptorBuilder().withTags(VALID_TAG_FRIEND).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":162,"author":{"gitId":"ashleygoh1"},"content":"// expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2024-02-26"},{"lineNumber":163,"author":{"gitId":"ashleygoh1"},"content":"// assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2024-02-26"},{"lineNumber":164,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":165,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":166,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":167,"author":{"gitId":"ashleygoh1"},"content":"// public void parse_multipleRepeatedFields_failure() {","lastModifiedDate":"2024-02-26"},{"lineNumber":168,"author":{"gitId":"ashleygoh1"},"content":"// // More extensive testing of duplicate parameter detections is done in","lastModifiedDate":"2024-02-26"},{"lineNumber":169,"author":{"gitId":"ashleygoh1"},"content":"// // AddCommandParserTest#parse_repeatedNonTagValue_failure()","lastModifiedDate":"2024-02-26"},{"lineNumber":170,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":171,"author":{"gitId":"ashleygoh1"},"content":"// // valid followed by invalid","lastModifiedDate":"2024-02-26"},{"lineNumber":172,"author":{"gitId":"ashleygoh1"},"content":"// Index targetIndex \u003d INDEX_FIRST_PERSON;","lastModifiedDate":"2024-02-26"},{"lineNumber":173,"author":{"gitId":"ashleygoh1"},"content":"// String userInput \u003d targetIndex.getOneBased() + INVALID_PHONE_DESC + PHONE_DESC_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":174,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":175,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, userInput, Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE));","lastModifiedDate":"2024-02-26"},{"lineNumber":176,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":177,"author":{"gitId":"ashleygoh1"},"content":"// // invalid followed by valid","lastModifiedDate":"2024-02-26"},{"lineNumber":178,"author":{"gitId":"ashleygoh1"},"content":"// userInput \u003d targetIndex.getOneBased() + PHONE_DESC_BOB + INVALID_PHONE_DESC;","lastModifiedDate":"2024-02-26"},{"lineNumber":179,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":180,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, userInput, Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE));","lastModifiedDate":"2024-02-26"},{"lineNumber":181,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":182,"author":{"gitId":"ashleygoh1"},"content":"// // mulltiple valid fields repeated","lastModifiedDate":"2024-02-26"},{"lineNumber":183,"author":{"gitId":"ashleygoh1"},"content":"// userInput \u003d targetIndex.getOneBased() + PHONE_DESC_AMY + ADDRESS_DESC_AMY + EMAIL_DESC_AMY","lastModifiedDate":"2024-02-26"},{"lineNumber":184,"author":{"gitId":"ashleygoh1"},"content":"// + TAG_DESC_FRIEND + PHONE_DESC_AMY + ADDRESS_DESC_AMY + EMAIL_DESC_AMY + TAG_DESC_FRIEND","lastModifiedDate":"2024-02-26"},{"lineNumber":185,"author":{"gitId":"ashleygoh1"},"content":"// + PHONE_DESC_BOB + ADDRESS_DESC_BOB + EMAIL_DESC_BOB + TAG_DESC_HUSBAND;","lastModifiedDate":"2024-02-26"},{"lineNumber":186,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":187,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, userInput,","lastModifiedDate":"2024-02-26"},{"lineNumber":188,"author":{"gitId":"ashleygoh1"},"content":"// Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS));","lastModifiedDate":"2024-02-26"},{"lineNumber":189,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":190,"author":{"gitId":"ashleygoh1"},"content":"// // multiple invalid values","lastModifiedDate":"2024-02-26"},{"lineNumber":191,"author":{"gitId":"ashleygoh1"},"content":"// userInput \u003d targetIndex.getOneBased() + INVALID_PHONE_DESC + INVALID_ADDRESS_DESC + INVALID_EMAIL_DESC","lastModifiedDate":"2024-02-26"},{"lineNumber":192,"author":{"gitId":"ashleygoh1"},"content":"// + INVALID_PHONE_DESC + INVALID_ADDRESS_DESC + INVALID_EMAIL_DESC;","lastModifiedDate":"2024-02-26"},{"lineNumber":193,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":194,"author":{"gitId":"ashleygoh1"},"content":"// assertParseFailure(parser, userInput,","lastModifiedDate":"2024-02-26"},{"lineNumber":195,"author":{"gitId":"ashleygoh1"},"content":"// Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS));","lastModifiedDate":"2024-02-26"},{"lineNumber":196,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":197,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":198,"author":{"gitId":"ashleygoh1"},"content":"// @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":199,"author":{"gitId":"ashleygoh1"},"content":"// public void parse_resetTags_success() {","lastModifiedDate":"2024-02-26"},{"lineNumber":200,"author":{"gitId":"ashleygoh1"},"content":"// Index targetIndex \u003d INDEX_THIRD_PERSON;","lastModifiedDate":"2024-02-26"},{"lineNumber":201,"author":{"gitId":"ashleygoh1"},"content":"// String userInput \u003d targetIndex.getOneBased() + TAG_EMPTY;","lastModifiedDate":"2024-02-26"},{"lineNumber":202,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":203,"author":{"gitId":"ashleygoh1"},"content":"// EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder().withTags().build();","lastModifiedDate":"2024-02-26"},{"lineNumber":204,"author":{"gitId":"ashleygoh1"},"content":"// EditCommand expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2024-02-26"},{"lineNumber":205,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":206,"author":{"gitId":"ashleygoh1"},"content":"// assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2024-02-26"},{"lineNumber":207,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":208,"author":{"gitId":"ashleygoh1"},"content":"//}","lastModifiedDate":"2024-02-26"}],"authorContributionMap":{"ashleygoh1":208}},{"path":"src/test/java/seedu/address/logic/parser/ParserUtilTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-05-22"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-03-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.ParserUtil.MESSAGE_INVALID_INDEX;","lastModifiedDate":"2017-06-02"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-14"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON;","lastModifiedDate":"2017-08-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2018-07-10"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2017-05-22"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2017-05-22"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2017-05-22"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2017-05-22"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-05-22"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":17,"author":{"gitId":"-"},"content":"public class ParserUtilTest {","lastModifiedDate":"2017-05-22"},{"lineNumber":18,"author":{"gitId":"-"},"content":" private static final String INVALID_NAME \u003d \"R@chel\";","lastModifiedDate":"2017-05-22"},{"lineNumber":19,"author":{"gitId":"-"},"content":" private static final String INVALID_PHONE \u003d \"+651234\";","lastModifiedDate":"2017-05-22"},{"lineNumber":20,"author":{"gitId":"-"},"content":" private static final String INVALID_ADDRESS \u003d \" \";","lastModifiedDate":"2017-05-22"},{"lineNumber":21,"author":{"gitId":"-"},"content":" private static final String INVALID_EMAIL \u003d \"example.com\";","lastModifiedDate":"2017-05-22"},{"lineNumber":22,"author":{"gitId":"ashleygoh1"},"content":" private static final String INVALID_TAG \u003d \"#NR\";","lastModifiedDate":"2024-02-26"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":24,"author":{"gitId":"-"},"content":" private static final String VALID_NAME \u003d \"Rachel Walker\";","lastModifiedDate":"2017-05-22"},{"lineNumber":25,"author":{"gitId":"-"},"content":" private static final String VALID_PHONE \u003d \"123456\";","lastModifiedDate":"2017-05-22"},{"lineNumber":26,"author":{"gitId":"-"},"content":" private static final String VALID_ADDRESS \u003d \"123 Main Street #0505\";","lastModifiedDate":"2017-05-22"},{"lineNumber":27,"author":{"gitId":"-"},"content":" private static final String VALID_EMAIL \u003d \"rachel@example.com\";","lastModifiedDate":"2017-05-22"},{"lineNumber":28,"author":{"gitId":"ashleygoh1"},"content":" private static final String VALID_TAG \u003d \"NR\";","lastModifiedDate":"2024-02-26"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":30,"author":{"gitId":"-"},"content":" private static final String WHITESPACE \u003d \" \\t\\r\\n\";","lastModifiedDate":"2017-05-29"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-29"},{"lineNumber":32,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-26"},{"lineNumber":33,"author":{"gitId":"-"},"content":" public void parseIndex_invalidInput_throwsParseException() {","lastModifiedDate":"2019-03-23"},{"lineNumber":34,"author":{"gitId":"-"},"content":" assertThrows(ParseException.class, () -\u003e ParserUtil.parseIndex(\"10 a\"));","lastModifiedDate":"2019-03-23"},{"lineNumber":35,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-26"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-26"},{"lineNumber":37,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-26"},{"lineNumber":38,"author":{"gitId":"-"},"content":" public void parseIndex_outOfRangeInput_throwsParseException() {","lastModifiedDate":"2019-03-23"},{"lineNumber":39,"author":{"gitId":"-"},"content":" assertThrows(ParseException.class, MESSAGE_INVALID_INDEX, ()","lastModifiedDate":"2019-03-23"},{"lineNumber":40,"author":{"gitId":"-"},"content":" -\u003e ParserUtil.parseIndex(Long.toString(Integer.MAX_VALUE + 1)));","lastModifiedDate":"2019-03-23"},{"lineNumber":41,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-26"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-26"},{"lineNumber":43,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-26"},{"lineNumber":44,"author":{"gitId":"-"},"content":" public void parseIndex_validInput_success() throws Exception {","lastModifiedDate":"2017-05-26"},{"lineNumber":45,"author":{"gitId":"-"},"content":" // No whitespaces","lastModifiedDate":"2017-05-26"},{"lineNumber":46,"author":{"gitId":"-"},"content":" assertEquals(INDEX_FIRST_PERSON, ParserUtil.parseIndex(\"1\"));","lastModifiedDate":"2017-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-26"},{"lineNumber":48,"author":{"gitId":"-"},"content":" // Leading and trailing whitespaces","lastModifiedDate":"2017-05-26"},{"lineNumber":49,"author":{"gitId":"-"},"content":" assertEquals(INDEX_FIRST_PERSON, ParserUtil.parseIndex(\" 1 \"));","lastModifiedDate":"2017-05-25"},{"lineNumber":50,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-26"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-26"},{"lineNumber":52,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":53,"author":{"gitId":"-"},"content":" public void parseName_null_throwsNullPointerException() {","lastModifiedDate":"2017-05-29"},{"lineNumber":54,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e ParserUtil.parseName((String) null));","lastModifiedDate":"2019-03-14"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":57,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":58,"author":{"gitId":"-"},"content":" public void parseName_invalidValue_throwsParseException() {","lastModifiedDate":"2018-07-10"},{"lineNumber":59,"author":{"gitId":"-"},"content":" assertThrows(ParseException.class, () -\u003e ParserUtil.parseName(INVALID_NAME));","lastModifiedDate":"2019-03-14"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":62,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":63,"author":{"gitId":"-"},"content":" public void parseName_validValueWithoutWhitespace_returnsName() throws Exception {","lastModifiedDate":"2017-05-29"},{"lineNumber":64,"author":{"gitId":"-"},"content":" Name expectedName \u003d new Name(VALID_NAME);","lastModifiedDate":"2017-05-22"},{"lineNumber":65,"author":{"gitId":"-"},"content":" assertEquals(expectedName, ParserUtil.parseName(VALID_NAME));","lastModifiedDate":"2017-05-29"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-29"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":68,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-29"},{"lineNumber":69,"author":{"gitId":"-"},"content":" public void parseName_validValueWithWhitespace_returnsTrimmedName() throws Exception {","lastModifiedDate":"2017-05-29"},{"lineNumber":70,"author":{"gitId":"-"},"content":" String nameWithWhitespace \u003d WHITESPACE + VALID_NAME + WHITESPACE;","lastModifiedDate":"2017-05-29"},{"lineNumber":71,"author":{"gitId":"-"},"content":" Name expectedName \u003d new Name(VALID_NAME);","lastModifiedDate":"2017-05-29"},{"lineNumber":72,"author":{"gitId":"-"},"content":" assertEquals(expectedName, ParserUtil.parseName(nameWithWhitespace));","lastModifiedDate":"2017-05-29"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":75,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":76,"author":{"gitId":"-"},"content":" public void parsePhone_null_throwsNullPointerException() {","lastModifiedDate":"2017-05-30"},{"lineNumber":77,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e ParserUtil.parsePhone((String) null));","lastModifiedDate":"2019-03-14"},{"lineNumber":78,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":80,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":81,"author":{"gitId":"-"},"content":" public void parsePhone_invalidValue_throwsParseException() {","lastModifiedDate":"2018-07-10"},{"lineNumber":82,"author":{"gitId":"-"},"content":" assertThrows(ParseException.class, () -\u003e ParserUtil.parsePhone(INVALID_PHONE));","lastModifiedDate":"2019-03-14"},{"lineNumber":83,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":85,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":86,"author":{"gitId":"-"},"content":" public void parsePhone_validValueWithoutWhitespace_returnsPhone() throws Exception {","lastModifiedDate":"2017-05-30"},{"lineNumber":87,"author":{"gitId":"-"},"content":" Phone expectedPhone \u003d new Phone(VALID_PHONE);","lastModifiedDate":"2017-05-22"},{"lineNumber":88,"author":{"gitId":"-"},"content":" assertEquals(expectedPhone, ParserUtil.parsePhone(VALID_PHONE));","lastModifiedDate":"2017-05-30"},{"lineNumber":89,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":91,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-30"},{"lineNumber":92,"author":{"gitId":"-"},"content":" public void parsePhone_validValueWithWhitespace_returnsTrimmedPhone() throws Exception {","lastModifiedDate":"2017-05-30"},{"lineNumber":93,"author":{"gitId":"-"},"content":" String phoneWithWhitespace \u003d WHITESPACE + VALID_PHONE + WHITESPACE;","lastModifiedDate":"2017-05-30"},{"lineNumber":94,"author":{"gitId":"-"},"content":" Phone expectedPhone \u003d new Phone(VALID_PHONE);","lastModifiedDate":"2017-05-30"},{"lineNumber":95,"author":{"gitId":"-"},"content":" assertEquals(expectedPhone, ParserUtil.parsePhone(phoneWithWhitespace));","lastModifiedDate":"2017-05-30"},{"lineNumber":96,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":97,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":98,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":99,"author":{"gitId":"-"},"content":" public void parseAddress_null_throwsNullPointerException() {","lastModifiedDate":"2017-05-30"},{"lineNumber":100,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e ParserUtil.parseAddress((String) null));","lastModifiedDate":"2019-03-14"},{"lineNumber":101,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":102,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":103,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":104,"author":{"gitId":"-"},"content":" public void parseAddress_validValueWithoutWhitespace_returnsAddress() throws Exception {","lastModifiedDate":"2017-05-30"},{"lineNumber":105,"author":{"gitId":"-"},"content":" Address expectedAddress \u003d new Address(VALID_ADDRESS);","lastModifiedDate":"2017-05-22"},{"lineNumber":106,"author":{"gitId":"-"},"content":" assertEquals(expectedAddress, ParserUtil.parseAddress(VALID_ADDRESS));","lastModifiedDate":"2017-05-30"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":108,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":109,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-30"},{"lineNumber":110,"author":{"gitId":"-"},"content":" public void parseAddress_validValueWithWhitespace_returnsTrimmedAddress() throws Exception {","lastModifiedDate":"2017-05-30"},{"lineNumber":111,"author":{"gitId":"-"},"content":" String addressWithWhitespace \u003d WHITESPACE + VALID_ADDRESS + WHITESPACE;","lastModifiedDate":"2017-05-30"},{"lineNumber":112,"author":{"gitId":"-"},"content":" Address expectedAddress \u003d new Address(VALID_ADDRESS);","lastModifiedDate":"2017-05-30"},{"lineNumber":113,"author":{"gitId":"-"},"content":" assertEquals(expectedAddress, ParserUtil.parseAddress(addressWithWhitespace));","lastModifiedDate":"2017-05-30"},{"lineNumber":114,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":115,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":116,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":117,"author":{"gitId":"-"},"content":" public void parseEmail_null_throwsNullPointerException() {","lastModifiedDate":"2017-05-30"},{"lineNumber":118,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e ParserUtil.parseEmail((String) null));","lastModifiedDate":"2019-03-14"},{"lineNumber":119,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":121,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":122,"author":{"gitId":"-"},"content":" public void parseEmail_invalidValue_throwsParseException() {","lastModifiedDate":"2018-07-10"},{"lineNumber":123,"author":{"gitId":"-"},"content":" assertThrows(ParseException.class, () -\u003e ParserUtil.parseEmail(INVALID_EMAIL));","lastModifiedDate":"2019-03-14"},{"lineNumber":124,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":125,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":126,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":127,"author":{"gitId":"-"},"content":" public void parseEmail_validValueWithoutWhitespace_returnsEmail() throws Exception {","lastModifiedDate":"2017-05-30"},{"lineNumber":128,"author":{"gitId":"-"},"content":" Email expectedEmail \u003d new Email(VALID_EMAIL);","lastModifiedDate":"2017-05-22"},{"lineNumber":129,"author":{"gitId":"-"},"content":" assertEquals(expectedEmail, ParserUtil.parseEmail(VALID_EMAIL));","lastModifiedDate":"2017-05-30"},{"lineNumber":130,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":131,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":132,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-30"},{"lineNumber":133,"author":{"gitId":"-"},"content":" public void parseEmail_validValueWithWhitespace_returnsTrimmedEmail() throws Exception {","lastModifiedDate":"2017-05-30"},{"lineNumber":134,"author":{"gitId":"-"},"content":" String emailWithWhitespace \u003d WHITESPACE + VALID_EMAIL + WHITESPACE;","lastModifiedDate":"2017-05-30"},{"lineNumber":135,"author":{"gitId":"-"},"content":" Email expectedEmail \u003d new Email(VALID_EMAIL);","lastModifiedDate":"2017-05-30"},{"lineNumber":136,"author":{"gitId":"-"},"content":" assertEquals(expectedEmail, ParserUtil.parseEmail(emailWithWhitespace));","lastModifiedDate":"2017-05-30"},{"lineNumber":137,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":138,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":139,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-30"},{"lineNumber":140,"author":{"gitId":"-"},"content":" public void parseTag_null_throwsNullPointerException() {","lastModifiedDate":"2019-03-23"},{"lineNumber":141,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e ParserUtil.parseTag(null));","lastModifiedDate":"2019-03-23"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":143,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":144,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-30"},{"lineNumber":145,"author":{"gitId":"-"},"content":" public void parseTag_invalidValue_throwsParseException() {","lastModifiedDate":"2019-03-23"},{"lineNumber":146,"author":{"gitId":"-"},"content":" assertThrows(ParseException.class, () -\u003e ParserUtil.parseTag(INVALID_TAG));","lastModifiedDate":"2019-03-23"},{"lineNumber":147,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":148,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":149,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-30"},{"lineNumber":150,"author":{"gitId":"-"},"content":" public void parseTag_validValueWithoutWhitespace_returnsTag() throws Exception {","lastModifiedDate":"2017-05-30"},{"lineNumber":151,"author":{"gitId":"ashleygoh1"},"content":" Tag expectedTag \u003d new Tag(VALID_TAG);","lastModifiedDate":"2024-02-26"},{"lineNumber":152,"author":{"gitId":"ashleygoh1"},"content":" assertEquals(expectedTag, ParserUtil.parseTag(VALID_TAG));","lastModifiedDate":"2024-02-26"},{"lineNumber":153,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":154,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":155,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-30"},{"lineNumber":156,"author":{"gitId":"-"},"content":" public void parseTag_validValueWithWhitespace_returnsTrimmedTag() throws Exception {","lastModifiedDate":"2017-05-30"},{"lineNumber":157,"author":{"gitId":"ashleygoh1"},"content":" String tagWithWhitespace \u003d WHITESPACE + VALID_TAG + WHITESPACE;","lastModifiedDate":"2024-02-26"},{"lineNumber":158,"author":{"gitId":"ashleygoh1"},"content":" Tag expectedTag \u003d new Tag(VALID_TAG);","lastModifiedDate":"2024-02-26"},{"lineNumber":159,"author":{"gitId":"-"},"content":" assertEquals(expectedTag, ParserUtil.parseTag(tagWithWhitespace));","lastModifiedDate":"2017-05-30"},{"lineNumber":160,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":161,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":162,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-22"},{"lineNumber":163,"author":{"gitId":"-"},"content":" public void parseTags_null_throwsNullPointerException() {","lastModifiedDate":"2019-03-23"},{"lineNumber":164,"author":{"gitId":"ashleygoh1"},"content":" assertThrows(NullPointerException.class, () -\u003e ParserUtil.parseTag(null));","lastModifiedDate":"2024-02-26"},{"lineNumber":165,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-22"},{"lineNumber":166,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-22"},{"lineNumber":167,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-05-22"}],"authorContributionMap":{"ashleygoh1":7,"-":160}},{"path":"src/test/java/seedu/address/model/AddressBookTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model;","lastModifiedDate":"2016-12-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-03-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2019-03-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2019-03-15"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB;","lastModifiedDate":"2018-04-19"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_FIRST_INTERVIEW;","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.ALICE;","lastModifiedDate":"2017-07-19"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.getTypicalAddressBook;","lastModifiedDate":"2017-07-19"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import java.util.Arrays;","lastModifiedDate":"2016-12-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import java.util.Collection;","lastModifiedDate":"2016-12-24"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import java.util.Collections;","lastModifiedDate":"2016-12-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2016-12-24"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import javafx.collections.FXCollections;","lastModifiedDate":"2016-12-24"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import javafx.collections.ObservableList;","lastModifiedDate":"2016-12-24"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2016-12-24"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import seedu.address.model.person.exceptions.DuplicatePersonException;","lastModifiedDate":"2018-08-07"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import seedu.address.testutil.PersonBuilder;","lastModifiedDate":"2018-04-19"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-24"},{"lineNumber":25,"author":{"gitId":"-"},"content":"public class AddressBookTest {","lastModifiedDate":"2016-12-24"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-24"},{"lineNumber":27,"author":{"gitId":"-"},"content":" private final AddressBook addressBook \u003d new AddressBook();","lastModifiedDate":"2016-12-24"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-24"},{"lineNumber":29,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2016-12-24"},{"lineNumber":30,"author":{"gitId":"-"},"content":" public void constructor() {","lastModifiedDate":"2016-12-24"},{"lineNumber":31,"author":{"gitId":"-"},"content":" assertEquals(Collections.emptyList(), addressBook.getPersonList());","lastModifiedDate":"2016-12-24"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-24"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-24"},{"lineNumber":34,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2016-12-24"},{"lineNumber":35,"author":{"gitId":"-"},"content":" public void resetData_null_throwsNullPointerException() {","lastModifiedDate":"2017-05-15"},{"lineNumber":36,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e addressBook.resetData(null));","lastModifiedDate":"2019-03-23"},{"lineNumber":37,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-24"},{"lineNumber":39,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2016-12-24"},{"lineNumber":40,"author":{"gitId":"-"},"content":" public void resetData_withValidReadOnlyAddressBook_replacesData() {","lastModifiedDate":"2016-12-24"},{"lineNumber":41,"author":{"gitId":"-"},"content":" AddressBook newData \u003d getTypicalAddressBook();","lastModifiedDate":"2017-07-19"},{"lineNumber":42,"author":{"gitId":"-"},"content":" addressBook.resetData(newData);","lastModifiedDate":"2016-12-24"},{"lineNumber":43,"author":{"gitId":"-"},"content":" assertEquals(newData, addressBook);","lastModifiedDate":"2016-12-24"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-24"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-24"},{"lineNumber":46,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2016-12-24"},{"lineNumber":47,"author":{"gitId":"-"},"content":" public void resetData_withDuplicatePersons_throwsDuplicatePersonException() {","lastModifiedDate":"2018-08-07"},{"lineNumber":48,"author":{"gitId":"-"},"content":" // Two persons with the same identity fields","lastModifiedDate":"2018-04-19"},{"lineNumber":49,"author":{"gitId":"ashleygoh1"},"content":" Person editedAlice \u003d new PersonBuilder(ALICE).withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_FIRST_INTERVIEW)","lastModifiedDate":"2024-02-26"},{"lineNumber":50,"author":{"gitId":"-"},"content":" .build();","lastModifiedDate":"2018-04-19"},{"lineNumber":51,"author":{"gitId":"-"},"content":" List\u003cPerson\u003e newPersons \u003d Arrays.asList(ALICE, editedAlice);","lastModifiedDate":"2018-04-19"},{"lineNumber":52,"author":{"gitId":"-"},"content":" AddressBookStub newData \u003d new AddressBookStub(newPersons);","lastModifiedDate":"2018-03-29"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-24"},{"lineNumber":54,"author":{"gitId":"-"},"content":" assertThrows(DuplicatePersonException.class, () -\u003e addressBook.resetData(newData));","lastModifiedDate":"2019-03-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-24"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-24"},{"lineNumber":57,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-06"},{"lineNumber":58,"author":{"gitId":"-"},"content":" public void hasPerson_nullPerson_throwsNullPointerException() {","lastModifiedDate":"2018-08-06"},{"lineNumber":59,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e addressBook.hasPerson(null));","lastModifiedDate":"2019-03-23"},{"lineNumber":60,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-06"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-06"},{"lineNumber":62,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-06"},{"lineNumber":63,"author":{"gitId":"-"},"content":" public void hasPerson_personNotInAddressBook_returnsFalse() {","lastModifiedDate":"2018-08-06"},{"lineNumber":64,"author":{"gitId":"-"},"content":" assertFalse(addressBook.hasPerson(ALICE));","lastModifiedDate":"2018-08-06"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-06"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-06"},{"lineNumber":67,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-06"},{"lineNumber":68,"author":{"gitId":"-"},"content":" public void hasPerson_personInAddressBook_returnsTrue() {","lastModifiedDate":"2018-08-07"},{"lineNumber":69,"author":{"gitId":"-"},"content":" addressBook.addPerson(ALICE);","lastModifiedDate":"2018-08-06"},{"lineNumber":70,"author":{"gitId":"-"},"content":" assertTrue(addressBook.hasPerson(ALICE));","lastModifiedDate":"2018-08-06"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-06"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-06"},{"lineNumber":73,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-06"},{"lineNumber":74,"author":{"gitId":"-"},"content":" public void hasPerson_personWithSameIdentityFieldsInAddressBook_returnsTrue() {","lastModifiedDate":"2018-08-07"},{"lineNumber":75,"author":{"gitId":"-"},"content":" addressBook.addPerson(ALICE);","lastModifiedDate":"2018-08-06"},{"lineNumber":76,"author":{"gitId":"ashleygoh1"},"content":" Person editedAlice \u003d new PersonBuilder(ALICE).withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_FIRST_INTERVIEW)","lastModifiedDate":"2024-02-26"},{"lineNumber":77,"author":{"gitId":"-"},"content":" .build();","lastModifiedDate":"2018-08-06"},{"lineNumber":78,"author":{"gitId":"-"},"content":" assertTrue(addressBook.hasPerson(editedAlice));","lastModifiedDate":"2018-08-06"},{"lineNumber":79,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-06"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-06"},{"lineNumber":81,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-09-01"},{"lineNumber":82,"author":{"gitId":"-"},"content":" public void getPersonList_modifyList_throwsUnsupportedOperationException() {","lastModifiedDate":"2017-09-01"},{"lineNumber":83,"author":{"gitId":"-"},"content":" assertThrows(UnsupportedOperationException.class, () -\u003e addressBook.getPersonList().remove(0));","lastModifiedDate":"2019-03-23"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-09-01"},{"lineNumber":85,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":86,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2019-02-23"},{"lineNumber":87,"author":{"gitId":"-"},"content":" public void toStringMethod() {","lastModifiedDate":"2019-02-23"},{"lineNumber":88,"author":{"gitId":"-"},"content":" String expected \u003d AddressBook.class.getCanonicalName() + \"{persons\u003d\" + addressBook.getPersonList() + \"}\";","lastModifiedDate":"2019-02-23"},{"lineNumber":89,"author":{"gitId":"-"},"content":" assertEquals(expected, addressBook.toString());","lastModifiedDate":"2019-02-23"},{"lineNumber":90,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":91,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":92,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-12-24"},{"lineNumber":93,"author":{"gitId":"-"},"content":" * A stub ReadOnlyAddressBook whose persons list can violate interface constraints.","lastModifiedDate":"2018-03-29"},{"lineNumber":94,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-24"},{"lineNumber":95,"author":{"gitId":"-"},"content":" private static class AddressBookStub implements ReadOnlyAddressBook {","lastModifiedDate":"2016-12-24"},{"lineNumber":96,"author":{"gitId":"-"},"content":" private final ObservableList\u003cPerson\u003e persons \u003d FXCollections.observableArrayList();","lastModifiedDate":"2018-01-10"},{"lineNumber":97,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-24"},{"lineNumber":98,"author":{"gitId":"-"},"content":" AddressBookStub(Collection\u003cPerson\u003e persons) {","lastModifiedDate":"2018-03-29"},{"lineNumber":99,"author":{"gitId":"-"},"content":" this.persons.setAll(persons);","lastModifiedDate":"2016-12-24"},{"lineNumber":100,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-24"},{"lineNumber":101,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-24"},{"lineNumber":102,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-12-24"},{"lineNumber":103,"author":{"gitId":"-"},"content":" public ObservableList\u003cPerson\u003e getPersonList() {","lastModifiedDate":"2018-01-10"},{"lineNumber":104,"author":{"gitId":"-"},"content":" return persons;","lastModifiedDate":"2016-12-24"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-24"},{"lineNumber":106,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-24"},{"lineNumber":107,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-24"},{"lineNumber":108,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-12-24"}],"authorContributionMap":{"ashleygoh1":3,"-":105}},{"path":"src/test/java/seedu/address/model/ModelManagerTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model;","lastModifiedDate":"2017-05-31"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-03-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2019-03-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2019-03-15"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.model.Model.PREDICATE_SHOW_ALL_PERSONS;","lastModifiedDate":"2017-08-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-23"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.ALICE;","lastModifiedDate":"2017-07-19"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.BENSON;","lastModifiedDate":"2017-07-19"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import java.nio.file.Path;","lastModifiedDate":"2018-11-27"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2018-08-09"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import java.util.Arrays;","lastModifiedDate":"2017-05-31"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.GuiSettings;","lastModifiedDate":"2018-11-27"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.model.person.NameContainsKeywordsPredicate;","lastModifiedDate":"2017-06-12"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.testutil.AddressBookBuilder;","lastModifiedDate":"2017-05-31"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":21,"author":{"gitId":"-"},"content":"public class ModelManagerTest {","lastModifiedDate":"2017-05-31"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":23,"author":{"gitId":"-"},"content":" private ModelManager modelManager \u003d new ModelManager();","lastModifiedDate":"2018-08-06"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-06"},{"lineNumber":25,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-11-27"},{"lineNumber":26,"author":{"gitId":"-"},"content":" public void constructor() {","lastModifiedDate":"2018-11-27"},{"lineNumber":27,"author":{"gitId":"-"},"content":" assertEquals(new UserPrefs(), modelManager.getUserPrefs());","lastModifiedDate":"2018-11-27"},{"lineNumber":28,"author":{"gitId":"-"},"content":" assertEquals(new GuiSettings(), modelManager.getGuiSettings());","lastModifiedDate":"2018-11-27"},{"lineNumber":29,"author":{"gitId":"-"},"content":" assertEquals(new AddressBook(), new AddressBook(modelManager.getAddressBook()));","lastModifiedDate":"2018-11-27"},{"lineNumber":30,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":32,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-11-27"},{"lineNumber":33,"author":{"gitId":"-"},"content":" public void setUserPrefs_nullUserPrefs_throwsNullPointerException() {","lastModifiedDate":"2018-11-27"},{"lineNumber":34,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e modelManager.setUserPrefs(null));","lastModifiedDate":"2019-03-23"},{"lineNumber":35,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":37,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-11-27"},{"lineNumber":38,"author":{"gitId":"-"},"content":" public void setUserPrefs_validUserPrefs_copiesUserPrefs() {","lastModifiedDate":"2018-12-06"},{"lineNumber":39,"author":{"gitId":"-"},"content":" UserPrefs userPrefs \u003d new UserPrefs();","lastModifiedDate":"2018-11-27"},{"lineNumber":40,"author":{"gitId":"-"},"content":" userPrefs.setAddressBookFilePath(Paths.get(\"address/book/file/path\"));","lastModifiedDate":"2018-11-27"},{"lineNumber":41,"author":{"gitId":"-"},"content":" userPrefs.setGuiSettings(new GuiSettings(1, 2, 3, 4));","lastModifiedDate":"2018-11-27"},{"lineNumber":42,"author":{"gitId":"-"},"content":" modelManager.setUserPrefs(userPrefs);","lastModifiedDate":"2018-11-27"},{"lineNumber":43,"author":{"gitId":"-"},"content":" assertEquals(userPrefs, modelManager.getUserPrefs());","lastModifiedDate":"2018-11-27"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-06"},{"lineNumber":45,"author":{"gitId":"-"},"content":" // Modifying userPrefs should not modify modelManager\u0027s userPrefs","lastModifiedDate":"2018-12-06"},{"lineNumber":46,"author":{"gitId":"-"},"content":" UserPrefs oldUserPrefs \u003d new UserPrefs(userPrefs);","lastModifiedDate":"2018-12-06"},{"lineNumber":47,"author":{"gitId":"-"},"content":" userPrefs.setAddressBookFilePath(Paths.get(\"new/address/book/file/path\"));","lastModifiedDate":"2018-12-06"},{"lineNumber":48,"author":{"gitId":"-"},"content":" assertEquals(oldUserPrefs, modelManager.getUserPrefs());","lastModifiedDate":"2018-12-06"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":51,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-11-27"},{"lineNumber":52,"author":{"gitId":"-"},"content":" public void setGuiSettings_nullGuiSettings_throwsNullPointerException() {","lastModifiedDate":"2018-11-27"},{"lineNumber":53,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e modelManager.setGuiSettings(null));","lastModifiedDate":"2019-03-23"},{"lineNumber":54,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":56,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-11-27"},{"lineNumber":57,"author":{"gitId":"-"},"content":" public void setGuiSettings_validGuiSettings_setsGuiSettings() {","lastModifiedDate":"2018-11-27"},{"lineNumber":58,"author":{"gitId":"-"},"content":" GuiSettings guiSettings \u003d new GuiSettings(1, 2, 3, 4);","lastModifiedDate":"2018-11-27"},{"lineNumber":59,"author":{"gitId":"-"},"content":" modelManager.setGuiSettings(guiSettings);","lastModifiedDate":"2018-11-27"},{"lineNumber":60,"author":{"gitId":"-"},"content":" assertEquals(guiSettings, modelManager.getGuiSettings());","lastModifiedDate":"2018-11-27"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":63,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-11-27"},{"lineNumber":64,"author":{"gitId":"-"},"content":" public void setAddressBookFilePath_nullPath_throwsNullPointerException() {","lastModifiedDate":"2018-11-27"},{"lineNumber":65,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e modelManager.setAddressBookFilePath(null));","lastModifiedDate":"2019-03-23"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":68,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-11-27"},{"lineNumber":69,"author":{"gitId":"-"},"content":" public void setAddressBookFilePath_validPath_setsAddressBookFilePath() {","lastModifiedDate":"2018-11-27"},{"lineNumber":70,"author":{"gitId":"-"},"content":" Path path \u003d Paths.get(\"address/book/file/path\");","lastModifiedDate":"2018-11-27"},{"lineNumber":71,"author":{"gitId":"-"},"content":" modelManager.setAddressBookFilePath(path);","lastModifiedDate":"2018-11-27"},{"lineNumber":72,"author":{"gitId":"-"},"content":" assertEquals(path, modelManager.getAddressBookFilePath());","lastModifiedDate":"2018-11-27"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-11-27"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-11-27"},{"lineNumber":75,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-06"},{"lineNumber":76,"author":{"gitId":"-"},"content":" public void hasPerson_nullPerson_throwsNullPointerException() {","lastModifiedDate":"2018-08-06"},{"lineNumber":77,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e modelManager.hasPerson(null));","lastModifiedDate":"2019-03-23"},{"lineNumber":78,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-06"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-06"},{"lineNumber":80,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-06"},{"lineNumber":81,"author":{"gitId":"-"},"content":" public void hasPerson_personNotInAddressBook_returnsFalse() {","lastModifiedDate":"2018-08-06"},{"lineNumber":82,"author":{"gitId":"-"},"content":" assertFalse(modelManager.hasPerson(ALICE));","lastModifiedDate":"2018-08-06"},{"lineNumber":83,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-06"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-06"},{"lineNumber":85,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-06"},{"lineNumber":86,"author":{"gitId":"-"},"content":" public void hasPerson_personInAddressBook_returnsTrue() {","lastModifiedDate":"2018-08-07"},{"lineNumber":87,"author":{"gitId":"-"},"content":" modelManager.addPerson(ALICE);","lastModifiedDate":"2018-08-06"},{"lineNumber":88,"author":{"gitId":"-"},"content":" assertTrue(modelManager.hasPerson(ALICE));","lastModifiedDate":"2018-08-06"},{"lineNumber":89,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-06"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-06"},{"lineNumber":91,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-09-01"},{"lineNumber":92,"author":{"gitId":"-"},"content":" public void getFilteredPersonList_modifyList_throwsUnsupportedOperationException() {","lastModifiedDate":"2017-09-01"},{"lineNumber":93,"author":{"gitId":"-"},"content":" assertThrows(UnsupportedOperationException.class, () -\u003e modelManager.getFilteredPersonList().remove(0));","lastModifiedDate":"2019-03-23"},{"lineNumber":94,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-09-01"},{"lineNumber":95,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":96,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-31"},{"lineNumber":97,"author":{"gitId":"-"},"content":" public void equals() {","lastModifiedDate":"2017-08-15"},{"lineNumber":98,"author":{"gitId":"-"},"content":" AddressBook addressBook \u003d new AddressBookBuilder().withPerson(ALICE).withPerson(BENSON).build();","lastModifiedDate":"2017-07-19"},{"lineNumber":99,"author":{"gitId":"-"},"content":" AddressBook differentAddressBook \u003d new AddressBook();","lastModifiedDate":"2017-05-31"},{"lineNumber":100,"author":{"gitId":"-"},"content":" UserPrefs userPrefs \u003d new UserPrefs();","lastModifiedDate":"2017-05-31"},{"lineNumber":101,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":102,"author":{"gitId":"-"},"content":" // same values -\u003e returns true","lastModifiedDate":"2017-05-31"},{"lineNumber":103,"author":{"gitId":"-"},"content":" modelManager \u003d new ModelManager(addressBook, userPrefs);","lastModifiedDate":"2018-08-06"},{"lineNumber":104,"author":{"gitId":"-"},"content":" ModelManager modelManagerCopy \u003d new ModelManager(addressBook, userPrefs);","lastModifiedDate":"2017-05-31"},{"lineNumber":105,"author":{"gitId":"-"},"content":" assertTrue(modelManager.equals(modelManagerCopy));","lastModifiedDate":"2017-05-31"},{"lineNumber":106,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":107,"author":{"gitId":"-"},"content":" // same object -\u003e returns true","lastModifiedDate":"2017-05-31"},{"lineNumber":108,"author":{"gitId":"-"},"content":" assertTrue(modelManager.equals(modelManager));","lastModifiedDate":"2017-05-31"},{"lineNumber":109,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":110,"author":{"gitId":"-"},"content":" // null -\u003e returns false","lastModifiedDate":"2017-05-31"},{"lineNumber":111,"author":{"gitId":"-"},"content":" assertFalse(modelManager.equals(null));","lastModifiedDate":"2017-05-31"},{"lineNumber":112,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":113,"author":{"gitId":"-"},"content":" // different types -\u003e returns false","lastModifiedDate":"2017-05-31"},{"lineNumber":114,"author":{"gitId":"-"},"content":" assertFalse(modelManager.equals(5));","lastModifiedDate":"2017-05-31"},{"lineNumber":115,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":116,"author":{"gitId":"-"},"content":" // different addressBook -\u003e returns false","lastModifiedDate":"2017-05-31"},{"lineNumber":117,"author":{"gitId":"-"},"content":" assertFalse(modelManager.equals(new ModelManager(differentAddressBook, userPrefs)));","lastModifiedDate":"2017-05-31"},{"lineNumber":118,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":119,"author":{"gitId":"-"},"content":" // different filteredList -\u003e returns false","lastModifiedDate":"2017-05-31"},{"lineNumber":120,"author":{"gitId":"ashleygoh1"},"content":" String[] keywords \u003d ALICE.getCompanyName().fullName.split(\"\\\\s+\");","lastModifiedDate":"2024-02-25"},{"lineNumber":121,"author":{"gitId":"-"},"content":" modelManager.updateFilteredPersonList(new NameContainsKeywordsPredicate(Arrays.asList(keywords)));","lastModifiedDate":"2017-06-12"},{"lineNumber":122,"author":{"gitId":"-"},"content":" assertFalse(modelManager.equals(new ModelManager(addressBook, userPrefs)));","lastModifiedDate":"2017-05-31"},{"lineNumber":123,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-08-05"},{"lineNumber":124,"author":{"gitId":"-"},"content":" // resets modelManager to initial state for upcoming tests","lastModifiedDate":"2017-08-05"},{"lineNumber":125,"author":{"gitId":"-"},"content":" modelManager.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS);","lastModifiedDate":"2017-08-05"},{"lineNumber":126,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-31"},{"lineNumber":127,"author":{"gitId":"-"},"content":" // different userPrefs -\u003e returns false","lastModifiedDate":"2018-11-27"},{"lineNumber":128,"author":{"gitId":"-"},"content":" UserPrefs differentUserPrefs \u003d new UserPrefs();","lastModifiedDate":"2017-05-31"},{"lineNumber":129,"author":{"gitId":"-"},"content":" differentUserPrefs.setAddressBookFilePath(Paths.get(\"differentFilePath\"));","lastModifiedDate":"2018-08-09"},{"lineNumber":130,"author":{"gitId":"-"},"content":" assertFalse(modelManager.equals(new ModelManager(addressBook, differentUserPrefs)));","lastModifiedDate":"2018-11-27"},{"lineNumber":131,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-31"},{"lineNumber":132,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-05-31"}],"authorContributionMap":{"ashleygoh1":1,"-":131}},{"path":"src/test/java/seedu/address/model/person/PersonTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model.person;","lastModifiedDate":"2018-03-26"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-02-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2019-03-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2019-03-15"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB;","lastModifiedDate":"2018-04-19"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_BOB;","lastModifiedDate":"2018-04-19"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB;","lastModifiedDate":"2018-04-19"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB;","lastModifiedDate":"2018-04-19"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_FIRST_INTERVIEW;","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.ALICE;","lastModifiedDate":"2018-04-19"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.BOB;","lastModifiedDate":"2018-04-19"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.testutil.PersonBuilder;","lastModifiedDate":"2018-03-26"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":18,"author":{"gitId":"-"},"content":"public class PersonTest {","lastModifiedDate":"2018-03-26"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":20,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-04-19"},{"lineNumber":21,"author":{"gitId":"-"},"content":" public void isSamePerson() {","lastModifiedDate":"2018-04-19"},{"lineNumber":22,"author":{"gitId":"-"},"content":" // same object -\u003e returns true","lastModifiedDate":"2018-04-19"},{"lineNumber":23,"author":{"gitId":"-"},"content":" assertTrue(ALICE.isSamePerson(ALICE));","lastModifiedDate":"2018-04-19"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":25,"author":{"gitId":"-"},"content":" // null -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":26,"author":{"gitId":"-"},"content":" assertFalse(ALICE.isSamePerson(null));","lastModifiedDate":"2018-04-19"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":28,"author":{"gitId":"-"},"content":" // same name, all other attributes different -\u003e returns true","lastModifiedDate":"2020-12-18"},{"lineNumber":29,"author":{"gitId":"-"},"content":" Person editedAlice \u003d new PersonBuilder(ALICE).withPhone(VALID_PHONE_BOB).withEmail(VALID_EMAIL_BOB)","lastModifiedDate":"2020-12-18"},{"lineNumber":30,"author":{"gitId":"ashleygoh1"},"content":" .withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_FIRST_INTERVIEW).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":31,"author":{"gitId":"-"},"content":" assertTrue(ALICE.isSamePerson(editedAlice));","lastModifiedDate":"2020-12-18"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":33,"author":{"gitId":"-"},"content":" // different name, all other attributes same -\u003e returns false","lastModifiedDate":"2020-12-18"},{"lineNumber":34,"author":{"gitId":"-"},"content":" editedAlice \u003d new PersonBuilder(ALICE).withName(VALID_NAME_BOB).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":35,"author":{"gitId":"-"},"content":" assertFalse(ALICE.isSamePerson(editedAlice));","lastModifiedDate":"2018-04-19"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":37,"author":{"gitId":"-"},"content":" // name differs in case, all other attributes same -\u003e returns false","lastModifiedDate":"2020-12-18"},{"lineNumber":38,"author":{"gitId":"-"},"content":" Person editedBob \u003d new PersonBuilder(BOB).withName(VALID_NAME_BOB.toLowerCase()).build();","lastModifiedDate":"2020-12-18"},{"lineNumber":39,"author":{"gitId":"-"},"content":" assertFalse(BOB.isSamePerson(editedBob));","lastModifiedDate":"2020-12-18"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":41,"author":{"gitId":"-"},"content":" // name has trailing spaces, all other attributes same -\u003e returns false","lastModifiedDate":"2020-12-18"},{"lineNumber":42,"author":{"gitId":"-"},"content":" String nameWithTrailingSpaces \u003d VALID_NAME_BOB + \" \";","lastModifiedDate":"2020-12-18"},{"lineNumber":43,"author":{"gitId":"-"},"content":" editedBob \u003d new PersonBuilder(BOB).withName(nameWithTrailingSpaces).build();","lastModifiedDate":"2020-12-18"},{"lineNumber":44,"author":{"gitId":"-"},"content":" assertFalse(BOB.isSamePerson(editedBob));","lastModifiedDate":"2020-12-18"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-04-19"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":47,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-04-19"},{"lineNumber":48,"author":{"gitId":"-"},"content":" public void equals() {","lastModifiedDate":"2018-04-19"},{"lineNumber":49,"author":{"gitId":"-"},"content":" // same values -\u003e returns true","lastModifiedDate":"2018-04-19"},{"lineNumber":50,"author":{"gitId":"-"},"content":" Person aliceCopy \u003d new PersonBuilder(ALICE).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":51,"author":{"gitId":"-"},"content":" assertTrue(ALICE.equals(aliceCopy));","lastModifiedDate":"2018-04-19"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":53,"author":{"gitId":"-"},"content":" // same object -\u003e returns true","lastModifiedDate":"2018-04-19"},{"lineNumber":54,"author":{"gitId":"-"},"content":" assertTrue(ALICE.equals(ALICE));","lastModifiedDate":"2018-04-19"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":56,"author":{"gitId":"-"},"content":" // null -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":57,"author":{"gitId":"-"},"content":" assertFalse(ALICE.equals(null));","lastModifiedDate":"2018-04-19"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":59,"author":{"gitId":"-"},"content":" // different type -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":60,"author":{"gitId":"-"},"content":" assertFalse(ALICE.equals(5));","lastModifiedDate":"2018-04-19"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":62,"author":{"gitId":"-"},"content":" // different person -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":63,"author":{"gitId":"-"},"content":" assertFalse(ALICE.equals(BOB));","lastModifiedDate":"2018-04-19"},{"lineNumber":64,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":65,"author":{"gitId":"-"},"content":" // different name -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":66,"author":{"gitId":"-"},"content":" Person editedAlice \u003d new PersonBuilder(ALICE).withName(VALID_NAME_BOB).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":67,"author":{"gitId":"-"},"content":" assertFalse(ALICE.equals(editedAlice));","lastModifiedDate":"2018-04-19"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":69,"author":{"gitId":"-"},"content":" // different phone -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":70,"author":{"gitId":"-"},"content":" editedAlice \u003d new PersonBuilder(ALICE).withPhone(VALID_PHONE_BOB).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":71,"author":{"gitId":"-"},"content":" assertFalse(ALICE.equals(editedAlice));","lastModifiedDate":"2018-04-19"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":73,"author":{"gitId":"-"},"content":" // different email -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":74,"author":{"gitId":"-"},"content":" editedAlice \u003d new PersonBuilder(ALICE).withEmail(VALID_EMAIL_BOB).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":75,"author":{"gitId":"-"},"content":" assertFalse(ALICE.equals(editedAlice));","lastModifiedDate":"2018-04-19"},{"lineNumber":76,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":77,"author":{"gitId":"-"},"content":" // different address -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":78,"author":{"gitId":"-"},"content":" editedAlice \u003d new PersonBuilder(ALICE).withAddress(VALID_ADDRESS_BOB).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":79,"author":{"gitId":"-"},"content":" assertFalse(ALICE.equals(editedAlice));","lastModifiedDate":"2018-04-19"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-18"},{"lineNumber":81,"author":{"gitId":"-"},"content":" // different tags -\u003e returns false","lastModifiedDate":"2018-04-18"},{"lineNumber":82,"author":{"gitId":"ashleygoh1"},"content":" editedAlice \u003d new PersonBuilder(ALICE).withTags(VALID_TAG_FIRST_INTERVIEW).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":83,"author":{"gitId":"-"},"content":" assertFalse(ALICE.equals(editedAlice));","lastModifiedDate":"2018-04-18"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-04-19"},{"lineNumber":85,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":86,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2019-02-23"},{"lineNumber":87,"author":{"gitId":"-"},"content":" public void toStringMethod() {","lastModifiedDate":"2019-02-23"},{"lineNumber":88,"author":{"gitId":"ashleygoh1"},"content":" String expected \u003d Person.class.getCanonicalName() + \"{name\u003d\" + ALICE.getCompanyName()","lastModifiedDate":"2024-02-26"},{"lineNumber":89,"author":{"gitId":"ashleygoh1"},"content":" + \", phone\u003d\" + ALICE.getPhone() + \", email\u003d\" + ALICE.getEmail()","lastModifiedDate":"2024-02-26"},{"lineNumber":90,"author":{"gitId":"ashleygoh1"},"content":" + \", address\u003d\" + ALICE.getAddress() + \", tag\u003d\" + ALICE.getTag()","lastModifiedDate":"2024-02-26"},{"lineNumber":91,"author":{"gitId":"ashleygoh1"},"content":" + \", job description\u003d\" + ALICE.getJobDescription()","lastModifiedDate":"2024-02-26"},{"lineNumber":92,"author":{"gitId":"ashleygoh1"},"content":" + \", interview date\u003d\" + ALICE.getInterviewDate()","lastModifiedDate":"2024-02-26"},{"lineNumber":93,"author":{"gitId":"ashleygoh1"},"content":" + \", intern duration\u003d\" + ALICE.getInternDuration()","lastModifiedDate":"2024-02-26"},{"lineNumber":94,"author":{"gitId":"ashleygoh1"},"content":" + \", salary\u003d\" + ALICE.getSalary() + \"}\";","lastModifiedDate":"2024-02-26"},{"lineNumber":95,"author":{"gitId":"-"},"content":" assertEquals(expected, ALICE.toString());","lastModifiedDate":"2019-02-23"},{"lineNumber":96,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":97,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-09-01"}],"authorContributionMap":{"ashleygoh1":10,"-":87}},{"path":"src/test/java/seedu/address/model/person/UniquePersonListTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model.person;","lastModifiedDate":"2018-08-09"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-03-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2019-03-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2019-03-15"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB;","lastModifiedDate":"2018-08-08"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_FIRST_INTERVIEW;","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.ALICE;","lastModifiedDate":"2018-08-08"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.BOB;","lastModifiedDate":"2018-08-08"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import java.util.Arrays;","lastModifiedDate":"2018-08-08"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import java.util.Collections;","lastModifiedDate":"2018-08-08"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2018-08-08"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.model.person.exceptions.DuplicatePersonException;","lastModifiedDate":"2018-08-08"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.model.person.exceptions.PersonNotFoundException;","lastModifiedDate":"2018-08-08"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.testutil.PersonBuilder;","lastModifiedDate":"2018-08-08"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":22,"author":{"gitId":"-"},"content":"public class UniquePersonListTest {","lastModifiedDate":"2017-09-01"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":24,"author":{"gitId":"-"},"content":" private final UniquePersonList uniquePersonList \u003d new UniquePersonList();","lastModifiedDate":"2018-08-08"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":26,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":27,"author":{"gitId":"-"},"content":" public void contains_nullPerson_throwsNullPointerException() {","lastModifiedDate":"2018-08-08"},{"lineNumber":28,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e uniquePersonList.contains(null));","lastModifiedDate":"2019-03-23"},{"lineNumber":29,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":31,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":32,"author":{"gitId":"-"},"content":" public void contains_personNotInList_returnsFalse() {","lastModifiedDate":"2018-08-08"},{"lineNumber":33,"author":{"gitId":"-"},"content":" assertFalse(uniquePersonList.contains(ALICE));","lastModifiedDate":"2018-08-08"},{"lineNumber":34,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":36,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":37,"author":{"gitId":"-"},"content":" public void contains_personInList_returnsTrue() {","lastModifiedDate":"2018-08-08"},{"lineNumber":38,"author":{"gitId":"-"},"content":" uniquePersonList.add(ALICE);","lastModifiedDate":"2018-08-08"},{"lineNumber":39,"author":{"gitId":"-"},"content":" assertTrue(uniquePersonList.contains(ALICE));","lastModifiedDate":"2018-08-08"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":42,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":43,"author":{"gitId":"-"},"content":" public void contains_personWithSameIdentityFieldsInList_returnsTrue() {","lastModifiedDate":"2018-08-08"},{"lineNumber":44,"author":{"gitId":"-"},"content":" uniquePersonList.add(ALICE);","lastModifiedDate":"2018-08-08"},{"lineNumber":45,"author":{"gitId":"ashleygoh1"},"content":" Person editedAlice \u003d new PersonBuilder(ALICE).withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_FIRST_INTERVIEW)","lastModifiedDate":"2024-02-26"},{"lineNumber":46,"author":{"gitId":"-"},"content":" .build();","lastModifiedDate":"2018-08-08"},{"lineNumber":47,"author":{"gitId":"-"},"content":" assertTrue(uniquePersonList.contains(editedAlice));","lastModifiedDate":"2018-08-08"},{"lineNumber":48,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":50,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":51,"author":{"gitId":"-"},"content":" public void add_nullPerson_throwsNullPointerException() {","lastModifiedDate":"2018-08-08"},{"lineNumber":52,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e uniquePersonList.add(null));","lastModifiedDate":"2019-03-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":55,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":56,"author":{"gitId":"-"},"content":" public void add_duplicatePerson_throwsDuplicatePersonException() {","lastModifiedDate":"2018-08-08"},{"lineNumber":57,"author":{"gitId":"-"},"content":" uniquePersonList.add(ALICE);","lastModifiedDate":"2018-08-08"},{"lineNumber":58,"author":{"gitId":"-"},"content":" assertThrows(DuplicatePersonException.class, () -\u003e uniquePersonList.add(ALICE));","lastModifiedDate":"2019-03-23"},{"lineNumber":59,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":61,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":62,"author":{"gitId":"-"},"content":" public void setPerson_nullTargetPerson_throwsNullPointerException() {","lastModifiedDate":"2018-08-08"},{"lineNumber":63,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e uniquePersonList.setPerson(null, ALICE));","lastModifiedDate":"2019-03-23"},{"lineNumber":64,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":66,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":67,"author":{"gitId":"-"},"content":" public void setPerson_nullEditedPerson_throwsNullPointerException() {","lastModifiedDate":"2018-08-08"},{"lineNumber":68,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e uniquePersonList.setPerson(ALICE, null));","lastModifiedDate":"2019-03-23"},{"lineNumber":69,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":71,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":72,"author":{"gitId":"-"},"content":" public void setPerson_targetPersonNotInList_throwsPersonNotFoundException() {","lastModifiedDate":"2018-08-08"},{"lineNumber":73,"author":{"gitId":"-"},"content":" assertThrows(PersonNotFoundException.class, () -\u003e uniquePersonList.setPerson(ALICE, ALICE));","lastModifiedDate":"2019-03-23"},{"lineNumber":74,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":76,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":77,"author":{"gitId":"-"},"content":" public void setPerson_editedPersonIsSamePerson_success() {","lastModifiedDate":"2018-08-08"},{"lineNumber":78,"author":{"gitId":"-"},"content":" uniquePersonList.add(ALICE);","lastModifiedDate":"2018-08-08"},{"lineNumber":79,"author":{"gitId":"-"},"content":" uniquePersonList.setPerson(ALICE, ALICE);","lastModifiedDate":"2018-08-08"},{"lineNumber":80,"author":{"gitId":"-"},"content":" UniquePersonList expectedUniquePersonList \u003d new UniquePersonList();","lastModifiedDate":"2018-08-08"},{"lineNumber":81,"author":{"gitId":"-"},"content":" expectedUniquePersonList.add(ALICE);","lastModifiedDate":"2018-08-08"},{"lineNumber":82,"author":{"gitId":"-"},"content":" assertEquals(expectedUniquePersonList, uniquePersonList);","lastModifiedDate":"2018-08-08"},{"lineNumber":83,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":85,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":86,"author":{"gitId":"-"},"content":" public void setPerson_editedPersonHasSameIdentity_success() {","lastModifiedDate":"2018-08-08"},{"lineNumber":87,"author":{"gitId":"-"},"content":" uniquePersonList.add(ALICE);","lastModifiedDate":"2018-08-08"},{"lineNumber":88,"author":{"gitId":"ashleygoh1"},"content":" Person editedAlice \u003d new PersonBuilder(ALICE).withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_FIRST_INTERVIEW)","lastModifiedDate":"2024-02-26"},{"lineNumber":89,"author":{"gitId":"-"},"content":" .build();","lastModifiedDate":"2018-08-08"},{"lineNumber":90,"author":{"gitId":"-"},"content":" uniquePersonList.setPerson(ALICE, editedAlice);","lastModifiedDate":"2018-08-08"},{"lineNumber":91,"author":{"gitId":"-"},"content":" UniquePersonList expectedUniquePersonList \u003d new UniquePersonList();","lastModifiedDate":"2018-08-08"},{"lineNumber":92,"author":{"gitId":"-"},"content":" expectedUniquePersonList.add(editedAlice);","lastModifiedDate":"2018-08-08"},{"lineNumber":93,"author":{"gitId":"-"},"content":" assertEquals(expectedUniquePersonList, uniquePersonList);","lastModifiedDate":"2018-08-08"},{"lineNumber":94,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":95,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":96,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":97,"author":{"gitId":"-"},"content":" public void setPerson_editedPersonHasDifferentIdentity_success() {","lastModifiedDate":"2018-08-08"},{"lineNumber":98,"author":{"gitId":"-"},"content":" uniquePersonList.add(ALICE);","lastModifiedDate":"2018-08-08"},{"lineNumber":99,"author":{"gitId":"-"},"content":" uniquePersonList.setPerson(ALICE, BOB);","lastModifiedDate":"2018-08-08"},{"lineNumber":100,"author":{"gitId":"-"},"content":" UniquePersonList expectedUniquePersonList \u003d new UniquePersonList();","lastModifiedDate":"2018-08-08"},{"lineNumber":101,"author":{"gitId":"-"},"content":" expectedUniquePersonList.add(BOB);","lastModifiedDate":"2018-08-08"},{"lineNumber":102,"author":{"gitId":"-"},"content":" assertEquals(expectedUniquePersonList, uniquePersonList);","lastModifiedDate":"2018-08-08"},{"lineNumber":103,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":104,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":105,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":106,"author":{"gitId":"-"},"content":" public void setPerson_editedPersonHasNonUniqueIdentity_throwsDuplicatePersonException() {","lastModifiedDate":"2018-08-08"},{"lineNumber":107,"author":{"gitId":"-"},"content":" uniquePersonList.add(ALICE);","lastModifiedDate":"2018-08-08"},{"lineNumber":108,"author":{"gitId":"-"},"content":" uniquePersonList.add(BOB);","lastModifiedDate":"2018-08-08"},{"lineNumber":109,"author":{"gitId":"-"},"content":" assertThrows(DuplicatePersonException.class, () -\u003e uniquePersonList.setPerson(ALICE, BOB));","lastModifiedDate":"2019-03-23"},{"lineNumber":110,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":111,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":112,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":113,"author":{"gitId":"-"},"content":" public void remove_nullPerson_throwsNullPointerException() {","lastModifiedDate":"2018-08-08"},{"lineNumber":114,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e uniquePersonList.remove(null));","lastModifiedDate":"2019-03-23"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":116,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":117,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":118,"author":{"gitId":"-"},"content":" public void remove_personDoesNotExist_throwsPersonNotFoundException() {","lastModifiedDate":"2018-08-08"},{"lineNumber":119,"author":{"gitId":"-"},"content":" assertThrows(PersonNotFoundException.class, () -\u003e uniquePersonList.remove(ALICE));","lastModifiedDate":"2019-03-23"},{"lineNumber":120,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":121,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":122,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":123,"author":{"gitId":"-"},"content":" public void remove_existingPerson_removesPerson() {","lastModifiedDate":"2018-08-08"},{"lineNumber":124,"author":{"gitId":"-"},"content":" uniquePersonList.add(ALICE);","lastModifiedDate":"2018-08-08"},{"lineNumber":125,"author":{"gitId":"-"},"content":" uniquePersonList.remove(ALICE);","lastModifiedDate":"2018-08-08"},{"lineNumber":126,"author":{"gitId":"-"},"content":" UniquePersonList expectedUniquePersonList \u003d new UniquePersonList();","lastModifiedDate":"2018-08-08"},{"lineNumber":127,"author":{"gitId":"-"},"content":" assertEquals(expectedUniquePersonList, uniquePersonList);","lastModifiedDate":"2018-08-08"},{"lineNumber":128,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":129,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":130,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":131,"author":{"gitId":"-"},"content":" public void setPersons_nullUniquePersonList_throwsNullPointerException() {","lastModifiedDate":"2018-08-08"},{"lineNumber":132,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e uniquePersonList.setPersons((UniquePersonList) null));","lastModifiedDate":"2019-03-23"},{"lineNumber":133,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":134,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":135,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":136,"author":{"gitId":"-"},"content":" public void setPersons_uniquePersonList_replacesOwnListWithProvidedUniquePersonList() {","lastModifiedDate":"2018-08-08"},{"lineNumber":137,"author":{"gitId":"-"},"content":" uniquePersonList.add(ALICE);","lastModifiedDate":"2018-08-08"},{"lineNumber":138,"author":{"gitId":"-"},"content":" UniquePersonList expectedUniquePersonList \u003d new UniquePersonList();","lastModifiedDate":"2018-08-08"},{"lineNumber":139,"author":{"gitId":"-"},"content":" expectedUniquePersonList.add(BOB);","lastModifiedDate":"2018-08-08"},{"lineNumber":140,"author":{"gitId":"-"},"content":" uniquePersonList.setPersons(expectedUniquePersonList);","lastModifiedDate":"2018-08-08"},{"lineNumber":141,"author":{"gitId":"-"},"content":" assertEquals(expectedUniquePersonList, uniquePersonList);","lastModifiedDate":"2018-08-08"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":143,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":144,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":145,"author":{"gitId":"-"},"content":" public void setPersons_nullList_throwsNullPointerException() {","lastModifiedDate":"2018-08-08"},{"lineNumber":146,"author":{"gitId":"-"},"content":" assertThrows(NullPointerException.class, () -\u003e uniquePersonList.setPersons((List\u003cPerson\u003e) null));","lastModifiedDate":"2019-03-23"},{"lineNumber":147,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":148,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":149,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":150,"author":{"gitId":"-"},"content":" public void setPersons_list_replacesOwnListWithProvidedList() {","lastModifiedDate":"2018-08-08"},{"lineNumber":151,"author":{"gitId":"-"},"content":" uniquePersonList.add(ALICE);","lastModifiedDate":"2018-08-08"},{"lineNumber":152,"author":{"gitId":"-"},"content":" List\u003cPerson\u003e personList \u003d Collections.singletonList(BOB);","lastModifiedDate":"2018-08-08"},{"lineNumber":153,"author":{"gitId":"-"},"content":" uniquePersonList.setPersons(personList);","lastModifiedDate":"2018-08-08"},{"lineNumber":154,"author":{"gitId":"-"},"content":" UniquePersonList expectedUniquePersonList \u003d new UniquePersonList();","lastModifiedDate":"2018-08-08"},{"lineNumber":155,"author":{"gitId":"-"},"content":" expectedUniquePersonList.add(BOB);","lastModifiedDate":"2018-08-08"},{"lineNumber":156,"author":{"gitId":"-"},"content":" assertEquals(expectedUniquePersonList, uniquePersonList);","lastModifiedDate":"2018-08-08"},{"lineNumber":157,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":158,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":159,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-08"},{"lineNumber":160,"author":{"gitId":"-"},"content":" public void setPersons_listWithDuplicatePersons_throwsDuplicatePersonException() {","lastModifiedDate":"2018-08-08"},{"lineNumber":161,"author":{"gitId":"-"},"content":" List\u003cPerson\u003e listWithDuplicatePersons \u003d Arrays.asList(ALICE, ALICE);","lastModifiedDate":"2018-08-08"},{"lineNumber":162,"author":{"gitId":"-"},"content":" assertThrows(DuplicatePersonException.class, () -\u003e uniquePersonList.setPersons(listWithDuplicatePersons));","lastModifiedDate":"2019-03-23"},{"lineNumber":163,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-08"},{"lineNumber":164,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-08"},{"lineNumber":165,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-09-01"},{"lineNumber":166,"author":{"gitId":"-"},"content":" public void asUnmodifiableObservableList_modifyList_throwsUnsupportedOperationException() {","lastModifiedDate":"2018-04-05"},{"lineNumber":167,"author":{"gitId":"-"},"content":" assertThrows(UnsupportedOperationException.class, ()","lastModifiedDate":"2019-03-23"},{"lineNumber":168,"author":{"gitId":"-"},"content":" -\u003e uniquePersonList.asUnmodifiableObservableList().remove(0));","lastModifiedDate":"2019-03-23"},{"lineNumber":169,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-09-01"},{"lineNumber":170,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-24"},{"lineNumber":171,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2019-02-24"},{"lineNumber":172,"author":{"gitId":"-"},"content":" public void toStringMethod() {","lastModifiedDate":"2019-02-24"},{"lineNumber":173,"author":{"gitId":"-"},"content":" assertEquals(uniquePersonList.asUnmodifiableObservableList().toString(), uniquePersonList.toString());","lastModifiedDate":"2019-02-24"},{"lineNumber":174,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-24"},{"lineNumber":175,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-09-01"}],"authorContributionMap":{"ashleygoh1":3,"-":172}},{"path":"src/test/java/seedu/address/storage/JsonAdaptedPersonTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.storage;","lastModifiedDate":"2018-08-13"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-03-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.storage.JsonAdaptedPerson.MISSING_FIELD_MESSAGE_FORMAT;","lastModifiedDate":"2018-08-13"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-14"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.BENSON;","lastModifiedDate":"2018-08-13"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import seedu.address.commons.exceptions.IllegalValueException;","lastModifiedDate":"2018-08-13"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2018-08-13"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2018-08-13"},{"lineNumber":13,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.InternDuration;","lastModifiedDate":"2024-02-26"},{"lineNumber":14,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.JobDescription;","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2018-08-13"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2018-08-13"},{"lineNumber":17,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.Salary;","lastModifiedDate":"2024-02-26"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":19,"author":{"gitId":"-"},"content":"public class JsonAdaptedPersonTest {","lastModifiedDate":"2018-08-13"},{"lineNumber":20,"author":{"gitId":"-"},"content":" private static final String INVALID_NAME \u003d \"R@chel\";","lastModifiedDate":"2018-08-13"},{"lineNumber":21,"author":{"gitId":"-"},"content":" private static final String INVALID_PHONE \u003d \"+651234\";","lastModifiedDate":"2018-08-13"},{"lineNumber":22,"author":{"gitId":"-"},"content":" private static final String INVALID_ADDRESS \u003d \" \";","lastModifiedDate":"2018-08-13"},{"lineNumber":23,"author":{"gitId":"-"},"content":" private static final String INVALID_EMAIL \u003d \"example.com\";","lastModifiedDate":"2018-08-13"},{"lineNumber":24,"author":{"gitId":"-"},"content":" private static final String INVALID_TAG \u003d \"#friend\";","lastModifiedDate":"2018-08-13"},{"lineNumber":25,"author":{"gitId":"ashleygoh1"},"content":" private static final String INVALID_JOB_DESCRIPTION \u003d \" \";","lastModifiedDate":"2024-02-26"},{"lineNumber":26,"author":{"gitId":"ashleygoh1"},"content":" private static final String INVALID_INTERVIEW_DATE \u003d \" \";","lastModifiedDate":"2024-02-26"},{"lineNumber":27,"author":{"gitId":"ashleygoh1"},"content":" private static final String INVALID_INTERN_DURATION \u003d \" \";","lastModifiedDate":"2024-02-26"},{"lineNumber":28,"author":{"gitId":"ashleygoh1"},"content":" private static final String INVALID_SALARY \u003d \"0\";","lastModifiedDate":"2024-02-26"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":30,"author":{"gitId":"ashleygoh1"},"content":" private static final String VALID_NAME \u003d BENSON.getCompanyName().toString();","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" private static final String VALID_PHONE \u003d BENSON.getPhone().toString();","lastModifiedDate":"2018-08-13"},{"lineNumber":32,"author":{"gitId":"-"},"content":" private static final String VALID_EMAIL \u003d BENSON.getEmail().toString();","lastModifiedDate":"2018-08-13"},{"lineNumber":33,"author":{"gitId":"-"},"content":" private static final String VALID_ADDRESS \u003d BENSON.getAddress().toString();","lastModifiedDate":"2018-08-13"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":" private static final String VALID_TAGS \u003d BENSON.getTag().tagName;","lastModifiedDate":"2024-02-26"},{"lineNumber":35,"author":{"gitId":"ashleygoh1"},"content":" private static final String VALID_JOB_DESCRIPTION \u003d BENSON.getJobDescription().toString();","lastModifiedDate":"2024-02-26"},{"lineNumber":36,"author":{"gitId":"ashleygoh1"},"content":" private static final String VALID_INTERVIEW_DATE \u003d BENSON.getInterviewDate().toString();","lastModifiedDate":"2024-02-26"},{"lineNumber":37,"author":{"gitId":"ashleygoh1"},"content":" private static final String VALID_INTERN_DURATION \u003d BENSON.getInternDuration().toString();","lastModifiedDate":"2024-02-26"},{"lineNumber":38,"author":{"gitId":"ashleygoh1"},"content":" private static final String VALID_SALARY \u003d BENSON.getSalary().toString();","lastModifiedDate":"2024-02-26"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":40,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":41,"author":{"gitId":"-"},"content":" public void toModelType_validPersonDetails_returnsPerson() throws Exception {","lastModifiedDate":"2018-08-13"},{"lineNumber":42,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d new JsonAdaptedPerson(BENSON);","lastModifiedDate":"2018-08-13"},{"lineNumber":43,"author":{"gitId":"-"},"content":" assertEquals(BENSON, person.toModelType());","lastModifiedDate":"2018-08-13"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":46,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":47,"author":{"gitId":"-"},"content":" public void toModelType_invalidName_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":48,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2018-08-13"},{"lineNumber":49,"author":{"gitId":"ashleygoh1"},"content":" new JsonAdaptedPerson(INVALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS,","lastModifiedDate":"2024-02-26"},{"lineNumber":50,"author":{"gitId":"ashleygoh1"},"content":" VALID_JOB_DESCRIPTION, VALID_INTERVIEW_DATE, VALID_INTERN_DURATION, VALID_SALARY);","lastModifiedDate":"2024-02-26"},{"lineNumber":51,"author":{"gitId":"-"},"content":" String expectedMessage \u003d Name.MESSAGE_CONSTRAINTS;","lastModifiedDate":"2018-08-13"},{"lineNumber":52,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":55,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":56,"author":{"gitId":"-"},"content":" public void toModelType_nullName_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":57,"author":{"gitId":"ashleygoh1"},"content":" JsonAdaptedPerson person \u003d new JsonAdaptedPerson(null, VALID_PHONE, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS,","lastModifiedDate":"2024-02-26"},{"lineNumber":58,"author":{"gitId":"ashleygoh1"},"content":" VALID_JOB_DESCRIPTION, VALID_INTERVIEW_DATE, VALID_INTERN_DURATION, VALID_SALARY);","lastModifiedDate":"2024-02-26"},{"lineNumber":59,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(MISSING_FIELD_MESSAGE_FORMAT, Name.class.getSimpleName());","lastModifiedDate":"2018-08-13"},{"lineNumber":60,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":63,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":64,"author":{"gitId":"-"},"content":" public void toModelType_invalidPhone_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":65,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2018-08-13"},{"lineNumber":66,"author":{"gitId":"ashleygoh1"},"content":" new JsonAdaptedPerson(VALID_NAME, INVALID_PHONE, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS,","lastModifiedDate":"2024-02-26"},{"lineNumber":67,"author":{"gitId":"ashleygoh1"},"content":" VALID_JOB_DESCRIPTION, VALID_INTERVIEW_DATE, VALID_INTERN_DURATION, VALID_SALARY);","lastModifiedDate":"2024-02-26"},{"lineNumber":68,"author":{"gitId":"-"},"content":" String expectedMessage \u003d Phone.MESSAGE_CONSTRAINTS;","lastModifiedDate":"2018-08-13"},{"lineNumber":69,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":72,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":73,"author":{"gitId":"-"},"content":" public void toModelType_nullPhone_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":74,"author":{"gitId":"ashleygoh1"},"content":" JsonAdaptedPerson person \u003d new JsonAdaptedPerson(VALID_NAME, null, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS,","lastModifiedDate":"2024-02-26"},{"lineNumber":75,"author":{"gitId":"ashleygoh1"},"content":" VALID_JOB_DESCRIPTION, VALID_INTERVIEW_DATE, VALID_INTERN_DURATION, VALID_SALARY);","lastModifiedDate":"2024-02-26"},{"lineNumber":76,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(MISSING_FIELD_MESSAGE_FORMAT, Phone.class.getSimpleName());","lastModifiedDate":"2018-08-13"},{"lineNumber":77,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":78,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":80,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":81,"author":{"gitId":"-"},"content":" public void toModelType_invalidEmail_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":82,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2018-08-13"},{"lineNumber":83,"author":{"gitId":"ashleygoh1"},"content":" new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, INVALID_EMAIL, VALID_ADDRESS, VALID_TAGS,","lastModifiedDate":"2024-02-26"},{"lineNumber":84,"author":{"gitId":"ashleygoh1"},"content":" VALID_JOB_DESCRIPTION, VALID_INTERVIEW_DATE, VALID_INTERN_DURATION, VALID_SALARY);","lastModifiedDate":"2024-02-26"},{"lineNumber":85,"author":{"gitId":"-"},"content":" String expectedMessage \u003d Email.MESSAGE_CONSTRAINTS;","lastModifiedDate":"2018-08-13"},{"lineNumber":86,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":87,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":89,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":90,"author":{"gitId":"-"},"content":" public void toModelType_nullEmail_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":91,"author":{"gitId":"ashleygoh1"},"content":" JsonAdaptedPerson person \u003d new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, null, VALID_ADDRESS, VALID_TAGS,","lastModifiedDate":"2024-02-26"},{"lineNumber":92,"author":{"gitId":"ashleygoh1"},"content":" VALID_JOB_DESCRIPTION, VALID_INTERVIEW_DATE, VALID_INTERN_DURATION, VALID_SALARY);","lastModifiedDate":"2024-02-26"},{"lineNumber":93,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(MISSING_FIELD_MESSAGE_FORMAT, Email.class.getSimpleName());","lastModifiedDate":"2018-08-13"},{"lineNumber":94,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":95,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":97,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":98,"author":{"gitId":"-"},"content":" public void toModelType_nullAddress_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":99,"author":{"gitId":"ashleygoh1"},"content":" JsonAdaptedPerson person \u003d new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, null, VALID_TAGS,","lastModifiedDate":"2024-02-26"},{"lineNumber":100,"author":{"gitId":"ashleygoh1"},"content":" VALID_JOB_DESCRIPTION, VALID_INTERVIEW_DATE, VALID_INTERN_DURATION, VALID_SALARY);","lastModifiedDate":"2024-02-26"},{"lineNumber":101,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(MISSING_FIELD_MESSAGE_FORMAT, Address.class.getSimpleName());","lastModifiedDate":"2018-08-13"},{"lineNumber":102,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":103,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":104,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":105,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":106,"author":{"gitId":"-"},"content":" public void toModelType_invalidTags_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":107,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2018-08-13"},{"lineNumber":108,"author":{"gitId":"ashleygoh1"},"content":" new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_ADDRESS, INVALID_TAG,","lastModifiedDate":"2024-02-26"},{"lineNumber":109,"author":{"gitId":"ashleygoh1"},"content":" VALID_JOB_DESCRIPTION, VALID_INTERVIEW_DATE, VALID_INTERN_DURATION, VALID_SALARY);","lastModifiedDate":"2024-02-26"},{"lineNumber":110,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":111,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":112,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":113,"author":{"gitId":"ashleygoh1"},"content":" @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":114,"author":{"gitId":"ashleygoh1"},"content":" public void toModelType_invalidJobDescription_throwsIllegalValueException() {","lastModifiedDate":"2024-02-26"},{"lineNumber":115,"author":{"gitId":"ashleygoh1"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2024-02-26"},{"lineNumber":116,"author":{"gitId":"ashleygoh1"},"content":" new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS,","lastModifiedDate":"2024-02-26"},{"lineNumber":117,"author":{"gitId":"ashleygoh1"},"content":" INVALID_JOB_DESCRIPTION, VALID_INTERVIEW_DATE, VALID_INTERN_DURATION, VALID_SALARY);","lastModifiedDate":"2024-02-26"},{"lineNumber":118,"author":{"gitId":"ashleygoh1"},"content":" String expectedMessage \u003d JobDescription.MESSAGE_CONSTRAINTS;","lastModifiedDate":"2024-02-26"},{"lineNumber":119,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2024-02-26"},{"lineNumber":120,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":121,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":122,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":123,"author":{"gitId":"ashleygoh1"},"content":" public void toModelType_invalidInternDuration_throwsIllegalValueException() {","lastModifiedDate":"2024-02-26"},{"lineNumber":124,"author":{"gitId":"ashleygoh1"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2024-02-26"},{"lineNumber":125,"author":{"gitId":"ashleygoh1"},"content":" new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS,","lastModifiedDate":"2024-02-26"},{"lineNumber":126,"author":{"gitId":"ashleygoh1"},"content":" VALID_JOB_DESCRIPTION, VALID_INTERVIEW_DATE, INVALID_INTERN_DURATION, VALID_SALARY);","lastModifiedDate":"2024-02-26"},{"lineNumber":127,"author":{"gitId":"ashleygoh1"},"content":" String expectedMessage \u003d InternDuration.MESSAGE_CONSTRAINTS;","lastModifiedDate":"2024-02-26"},{"lineNumber":128,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2024-02-26"},{"lineNumber":129,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":131,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2024-02-26"},{"lineNumber":132,"author":{"gitId":"ashleygoh1"},"content":" public void toModelType_invalidSalary_throwsIllegalValueException() {","lastModifiedDate":"2024-02-26"},{"lineNumber":133,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2024-02-26"},{"lineNumber":134,"author":{"gitId":"ashleygoh1"},"content":" new JsonAdaptedPerson(VALID_NAME, VALID_PHONE, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS,","lastModifiedDate":"2024-02-26"},{"lineNumber":135,"author":{"gitId":"ashleygoh1"},"content":" VALID_JOB_DESCRIPTION, VALID_INTERVIEW_DATE, VALID_INTERN_DURATION, INVALID_SALARY);","lastModifiedDate":"2024-02-26"},{"lineNumber":136,"author":{"gitId":"ashleygoh1"},"content":" String expectedMessage \u003d Salary.MESSAGE_CONSTRAINTS;","lastModifiedDate":"2024-02-26"},{"lineNumber":137,"author":{"gitId":"ashleygoh1"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2024-02-26"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":139,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":140,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2018-08-13"}],"authorContributionMap":{"ashleygoh1":45,"-":95}},{"path":"src/test/java/seedu/address/testutil/EditPersonDescriptorBuilder.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ashleygoh1"},"content":"//package seedu.address.testutil;","lastModifiedDate":"2024-02-26"},{"lineNumber":2,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":3,"author":{"gitId":"ashleygoh1"},"content":"//import java.util.Set;","lastModifiedDate":"2024-02-26"},{"lineNumber":4,"author":{"gitId":"ashleygoh1"},"content":"//import java.util.stream.Collectors;","lastModifiedDate":"2024-02-26"},{"lineNumber":5,"author":{"gitId":"ashleygoh1"},"content":"//import java.util.stream.Stream;","lastModifiedDate":"2024-02-26"},{"lineNumber":6,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.logic.commands.EditCommand.EditPersonDescriptor;","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.person.Address;","lastModifiedDate":"2024-02-26"},{"lineNumber":9,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.person.Email;","lastModifiedDate":"2024-02-26"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.person.Name;","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.person.Person;","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.person.Phone;","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"ashleygoh1"},"content":"//import seedu.address.model.tag.Tag;","lastModifiedDate":"2024-02-26"},{"lineNumber":14,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"ashleygoh1"},"content":"///**","lastModifiedDate":"2024-02-26"},{"lineNumber":16,"author":{"gitId":"ashleygoh1"},"content":"// * A utility class to help with building EditPersonDescriptor objects.","lastModifiedDate":"2024-02-26"},{"lineNumber":17,"author":{"gitId":"ashleygoh1"},"content":"// */","lastModifiedDate":"2024-02-26"},{"lineNumber":18,"author":{"gitId":"ashleygoh1"},"content":"//public class EditPersonDescriptorBuilder {","lastModifiedDate":"2024-02-26"},{"lineNumber":19,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":20,"author":{"gitId":"ashleygoh1"},"content":"// private EditPersonDescriptor descriptor;","lastModifiedDate":"2024-02-26"},{"lineNumber":21,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":22,"author":{"gitId":"ashleygoh1"},"content":"// public EditPersonDescriptorBuilder() {","lastModifiedDate":"2024-02-26"},{"lineNumber":23,"author":{"gitId":"ashleygoh1"},"content":"// descriptor \u003d new EditPersonDescriptor();","lastModifiedDate":"2024-02-26"},{"lineNumber":24,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":25,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":26,"author":{"gitId":"ashleygoh1"},"content":"// public EditPersonDescriptorBuilder(EditPersonDescriptor descriptor) {","lastModifiedDate":"2024-02-26"},{"lineNumber":27,"author":{"gitId":"ashleygoh1"},"content":"// this.descriptor \u003d new EditPersonDescriptor(descriptor);","lastModifiedDate":"2024-02-26"},{"lineNumber":28,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":29,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":30,"author":{"gitId":"ashleygoh1"},"content":"// /**","lastModifiedDate":"2024-02-26"},{"lineNumber":31,"author":{"gitId":"ashleygoh1"},"content":"// * Returns an {@code EditPersonDescriptor} with fields containing {@code person}\u0027s details","lastModifiedDate":"2024-02-26"},{"lineNumber":32,"author":{"gitId":"ashleygoh1"},"content":"// */","lastModifiedDate":"2024-02-26"},{"lineNumber":33,"author":{"gitId":"ashleygoh1"},"content":"// public EditPersonDescriptorBuilder(Person person) {","lastModifiedDate":"2024-02-26"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":"// descriptor \u003d new EditPersonDescriptor();","lastModifiedDate":"2024-02-26"},{"lineNumber":35,"author":{"gitId":"ashleygoh1"},"content":"// descriptor.setName(person.getCompanyName());","lastModifiedDate":"2024-02-26"},{"lineNumber":36,"author":{"gitId":"ashleygoh1"},"content":"// descriptor.setPhone(person.getPhone());","lastModifiedDate":"2024-02-26"},{"lineNumber":37,"author":{"gitId":"ashleygoh1"},"content":"// descriptor.setEmail(person.getEmail());","lastModifiedDate":"2024-02-26"},{"lineNumber":38,"author":{"gitId":"ashleygoh1"},"content":"// descriptor.setAddress(person.getAddress());","lastModifiedDate":"2024-02-26"},{"lineNumber":39,"author":{"gitId":"ashleygoh1"},"content":"// descriptor.setTags(person.getTags());","lastModifiedDate":"2024-02-26"},{"lineNumber":40,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":41,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":"// /**","lastModifiedDate":"2024-02-26"},{"lineNumber":43,"author":{"gitId":"ashleygoh1"},"content":"// * Sets the {@code Name} of the {@code EditPersonDescriptor} that we are building.","lastModifiedDate":"2024-02-26"},{"lineNumber":44,"author":{"gitId":"ashleygoh1"},"content":"// */","lastModifiedDate":"2024-02-26"},{"lineNumber":45,"author":{"gitId":"ashleygoh1"},"content":"// public EditPersonDescriptorBuilder withName(String name) {","lastModifiedDate":"2024-02-26"},{"lineNumber":46,"author":{"gitId":"ashleygoh1"},"content":"// descriptor.setName(new Name(name));","lastModifiedDate":"2024-02-26"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":"// return this;","lastModifiedDate":"2024-02-26"},{"lineNumber":48,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":49,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":50,"author":{"gitId":"ashleygoh1"},"content":"// /**","lastModifiedDate":"2024-02-26"},{"lineNumber":51,"author":{"gitId":"ashleygoh1"},"content":"// * Sets the {@code Phone} of the {@code EditPersonDescriptor} that we are building.","lastModifiedDate":"2024-02-26"},{"lineNumber":52,"author":{"gitId":"ashleygoh1"},"content":"// */","lastModifiedDate":"2024-02-26"},{"lineNumber":53,"author":{"gitId":"ashleygoh1"},"content":"// public EditPersonDescriptorBuilder withPhone(String phone) {","lastModifiedDate":"2024-02-26"},{"lineNumber":54,"author":{"gitId":"ashleygoh1"},"content":"// descriptor.setPhone(new Phone(phone));","lastModifiedDate":"2024-02-26"},{"lineNumber":55,"author":{"gitId":"ashleygoh1"},"content":"// return this;","lastModifiedDate":"2024-02-26"},{"lineNumber":56,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":57,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":58,"author":{"gitId":"ashleygoh1"},"content":"// /**","lastModifiedDate":"2024-02-26"},{"lineNumber":59,"author":{"gitId":"ashleygoh1"},"content":"// * Sets the {@code Email} of the {@code EditPersonDescriptor} that we are building.","lastModifiedDate":"2024-02-26"},{"lineNumber":60,"author":{"gitId":"ashleygoh1"},"content":"// */","lastModifiedDate":"2024-02-26"},{"lineNumber":61,"author":{"gitId":"ashleygoh1"},"content":"// public EditPersonDescriptorBuilder withEmail(String email) {","lastModifiedDate":"2024-02-26"},{"lineNumber":62,"author":{"gitId":"ashleygoh1"},"content":"// descriptor.setEmail(new Email(email));","lastModifiedDate":"2024-02-26"},{"lineNumber":63,"author":{"gitId":"ashleygoh1"},"content":"// return this;","lastModifiedDate":"2024-02-26"},{"lineNumber":64,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":65,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":66,"author":{"gitId":"ashleygoh1"},"content":"// /**","lastModifiedDate":"2024-02-26"},{"lineNumber":67,"author":{"gitId":"ashleygoh1"},"content":"// * Sets the {@code Address} of the {@code EditPersonDescriptor} that we are building.","lastModifiedDate":"2024-02-26"},{"lineNumber":68,"author":{"gitId":"ashleygoh1"},"content":"// */","lastModifiedDate":"2024-02-26"},{"lineNumber":69,"author":{"gitId":"ashleygoh1"},"content":"// public EditPersonDescriptorBuilder withAddress(String address) {","lastModifiedDate":"2024-02-26"},{"lineNumber":70,"author":{"gitId":"ashleygoh1"},"content":"// descriptor.setAddress(new Address(address));","lastModifiedDate":"2024-02-26"},{"lineNumber":71,"author":{"gitId":"ashleygoh1"},"content":"// return this;","lastModifiedDate":"2024-02-26"},{"lineNumber":72,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":73,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":74,"author":{"gitId":"ashleygoh1"},"content":"// /**","lastModifiedDate":"2024-02-26"},{"lineNumber":75,"author":{"gitId":"ashleygoh1"},"content":"// * Parses the {@code tags} into a {@code Set\u003cTag\u003e} and set it to the {@code EditPersonDescriptor}","lastModifiedDate":"2024-02-26"},{"lineNumber":76,"author":{"gitId":"ashleygoh1"},"content":"// * that we are building.","lastModifiedDate":"2024-02-26"},{"lineNumber":77,"author":{"gitId":"ashleygoh1"},"content":"// */","lastModifiedDate":"2024-02-26"},{"lineNumber":78,"author":{"gitId":"ashleygoh1"},"content":"// public EditPersonDescriptorBuilder withTags(String... tags) {","lastModifiedDate":"2024-02-26"},{"lineNumber":79,"author":{"gitId":"ashleygoh1"},"content":"// Set\u003cTag\u003e tagSet \u003d Stream.of(tags).map(Tag::new).collect(Collectors.toSet());","lastModifiedDate":"2024-02-26"},{"lineNumber":80,"author":{"gitId":"ashleygoh1"},"content":"// descriptor.setTags(tagSet);","lastModifiedDate":"2024-02-26"},{"lineNumber":81,"author":{"gitId":"ashleygoh1"},"content":"// return this;","lastModifiedDate":"2024-02-26"},{"lineNumber":82,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":83,"author":{"gitId":"ashleygoh1"},"content":"//","lastModifiedDate":"2024-02-26"},{"lineNumber":84,"author":{"gitId":"ashleygoh1"},"content":"// public EditPersonDescriptor build() {","lastModifiedDate":"2024-02-26"},{"lineNumber":85,"author":{"gitId":"ashleygoh1"},"content":"// return descriptor;","lastModifiedDate":"2024-02-26"},{"lineNumber":86,"author":{"gitId":"ashleygoh1"},"content":"// }","lastModifiedDate":"2024-02-26"},{"lineNumber":87,"author":{"gitId":"ashleygoh1"},"content":"//}","lastModifiedDate":"2024-02-26"}],"authorContributionMap":{"ashleygoh1":87}},{"path":"src/test/java/seedu/address/testutil/PersonBuilder.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.testutil;","lastModifiedDate":"2016-09-03"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2017-01-18"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2017-01-18"},{"lineNumber":5,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.InternDuration;","lastModifiedDate":"2024-02-26"},{"lineNumber":6,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.InterviewDate;","lastModifiedDate":"2024-02-26"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.JobDescription;","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2017-01-18"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2017-04-05"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2017-01-18"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":"import seedu.address.model.person.Salary;","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-04-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":14,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-09-03"},{"lineNumber":15,"author":{"gitId":"-"},"content":" * A utility class to help with building Person objects.","lastModifiedDate":"2017-04-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-09-03"},{"lineNumber":17,"author":{"gitId":"-"},"content":"public class PersonBuilder {","lastModifiedDate":"2016-09-03"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":19,"author":{"gitId":"-"},"content":" public static final String DEFAULT_NAME \u003d \"Amy Bee\";","lastModifiedDate":"2020-12-18"},{"lineNumber":20,"author":{"gitId":"-"},"content":" public static final String DEFAULT_PHONE \u003d \"85355255\";","lastModifiedDate":"2017-04-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":" public static final String DEFAULT_EMAIL \u003d \"amy@gmail.com\";","lastModifiedDate":"2020-12-18"},{"lineNumber":22,"author":{"gitId":"ashleygoh1"},"content":" public static final String DEFAULT_ADDRESS \u003d \"\";","lastModifiedDate":"2024-02-26"},{"lineNumber":23,"author":{"gitId":"ashleygoh1"},"content":" public static final String DEFAULT_TAG \u003d \"F\";","lastModifiedDate":"2024-02-26"},{"lineNumber":24,"author":{"gitId":"ashleygoh1"},"content":" public static final String DEFAULT_JOB_DESCRIPTION \u003d \"Software Developer Intern\";","lastModifiedDate":"2024-02-26"},{"lineNumber":25,"author":{"gitId":"ashleygoh1"},"content":" public static final String DEFAULT_INTERVIEW_DATE \u003d null;","lastModifiedDate":"2024-02-26"},{"lineNumber":26,"author":{"gitId":"ashleygoh1"},"content":" public static final String DEFAULT_INTERN_DURATION \u003d \"6 months\";","lastModifiedDate":"2024-02-26"},{"lineNumber":27,"author":{"gitId":"ashleygoh1"},"content":" public static final String DEFAULT_SALARY \u003d \"500\";","lastModifiedDate":"2024-02-26"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-05"},{"lineNumber":29,"author":{"gitId":"-"},"content":" private Name name;","lastModifiedDate":"2017-12-20"},{"lineNumber":30,"author":{"gitId":"-"},"content":" private Phone phone;","lastModifiedDate":"2017-12-20"},{"lineNumber":31,"author":{"gitId":"-"},"content":" private Email email;","lastModifiedDate":"2017-12-20"},{"lineNumber":32,"author":{"gitId":"-"},"content":" private Address address;","lastModifiedDate":"2017-12-20"},{"lineNumber":33,"author":{"gitId":"ashleygoh1"},"content":" private Tag tag;","lastModifiedDate":"2024-02-26"},{"lineNumber":34,"author":{"gitId":"ashleygoh1"},"content":" private JobDescription jobDescription;","lastModifiedDate":"2024-02-26"},{"lineNumber":35,"author":{"gitId":"ashleygoh1"},"content":" private InterviewDate interviewDate;","lastModifiedDate":"2024-02-26"},{"lineNumber":36,"author":{"gitId":"ashleygoh1"},"content":" private InternDuration internDuration;","lastModifiedDate":"2024-02-26"},{"lineNumber":37,"author":{"gitId":"ashleygoh1"},"content":" private Salary salary;","lastModifiedDate":"2024-02-26"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":39,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2020-05-27"},{"lineNumber":40,"author":{"gitId":"-"},"content":" * Creates a {@code PersonBuilder} with the default details.","lastModifiedDate":"2020-05-27"},{"lineNumber":41,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2020-05-27"},{"lineNumber":42,"author":{"gitId":"-"},"content":" public PersonBuilder() {","lastModifiedDate":"2017-08-15"},{"lineNumber":43,"author":{"gitId":"-"},"content":" name \u003d new Name(DEFAULT_NAME);","lastModifiedDate":"2017-12-20"},{"lineNumber":44,"author":{"gitId":"-"},"content":" phone \u003d new Phone(DEFAULT_PHONE);","lastModifiedDate":"2017-12-20"},{"lineNumber":45,"author":{"gitId":"-"},"content":" email \u003d new Email(DEFAULT_EMAIL);","lastModifiedDate":"2017-12-20"},{"lineNumber":46,"author":{"gitId":"-"},"content":" address \u003d new Address(DEFAULT_ADDRESS);","lastModifiedDate":"2017-12-20"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":" tag \u003d new Tag(DEFAULT_TAG);","lastModifiedDate":"2024-02-26"},{"lineNumber":48,"author":{"gitId":"ashleygoh1"},"content":" jobDescription \u003d new JobDescription(DEFAULT_JOB_DESCRIPTION);","lastModifiedDate":"2024-02-26"},{"lineNumber":49,"author":{"gitId":"ashleygoh1"},"content":" interviewDate \u003d new InterviewDate(DEFAULT_INTERVIEW_DATE);;","lastModifiedDate":"2024-02-26"},{"lineNumber":50,"author":{"gitId":"ashleygoh1"},"content":" internDuration \u003d new InternDuration(DEFAULT_INTERN_DURATION);;","lastModifiedDate":"2024-02-26"},{"lineNumber":51,"author":{"gitId":"ashleygoh1"},"content":" salary \u003d new Salary(DEFAULT_SALARY);;","lastModifiedDate":"2024-02-26"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":54,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-12-11"},{"lineNumber":55,"author":{"gitId":"-"},"content":" * Initializes the PersonBuilder with the data of {@code personToCopy}.","lastModifiedDate":"2016-12-11"},{"lineNumber":56,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-11"},{"lineNumber":57,"author":{"gitId":"-"},"content":" public PersonBuilder(Person personToCopy) {","lastModifiedDate":"2018-01-10"},{"lineNumber":58,"author":{"gitId":"ashleygoh1"},"content":" name \u003d personToCopy.getCompanyName();","lastModifiedDate":"2024-02-25"},{"lineNumber":59,"author":{"gitId":"-"},"content":" phone \u003d personToCopy.getPhone();","lastModifiedDate":"2017-12-20"},{"lineNumber":60,"author":{"gitId":"-"},"content":" email \u003d personToCopy.getEmail();","lastModifiedDate":"2017-12-20"},{"lineNumber":61,"author":{"gitId":"-"},"content":" address \u003d personToCopy.getAddress();","lastModifiedDate":"2017-12-20"},{"lineNumber":62,"author":{"gitId":"ashleygoh1"},"content":" tag \u003d personToCopy.getTag();","lastModifiedDate":"2024-02-26"},{"lineNumber":63,"author":{"gitId":"ashleygoh1"},"content":" jobDescription \u003d personToCopy.getJobDescription();","lastModifiedDate":"2024-02-26"},{"lineNumber":64,"author":{"gitId":"ashleygoh1"},"content":" interviewDate \u003d personToCopy.getInterviewDate();","lastModifiedDate":"2024-02-26"},{"lineNumber":65,"author":{"gitId":"ashleygoh1"},"content":" internDuration \u003d personToCopy.getInternDuration();","lastModifiedDate":"2024-02-26"},{"lineNumber":66,"author":{"gitId":"ashleygoh1"},"content":" salary \u003d personToCopy.getSalary();","lastModifiedDate":"2024-02-26"},{"lineNumber":67,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-11"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-11"},{"lineNumber":69,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":70,"author":{"gitId":"-"},"content":" * Sets the {@code Name} of the {@code Person} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":71,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":72,"author":{"gitId":"-"},"content":" public PersonBuilder withName(String name) {","lastModifiedDate":"2017-08-15"},{"lineNumber":73,"author":{"gitId":"-"},"content":" this.name \u003d new Name(name);","lastModifiedDate":"2017-12-20"},{"lineNumber":74,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2016-09-03"},{"lineNumber":75,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":76,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":77,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":78,"author":{"gitId":"-"},"content":" * Parses the {@code tags} into a {@code Set\u003cTag\u003e} and set it to the {@code Person} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":79,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":80,"author":{"gitId":"ashleygoh1"},"content":" public PersonBuilder withTags(String tag) {","lastModifiedDate":"2024-02-26"},{"lineNumber":81,"author":{"gitId":"ashleygoh1"},"content":" this.tag \u003d new Tag(tag);","lastModifiedDate":"2024-02-26"},{"lineNumber":82,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2016-09-03"},{"lineNumber":83,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":85,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":86,"author":{"gitId":"-"},"content":" * Sets the {@code Address} of the {@code Person} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":87,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":88,"author":{"gitId":"-"},"content":" public PersonBuilder withAddress(String address) {","lastModifiedDate":"2017-08-15"},{"lineNumber":89,"author":{"gitId":"-"},"content":" this.address \u003d new Address(address);","lastModifiedDate":"2017-12-20"},{"lineNumber":90,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2016-09-03"},{"lineNumber":91,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":93,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":94,"author":{"gitId":"-"},"content":" * Sets the {@code Phone} of the {@code Person} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":95,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":96,"author":{"gitId":"-"},"content":" public PersonBuilder withPhone(String phone) {","lastModifiedDate":"2017-08-15"},{"lineNumber":97,"author":{"gitId":"-"},"content":" this.phone \u003d new Phone(phone);","lastModifiedDate":"2017-12-20"},{"lineNumber":98,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2016-09-03"},{"lineNumber":99,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":100,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":101,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":102,"author":{"gitId":"-"},"content":" * Sets the {@code Email} of the {@code Person} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":103,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":104,"author":{"gitId":"-"},"content":" public PersonBuilder withEmail(String email) {","lastModifiedDate":"2017-08-15"},{"lineNumber":105,"author":{"gitId":"-"},"content":" this.email \u003d new Email(email);","lastModifiedDate":"2017-12-20"},{"lineNumber":106,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2016-09-03"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":108,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":109,"author":{"gitId":"ashleygoh1"},"content":" /**","lastModifiedDate":"2024-02-26"},{"lineNumber":110,"author":{"gitId":"ashleygoh1"},"content":" * Sets the {@code jobDescription} of the {@code Person} that we are building.","lastModifiedDate":"2024-02-26"},{"lineNumber":111,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-26"},{"lineNumber":112,"author":{"gitId":"ashleygoh1"},"content":" public PersonBuilder withJobDescription(String jobDescription) {","lastModifiedDate":"2024-02-26"},{"lineNumber":113,"author":{"gitId":"ashleygoh1"},"content":" this.jobDescription \u003d new JobDescription(jobDescription);","lastModifiedDate":"2024-02-26"},{"lineNumber":114,"author":{"gitId":"ashleygoh1"},"content":" return this;","lastModifiedDate":"2024-02-26"},{"lineNumber":115,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":116,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":117,"author":{"gitId":"ashleygoh1"},"content":" /**","lastModifiedDate":"2024-02-26"},{"lineNumber":118,"author":{"gitId":"ashleygoh1"},"content":" * Sets the {@code interviewDate} of the {@code Person} that we are building.","lastModifiedDate":"2024-02-26"},{"lineNumber":119,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-26"},{"lineNumber":120,"author":{"gitId":"ashleygoh1"},"content":" public PersonBuilder withInterviewDate(String interviewDate) {","lastModifiedDate":"2024-02-26"},{"lineNumber":121,"author":{"gitId":"ashleygoh1"},"content":" this.interviewDate \u003d new InterviewDate(interviewDate);","lastModifiedDate":"2024-02-26"},{"lineNumber":122,"author":{"gitId":"ashleygoh1"},"content":" return this;","lastModifiedDate":"2024-02-26"},{"lineNumber":123,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":124,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":125,"author":{"gitId":"ashleygoh1"},"content":" /**","lastModifiedDate":"2024-02-26"},{"lineNumber":126,"author":{"gitId":"ashleygoh1"},"content":" * Sets the {@code internDuration} of the {@code Person} that we are building.","lastModifiedDate":"2024-02-26"},{"lineNumber":127,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-26"},{"lineNumber":128,"author":{"gitId":"ashleygoh1"},"content":" public PersonBuilder withInternDuration(String internDuration) {","lastModifiedDate":"2024-02-26"},{"lineNumber":129,"author":{"gitId":"ashleygoh1"},"content":" this.internDuration \u003d new InternDuration(internDuration);","lastModifiedDate":"2024-02-26"},{"lineNumber":130,"author":{"gitId":"ashleygoh1"},"content":" return this;","lastModifiedDate":"2024-02-26"},{"lineNumber":131,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":132,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":133,"author":{"gitId":"ashleygoh1"},"content":" /**","lastModifiedDate":"2024-02-26"},{"lineNumber":134,"author":{"gitId":"ashleygoh1"},"content":" * Sets the {@code salary} of the {@code Person} that we are building.","lastModifiedDate":"2024-02-26"},{"lineNumber":135,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-26"},{"lineNumber":136,"author":{"gitId":"ashleygoh1"},"content":" public PersonBuilder withSalary(String salary) {","lastModifiedDate":"2024-02-26"},{"lineNumber":137,"author":{"gitId":"ashleygoh1"},"content":" this.salary \u003d new Salary(salary);","lastModifiedDate":"2024-02-26"},{"lineNumber":138,"author":{"gitId":"ashleygoh1"},"content":" return this;","lastModifiedDate":"2024-02-26"},{"lineNumber":139,"author":{"gitId":"ashleygoh1"},"content":" }","lastModifiedDate":"2024-02-26"},{"lineNumber":140,"author":{"gitId":"ashleygoh1"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":141,"author":{"gitId":"ashleygoh1"},"content":" /**","lastModifiedDate":"2024-02-26"},{"lineNumber":142,"author":{"gitId":"ashleygoh1"},"content":" * Build the person","lastModifiedDate":"2024-02-26"},{"lineNumber":143,"author":{"gitId":"ashleygoh1"},"content":" */","lastModifiedDate":"2024-02-26"},{"lineNumber":144,"author":{"gitId":"-"},"content":" public Person build() {","lastModifiedDate":"2017-04-05"},{"lineNumber":145,"author":{"gitId":"ashleygoh1"},"content":" return new Person(name, phone, email, address, tag,","lastModifiedDate":"2024-02-26"},{"lineNumber":146,"author":{"gitId":"ashleygoh1"},"content":" jobDescription, interviewDate, internDuration, salary);","lastModifiedDate":"2024-02-26"},{"lineNumber":147,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":148,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":149,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-09-03"}],"authorContributionMap":{"ashleygoh1":65,"-":84}},{"path":"src/test/java/seedu/address/testutil/PersonUtil.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.testutil;","lastModifiedDate":"2017-04-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2017-05-09"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2017-05-09"},{"lineNumber":5,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INTERN_DURATION;","lastModifiedDate":"2024-02-26"},{"lineNumber":6,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INTERVIEW_DATE;","lastModifiedDate":"2024-02-26"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_JOB_DESCRIPTION;","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2017-06-06"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2017-05-09"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_SALARY;","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2017-05-09"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-09"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.AddCommand;","lastModifiedDate":"2017-03-29"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-01-10"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-04-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * A utility class for Person.","lastModifiedDate":"2017-04-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-04-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"public class PersonUtil {","lastModifiedDate":"2017-04-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-04-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * Returns an add command string for adding the {@code person}.","lastModifiedDate":"2017-04-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-04-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":" public static String getAddCommand(Person person) {","lastModifiedDate":"2018-01-10"},{"lineNumber":25,"author":{"gitId":"-"},"content":" return AddCommand.COMMAND_WORD + \" \" + getPersonDetails(person);","lastModifiedDate":"2017-03-29"},{"lineNumber":26,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-04-06"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-06"},{"lineNumber":28,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-04-06"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * Returns the part of command string for the given {@code person}\u0027s details.","lastModifiedDate":"2017-04-06"},{"lineNumber":30,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-04-06"},{"lineNumber":31,"author":{"gitId":"-"},"content":" public static String getPersonDetails(Person person) {","lastModifiedDate":"2018-01-10"},{"lineNumber":32,"author":{"gitId":"-"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2017-04-05"},{"lineNumber":33,"author":{"gitId":"ashleygoh1"},"content":" sb.append(PREFIX_NAME + person.getCompanyName().fullName + \" \");","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" sb.append(PREFIX_PHONE + person.getPhone().value + \" \");","lastModifiedDate":"2017-05-09"},{"lineNumber":35,"author":{"gitId":"-"},"content":" sb.append(PREFIX_EMAIL + person.getEmail().value + \" \");","lastModifiedDate":"2017-05-09"},{"lineNumber":36,"author":{"gitId":"-"},"content":" sb.append(PREFIX_ADDRESS + person.getAddress().value + \" \");","lastModifiedDate":"2017-05-09"},{"lineNumber":37,"author":{"gitId":"ashleygoh1"},"content":" sb.append(PREFIX_TAG + person.getTag().tagName + \" \");","lastModifiedDate":"2024-02-26"},{"lineNumber":38,"author":{"gitId":"ashleygoh1"},"content":" sb.append(PREFIX_JOB_DESCRIPTION + person.getJobDescription().value + \" \");","lastModifiedDate":"2024-02-26"},{"lineNumber":39,"author":{"gitId":"ashleygoh1"},"content":" sb.append(PREFIX_INTERVIEW_DATE + person.getInterviewDate().toString() + \" \");","lastModifiedDate":"2024-02-26"},{"lineNumber":40,"author":{"gitId":"ashleygoh1"},"content":" sb.append(PREFIX_INTERN_DURATION + person.getInternDuration().value + \" \");","lastModifiedDate":"2024-02-26"},{"lineNumber":41,"author":{"gitId":"ashleygoh1"},"content":" sb.append(PREFIX_SALARY + person.getSalary().value);","lastModifiedDate":"2024-02-26"},{"lineNumber":42,"author":{"gitId":"-"},"content":" return sb.toString();","lastModifiedDate":"2018-03-26"},{"lineNumber":43,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-03-26"},{"lineNumber":44,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-04-05"}],"authorContributionMap":{"ashleygoh1":10,"-":34}},{"path":"src/test/java/seedu/address/testutil/TypicalPersons.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.testutil;","lastModifiedDate":"2016-09-13"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-13"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_AMY;","lastModifiedDate":"2017-08-22"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB;","lastModifiedDate":"2017-08-22"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_AMY;","lastModifiedDate":"2017-08-22"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_BOB;","lastModifiedDate":"2017-08-22"},{"lineNumber":7,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_INTERN_DURATION_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_INTERN_DURATION_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":9,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_INTERVIEW_DATE_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":10,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_INTERVIEW_DATE_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_JOB_DESCRIPTION_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_JOB_DESCRIPTION_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_AMY;","lastModifiedDate":"2017-08-22"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB;","lastModifiedDate":"2017-08-22"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_AMY;","lastModifiedDate":"2017-08-22"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB;","lastModifiedDate":"2017-08-22"},{"lineNumber":17,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_SALARY_AMY;","lastModifiedDate":"2024-02-26"},{"lineNumber":18,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_SALARY_BOB;","lastModifiedDate":"2024-02-26"},{"lineNumber":19,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_FIRST_INTERVIEW;","lastModifiedDate":"2024-02-26"},{"lineNumber":20,"author":{"gitId":"ashleygoh1"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_NO_REPLY;","lastModifiedDate":"2024-02-26"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-08-22"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import java.util.ArrayList;","lastModifiedDate":"2017-08-07"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import java.util.Arrays;","lastModifiedDate":"2017-08-07"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2017-08-07"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-08-07"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import seedu.address.model.AddressBook;","lastModifiedDate":"2016-09-21"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-01-10"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-13"},{"lineNumber":29,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-09-13"},{"lineNumber":30,"author":{"gitId":"-"},"content":" * A utility class containing a list of {@code Person} objects to be used in tests.","lastModifiedDate":"2017-08-05"},{"lineNumber":31,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-09-13"},{"lineNumber":32,"author":{"gitId":"-"},"content":"public class TypicalPersons {","lastModifiedDate":"2017-04-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-13"},{"lineNumber":34,"author":{"gitId":"-"},"content":" public static final Person ALICE \u003d new PersonBuilder().withName(\"Alice Pauline\")","lastModifiedDate":"2018-01-10"},{"lineNumber":35,"author":{"gitId":"-"},"content":" .withPhone(\"94351253\")","lastModifiedDate":"2018-04-19"},{"lineNumber":36,"author":{"gitId":"ashleygoh1"},"content":" .withEmail(\"alice@example.com\")","lastModifiedDate":"2024-02-26"},{"lineNumber":37,"author":{"gitId":"ashleygoh1"},"content":" .withAddress(\"123, Jurong West Ave 6, #08-111\")","lastModifiedDate":"2024-02-26"},{"lineNumber":38,"author":{"gitId":"ashleygoh1"},"content":" .withTags(\"NR\")","lastModifiedDate":"2024-02-26"},{"lineNumber":39,"author":{"gitId":"ashleygoh1"},"content":" .withJobDescription(\"Software engineer developer\")","lastModifiedDate":"2024-02-26"},{"lineNumber":40,"author":{"gitId":"ashleygoh1"},"content":" .withInterviewDate(\"03-01-2024 1000\")","lastModifiedDate":"2024-02-26"},{"lineNumber":41,"author":{"gitId":"ashleygoh1"},"content":" .withInternDuration(\"3 months\")","lastModifiedDate":"2024-02-26"},{"lineNumber":42,"author":{"gitId":"ashleygoh1"},"content":" .withSalary(\"1000\").build();","lastModifiedDate":"2024-02-26"},{"lineNumber":43,"author":{"gitId":"-"},"content":" public static final Person BENSON \u003d new PersonBuilder().withName(\"Benson Meier\")","lastModifiedDate":"2018-01-10"},{"lineNumber":44,"author":{"gitId":"-"},"content":" .withAddress(\"311, Clementi Ave 2, #02-25\")","lastModifiedDate":"2017-09-21"},{"lineNumber":45,"author":{"gitId":"-"},"content":" .withEmail(\"johnd@example.com\").withPhone(\"98765432\")","lastModifiedDate":"2017-04-05"},{"lineNumber":46,"author":{"gitId":"ashleygoh1"},"content":" .withTags(\"F\")","lastModifiedDate":"2024-02-26"},{"lineNumber":47,"author":{"gitId":"ashleygoh1"},"content":" .withJobDescription(\"Software engineer developer intern\")","lastModifiedDate":"2024-02-26"},{"lineNumber":48,"author":{"gitId":"Jawad280"},"content":" .withInterviewDate(\"03-02-2024 1000\")","lastModifiedDate":"2024-02-29"},{"lineNumber":49,"author":{"gitId":"ashleygoh1"},"content":" .withInternDuration(\"3 months\")","lastModifiedDate":"2024-02-26"},{"lineNumber":50,"author":{"gitId":"ashleygoh1"},"content":" .withSalary(\"1000\").build();","lastModifiedDate":"2024-02-26"},{"lineNumber":51,"author":{"gitId":"-"},"content":" public static final Person CARL \u003d new PersonBuilder().withName(\"Carl Kurz\").withPhone(\"95352563\")","lastModifiedDate":"2018-01-10"},{"lineNumber":52,"author":{"gitId":"ashleygoh1"},"content":" .withEmail(\"heinz@example.com\").withAddress(\"wall street\")","lastModifiedDate":"2024-02-26"},{"lineNumber":53,"author":{"gitId":"ashleygoh1"},"content":" .withTags(\"NR\")","lastModifiedDate":"2024-02-26"},{"lineNumber":54,"author":{"gitId":"ashleygoh1"},"content":" .withJobDescription(\"Software engineer developer intern\")","lastModifiedDate":"2024-02-26"},{"lineNumber":55,"author":{"gitId":"Jawad280"},"content":" .withInterviewDate(\"03-03-2024 1000\")","lastModifiedDate":"2024-02-29"},{"lineNumber":56,"author":{"gitId":"ashleygoh1"},"content":" .withInternDuration(\"3 months\")","lastModifiedDate":"2024-02-26"},{"lineNumber":57,"author":{"gitId":"ashleygoh1"},"content":" .withSalary(\"1000\").build();","lastModifiedDate":"2024-02-26"},{"lineNumber":58,"author":{"gitId":"-"},"content":" public static final Person DANIEL \u003d new PersonBuilder().withName(\"Daniel Meier\").withPhone(\"87652533\")","lastModifiedDate":"2018-01-10"},{"lineNumber":59,"author":{"gitId":"ashleygoh1"},"content":" .withEmail(\"cornelia@example.com\").withAddress(\"10th street\")","lastModifiedDate":"2024-02-26"},{"lineNumber":60,"author":{"gitId":"ashleygoh1"},"content":" .withTags(\"NR\")","lastModifiedDate":"2024-02-26"},{"lineNumber":61,"author":{"gitId":"ashleygoh1"},"content":" .withJobDescription(\"Front End intern\")","lastModifiedDate":"2024-02-26"},{"lineNumber":62,"author":{"gitId":"Jawad280"},"content":" .withInterviewDate(\"03-04-2024 1000\")","lastModifiedDate":"2024-02-29"},{"lineNumber":63,"author":{"gitId":"ashleygoh1"},"content":" .withInternDuration(\"3 months\")","lastModifiedDate":"2024-02-26"},{"lineNumber":64,"author":{"gitId":"ashleygoh1"},"content":" .withSalary(\"1200\").build();","lastModifiedDate":"2024-02-26"},{"lineNumber":65,"author":{"gitId":"-"},"content":" public static final Person ELLE \u003d new PersonBuilder().withName(\"Elle Meyer\").withPhone(\"9482224\")","lastModifiedDate":"2018-01-10"},{"lineNumber":66,"author":{"gitId":"ashleygoh1"},"content":" .withEmail(\"werner@example.com\")","lastModifiedDate":"2024-02-26"},{"lineNumber":67,"author":{"gitId":"ashleygoh1"},"content":" .withTags(\"NR\")","lastModifiedDate":"2024-02-26"},{"lineNumber":68,"author":{"gitId":"ashleygoh1"},"content":" .withJobDescription(\"Software engineer developer intern\")","lastModifiedDate":"2024-02-26"},{"lineNumber":69,"author":{"gitId":"Jawad280"},"content":" .withInterviewDate(\"03-05-2024 1000\")","lastModifiedDate":"2024-02-29"},{"lineNumber":70,"author":{"gitId":"ashleygoh1"},"content":" .withInternDuration(\"3 months\")","lastModifiedDate":"2024-02-26"},{"lineNumber":71,"author":{"gitId":"ashleygoh1"},"content":" .withSalary(\"1000\").build();","lastModifiedDate":"2024-02-26"},{"lineNumber":72,"author":{"gitId":"-"},"content":" public static final Person FIONA \u003d new PersonBuilder().withName(\"Fiona Kunz\").withPhone(\"9482427\")","lastModifiedDate":"2018-01-10"},{"lineNumber":73,"author":{"gitId":"ashleygoh1"},"content":" .withEmail(\"lydia@example.com\")","lastModifiedDate":"2024-02-26"},{"lineNumber":74,"author":{"gitId":"ashleygoh1"},"content":" .withTags(\"NR\")","lastModifiedDate":"2024-02-26"},{"lineNumber":75,"author":{"gitId":"ashleygoh1"},"content":" .withJobDescription(\"Data science intern\")","lastModifiedDate":"2024-02-26"},{"lineNumber":76,"author":{"gitId":"Jawad280"},"content":" .withInterviewDate(\"03-06-2024 1000\")","lastModifiedDate":"2024-02-29"},{"lineNumber":77,"author":{"gitId":"ashleygoh1"},"content":" .withInternDuration(\"3 months\")","lastModifiedDate":"2024-02-26"},{"lineNumber":78,"author":{"gitId":"ashleygoh1"},"content":" .withSalary(\"1000\").build();","lastModifiedDate":"2024-02-26"},{"lineNumber":79,"author":{"gitId":"-"},"content":" public static final Person GEORGE \u003d new PersonBuilder().withName(\"George Best\").withPhone(\"9482442\")","lastModifiedDate":"2018-01-10"},{"lineNumber":80,"author":{"gitId":"ashleygoh1"},"content":" .withEmail(\"anna@example.com\").withAddress(\"4th street\")","lastModifiedDate":"2024-02-26"},{"lineNumber":81,"author":{"gitId":"ashleygoh1"},"content":" .withTags(\"F\")","lastModifiedDate":"2024-02-26"},{"lineNumber":82,"author":{"gitId":"ashleygoh1"},"content":" .withJobDescription(\"Software engineer developer intern\")","lastModifiedDate":"2024-02-26"},{"lineNumber":83,"author":{"gitId":"Jawad280"},"content":" .withInterviewDate(\"03-07-2024 1000\")","lastModifiedDate":"2024-02-29"},{"lineNumber":84,"author":{"gitId":"ashleygoh1"},"content":" .withInternDuration(\"3 months\")","lastModifiedDate":"2024-02-26"},{"lineNumber":85,"author":{"gitId":"ashleygoh1"},"content":" .withSalary(\"1000\").build();","lastModifiedDate":"2024-02-26"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-13"},{"lineNumber":87,"author":{"gitId":"-"},"content":" // Manually added","lastModifiedDate":"2016-09-13"},{"lineNumber":88,"author":{"gitId":"-"},"content":" public static final Person HOON \u003d new PersonBuilder().withName(\"Hoon Meier\").withPhone(\"8482424\")","lastModifiedDate":"2018-01-10"},{"lineNumber":89,"author":{"gitId":"ashleygoh1"},"content":" .withEmail(\"stefan@example.com\").withAddress(\"little india\")","lastModifiedDate":"2024-02-26"},{"lineNumber":90,"author":{"gitId":"ashleygoh1"},"content":" .withTags(\"F\")","lastModifiedDate":"2024-02-26"},{"lineNumber":91,"author":{"gitId":"ashleygoh1"},"content":" .withJobDescription(\"Software engineer developer intern\")","lastModifiedDate":"2024-02-26"},{"lineNumber":92,"author":{"gitId":"Jawad280"},"content":" .withInterviewDate(\"03-08-2024 1700\")","lastModifiedDate":"2024-02-29"},{"lineNumber":93,"author":{"gitId":"ashleygoh1"},"content":" .withInternDuration(\"3 months\")","lastModifiedDate":"2024-02-26"},{"lineNumber":94,"author":{"gitId":"ashleygoh1"},"content":" .withSalary(\"1000\").build();","lastModifiedDate":"2024-02-26"},{"lineNumber":95,"author":{"gitId":"-"},"content":" public static final Person IDA \u003d new PersonBuilder().withName(\"Ida Mueller\").withPhone(\"8482131\")","lastModifiedDate":"2018-01-10"},{"lineNumber":96,"author":{"gitId":"ashleygoh1"},"content":" .withEmail(\"hans@example.com\")","lastModifiedDate":"2024-02-26"},{"lineNumber":97,"author":{"gitId":"ashleygoh1"},"content":" .withTags(\"NR\")","lastModifiedDate":"2024-02-26"},{"lineNumber":98,"author":{"gitId":"ashleygoh1"},"content":" .withJobDescription(\"Full Stack intern\")","lastModifiedDate":"2024-02-26"},{"lineNumber":99,"author":{"gitId":"Jawad280"},"content":" .withInterviewDate(\"03-09-2024 1000\")","lastModifiedDate":"2024-02-29"},{"lineNumber":100,"author":{"gitId":"ashleygoh1"},"content":" .withInternDuration(\"3 months\")","lastModifiedDate":"2024-02-26"},{"lineNumber":101,"author":{"gitId":"ashleygoh1"},"content":" .withSalary(\"1000\").build();","lastModifiedDate":"2024-02-26"},{"lineNumber":102,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-08-22"},{"lineNumber":103,"author":{"gitId":"-"},"content":" // Manually added - Person\u0027s details found in {@code CommandTestUtil}","lastModifiedDate":"2017-08-22"},{"lineNumber":104,"author":{"gitId":"-"},"content":" public static final Person AMY \u003d new PersonBuilder().withName(VALID_NAME_AMY).withPhone(VALID_PHONE_AMY)","lastModifiedDate":"2018-01-10"},{"lineNumber":105,"author":{"gitId":"ashleygoh1"},"content":" .withEmail(VALID_EMAIL_AMY).withAddress(VALID_ADDRESS_AMY).withTags(VALID_TAG_NO_REPLY)","lastModifiedDate":"2024-02-26"},{"lineNumber":106,"author":{"gitId":"ashleygoh1"},"content":" .withJobDescription(VALID_JOB_DESCRIPTION_AMY).withInterviewDate(VALID_INTERVIEW_DATE_AMY)","lastModifiedDate":"2024-02-26"},{"lineNumber":107,"author":{"gitId":"ashleygoh1"},"content":" .withInternDuration(VALID_INTERN_DURATION_AMY).withSalary(VALID_SALARY_AMY).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":108,"author":{"gitId":"-"},"content":" public static final Person BOB \u003d new PersonBuilder().withName(VALID_NAME_BOB).withPhone(VALID_PHONE_BOB)","lastModifiedDate":"2018-01-10"},{"lineNumber":109,"author":{"gitId":"ashleygoh1"},"content":" .withEmail(VALID_EMAIL_BOB).withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_FIRST_INTERVIEW)","lastModifiedDate":"2024-02-26"},{"lineNumber":110,"author":{"gitId":"ashleygoh1"},"content":" .withJobDescription(VALID_JOB_DESCRIPTION_BOB).withInterviewDate(VALID_INTERVIEW_DATE_BOB)","lastModifiedDate":"2024-02-26"},{"lineNumber":111,"author":{"gitId":"ashleygoh1"},"content":" .withInternDuration(VALID_INTERN_DURATION_BOB).withSalary(VALID_SALARY_BOB).build();","lastModifiedDate":"2024-02-26"},{"lineNumber":112,"author":{"gitId":"-"},"content":" public static final String KEYWORD_MATCHING_MEIER \u003d \"Meier\"; // A keyword that matches MEIER","lastModifiedDate":"2017-09-21"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-13"},{"lineNumber":114,"author":{"gitId":"-"},"content":" private TypicalPersons() {} // prevents instantiation","lastModifiedDate":"2017-07-20"},{"lineNumber":115,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-20"},{"lineNumber":116,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":117,"author":{"gitId":"-"},"content":" * Returns an {@code AddressBook} with all the typical persons.","lastModifiedDate":"2017-08-05"},{"lineNumber":118,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":119,"author":{"gitId":"-"},"content":" public static AddressBook getTypicalAddressBook() {","lastModifiedDate":"2017-08-05"},{"lineNumber":120,"author":{"gitId":"-"},"content":" AddressBook ab \u003d new AddressBook();","lastModifiedDate":"2017-08-05"},{"lineNumber":121,"author":{"gitId":"-"},"content":" for (Person person : getTypicalPersons()) {","lastModifiedDate":"2018-01-10"},{"lineNumber":122,"author":{"gitId":"-"},"content":" ab.addPerson(person);","lastModifiedDate":"2017-08-05"},{"lineNumber":123,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-13"},{"lineNumber":124,"author":{"gitId":"-"},"content":" return ab;","lastModifiedDate":"2016-09-24"},{"lineNumber":125,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-24"},{"lineNumber":126,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-08-04"},{"lineNumber":127,"author":{"gitId":"-"},"content":" public static List\u003cPerson\u003e getTypicalPersons() {","lastModifiedDate":"2018-01-10"},{"lineNumber":128,"author":{"gitId":"-"},"content":" return new ArrayList\u003c\u003e(Arrays.asList(ALICE, BENSON, CARL, DANIEL, ELLE, FIONA, GEORGE));","lastModifiedDate":"2017-08-07"},{"lineNumber":129,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-08-04"},{"lineNumber":130,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-09-13"}],"authorContributionMap":{"Jawad280":8,"ashleygoh1":62,"-":60}}] diff --git a/AY2324S2-CS2103T-F14-1_tp_master/commits.json b/AY2324S2-CS2103T-F14-1_tp_master/commits.json index 334f49c0..830cc2e2 100644 --- a/AY2324S2-CS2103T-F14-1_tp_master/commits.json +++ b/AY2324S2-CS2103T-F14-1_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"eunrcn":[{"date":"2024-02-25","commitResults":[{"hash":"0cd3bdc989755c7ed43a8523cc9d8592ed363c5d","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":40,"deletions":10}}},{"hash":"c7e914ce20a66490ee2c6c968b9adfc187767466","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"b3975f7769ca075ee0cd10cd246aa26bbd31253f","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":4}}},{"hash":"b3412e8d21e2cca2ae14585b99a3ee63ec447d27","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2024-02-28","commitResults":[{"hash":"9087634673272c4b9aacdfd3a4981e26df04e166","isMergeCommit":false,"messageTitle":"before i go crazy","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":342,"deletions":327},"docs":{"insertions":1,"deletions":1}}},{"hash":"4d48a0558a1cbb536656ae2ba00ead0240359df3","isMergeCommit":false,"messageTitle":"i need to restart the ide","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":171}}},{"hash":"3372f5a12a5623167ba02deee90937332255aef0","isMergeCommit":false,"messageTitle":"i need to restart the ide","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":281,"deletions":22},"docs":{"insertions":4,"deletions":4},"test-code":{"insertions":1,"deletions":1}}},{"hash":"e90d8c8db6708686cccd3d271f9fe57636b4a653","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":4}}},{"hash":"aedeef19613f887efdc9b579e95c25fd0e2466b0","isMergeCommit":false,"messageTitle":"before i go crazy","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":342,"deletions":327},"docs":{"insertions":1,"deletions":1}}},{"hash":"d7df7f89c530dbc3ef386559b6d51c7074f1d0fb","isMergeCommit":false,"messageTitle":"i need to restart the ide","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":171}}},{"hash":"d8e6ae17fbfd38ff7a7df109f3d530aba1d6fb13","isMergeCommit":false,"messageTitle":"Implement EditCommandParser, EditCommand, README.md","messageBody":"Create EditCommandParser to parse user input for editing a person\u0027s details in the address book. The parser handles the input arguments, validates them, and constructs an EditCommand object for execution. It uses CliSyntax prefixes and follows a similar structure as the AddCommandParser. The parsing logic for each attribute (name, phone, email, address, tags, jobDescription, interviewDate, internDuration, salary) is provided, and the EditPersonDescriptor is updated accordingly.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":281,"deletions":22},"docs":{"insertions":4,"deletions":4},"test-code":{"insertions":1,"deletions":1}}},{"hash":"84fb48af30266ef49e59def139d0152ae70b8df0","isMergeCommit":true,"messageTitle":"Merge pull request #19 from eunrcn/edit-user-command","messageBody":"Edit user command","fileTypesAndContributionMap":{}},{"hash":"dee005733138e04614d1fd8e7a8d24d9ddff9d95","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into list-sort-feature","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ff077d86cc6c6b13b43cb40856299ff43bb877a5","isMergeCommit":true,"messageTitle":"Merge pull request #11 from Jawad280/list-sort-feature","messageBody":"List sort feature","fileTypesAndContributionMap":{}},{"hash":"70757311f0d1c7009d98281de8d45534f5c02b6f","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into ui-change-v2","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2bf68d378518de9cf0e8aaa29b430e2e09d766f5","isMergeCommit":true,"messageTitle":"Merge pull request #10 from Jawad280/ui-change-v2","messageBody":"UI change v2","fileTypesAndContributionMap":{}},{"hash":"1a3591b38a2804685c5a1bca534e29b53a32526b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into about-us","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"bb15b96192da118c460c8dce2fedd4bcdae4b1f8","isMergeCommit":true,"messageTitle":"Merge pull request #12 from Jawad280/about-us","messageBody":"About us","fileTypesAndContributionMap":{}},{"hash":"466970275c7eca80fa4821cdb9d2906299c11996","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"180f24f7cde7a2b6cb01146757d4fb8d96ef2e7a","isMergeCommit":true,"messageTitle":"Merge pull request #20 from eunrcn/master","messageBody":"Implement EditCommandParser, EditCommand, README.md","fileTypesAndContributionMap":{}},{"hash":"b10868a6cfaf9af636253fd399a624e52c8997af","isMergeCommit":false,"messageTitle":"Remove duplicate method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":3}}},{"hash":"4c41d2d12227744858662ff3d3c21b4953f564dc","isMergeCommit":true,"messageTitle":"Merge pull request #22 from eunrcn/master","messageBody":"Remove duplicate method","fileTypesAndContributionMap":{}}]},{"date":"2024-02-29","commitResults":[{"hash":"e906563e27c635c19e9572e77ca6bb8ed2164147","isMergeCommit":true,"messageTitle":"Merge pull request #23 from Jawad280/edit-v2","messageBody":"Edit command tweaks","fileTypesAndContributionMap":{}}]},{"date":"2024-03-01","commitResults":[{"hash":"0e86ea8d3bf59f05a541ad0e54c5bfeff227f5fa","isMergeCommit":false,"messageTitle":"Rename my github username","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"32a484d3af811f8d282f7fd303e4d63b784e7469","isMergeCommit":true,"messageTitle":"Merge branch \u0027AY2324S2-CS2103T-F14-1:master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7e44cf99bfaafbfc9e8b5cddadb675f22b52b907","isMergeCommit":true,"messageTitle":"Merge pull request #26 from eunrcn/master","messageBody":"Github Username","fileTypesAndContributionMap":{}},{"hash":"e2ac9386c6386c8f9ece3b98b8c273725952c91b","isMergeCommit":false,"messageTitle":"Developer Guide User Stories","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":10,"deletions":8}}}]}],"chenyixin0":[{"date":"2024-02-25","commitResults":[{"hash":"982cfaee95655364aedaeb31d37dd2404d126cf0","isMergeCommit":true,"messageTitle":"Merge pull request #2 from eunrcn/master","messageBody":"Update README.md","fileTypesAndContributionMap":{}}]},{"date":"2024-02-29","commitResults":[{"hash":"bfb35deb0850f85af37824fc722aa0944321c2a7","isMergeCommit":false,"messageTitle":"Add find command halfway","messageBody":"Ui is still bugged\n","fileTypesAndContributionMap":{"functional-code":{"insertions":54,"deletions":9}}},{"hash":"9d94238ad9b7188dbbe813415012bfc2d88e1cd4","isMergeCommit":false,"messageTitle":"Add Find command correctly","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":38,"deletions":27},"docs":{"insertions":5,"deletions":5}}}]},{"date":"2024-03-01","commitResults":[{"hash":"c7214479a83a1e4a8719287d3f75fbf77db504b4","isMergeCommit":true,"messageTitle":"Merge pull request #24 from chenyixin0/master","messageBody":"AboutUs, Find command","fileTypesAndContributionMap":{}}]}],"minghowC":[{"date":"2024-03-01","commitResults":[{"hash":"4ca3dea543c95143e2a4d16638916ecf309f2a02","isMergeCommit":false,"messageTitle":"Add my AboutUS.md details","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"24e282da380f51c1bdbb9602341f0d106a877e3c","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"fbe28239026c115f3c9f2a189e0cd0c9c6a5f8d4","isMergeCommit":false,"messageTitle":"Add delete feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0}}},{"hash":"3cfc9010be6d990cb335dd0021ff33aeb814e020","isMergeCommit":true,"messageTitle":"Merge pull request #28 from minghowC/master","messageBody":"Add delete feature","fileTypesAndContributionMap":{}}]}],"Jawad280":[{"date":"2024-02-25","commitResults":[{"hash":"a7783867c92a5a46814382d06ac2889ad9ef58d5","isMergeCommit":false,"messageTitle":"Remark tutorial","messageBody":"The tutorial for adding a command, remark in the AB.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":180,"deletions":16}}},{"hash":"f497f581a26aded9b0aba848fd1f6f077419982a","isMergeCommit":false,"messageTitle":"Restore to tp master","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":176}}},{"hash":"44dcd8a249a1c6937d1cab34f48cc42e1c0a11d3","isMergeCommit":false,"messageTitle":"Restore to tp master including JavaFX","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":4}}}]},{"date":"2024-02-26","commitResults":[{"hash":"72b6fe1d1feaff7fdd17593858b00050831a17ef","isMergeCommit":true,"messageTitle":"Merge branch \u0027AY2324S2-CS2103T-F14-1:master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4aebef91a564c0a38b6264577a2b40f6d858be33","isMergeCommit":false,"messageTitle":"List function implemented with auto sort by interview date","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":4}}},{"hash":"ad2e6e6e6a1279989051a6a86af43b832194580c","isMergeCommit":false,"messageTitle":"Ui is updated together with a simple view feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":250,"deletions":12}}}]},{"date":"2024-02-27","commitResults":[{"hash":"af8d4de6e6ed2407cd3199b9b3098a2b77380af6","isMergeCommit":false,"messageTitle":"AboutUs page updated \u0026 included picture","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}}]},{"date":"2024-02-29","commitResults":[{"hash":"a98c3853d486f940b161f73b2a536e80d20fcb69","isMergeCommit":false,"messageTitle":"Edit command tweaks","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":50,"deletions":30}}},{"hash":"b47cf87fadc45499cf2a1e02965cadbc81aba8e9","isMergeCommit":false,"messageTitle":"Reformatted classes to fit checkstyle issues","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":15},"test-code":{"insertions":1,"deletions":1}}},{"hash":"adca670b121b567c6103b05a133a1952e604b1fd","isMergeCommit":false,"messageTitle":"Edited test classes to reflect changes in our main classes","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":12,"deletions":3}}}]},{"date":"2024-03-01","commitResults":[{"hash":"c9656627807a5a25559c51df77f64b69af34608f","isMergeCommit":true,"messageTitle":"Merge pull request #25 from minghowC/master","messageBody":"Update AboutUs.md for everyone","fileTypesAndContributionMap":{}},{"hash":"1f9824cca54b5ee7cd9917f8440992221726fecd","isMergeCommit":false,"messageTitle":"Developer Guide updated with use cases","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":22,"deletions":16},"docs":{"insertions":119,"deletions":20}}},{"hash":"edd259a66efe637953f9370b1cd5d03c3f632e9c","isMergeCommit":true,"messageTitle":"Merge branch \u0027DG\u0027 into DG-v2","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"40e2be88e2a1d621b4fc29698ac76917c05bb749","isMergeCommit":true,"messageTitle":"Merge pull request #27 from eunrcn/master","messageBody":"Developer Guide User Stories","fileTypesAndContributionMap":{}},{"hash":"65f56fa2ecb089e8f35aa13b2e268852c354eff2","isMergeCommit":false,"messageTitle":"Developer Guide edited to include Use Case","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"651c53401fd3cd17b415a7e54dc5e778f92c61c8","isMergeCommit":false,"messageTitle":"Update DG","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":5,"deletions":0}}},{"hash":"49001518677cd99d41d76f2a118d92ed2a961020","isMergeCommit":true,"messageTitle":"Merge pull request #30 from Jawad280/DG-v2","messageBody":"Developer Guide edited to include Use Cases","fileTypesAndContributionMap":{}},{"hash":"c4eb64ca81ebba0163703ba0d9dbd5e8f0bf8899","isMergeCommit":false,"messageTitle":"UG updated \u0026 DG finalised","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":75,"deletions":68}}},{"hash":"2dd836dd6a3fb60422f14ce3d26a585d042c18ef","isMergeCommit":false,"messageTitle":"Updated FindCommand and FindCommandTest to pass test cases","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"0ad563ef3e6ff78790bcd25a1b468106619a5985","isMergeCommit":true,"messageTitle":"Merge pull request #31 from Jawad280/UG","messageBody":"* UG updated \u0026 DG finalised\r\n* FindCommand \u0026 FindCommandTest has been updated to pass test cases","fileTypesAndContributionMap":{}}]},{"date":"2024-03-02","commitResults":[{"hash":"7e0ab9d1a79ab01d4756f7cc54c1c6b459922034","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":6}}},{"hash":"6f21796aa0f276bdd5b50f4ef3580d642c5662d3","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"src\u003d\"images/minghowc\" changed to src\u003d\"images/minghowC\"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"10890b9de2c8244da3c35ea2e657532427eb23f8","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"Updated Actions build badge to our CI","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"e652643f1bd82fc981347e914f5cf8757a42d80e","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"Update link of GitHub Actions build status to reflect out CI","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"17f42bbd0898b2834e896f6aeb1f523499656a3b","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":12,"deletions":0}}},{"hash":"849a4015008919834a3d02d24ff79a3ee8bab43d","isMergeCommit":true,"messageTitle":"Merge pull request #33 from ashleygoh1/v1.2-readme-dg","messageBody":"Edit AboutUs.md making sure CI banners pointing to own project","fileTypesAndContributionMap":{}}]},{"date":"2024-03-03","commitResults":[{"hash":"1dc44135b25b17969c3eac957fa5e1d9a2d9d988","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"Change from .jpg to .png","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]}],"ashleygoh1":[{"date":"2024-02-23","commitResults":[{"hash":"c37653119c039b3b06a0f1c97a54bf50bab58e13","isMergeCommit":true,"messageTitle":"Merge pull request #1 from nus-cs2103-AY2324S2/switch-docs-to-markbind","messageBody":"Switch docs to markbind","fileTypesAndContributionMap":{}},{"hash":"02b788dfe07da9cd8cdbf59e8a88d7b173519b99","isMergeCommit":false,"messageTitle":"Update default.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2024-02-25","commitResults":[{"hash":"91310b8007505d028bf03ebb7328628123aac855","isMergeCommit":false,"messageTitle":"Edit add person command","messageBody":"Allow user to input additional information such as job description, interview date, intern duration, and salary\n\nCreate new java files for the new parameters (job description, interview date, intern duration, and salary)\n\nUpdate the message shown to user when inputs are successfully added to the address book\n","fileTypesAndContributionMap":{"functional-code":{"insertions":820,"deletions":452},"test-code":{"insertions":7,"deletions":7}}},{"hash":"ac8ff5ede9e0140593cce2738807dc140cfe0a4b","isMergeCommit":false,"messageTitle":"Edit the code to adhere to checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":72,"deletions":52}}}]},{"date":"2024-02-26","commitResults":[{"hash":"40a8dc2db17be26f847e2e62578d0ec85daf5d0c","isMergeCommit":false,"messageTitle":"Edit the code to adhere to checkstyle","messageBody":"Update add command making address and interview date optional\n","fileTypesAndContributionMap":{"functional-code":{"insertions":60,"deletions":67},"test-code":{"insertions":725,"deletions":674}}},{"hash":"48b2b75118695a2e36e2b48fa421555c9c79da9e","isMergeCommit":false,"messageTitle":"Edit the code to adhere to checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":5}}},{"hash":"1555b79e2fb6a6cbc1c5fa2df744fdb9b5442024","isMergeCommit":false,"messageTitle":"Edit the code to adhere to checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":22,"deletions":1},"test-code":{"insertions":50,"deletions":84}}},{"hash":"6c916d78717a24e63ace889976d7f9ad6a775c9f","isMergeCommit":false,"messageTitle":"Edit the code to adhere to checkstyle","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":6,"deletions":3}}},{"hash":"a803a78f42529db23dbcfe4eadb3f4d4dba645dc","isMergeCommit":false,"messageTitle":"Edit the code to adhere to checkstyle","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":2,"deletions":1}}},{"hash":"2b6bcf8fd067cc7e80bc13859d4d00495d051c45","isMergeCommit":false,"messageTitle":"Edit the code to pass test cases","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":19,"deletions":15},"test-code":{"insertions":159,"deletions":34}}},{"hash":"53c3484501afe1c222de9e19e3a0265280e371a8","isMergeCommit":false,"messageTitle":"Edit the code to pass test cases","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":4}}},{"hash":"c681a5e1e216e5b28d8ae7a1a38b3c4bef1c6464","isMergeCommit":false,"messageTitle":"Comment out unuse test cases","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":74,"deletions":75}}},{"hash":"0a725fae3815ac4eacc7358b4914f5d105c0a158","isMergeCommit":true,"messageTitle":"Merge pull request #6 from ashleygoh1/v1.2-add-user-command","messageBody":"Edit add person command","fileTypesAndContributionMap":{}},{"hash":"ee45f5fafbc62b4861e26d071bf3bf0d4720ec40","isMergeCommit":true,"messageTitle":"Merge pull request #9 from AY2324S2-CS2103T-F14-1/add-user-command","messageBody":"Add user command","fileTypesAndContributionMap":{}}]},{"date":"2024-02-27","commitResults":[{"hash":"a5a33c8068e449766a7fcb1e2e1d8c05236d5e95","isMergeCommit":false,"messageTitle":"Edit UserGuide.md and AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":0},"docs":{"insertions":210,"deletions":42}}},{"hash":"085f8e3a69ef3ef61c9f29c1f52f2ac4cf225bdc","isMergeCommit":false,"messageTitle":"Edit the code to adhere to checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"f099d488e6f666a9e4118ac987d9547dc00cba64","isMergeCommit":true,"messageTitle":"Merge pull request #15 from ashleygoh1/v1.2-update-ug","messageBody":"Edit UserGuide.md and AboutUs.md","fileTypesAndContributionMap":{}},{"hash":"120a711cc7f58c49bc269f566b3d92db4ae13cd0","isMergeCommit":true,"messageTitle":"Merge pull request #16 from AY2324S2-CS2103T-F14-1/update-ug","messageBody":"Update ug","fileTypesAndContributionMap":{}}]},{"date":"2024-03-02","commitResults":[{"hash":"ada3fc193734a4f821e290355418b26a1d5157b0","isMergeCommit":false,"messageTitle":"Edit AboutUs.md making sure CI banners pointing to own project","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":10,"deletions":12}}},{"hash":"3396036cac84e2f12b7a53bc72867b2d5e6ddee3","isMergeCommit":false,"messageTitle":"Edit the code to adhere to checkstyle","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":6}}}]}]},"authorFileTypeContributionMap":{"eunrcn":{"docs":40,"functional-code":101,"test-code":0},"chenyixin0":{"docs":4,"functional-code":67,"test-code":0},"minghowC":{"docs":0,"functional-code":3,"test-code":0},"Jawad280":{"docs":166,"functional-code":298,"test-code":17},"ashleygoh1":{"docs":75,"functional-code":553,"test-code":965}},"authorContributionVariance":{"eunrcn":481601.6,"chenyixin0":1713.9597,"minghowC":3.2400002,"Jawad280":22330.56,"ashleygoh1":497850.0},"authorDisplayNameMap":{"eunrcn":"CS2103T-F14-1 EUNI..NING","chenyixin0":"CS2103T-F14-1 CHEN..IXIN","minghowC":"CS2103T-F14-1 CHAI.. HOW","Jawad280":"CS2103T-F14-1 JAWA..THAB","ashleygoh1":"CS2103T-F14-1 ASHL..TING"}} +{"authorDailyContributionsMap":{"eunrcn":[{"date":"2024-02-25","commitResults":[{"hash":"0cd3bdc989755c7ed43a8523cc9d8592ed363c5d","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":40,"deletions":10}}},{"hash":"c7e914ce20a66490ee2c6c968b9adfc187767466","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"b3975f7769ca075ee0cd10cd246aa26bbd31253f","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":4}}},{"hash":"b3412e8d21e2cca2ae14585b99a3ee63ec447d27","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2024-02-28","commitResults":[{"hash":"9087634673272c4b9aacdfd3a4981e26df04e166","isMergeCommit":false,"messageTitle":"before i go crazy","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":342,"deletions":327},"docs":{"insertions":1,"deletions":1}}},{"hash":"4d48a0558a1cbb536656ae2ba00ead0240359df3","isMergeCommit":false,"messageTitle":"i need to restart the ide","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":171}}},{"hash":"3372f5a12a5623167ba02deee90937332255aef0","isMergeCommit":false,"messageTitle":"i need to restart the ide","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":281,"deletions":22},"docs":{"insertions":4,"deletions":4},"test-code":{"insertions":1,"deletions":1}}},{"hash":"e90d8c8db6708686cccd3d271f9fe57636b4a653","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":4}}},{"hash":"aedeef19613f887efdc9b579e95c25fd0e2466b0","isMergeCommit":false,"messageTitle":"before i go crazy","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":342,"deletions":327},"docs":{"insertions":1,"deletions":1}}},{"hash":"d7df7f89c530dbc3ef386559b6d51c7074f1d0fb","isMergeCommit":false,"messageTitle":"i need to restart the ide","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":171}}},{"hash":"d8e6ae17fbfd38ff7a7df109f3d530aba1d6fb13","isMergeCommit":false,"messageTitle":"Implement EditCommandParser, EditCommand, README.md","messageBody":"Create EditCommandParser to parse user input for editing a person\u0027s details in the address book. The parser handles the input arguments, validates them, and constructs an EditCommand object for execution. It uses CliSyntax prefixes and follows a similar structure as the AddCommandParser. The parsing logic for each attribute (name, phone, email, address, tags, jobDescription, interviewDate, internDuration, salary) is provided, and the EditPersonDescriptor is updated accordingly.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":281,"deletions":22},"docs":{"insertions":4,"deletions":4},"test-code":{"insertions":1,"deletions":1}}},{"hash":"84fb48af30266ef49e59def139d0152ae70b8df0","isMergeCommit":true,"messageTitle":"Merge pull request #19 from eunrcn/edit-user-command","messageBody":"Edit user command","fileTypesAndContributionMap":{}},{"hash":"dee005733138e04614d1fd8e7a8d24d9ddff9d95","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into list-sort-feature","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ff077d86cc6c6b13b43cb40856299ff43bb877a5","isMergeCommit":true,"messageTitle":"Merge pull request #11 from Jawad280/list-sort-feature","messageBody":"List sort feature","fileTypesAndContributionMap":{}},{"hash":"70757311f0d1c7009d98281de8d45534f5c02b6f","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into ui-change-v2","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2bf68d378518de9cf0e8aaa29b430e2e09d766f5","isMergeCommit":true,"messageTitle":"Merge pull request #10 from Jawad280/ui-change-v2","messageBody":"UI change v2","fileTypesAndContributionMap":{}},{"hash":"1a3591b38a2804685c5a1bca534e29b53a32526b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into about-us","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"bb15b96192da118c460c8dce2fedd4bcdae4b1f8","isMergeCommit":true,"messageTitle":"Merge pull request #12 from Jawad280/about-us","messageBody":"About us","fileTypesAndContributionMap":{}},{"hash":"466970275c7eca80fa4821cdb9d2906299c11996","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"180f24f7cde7a2b6cb01146757d4fb8d96ef2e7a","isMergeCommit":true,"messageTitle":"Merge pull request #20 from eunrcn/master","messageBody":"Implement EditCommandParser, EditCommand, README.md","fileTypesAndContributionMap":{}},{"hash":"b10868a6cfaf9af636253fd399a624e52c8997af","isMergeCommit":false,"messageTitle":"Remove duplicate method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":3}}},{"hash":"4c41d2d12227744858662ff3d3c21b4953f564dc","isMergeCommit":true,"messageTitle":"Merge pull request #22 from eunrcn/master","messageBody":"Remove duplicate method","fileTypesAndContributionMap":{}}]},{"date":"2024-02-29","commitResults":[{"hash":"e906563e27c635c19e9572e77ca6bb8ed2164147","isMergeCommit":true,"messageTitle":"Merge pull request #23 from Jawad280/edit-v2","messageBody":"Edit command tweaks","fileTypesAndContributionMap":{}}]},{"date":"2024-03-01","commitResults":[{"hash":"0e86ea8d3bf59f05a541ad0e54c5bfeff227f5fa","isMergeCommit":false,"messageTitle":"Rename my github username","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"32a484d3af811f8d282f7fd303e4d63b784e7469","isMergeCommit":true,"messageTitle":"Merge branch \u0027AY2324S2-CS2103T-F14-1:master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7e44cf99bfaafbfc9e8b5cddadb675f22b52b907","isMergeCommit":true,"messageTitle":"Merge pull request #26 from eunrcn/master","messageBody":"Github Username","fileTypesAndContributionMap":{}},{"hash":"e2ac9386c6386c8f9ece3b98b8c273725952c91b","isMergeCommit":false,"messageTitle":"Developer Guide User Stories","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":10,"deletions":8}}}]}],"chenyixin0":[{"date":"2024-02-25","commitResults":[{"hash":"982cfaee95655364aedaeb31d37dd2404d126cf0","isMergeCommit":true,"messageTitle":"Merge pull request #2 from eunrcn/master","messageBody":"Update README.md","fileTypesAndContributionMap":{}}]},{"date":"2024-02-29","commitResults":[{"hash":"bfb35deb0850f85af37824fc722aa0944321c2a7","isMergeCommit":false,"messageTitle":"Add find command halfway","messageBody":"Ui is still bugged\n","fileTypesAndContributionMap":{"functional-code":{"insertions":54,"deletions":9}}},{"hash":"9d94238ad9b7188dbbe813415012bfc2d88e1cd4","isMergeCommit":false,"messageTitle":"Add Find command correctly","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":38,"deletions":27},"docs":{"insertions":5,"deletions":5}}}]},{"date":"2024-03-01","commitResults":[{"hash":"c7214479a83a1e4a8719287d3f75fbf77db504b4","isMergeCommit":true,"messageTitle":"Merge pull request #24 from chenyixin0/master","messageBody":"AboutUs, Find command","fileTypesAndContributionMap":{}}]}],"minghowC":[{"date":"2024-03-01","commitResults":[{"hash":"4ca3dea543c95143e2a4d16638916ecf309f2a02","isMergeCommit":false,"messageTitle":"Add my AboutUS.md details","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"24e282da380f51c1bdbb9602341f0d106a877e3c","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"fbe28239026c115f3c9f2a189e0cd0c9c6a5f8d4","isMergeCommit":false,"messageTitle":"Add delete feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0}}},{"hash":"3cfc9010be6d990cb335dd0021ff33aeb814e020","isMergeCommit":true,"messageTitle":"Merge pull request #28 from minghowC/master","messageBody":"Add delete feature","fileTypesAndContributionMap":{}}]},{"date":"2024-03-08","commitResults":[{"hash":"5e85ff2e6d7146293b90be23256eaf47f5326948","isMergeCommit":false,"messageTitle":"Update Minghow profile","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"0b37fb5faa010ba6c3ec621eba28b812ca693e74","isMergeCommit":true,"messageTitle":"Merge pull request #37 from minghowC/add-minghowC-info","messageBody":"Update Minghow profile","fileTypesAndContributionMap":{}}]}],"Jawad280":[{"date":"2024-02-25","commitResults":[{"hash":"a7783867c92a5a46814382d06ac2889ad9ef58d5","isMergeCommit":false,"messageTitle":"Remark tutorial","messageBody":"The tutorial for adding a command, remark in the AB.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":180,"deletions":16}}},{"hash":"f497f581a26aded9b0aba848fd1f6f077419982a","isMergeCommit":false,"messageTitle":"Restore to tp master","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":176}}},{"hash":"44dcd8a249a1c6937d1cab34f48cc42e1c0a11d3","isMergeCommit":false,"messageTitle":"Restore to tp master including JavaFX","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":4}}}]},{"date":"2024-02-26","commitResults":[{"hash":"72b6fe1d1feaff7fdd17593858b00050831a17ef","isMergeCommit":true,"messageTitle":"Merge branch \u0027AY2324S2-CS2103T-F14-1:master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"4aebef91a564c0a38b6264577a2b40f6d858be33","isMergeCommit":false,"messageTitle":"List function implemented with auto sort by interview date","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":4}}},{"hash":"ad2e6e6e6a1279989051a6a86af43b832194580c","isMergeCommit":false,"messageTitle":"Ui is updated together with a simple view feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":250,"deletions":12}}}]},{"date":"2024-02-27","commitResults":[{"hash":"af8d4de6e6ed2407cd3199b9b3098a2b77380af6","isMergeCommit":false,"messageTitle":"AboutUs page updated \u0026 included picture","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}}]},{"date":"2024-02-29","commitResults":[{"hash":"a98c3853d486f940b161f73b2a536e80d20fcb69","isMergeCommit":false,"messageTitle":"Edit command tweaks","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":50,"deletions":30}}},{"hash":"b47cf87fadc45499cf2a1e02965cadbc81aba8e9","isMergeCommit":false,"messageTitle":"Reformatted classes to fit checkstyle issues","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":15},"test-code":{"insertions":1,"deletions":1}}},{"hash":"adca670b121b567c6103b05a133a1952e604b1fd","isMergeCommit":false,"messageTitle":"Edited test classes to reflect changes in our main classes","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":12,"deletions":3}}}]},{"date":"2024-03-01","commitResults":[{"hash":"c9656627807a5a25559c51df77f64b69af34608f","isMergeCommit":true,"messageTitle":"Merge pull request #25 from minghowC/master","messageBody":"Update AboutUs.md for everyone","fileTypesAndContributionMap":{}},{"hash":"1f9824cca54b5ee7cd9917f8440992221726fecd","isMergeCommit":false,"messageTitle":"Developer Guide updated with use cases","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":22,"deletions":16},"docs":{"insertions":119,"deletions":20}}},{"hash":"edd259a66efe637953f9370b1cd5d03c3f632e9c","isMergeCommit":true,"messageTitle":"Merge branch \u0027DG\u0027 into DG-v2","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"40e2be88e2a1d621b4fc29698ac76917c05bb749","isMergeCommit":true,"messageTitle":"Merge pull request #27 from eunrcn/master","messageBody":"Developer Guide User Stories","fileTypesAndContributionMap":{}},{"hash":"65f56fa2ecb089e8f35aa13b2e268852c354eff2","isMergeCommit":false,"messageTitle":"Developer Guide edited to include Use Case","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"651c53401fd3cd17b415a7e54dc5e778f92c61c8","isMergeCommit":false,"messageTitle":"Update DG","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":5,"deletions":0}}},{"hash":"49001518677cd99d41d76f2a118d92ed2a961020","isMergeCommit":true,"messageTitle":"Merge pull request #30 from Jawad280/DG-v2","messageBody":"Developer Guide edited to include Use Cases","fileTypesAndContributionMap":{}},{"hash":"c4eb64ca81ebba0163703ba0d9dbd5e8f0bf8899","isMergeCommit":false,"messageTitle":"UG updated \u0026 DG finalised","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":75,"deletions":68}}},{"hash":"2dd836dd6a3fb60422f14ce3d26a585d042c18ef","isMergeCommit":false,"messageTitle":"Updated FindCommand and FindCommandTest to pass test cases","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"0ad563ef3e6ff78790bcd25a1b468106619a5985","isMergeCommit":true,"messageTitle":"Merge pull request #31 from Jawad280/UG","messageBody":"* UG updated \u0026 DG finalised\r\n* FindCommand \u0026 FindCommandTest has been updated to pass test cases","fileTypesAndContributionMap":{}}]},{"date":"2024-03-02","commitResults":[{"hash":"7e0ab9d1a79ab01d4756f7cc54c1c6b459922034","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":6}}},{"hash":"6f21796aa0f276bdd5b50f4ef3580d642c5662d3","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"src\u003d\"images/minghowc\" changed to src\u003d\"images/minghowC\"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"10890b9de2c8244da3c35ea2e657532427eb23f8","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"Updated Actions build badge to our CI","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"e652643f1bd82fc981347e914f5cf8757a42d80e","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"Update link of GitHub Actions build status to reflect out CI","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"17f42bbd0898b2834e896f6aeb1f523499656a3b","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":12,"deletions":0}}},{"hash":"849a4015008919834a3d02d24ff79a3ee8bab43d","isMergeCommit":true,"messageTitle":"Merge pull request #33 from ashleygoh1/v1.2-readme-dg","messageBody":"Edit AboutUs.md making sure CI banners pointing to own project","fileTypesAndContributionMap":{}}]},{"date":"2024-03-03","commitResults":[{"hash":"1dc44135b25b17969c3eac957fa5e1d9a2d9d988","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"Change from .jpg to .png","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]}],"ashleygoh1":[{"date":"2024-02-23","commitResults":[{"hash":"c37653119c039b3b06a0f1c97a54bf50bab58e13","isMergeCommit":true,"messageTitle":"Merge pull request #1 from nus-cs2103-AY2324S2/switch-docs-to-markbind","messageBody":"Switch docs to markbind","fileTypesAndContributionMap":{}},{"hash":"02b788dfe07da9cd8cdbf59e8a88d7b173519b99","isMergeCommit":false,"messageTitle":"Update default.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2024-02-25","commitResults":[{"hash":"91310b8007505d028bf03ebb7328628123aac855","isMergeCommit":false,"messageTitle":"Edit add person command","messageBody":"Allow user to input additional information such as job description, interview date, intern duration, and salary\n\nCreate new java files for the new parameters (job description, interview date, intern duration, and salary)\n\nUpdate the message shown to user when inputs are successfully added to the address book\n","fileTypesAndContributionMap":{"functional-code":{"insertions":820,"deletions":452},"test-code":{"insertions":7,"deletions":7}}},{"hash":"ac8ff5ede9e0140593cce2738807dc140cfe0a4b","isMergeCommit":false,"messageTitle":"Edit the code to adhere to checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":72,"deletions":52}}}]},{"date":"2024-02-26","commitResults":[{"hash":"40a8dc2db17be26f847e2e62578d0ec85daf5d0c","isMergeCommit":false,"messageTitle":"Edit the code to adhere to checkstyle","messageBody":"Update add command making address and interview date optional\n","fileTypesAndContributionMap":{"functional-code":{"insertions":60,"deletions":67},"test-code":{"insertions":725,"deletions":674}}},{"hash":"48b2b75118695a2e36e2b48fa421555c9c79da9e","isMergeCommit":false,"messageTitle":"Edit the code to adhere to checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":5}}},{"hash":"1555b79e2fb6a6cbc1c5fa2df744fdb9b5442024","isMergeCommit":false,"messageTitle":"Edit the code to adhere to checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":22,"deletions":1},"test-code":{"insertions":50,"deletions":84}}},{"hash":"6c916d78717a24e63ace889976d7f9ad6a775c9f","isMergeCommit":false,"messageTitle":"Edit the code to adhere to checkstyle","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":6,"deletions":3}}},{"hash":"a803a78f42529db23dbcfe4eadb3f4d4dba645dc","isMergeCommit":false,"messageTitle":"Edit the code to adhere to checkstyle","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":2,"deletions":1}}},{"hash":"2b6bcf8fd067cc7e80bc13859d4d00495d051c45","isMergeCommit":false,"messageTitle":"Edit the code to pass test cases","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":19,"deletions":15},"test-code":{"insertions":159,"deletions":34}}},{"hash":"53c3484501afe1c222de9e19e3a0265280e371a8","isMergeCommit":false,"messageTitle":"Edit the code to pass test cases","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":4}}},{"hash":"c681a5e1e216e5b28d8ae7a1a38b3c4bef1c6464","isMergeCommit":false,"messageTitle":"Comment out unuse test cases","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":74,"deletions":75}}},{"hash":"0a725fae3815ac4eacc7358b4914f5d105c0a158","isMergeCommit":true,"messageTitle":"Merge pull request #6 from ashleygoh1/v1.2-add-user-command","messageBody":"Edit add person command","fileTypesAndContributionMap":{}},{"hash":"ee45f5fafbc62b4861e26d071bf3bf0d4720ec40","isMergeCommit":true,"messageTitle":"Merge pull request #9 from AY2324S2-CS2103T-F14-1/add-user-command","messageBody":"Add user command","fileTypesAndContributionMap":{}}]},{"date":"2024-02-27","commitResults":[{"hash":"a5a33c8068e449766a7fcb1e2e1d8c05236d5e95","isMergeCommit":false,"messageTitle":"Edit UserGuide.md and AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":0},"docs":{"insertions":210,"deletions":42}}},{"hash":"085f8e3a69ef3ef61c9f29c1f52f2ac4cf225bdc","isMergeCommit":false,"messageTitle":"Edit the code to adhere to checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"f099d488e6f666a9e4118ac987d9547dc00cba64","isMergeCommit":true,"messageTitle":"Merge pull request #15 from ashleygoh1/v1.2-update-ug","messageBody":"Edit UserGuide.md and AboutUs.md","fileTypesAndContributionMap":{}},{"hash":"120a711cc7f58c49bc269f566b3d92db4ae13cd0","isMergeCommit":true,"messageTitle":"Merge pull request #16 from AY2324S2-CS2103T-F14-1/update-ug","messageBody":"Update ug","fileTypesAndContributionMap":{}}]},{"date":"2024-03-02","commitResults":[{"hash":"ada3fc193734a4f821e290355418b26a1d5157b0","isMergeCommit":false,"messageTitle":"Edit AboutUs.md making sure CI banners pointing to own project","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":10,"deletions":12}}},{"hash":"3396036cac84e2f12b7a53bc72867b2d5e6ddee3","isMergeCommit":false,"messageTitle":"Edit the code to adhere to checkstyle","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":6}}}]}]},"authorFileTypeContributionMap":{"eunrcn":{"docs":40,"functional-code":101,"test-code":0},"chenyixin0":{"docs":4,"functional-code":67,"test-code":0},"minghowC":{"docs":1,"functional-code":3,"test-code":0},"Jawad280":{"docs":166,"functional-code":298,"test-code":17},"ashleygoh1":{"docs":74,"functional-code":553,"test-code":965}},"authorContributionVariance":{"eunrcn":333835.72,"chenyixin0":1184.9604,"minghowC":2.3822217,"Jawad280":17887.582,"ashleygoh1":364056.5},"authorDisplayNameMap":{"eunrcn":"CS2103T-F14-1 EUNI..NING","chenyixin0":"CS2103T-F14-1 CHEN..IXIN","minghowC":"CS2103T-F14-1 CHAI.. HOW","Jawad280":"CS2103T-F14-1 JAWA..THAB","ashleygoh1":"CS2103T-F14-1 ASHL..TING"}} diff --git a/AY2324S2-CS2103T-T09-2_tp_master/authorship.json b/AY2324S2-CS2103T-T09-2_tp_master/authorship.json index 5c496be5..02f92315 100644 --- a/AY2324S2-CS2103T-T09-2_tp_master/authorship.json +++ b/AY2324S2-CS2103T-T09-2_tp_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"kailinteoo"},"content":"[![CI Status](https://github.com/se-edu/addressbook-level3/workflows/Java%20CI/badge.svg)](https://github.com/AY2324S2-CS2103T-T09-2/tp/actions)","lastModifiedDate":"2024-03-06"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":3,"author":{"gitId":"-"},"content":"[![codecov](https://codecov.io/gh/AY2324S2-CS2103T-T09-2/tp/graph/badge.svg?token\u003dBMICX593IT)](https://codecov.io/gh/AY2324S2-CS2103T-T09-2/tp)","lastModifiedDate":"2024-02-17"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-17"},{"lineNumber":5,"author":{"gitId":"-"},"content":"![Ui](docs/images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":7,"author":{"gitId":"kailinteoo"},"content":"# Introduction","lastModifiedDate":"2024-03-06"},{"lineNumber":8,"author":{"gitId":"kailinteoo"},"content":"Welcome to BookKeeper, your solution for efficient customer management for **small business owners in the crochet","lastModifiedDate":"2024-03-06"},{"lineNumber":9,"author":{"gitId":"kailinteoo"},"content":"industry**. \u003cbr\u003e","lastModifiedDate":"2024-03-06"},{"lineNumber":10,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":11,"author":{"gitId":"kailinteoo"},"content":"This application is designed to streamline customer lists and enhance productivity for individuals operating","lastModifiedDate":"2024-03-06"},{"lineNumber":12,"author":{"gitId":"kailinteoo"},"content":"small businesses with limited resources and manpower. With BookKeeper, you can easily manage customer information, track","lastModifiedDate":"2024-03-06"},{"lineNumber":13,"author":{"gitId":"kailinteoo"},"content":"orders, and personalize your customer interactions, all through a user-friendly command-line interface.","lastModifiedDate":"2024-03-06"},{"lineNumber":14,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":15,"author":{"gitId":"kailinteoo"},"content":"For the detailed documentation of this project, see the [BookKeeper](https://ay2324s2-cs2103t-t09-2.github.io/tp/).","lastModifiedDate":"2024-03-06"},{"lineNumber":16,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":17,"author":{"gitId":"kailinteoo"},"content":"# Acknowledgement","lastModifiedDate":"2024-03-06"},{"lineNumber":18,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":19,"author":{"gitId":"kailinteoo"},"content":"The project simulates an ongoing software project for a desktop application (called _AddressBook_) used for managing","lastModifiedDate":"2024-03-06"},{"lineNumber":20,"author":{"gitId":"-"},"content":" contact details.","lastModifiedDate":"2024-02-17"},{"lineNumber":21,"author":{"gitId":"kailinteoo"},"content":"* It is written in OOP fashion. ","lastModifiedDate":"2024-03-06"},{"lineNumber":22,"author":{"gitId":"kailinteoo"},"content":"* It provides a reasonably well-written code base bigger (around 6 KLoC)","lastModifiedDate":"2024-03-06"},{"lineNumber":23,"author":{"gitId":"kailinteoo"},"content":"* It comes with a reasonable level of user and developer documentation.","lastModifiedDate":"2024-03-06"},{"lineNumber":24,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":25,"author":{"gitId":"kailinteoo"},"content":"This project is based on the AddressBook Level-3 project and is a part of the [se-education.org](https://se-education.org/addressbook-level3) initiative.","lastModifiedDate":"2024-03-06"},{"lineNumber":26,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":27,"author":{"gitId":"kailinteoo"},"content":"# Features","lastModifiedDate":"2024-03-06"},{"lineNumber":28,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":29,"author":{"gitId":"kailinteoo"},"content":"## Customer Feature","lastModifiedDate":"2024-03-06"},{"lineNumber":30,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":31,"author":{"gitId":"kailinteoo"},"content":"### 1. Add Customer","lastModifiedDate":"2024-03-06"},{"lineNumber":32,"author":{"gitId":"kailinteoo"},"content":"Adds a customer to the customer\u0027s storage.","lastModifiedDate":"2024-03-06"},{"lineNumber":33,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":34,"author":{"gitId":"kailinteoo"},"content":"Example: `add \u003ccustomer name\u003e`","lastModifiedDate":"2024-03-06"},{"lineNumber":35,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":36,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":37,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":38,"author":{"gitId":"kailinteoo"},"content":"Successfully added \u003ccustomer name\u003e to your list!","lastModifiedDate":"2024-03-06"},{"lineNumber":39,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":40,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":41,"author":{"gitId":"kailinteoo"},"content":"### 2. Delete Customer","lastModifiedDate":"2024-03-06"},{"lineNumber":42,"author":{"gitId":"kailinteoo"},"content":"Delete selected customer from the customer\u0027s storage.","lastModifiedDate":"2024-03-06"},{"lineNumber":43,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":44,"author":{"gitId":"kailinteoo"},"content":"Example: `delete \u003ccustomer name\u003e`","lastModifiedDate":"2024-03-06"},{"lineNumber":45,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":46,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":47,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":48,"author":{"gitId":"kailinteoo"},"content":"Successfully removed \u003ccustomer name\u003e from the list","lastModifiedDate":"2024-03-06"},{"lineNumber":49,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":50,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":51,"author":{"gitId":"kailinteoo"},"content":"### 3. Edit Customer","lastModifiedDate":"2024-03-06"},{"lineNumber":52,"author":{"gitId":"kailinteoo"},"content":"Edit selected customer information by adding more information such as Age, Phone Number, Past purchased record, ","lastModifiedDate":"2024-03-06"},{"lineNumber":53,"author":{"gitId":"kailinteoo"},"content":"Birthday, Address.","lastModifiedDate":"2024-03-06"},{"lineNumber":54,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":55,"author":{"gitId":"kailinteoo"},"content":"Example: `edit \u003ccustomer name\u003e`","lastModifiedDate":"2024-03-06"},{"lineNumber":56,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":57,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":58,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":59,"author":{"gitId":"kailinteoo"},"content":"Successfully edit \u003ccustomer name\u003e information","lastModifiedDate":"2024-03-06"},{"lineNumber":60,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":61,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":62,"author":{"gitId":"kailinteoo"},"content":"### 4. VIP Customer","lastModifiedDate":"2024-03-06"},{"lineNumber":63,"author":{"gitId":"kailinteoo"},"content":"Indicating that this specific customer is important.","lastModifiedDate":"2024-03-06"},{"lineNumber":64,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":65,"author":{"gitId":"kailinteoo"},"content":"Example: `vip \u003ccustomer name\u003e`","lastModifiedDate":"2024-03-06"},{"lineNumber":66,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":67,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":68,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":69,"author":{"gitId":"kailinteoo"},"content":"Successfully set \u003ccustomer name\u003e as VIP","lastModifiedDate":"2024-03-06"},{"lineNumber":70,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":71,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":72,"author":{"gitId":"kailinteoo"},"content":"## Order Feature","lastModifiedDate":"2024-03-06"},{"lineNumber":73,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":74,"author":{"gitId":"kailinteoo"},"content":"### 1. Add Order","lastModifiedDate":"2024-03-06"},{"lineNumber":75,"author":{"gitId":"kailinteoo"},"content":"Adds a order into the order\u0027s storage, together with the customer name.","lastModifiedDate":"2024-03-06"},{"lineNumber":76,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":77,"author":{"gitId":"kailinteoo"},"content":"Example: `add \u003ccustomer name, order, due date\u003e`","lastModifiedDate":"2024-03-06"},{"lineNumber":78,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":79,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":80,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":81,"author":{"gitId":"kailinteoo"},"content":"An order has been added for \u003ccustomer name\u003e","lastModifiedDate":"2024-03-06"},{"lineNumber":82,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":83,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":84,"author":{"gitId":"kailinteoo"},"content":"### 2. Delete Order","lastModifiedDate":"2024-03-06"},{"lineNumber":85,"author":{"gitId":"kailinteoo"},"content":"Delete order of the specific customer.","lastModifiedDate":"2024-03-06"},{"lineNumber":86,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":87,"author":{"gitId":"kailinteoo"},"content":"Example: `delete \u003ccustomer name, order\u003e`","lastModifiedDate":"2024-03-06"},{"lineNumber":88,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":89,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":90,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":91,"author":{"gitId":"kailinteoo"},"content":"\u003ccustomer name\u003e order of \u003c(order item)\u003e has been cancelled","lastModifiedDate":"2024-03-06"},{"lineNumber":92,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":93,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":94,"author":{"gitId":"kailinteoo"},"content":"### 3. Edit Order","lastModifiedDate":"2024-03-06"},{"lineNumber":95,"author":{"gitId":"kailinteoo"},"content":"Edit the customer\u0027s order.","lastModifiedDate":"2024-03-06"},{"lineNumber":96,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":97,"author":{"gitId":"kailinteoo"},"content":"Example: `edit \u003ccustomer name, old order, new order\u003e`","lastModifiedDate":"2024-03-06"},{"lineNumber":98,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":99,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":100,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":101,"author":{"gitId":"kailinteoo"},"content":"Successfully edit \u003ccustomer name\u003e order","lastModifiedDate":"2024-03-06"},{"lineNumber":102,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":103,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":104,"author":{"gitId":"kailinteoo"},"content":"### 4. Prioritize Order","lastModifiedDate":"2024-03-06"},{"lineNumber":105,"author":{"gitId":"kailinteoo"},"content":"Prioritize the customer\u0027 order.","lastModifiedDate":"2024-03-06"},{"lineNumber":106,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":107,"author":{"gitId":"kailinteoo"},"content":"Example: `prioritize \u003ccustomer name, order\u003e`","lastModifiedDate":"2024-03-06"},{"lineNumber":108,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":109,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":110,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":111,"author":{"gitId":"kailinteoo"},"content":"Successfully prioritized \u003ccustomer name, order\u003e","lastModifiedDate":"2024-03-06"},{"lineNumber":112,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":113,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":114,"author":{"gitId":"kailinteoo"},"content":"## Viewing Feature","lastModifiedDate":"2024-03-06"},{"lineNumber":115,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":116,"author":{"gitId":"kailinteoo"},"content":"### 1. View Customer Detail","lastModifiedDate":"2024-03-06"},{"lineNumber":117,"author":{"gitId":"kailinteoo"},"content":"View customer information, such as Name, Age, Phone Number, Past purchase record, Birthday, Address.","lastModifiedDate":"2024-03-06"},{"lineNumber":118,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":119,"author":{"gitId":"kailinteoo"},"content":"Example: `view \u003ccustomer name\u003e`","lastModifiedDate":"2024-03-06"},{"lineNumber":120,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":121,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":122,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":123,"author":{"gitId":"kailinteoo"},"content":"Jasper Tan info: [...]","lastModifiedDate":"2024-03-06"},{"lineNumber":124,"author":{"gitId":"kailinteoo"},"content":"Tan Qing Yong info : [...]","lastModifiedDate":"2024-03-06"},{"lineNumber":125,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":126,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":127,"author":{"gitId":"kailinteoo"},"content":"### 2. View Order Detail","lastModifiedDate":"2024-03-06"},{"lineNumber":128,"author":{"gitId":"kailinteoo"},"content":"View Order information, such as order by when, who order, quantity.","lastModifiedDate":"2024-03-06"},{"lineNumber":129,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":130,"author":{"gitId":"kailinteoo"},"content":"Example: `view \u003corder\u003e`","lastModifiedDate":"2024-03-06"},{"lineNumber":131,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":132,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":133,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":134,"author":{"gitId":"kailinteoo"},"content":"Frog Crochet: ","lastModifiedDate":"2024-03-06"},{"lineNumber":135,"author":{"gitId":"kailinteoo"},"content":"1. total of \u003cquantity\u003e order by \u003ccustomer name\u003e on \u003cdate\u003e ","lastModifiedDate":"2024-03-06"},{"lineNumber":136,"author":{"gitId":"kailinteoo"},"content":"2. total of \u003cquantity\u003e order by \u003ccustomer name\u003e on \u003cdate\u003e ","lastModifiedDate":"2024-03-06"},{"lineNumber":137,"author":{"gitId":"kailinteoo"},"content":"[...]","lastModifiedDate":"2024-03-06"},{"lineNumber":138,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":139,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":140,"author":{"gitId":"kailinteoo"},"content":"### 3. View Statistics","lastModifiedDate":"2024-03-06"},{"lineNumber":141,"author":{"gitId":"kailinteoo"},"content":"Show how many orders has been completed.","lastModifiedDate":"2024-03-06"},{"lineNumber":142,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":143,"author":{"gitId":"kailinteoo"},"content":"Example: `stat`","lastModifiedDate":"2024-03-06"},{"lineNumber":144,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":145,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":146,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":147,"author":{"gitId":"kailinteoo"},"content":"\u003ca list of stat\u003e","lastModifiedDate":"2024-03-06"},{"lineNumber":148,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":149,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":150,"author":{"gitId":"kailinteoo"},"content":"### 4. View Ranking","lastModifiedDate":"2024-03-06"},{"lineNumber":151,"author":{"gitId":"kailinteoo"},"content":"View which crochet sell the best and total sell quantity.","lastModifiedDate":"2024-03-06"},{"lineNumber":152,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":153,"author":{"gitId":"kailinteoo"},"content":"Example: `view ranking`","lastModifiedDate":"2024-03-06"},{"lineNumber":154,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":155,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":156,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":157,"author":{"gitId":"kailinteoo"},"content":"Top 1: Frog Crochet, total sold of \u003cquantity\u003e ","lastModifiedDate":"2024-03-06"},{"lineNumber":158,"author":{"gitId":"kailinteoo"},"content":"[...]","lastModifiedDate":"2024-03-06"},{"lineNumber":159,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":160,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":161,"author":{"gitId":"kailinteoo"},"content":"## Sorting Feature","lastModifiedDate":"2024-03-06"},{"lineNumber":162,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":163,"author":{"gitId":"kailinteoo"},"content":"### 1. Sort Order by Date","lastModifiedDate":"2024-03-06"},{"lineNumber":164,"author":{"gitId":"kailinteoo"},"content":"Sort when the order is due based on the date (excluding prioritize order).","lastModifiedDate":"2024-03-06"},{"lineNumber":165,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":166,"author":{"gitId":"kailinteoo"},"content":"Example: `sort orderdate`","lastModifiedDate":"2024-03-06"},{"lineNumber":167,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":168,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":169,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":170,"author":{"gitId":"kailinteoo"},"content":"1. Jasper Tan, frog crochet, 24 Feb 2024 ","lastModifiedDate":"2024-03-06"},{"lineNumber":171,"author":{"gitId":"kailinteoo"},"content":"2. Tan Qin Yong, pig crochet, 1 Apr 2024 ","lastModifiedDate":"2024-03-06"},{"lineNumber":172,"author":{"gitId":"kailinteoo"},"content":"[...]","lastModifiedDate":"2024-03-06"},{"lineNumber":173,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":174,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":175,"author":{"gitId":"kailinteoo"},"content":"### 2. Sort Order by order type","lastModifiedDate":"2024-03-06"},{"lineNumber":176,"author":{"gitId":"kailinteoo"},"content":"Sort depending on what kind of order.","lastModifiedDate":"2024-03-06"},{"lineNumber":177,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":178,"author":{"gitId":"kailinteoo"},"content":"Example: `sort ordertype`","lastModifiedDate":"2024-03-06"},{"lineNumber":179,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":180,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":181,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":182,"author":{"gitId":"kailinteoo"},"content":"Frog Crochet:","lastModifiedDate":"2024-03-06"},{"lineNumber":183,"author":{"gitId":"kailinteoo"},"content":"1. Jasper Tan, 24 Feb 2024 ","lastModifiedDate":"2024-03-06"},{"lineNumber":184,"author":{"gitId":"kailinteoo"},"content":"2. QinYong, 1 Apr 2024 ","lastModifiedDate":"2024-03-06"},{"lineNumber":185,"author":{"gitId":"kailinteoo"},"content":"[...]","lastModifiedDate":"2024-03-06"},{"lineNumber":186,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":187,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":188,"author":{"gitId":"kailinteoo"},"content":"### 3. Sort Customer name by alphabetical order","lastModifiedDate":"2024-03-06"},{"lineNumber":189,"author":{"gitId":"kailinteoo"},"content":"sort the customer list.","lastModifiedDate":"2024-03-06"},{"lineNumber":190,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":191,"author":{"gitId":"kailinteoo"},"content":"Example: `sort customer`","lastModifiedDate":"2024-03-06"},{"lineNumber":192,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":193,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":194,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":195,"author":{"gitId":"kailinteoo"},"content":"1. Jasper Tan","lastModifiedDate":"2024-03-06"},{"lineNumber":196,"author":{"gitId":"kailinteoo"},"content":"2. Tan Qing Yong ","lastModifiedDate":"2024-03-06"},{"lineNumber":197,"author":{"gitId":"kailinteoo"},"content":"[...]","lastModifiedDate":"2024-03-06"},{"lineNumber":198,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":199,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":200,"author":{"gitId":"kailinteoo"},"content":"## Notification/ Reminder/ Deadline/ Progress Tracker","lastModifiedDate":"2024-03-06"},{"lineNumber":201,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":202,"author":{"gitId":"kailinteoo"},"content":"### 1. Deadline approaching soon for an order (within a week)","lastModifiedDate":"2024-03-06"},{"lineNumber":203,"author":{"gitId":"kailinteoo"},"content":"Send notification when order is due within a week.","lastModifiedDate":"2024-03-06"},{"lineNumber":204,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":205,"author":{"gitId":"kailinteoo"},"content":"### 2. Progress Bar","lastModifiedDate":"2024-03-06"},{"lineNumber":206,"author":{"gitId":"kailinteoo"},"content":"Show how many order left to be done.","lastModifiedDate":"2024-03-06"},{"lineNumber":207,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":208,"author":{"gitId":"kailinteoo"},"content":"Example: `progress`","lastModifiedDate":"2024-03-06"},{"lineNumber":209,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":210,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":211,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":212,"author":{"gitId":"kailinteoo"},"content":"Left \u003cquantity\u003e ","lastModifiedDate":"2024-03-06"},{"lineNumber":213,"author":{"gitId":"kailinteoo"},"content":"Done \u003cquantity\u003e ","lastModifiedDate":"2024-03-06"},{"lineNumber":214,"author":{"gitId":"kailinteoo"},"content":"Pending \u003cQuantity\u003e\"","lastModifiedDate":"2024-03-06"},{"lineNumber":215,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":216,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":217,"author":{"gitId":"kailinteoo"},"content":"## Usage Help","lastModifiedDate":"2024-03-06"},{"lineNumber":218,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":219,"author":{"gitId":"kailinteoo"},"content":"### 1. Autocomplete","lastModifiedDate":"2024-03-06"},{"lineNumber":220,"author":{"gitId":"kailinteoo"},"content":"Show all possible next commands based on currently keyed in values.","lastModifiedDate":"2024-03-06"},{"lineNumber":221,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":222,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":223,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":224,"author":{"gitId":"kailinteoo"},"content":"/modi(fy)","lastModifiedDate":"2024-03-06"},{"lineNumber":225,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":226,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":227,"author":{"gitId":"kailinteoo"},"content":"### 2. User manual","lastModifiedDate":"2024-03-06"},{"lineNumber":228,"author":{"gitId":"kailinteoo"},"content":"Shows a list of commands that can be used.","lastModifiedDate":"2024-03-06"},{"lineNumber":229,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":230,"author":{"gitId":"kailinteoo"},"content":"Example: `help`","lastModifiedDate":"2024-03-06"},{"lineNumber":231,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":232,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":233,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":234,"author":{"gitId":"kailinteoo"},"content":"Commands list: ","lastModifiedDate":"2024-03-06"},{"lineNumber":235,"author":{"gitId":"kailinteoo"},"content":"1. add. Adds a new customer to the list. Example: \"add...\" ","lastModifiedDate":"2024-03-06"},{"lineNumber":236,"author":{"gitId":"kailinteoo"},"content":"[...]","lastModifiedDate":"2024-03-06"},{"lineNumber":237,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":238,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"}],"authorContributionMap":{"kailinteoo":232,"-":6}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"kailinteoo"},"content":"# About Us:","lastModifiedDate":"2024-03-06"},{"lineNumber":2,"author":{"gitId":"kailinteoo"},"content":"Welcome to BookKeeper, your trusted companion in customer management for small crochet businesses. We understand the ","lastModifiedDate":"2024-03-06"},{"lineNumber":3,"author":{"gitId":"kailinteoo"},"content":"challenges faced by entrepreneurs like you who are passionate about crafting beautiful items and connecting with","lastModifiedDate":"2024-03-06"},{"lineNumber":4,"author":{"gitId":"kailinteoo"},"content":"customers. BookKeeper is here to simplify your workflow, empower your business, and help you thrive in the world of","lastModifiedDate":"2024-03-06"},{"lineNumber":5,"author":{"gitId":"kailinteoo"},"content":"crochet!","lastModifiedDate":"2024-03-06"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":7,"author":{"gitId":"kailinteoo"},"content":"## Product Name: BookKeeper","lastModifiedDate":"2024-03-06"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"kailinteoo"},"content":"## Target Users","lastModifiedDate":"2024-03-06"},{"lineNumber":10,"author":{"gitId":"kailinteoo"},"content":"Our target users are small business owners across various industries who are looking for efficient ways to manage their ","lastModifiedDate":"2024-03-06"},{"lineNumber":11,"author":{"gitId":"kailinteoo"},"content":"customer lists and streamline their customer management processes. These individuals typically operate businesses with ","lastModifiedDate":"2024-03-06"},{"lineNumber":12,"author":{"gitId":"kailinteoo"},"content":"limited resources and manpower, making it essential for them to optimize their workflows and maximize productivity.","lastModifiedDate":"2024-03-06"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-06-17"},{"lineNumber":14,"author":{"gitId":"kailinteoo"},"content":"## Purpose","lastModifiedDate":"2024-03-06"},{"lineNumber":15,"author":{"gitId":"kailinteoo"},"content":"In the bustling world of a small business, time is precious. BookKeeper aims to provide a seamless solution for managing","lastModifiedDate":"2024-03-06"},{"lineNumber":16,"author":{"gitId":"kailinteoo"},"content":"customer relationships, allowing you to focus on what matters most - creating and selling your craft. Our platform","lastModifiedDate":"2024-03-06"},{"lineNumber":17,"author":{"gitId":"kailinteoo"},"content":"offers a user-friendly interface and powerful features to streamline your workflow, saving your time and effort.","lastModifiedDate":"2024-03-06"},{"lineNumber":18,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":19,"author":{"gitId":"kailinteoo"},"content":"## Unique Selling Point","lastModifiedDate":"2024-03-06"},{"lineNumber":20,"author":{"gitId":"kailinteoo"},"content":"### Centralized Platform","lastModifiedDate":"2024-03-06"},{"lineNumber":21,"author":{"gitId":"kailinteoo"},"content":"Say goodbye to scattered customer lists and spreadsheets. BookKeeper offers a centralized platform to store and search","lastModifiedDate":"2024-03-06"},{"lineNumber":22,"author":{"gitId":"kailinteoo"},"content":"for clients, keeping all your important information in one place.","lastModifiedDate":"2024-03-06"},{"lineNumber":23,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":24,"author":{"gitId":"kailinteoo"},"content":"### Efficiency","lastModifiedDate":"2024-03-06"},{"lineNumber":25,"author":{"gitId":"kailinteoo"},"content":"With a command-line interface, our application is faster and more efficient than traditional methods like CRMs or","lastModifiedDate":"2024-03-06"},{"lineNumber":26,"author":{"gitId":"kailinteoo"},"content":"Excel sheets. Spend less time navigating complex menus and more time serving your customers.","lastModifiedDate":"2024-03-06"},{"lineNumber":27,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":28,"author":{"gitId":"kailinteoo"},"content":"### Tailored for Crochet Businesses","lastModifiedDate":"2024-03-06"},{"lineNumber":29,"author":{"gitId":"kailinteoo"},"content":"We understand the unique needs of crochet businesses, which is why our platform offers customizable fields, customizable","lastModifiedDate":"2024-03-06"},{"lineNumber":30,"author":{"gitId":"kailinteoo"},"content":"tags, and integration with e-commerce platforms.","lastModifiedDate":"2024-03-06"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":32,"author":{"gitId":"kailinteoo"},"content":"### Cost-effective","lastModifiedDate":"2024-03-06"},{"lineNumber":33,"author":{"gitId":"kailinteoo"},"content":"BookKeeper is designed to be cost-effective and easy to use, perfect for businesses with limited resources. Maximize","lastModifiedDate":"2024-03-06"},{"lineNumber":34,"author":{"gitId":"kailinteoo"},"content":"productivity without breaking the bank.","lastModifiedDate":"2024-03-06"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"kailinteoo"},"content":"## Value Proposition","lastModifiedDate":"2024-03-06"},{"lineNumber":37,"author":{"gitId":"kailinteoo"},"content":"For small business owners launching services, organizing customer lists can be challenging. Our address book offers a ","lastModifiedDate":"2024-03-06"},{"lineNumber":38,"author":{"gitId":"kailinteoo"},"content":"centralized platform to store and search for clients, streamlining customer management. With a command-line interface, ","lastModifiedDate":"2024-03-06"},{"lineNumber":39,"author":{"gitId":"kailinteoo"},"content":"our application is faster and more efficient than inputting data into other systems like CRMs or Microsoft Excel.","lastModifiedDate":"2024-03-06"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":41,"author":{"gitId":"kailinteoo"},"content":"## Team Information","lastModifiedDate":"2024-03-06"},{"lineNumber":42,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":43,"author":{"gitId":"kailinteoo"},"content":"We are a team based in the [School of Computing, National University of Singapore](http://www.comp.nus.edu.sg).","lastModifiedDate":"2024-03-06"},{"lineNumber":44,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":45,"author":{"gitId":"kailinteoo"},"content":"You can reach us at the email ","lastModifiedDate":"2024-03-06"},{"lineNumber":46,"author":{"gitId":"kailinteoo"},"content":"`jaspertan@u.nus.edu` `e0967851@u.nus.edu` `ian.tung@u.nus.edu` `e0959354@u.nus.edu`","lastModifiedDate":"2024-03-06"},{"lineNumber":47,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":48,"author":{"gitId":"kailinteoo"},"content":"## Project team","lastModifiedDate":"2024-03-06"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":50,"author":{"gitId":"kailinteoo"},"content":"### Jasper Tan Zu Xiang","lastModifiedDate":"2024-03-06"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"kailinteoo"},"content":"\u003cimg src\u003d\"images/jaspertzx.png\" width\u003d\"200px\" height\u003d\"225px\"\u003e","lastModifiedDate":"2024-03-07"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"kailinteoo"},"content":"[[github](https://github.com/Jaspertzx)]","lastModifiedDate":"2024-03-06"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":56,"author":{"gitId":"kailinteoo"},"content":"* Role: Front-End Developer","lastModifiedDate":"2024-03-06"},{"lineNumber":57,"author":{"gitId":"kailinteoo"},"content":"* Responsibilities: Specialize in creating the user interface and user experience of the BookKeeper application. Ensure ","lastModifiedDate":"2024-03-06"},{"lineNumber":58,"author":{"gitId":"kailinteoo"},"content":"that the application is visually appealing, responsive, and easy to navigate for users.","lastModifiedDate":"2024-03-06"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":61,"author":{"gitId":"kailinteoo"},"content":"### Goh Ying Xuan, Shavonne","lastModifiedDate":"2024-03-06"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":63,"author":{"gitId":"kailinteoo"},"content":"\u003cimg src\u003d\"images/shavonneg.png\" width\u003d\"200px\" height\u003d\"225px\"\u003e","lastModifiedDate":"2024-03-06"},{"lineNumber":64,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":65,"author":{"gitId":"kailinteoo"},"content":"[[github](http://github.com/shavonneg)]","lastModifiedDate":"2024-03-06"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":67,"author":{"gitId":"kailinteoo"},"content":"* Role: UI/UX Designer","lastModifiedDate":"2024-03-06"},{"lineNumber":68,"author":{"gitId":"kailinteoo"},"content":"* Responsibilities: Creating a seamless and intuitive user experience for the BookKeeper application. Conduct user","lastModifiedDate":"2024-03-06"},{"lineNumber":69,"author":{"gitId":"kailinteoo"},"content":"research, create wireframes and prototypes, and design user interfaces that are visually appealing and easy to use. ","lastModifiedDate":"2024-03-06"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":71,"author":{"gitId":"kailinteoo"},"content":"### Tung Zhi Yong, Ian","lastModifiedDate":"2024-03-06"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":73,"author":{"gitId":"kailinteoo"},"content":"\u003cimg src\u003d\"images/rertyy.png\" width\u003d\"200px\" height\u003d\"225px\"\u003e","lastModifiedDate":"2024-03-06"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":75,"author":{"gitId":"kailinteoo"},"content":"[[github](http://github.com/rertyy)]","lastModifiedDate":"2024-03-06"},{"lineNumber":76,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":77,"author":{"gitId":"kailinteoo"},"content":"* Role: Full-Stack Developer","lastModifiedDate":"2024-03-06"},{"lineNumber":78,"author":{"gitId":"kailinteoo"},"content":"* Responsibilities: Proficient in both front-end and back-end development. Handle tasks ranging from designing user","lastModifiedDate":"2024-03-06"},{"lineNumber":79,"author":{"gitId":"kailinteoo"},"content":"interfaces to implementing server-side logic and managing database.","lastModifiedDate":"2024-03-06"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":81,"author":{"gitId":"kailinteoo"},"content":"### Kailin Teo","lastModifiedDate":"2024-03-06"},{"lineNumber":82,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":83,"author":{"gitId":"kailinteoo"},"content":"\u003cimg src\u003d\"images/kailinteoo.png\" width\u003d\"200px\" height\u003d\"225px\"\u003e","lastModifiedDate":"2024-03-06"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":85,"author":{"gitId":"kailinteoo"},"content":"[[github](http://github.com/kailinteoo)]","lastModifiedDate":"2024-03-06"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":87,"author":{"gitId":"kailinteoo"},"content":"* Role: Back-End Developer","lastModifiedDate":"2024-03-06"},{"lineNumber":88,"author":{"gitId":"kailinteoo"},"content":"* Responsibilities: Focus on building the server-side components of the BookKeeper application. Handle tasks such as","lastModifiedDate":"2024-03-06"},{"lineNumber":89,"author":{"gitId":"kailinteoo"},"content":"implementing business logic, managing databases, and ensuring the security and scalability of the application. ","lastModifiedDate":"2024-03-06"}],"authorContributionMap":{"kailinteoo":66,"-":23}},{"path":"docs/DeveloperGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":"layout: page","lastModifiedDate":"2020-05-23"},{"lineNumber":3,"author":{"gitId":"-"},"content":"title: Developer Guide","lastModifiedDate":"2020-05-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":6,"author":{"gitId":"-"},"content":"* Table of Contents","lastModifiedDate":"2020-05-23"},{"lineNumber":7,"author":{"gitId":"-"},"content":" {:toc}","lastModifiedDate":"2020-05-23"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":11,"author":{"gitId":"-"},"content":"## **Acknowledgements**","lastModifiedDate":"2021-07-30"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":13,"author":{"gitId":"rertyy"},"content":"* {list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the","lastModifiedDate":"2024-03-02"},{"lineNumber":14,"author":{"gitId":"rertyy"},"content":" original source as well}","lastModifiedDate":"2024-03-02"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":16,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2021-07-30"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"## **Setting up, getting started**","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"-"},"content":"Refer to the guide [_Setting up and getting started_](SettingUp.md).","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":"## **Design**","lastModifiedDate":"2020-05-23"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-primary\"\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"rertyy"},"content":":bulb: **Tip:** The `.puml` files used to create diagrams in this document `docs/diagrams` folder. Refer to the [","lastModifiedDate":"2024-03-02"},{"lineNumber":29,"author":{"gitId":"rertyy"},"content":"_PlantUML Tutorial_ at se-edu/guides](https://se-education.org/guides/tutorials/plantUml.html) to learn how to create","lastModifiedDate":"2024-03-02"},{"lineNumber":30,"author":{"gitId":"rertyy"},"content":"and edit diagrams.","lastModifiedDate":"2024-03-02"},{"lineNumber":31,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":33,"author":{"gitId":"-"},"content":"### Architecture","lastModifiedDate":"2021-07-31"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":35,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/ArchitectureDiagram.png\" width\u003d\"280\" /\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":37,"author":{"gitId":"-"},"content":"The ***Architecture Diagram*** given above explains the high-level design of the App.","lastModifiedDate":"2021-07-31"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"-"},"content":"Given below is a quick overview of main components and how they interact with each other.","lastModifiedDate":"2021-07-31"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":41,"author":{"gitId":"-"},"content":"**Main components of the architecture**","lastModifiedDate":"2021-07-31"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"rertyy"},"content":"**`Main`** (consisting of","lastModifiedDate":"2024-03-02"},{"lineNumber":44,"author":{"gitId":"rertyy"},"content":"classes [`Main`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/Main.java)","lastModifiedDate":"2024-03-02"},{"lineNumber":45,"author":{"gitId":"rertyy"},"content":"and [`MainApp`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/MainApp.java)) is","lastModifiedDate":"2024-03-02"},{"lineNumber":46,"author":{"gitId":"rertyy"},"content":"in charge of the app launch and shut down.","lastModifiedDate":"2024-03-02"},{"lineNumber":47,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":48,"author":{"gitId":"-"},"content":"* At app launch, it initializes the other components in the correct sequence, and connects them up with each other.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"-"},"content":"* At shut down, it shuts down the other components and invokes cleanup methods where necessary.","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"-"},"content":"The bulk of the app\u0027s work is done by the following four components:","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":"* [**`UI`**](#ui-component): The UI of the App.","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"-"},"content":"* [**`Logic`**](#logic-component): The command executor.","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":"* [**`Model`**](#model-component): Holds the data of the App in memory.","lastModifiedDate":"2020-05-23"},{"lineNumber":56,"author":{"gitId":"-"},"content":"* [**`Storage`**](#storage-component): Reads data from, and writes data to, the hard disk.","lastModifiedDate":"2020-05-23"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":58,"author":{"gitId":"-"},"content":"[**`Commons`**](#common-classes) represents a collection of classes used by multiple other components.","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":60,"author":{"gitId":"-"},"content":"**How the architecture components interact with each other**","lastModifiedDate":"2020-05-23"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":62,"author":{"gitId":"rertyy"},"content":"The *Sequence Diagram* below shows how the components interact with each other for the scenario where the user issues","lastModifiedDate":"2024-03-02"},{"lineNumber":63,"author":{"gitId":"rertyy"},"content":"the command `delete 1`.","lastModifiedDate":"2024-03-02"},{"lineNumber":64,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":65,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/ArchitectureSequenceDiagram.png\" width\u003d\"574\" /\u003e","lastModifiedDate":"2020-06-07"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":67,"author":{"gitId":"-"},"content":"Each of the four main components (also shown in the diagram above),","lastModifiedDate":"2021-07-31"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":69,"author":{"gitId":"-"},"content":"* defines its *API* in an `interface` with the same name as the Component.","lastModifiedDate":"2021-07-31"},{"lineNumber":70,"author":{"gitId":"rertyy"},"content":"* implements its functionality using a concrete `{Component Name}Manager` class (which follows the corresponding","lastModifiedDate":"2024-03-02"},{"lineNumber":71,"author":{"gitId":"rertyy"},"content":" API `interface` mentioned in the previous point.","lastModifiedDate":"2024-03-02"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":73,"author":{"gitId":"rertyy"},"content":"For example, the `Logic` component defines its API in the `Logic.java` interface and implements its functionality using","lastModifiedDate":"2024-03-02"},{"lineNumber":74,"author":{"gitId":"rertyy"},"content":"the `LogicManager.java` class which follows the `Logic` interface. Other components interact with a given component","lastModifiedDate":"2024-03-02"},{"lineNumber":75,"author":{"gitId":"rertyy"},"content":"through its interface rather than the concrete class (reason: to prevent outside component\u0027s being coupled to the","lastModifiedDate":"2024-03-02"},{"lineNumber":76,"author":{"gitId":"rertyy"},"content":"implementation of a component), as illustrated in the (partial) class diagram below.","lastModifiedDate":"2024-03-02"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":78,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/ComponentManagers.png\" width\u003d\"300\" /\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":80,"author":{"gitId":"-"},"content":"The sections below give more details of each component.","lastModifiedDate":"2020-05-23"},{"lineNumber":81,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":82,"author":{"gitId":"-"},"content":"### UI component","lastModifiedDate":"2020-05-23"},{"lineNumber":83,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":84,"author":{"gitId":"rertyy"},"content":"The **API** of this component is specified","lastModifiedDate":"2024-03-02"},{"lineNumber":85,"author":{"gitId":"rertyy"},"content":"in [`Ui.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/Ui.java)","lastModifiedDate":"2024-03-02"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":87,"author":{"gitId":"-"},"content":"![Structure of the UI Component](images/UiClassDiagram.png)","lastModifiedDate":"2021-07-31"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":89,"author":{"gitId":"rertyy"},"content":"The UI consists of a `MainWindow` that is made up of parts","lastModifiedDate":"2024-03-02"},{"lineNumber":90,"author":{"gitId":"rertyy"},"content":"e.g.`CommandBox`, `ResultDisplay`, `PersonListPanel`, `StatusBarFooter` etc. All these, including the `MainWindow`,","lastModifiedDate":"2024-03-02"},{"lineNumber":91,"author":{"gitId":"rertyy"},"content":"inherit from the abstract `UiPart` class which captures the commonalities between classes that represent parts of the","lastModifiedDate":"2024-03-02"},{"lineNumber":92,"author":{"gitId":"rertyy"},"content":"visible GUI.","lastModifiedDate":"2024-03-02"},{"lineNumber":93,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":94,"author":{"gitId":"rertyy"},"content":"The `UI` component uses the JavaFx UI framework. The layout of these UI parts are defined in matching `.fxml` files that","lastModifiedDate":"2024-03-02"},{"lineNumber":95,"author":{"gitId":"rertyy"},"content":"are in the `src/main/resources/view` folder. For example, the layout of","lastModifiedDate":"2024-03-02"},{"lineNumber":96,"author":{"gitId":"rertyy"},"content":"the [`MainWindow`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/MainWindow.java)","lastModifiedDate":"2024-03-02"},{"lineNumber":97,"author":{"gitId":"rertyy"},"content":"is specified","lastModifiedDate":"2024-03-02"},{"lineNumber":98,"author":{"gitId":"rertyy"},"content":"in [`MainWindow.fxml`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/resources/view/MainWindow.fxml)","lastModifiedDate":"2024-03-02"},{"lineNumber":99,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":100,"author":{"gitId":"-"},"content":"The `UI` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":101,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":102,"author":{"gitId":"-"},"content":"* executes user commands using the `Logic` component.","lastModifiedDate":"2021-07-31"},{"lineNumber":103,"author":{"gitId":"-"},"content":"* listens for changes to `Model` data so that the UI can be updated with the modified data.","lastModifiedDate":"2021-07-31"},{"lineNumber":104,"author":{"gitId":"-"},"content":"* keeps a reference to the `Logic` component, because the `UI` relies on the `Logic` to execute commands.","lastModifiedDate":"2021-07-31"},{"lineNumber":105,"author":{"gitId":"-"},"content":"* depends on some classes in the `Model` component, as it displays `Person` object residing in the `Model`.","lastModifiedDate":"2021-07-31"},{"lineNumber":106,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":107,"author":{"gitId":"-"},"content":"### Logic component","lastModifiedDate":"2020-05-23"},{"lineNumber":108,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":109,"author":{"gitId":"rertyy"},"content":"**API","lastModifiedDate":"2024-03-02"},{"lineNumber":110,"author":{"gitId":"rertyy"},"content":"** : [`Logic.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/logic/Logic.java)","lastModifiedDate":"2024-03-02"},{"lineNumber":111,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":112,"author":{"gitId":"-"},"content":"Here\u0027s a (partial) class diagram of the `Logic` component:","lastModifiedDate":"2021-07-31"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":114,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/LogicClassDiagram.png\" width\u003d\"550\"/\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":115,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":116,"author":{"gitId":"rertyy"},"content":"The sequence diagram below illustrates the interactions within the `Logic` component, taking `execute(\"delete 1\")` API","lastModifiedDate":"2024-03-02"},{"lineNumber":117,"author":{"gitId":"rertyy"},"content":"call as an example.","lastModifiedDate":"2024-03-02"},{"lineNumber":118,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":119,"author":{"gitId":"-"},"content":"![Interactions Inside the Logic Component for the `delete 1` Command](images/DeleteSequenceDiagram.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":121,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-info\"\u003e:information_source: **Note:** The lifeline for `DeleteCommandParser` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline continues till the end of diagram.","lastModifiedDate":"2024-02-09"},{"lineNumber":122,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":123,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":124,"author":{"gitId":"-"},"content":"How the `Logic` component works:","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"rertyy"},"content":"1. When `Logic` is called upon to execute a command, it is passed to an `AddressBookParser` object which in turn creates","lastModifiedDate":"2024-03-02"},{"lineNumber":127,"author":{"gitId":"rertyy"},"content":" a parser that matches the command (e.g., `DeleteCommandParser`) and uses it to parse the command.","lastModifiedDate":"2024-03-02"},{"lineNumber":128,"author":{"gitId":"rertyy"},"content":"1. This results in a `Command` object (more precisely, an object of one of its subclasses e.g., `DeleteCommand`) which","lastModifiedDate":"2024-03-02"},{"lineNumber":129,"author":{"gitId":"rertyy"},"content":" is executed by the `LogicManager`.","lastModifiedDate":"2024-03-02"},{"lineNumber":130,"author":{"gitId":"-"},"content":"1. The command can communicate with the `Model` when it is executed (e.g. to delete a person).\u003cbr\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":131,"author":{"gitId":"rertyy"},"content":" Note that although this is shown as a single step in the diagram above (for simplicity), in the code it can take","lastModifiedDate":"2024-03-02"},{"lineNumber":132,"author":{"gitId":"rertyy"},"content":" several interactions (between the command object and the `Model`) to achieve.","lastModifiedDate":"2024-03-02"},{"lineNumber":133,"author":{"gitId":"-"},"content":"1. The result of the command execution is encapsulated as a `CommandResult` object which is returned back from `Logic`.","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"-"},"content":"Here are the other classes in `Logic` (omitted from the class diagram above) that are used for parsing a user command:","lastModifiedDate":"2021-07-31"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":137,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/ParserClasses.png\" width\u003d\"600\"/\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":138,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":139,"author":{"gitId":"-"},"content":"How the parsing works:","lastModifiedDate":"2021-07-31"},{"lineNumber":140,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":141,"author":{"gitId":"rertyy"},"content":"* When called upon to parse a user command, the `AddressBookParser` class creates an `XYZCommandParser` (`XYZ` is a","lastModifiedDate":"2024-03-02"},{"lineNumber":142,"author":{"gitId":"rertyy"},"content":" placeholder for the specific command name e.g., `AddCommandParser`) which uses the other classes shown above to parse","lastModifiedDate":"2024-03-02"},{"lineNumber":143,"author":{"gitId":"rertyy"},"content":" the user command and create a `XYZCommand` object (e.g., `AddCommand`) which the `AddressBookParser` returns back as","lastModifiedDate":"2024-03-02"},{"lineNumber":144,"author":{"gitId":"rertyy"},"content":" a `Command` object.","lastModifiedDate":"2024-03-02"},{"lineNumber":145,"author":{"gitId":"rertyy"},"content":"* All `XYZCommandParser` classes (e.g., `AddCommandParser`, `DeleteCommandParser`, ...) inherit from the `Parser`","lastModifiedDate":"2024-03-02"},{"lineNumber":146,"author":{"gitId":"rertyy"},"content":" interface so that they can be treated similarly where possible e.g, during testing.","lastModifiedDate":"2024-03-02"},{"lineNumber":147,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":148,"author":{"gitId":"-"},"content":"### Model component","lastModifiedDate":"2021-07-31"},{"lineNumber":149,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":150,"author":{"gitId":"rertyy"},"content":"**API","lastModifiedDate":"2024-03-02"},{"lineNumber":151,"author":{"gitId":"rertyy"},"content":"** : [`Model.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/model/Model.java)","lastModifiedDate":"2024-03-02"},{"lineNumber":152,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":153,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/ModelClassDiagram.png\" width\u003d\"450\" /\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":154,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":155,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":156,"author":{"gitId":"-"},"content":"The `Model` component,","lastModifiedDate":"2021-07-31"},{"lineNumber":157,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":158,"author":{"gitId":"-"},"content":"* stores the address book data i.e., all `Person` objects (which are contained in a `UniquePersonList` object).","lastModifiedDate":"2021-07-31"},{"lineNumber":159,"author":{"gitId":"rertyy"},"content":"* stores the currently \u0027selected\u0027 `Person` objects (e.g., results of a search query) as a separate _filtered_ list which","lastModifiedDate":"2024-03-02"},{"lineNumber":160,"author":{"gitId":"rertyy"},"content":" is exposed to outsiders as an unmodifiable `ObservableList\u003cPerson\u003e` that can be \u0027observed\u0027 e.g. the UI can be bound to","lastModifiedDate":"2024-03-02"},{"lineNumber":161,"author":{"gitId":"rertyy"},"content":" this list so that the UI automatically updates when the data in the list change.","lastModifiedDate":"2024-03-02"},{"lineNumber":162,"author":{"gitId":"rertyy"},"content":"* stores a `UserPref` object that represents the user’s preferences. This is exposed to the outside as","lastModifiedDate":"2024-03-02"},{"lineNumber":163,"author":{"gitId":"rertyy"},"content":" a `ReadOnlyUserPref` objects.","lastModifiedDate":"2024-03-02"},{"lineNumber":164,"author":{"gitId":"rertyy"},"content":"* does not depend on any of the other three components (as the `Model` represents data entities of the domain, they","lastModifiedDate":"2024-03-02"},{"lineNumber":165,"author":{"gitId":"rertyy"},"content":" should make sense on their own without depending on other components)","lastModifiedDate":"2024-03-02"},{"lineNumber":166,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":167,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-info\"\u003e:information_source: **Note:** An alternative (arguably, a more OOP) model is given below. It has a `Tag` list in the `AddressBook`, which `Person` references. This allows `AddressBook` to only require one `Tag` object per unique tag, instead of each `Person` needing their own `Tag` objects.\u003cbr\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":168,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":169,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/BetterModelClassDiagram.png\" width\u003d\"450\" /\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":170,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":171,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":172,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":173,"author":{"gitId":"-"},"content":"### Storage component","lastModifiedDate":"2020-05-23"},{"lineNumber":174,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":175,"author":{"gitId":"rertyy"},"content":"**API","lastModifiedDate":"2024-03-02"},{"lineNumber":176,"author":{"gitId":"rertyy"},"content":"** : [`Storage.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/storage/Storage.java)","lastModifiedDate":"2024-03-02"},{"lineNumber":177,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":178,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/StorageClassDiagram.png\" width\u003d\"550\" /\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":179,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":180,"author":{"gitId":"-"},"content":"The `Storage` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":181,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":182,"author":{"gitId":"rertyy"},"content":"* can save both address book data and user preference data in JSON format, and read them back into corresponding","lastModifiedDate":"2024-03-02"},{"lineNumber":183,"author":{"gitId":"rertyy"},"content":" objects.","lastModifiedDate":"2024-03-02"},{"lineNumber":184,"author":{"gitId":"rertyy"},"content":"* inherits from both `AddressBookStorage` and `UserPrefStorage`, which means it can be treated as either one (if only","lastModifiedDate":"2024-03-02"},{"lineNumber":185,"author":{"gitId":"rertyy"},"content":" the functionality of only one is needed).","lastModifiedDate":"2024-03-02"},{"lineNumber":186,"author":{"gitId":"rertyy"},"content":"* depends on some classes in the `Model` component (because the `Storage` component\u0027s job is to save/retrieve objects","lastModifiedDate":"2024-03-02"},{"lineNumber":187,"author":{"gitId":"rertyy"},"content":" that belong to the `Model`)","lastModifiedDate":"2024-03-02"},{"lineNumber":188,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":189,"author":{"gitId":"-"},"content":"### Common classes","lastModifiedDate":"2020-05-23"},{"lineNumber":190,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":191,"author":{"gitId":"-"},"content":"Classes used by multiple components are in the `seedu.addressbook.commons` package.","lastModifiedDate":"2020-05-23"},{"lineNumber":192,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":193,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":194,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":195,"author":{"gitId":"-"},"content":"## **Implementation**","lastModifiedDate":"2020-05-23"},{"lineNumber":196,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":197,"author":{"gitId":"-"},"content":"This section describes some noteworthy details on how certain features are implemented.","lastModifiedDate":"2020-05-23"},{"lineNumber":198,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":199,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Undo/redo feature","lastModifiedDate":"2020-06-07"},{"lineNumber":200,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":201,"author":{"gitId":"-"},"content":"#### Proposed Implementation","lastModifiedDate":"2020-05-23"},{"lineNumber":202,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":203,"author":{"gitId":"rertyy"},"content":"The proposed undo/redo mechanism is facilitated by `VersionedAddressBook`. It extends `AddressBook` with an undo/redo","lastModifiedDate":"2024-03-02"},{"lineNumber":204,"author":{"gitId":"rertyy"},"content":"history, stored internally as an `addressBookStateList` and `currentStatePointer`. Additionally, it implements the","lastModifiedDate":"2024-03-02"},{"lineNumber":205,"author":{"gitId":"rertyy"},"content":"following operations:","lastModifiedDate":"2024-03-02"},{"lineNumber":206,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":207,"author":{"gitId":"rertyy"},"content":"* `VersionedAddressBook#commit()`— Saves the current address book state in its history.","lastModifiedDate":"2024-03-02"},{"lineNumber":208,"author":{"gitId":"rertyy"},"content":"* `VersionedAddressBook#undo()`— Restores the previous address book state from its history.","lastModifiedDate":"2024-03-02"},{"lineNumber":209,"author":{"gitId":"rertyy"},"content":"* `VersionedAddressBook#redo()`— Restores a previously undone address book state from its history.","lastModifiedDate":"2024-03-02"},{"lineNumber":210,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":211,"author":{"gitId":"rertyy"},"content":"These operations are exposed in the `Model` interface as `Model#commitAddressBook()`, `Model#undoAddressBook()`","lastModifiedDate":"2024-03-02"},{"lineNumber":212,"author":{"gitId":"rertyy"},"content":"and `Model#redoAddressBook()` respectively.","lastModifiedDate":"2024-03-02"},{"lineNumber":213,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":214,"author":{"gitId":"-"},"content":"Given below is an example usage scenario and how the undo/redo mechanism behaves at each step.","lastModifiedDate":"2020-05-23"},{"lineNumber":215,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":216,"author":{"gitId":"rertyy"},"content":"Step 1. The user launches the application for the first time. The `VersionedAddressBook` will be initialized with the","lastModifiedDate":"2024-03-02"},{"lineNumber":217,"author":{"gitId":"rertyy"},"content":"initial address book state, and the `currentStatePointer` pointing to that single address book state.","lastModifiedDate":"2024-03-02"},{"lineNumber":218,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":219,"author":{"gitId":"-"},"content":"![UndoRedoState0](images/UndoRedoState0.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":220,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":221,"author":{"gitId":"rertyy"},"content":"Step 2. The user executes `delete 5` command to delete the 5th person in the address book. The `delete` command","lastModifiedDate":"2024-03-02"},{"lineNumber":222,"author":{"gitId":"rertyy"},"content":"calls `Model#commitAddressBook()`, causing the modified state of the address book after the `delete 5` command executes","lastModifiedDate":"2024-03-02"},{"lineNumber":223,"author":{"gitId":"rertyy"},"content":"to be saved in the `addressBookStateList`, and the `currentStatePointer` is shifted to the newly inserted address book","lastModifiedDate":"2024-03-02"},{"lineNumber":224,"author":{"gitId":"rertyy"},"content":"state.","lastModifiedDate":"2024-03-02"},{"lineNumber":225,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":226,"author":{"gitId":"-"},"content":"![UndoRedoState1](images/UndoRedoState1.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":227,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":228,"author":{"gitId":"rertyy"},"content":"Step 3. The user executes `add n/David …​` to add a new person. The `add` command also","lastModifiedDate":"2024-03-02"},{"lineNumber":229,"author":{"gitId":"rertyy"},"content":"calls `Model#commitAddressBook()`, causing another modified address book state to be saved into","lastModifiedDate":"2024-03-02"},{"lineNumber":230,"author":{"gitId":"rertyy"},"content":"the `addressBookStateList`.","lastModifiedDate":"2024-03-02"},{"lineNumber":231,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":232,"author":{"gitId":"-"},"content":"![UndoRedoState2](images/UndoRedoState2.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":233,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":234,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-info\"\u003e:information_source: **Note:** If a command fails its execution, it will not call `Model#commitAddressBook()`, so the address book state will not be saved into the `addressBookStateList`.","lastModifiedDate":"2020-05-23"},{"lineNumber":235,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":236,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":237,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":238,"author":{"gitId":"rertyy"},"content":"Step 4. The user now decides that adding the person was a mistake, and decides to undo that action by executing","lastModifiedDate":"2024-03-02"},{"lineNumber":239,"author":{"gitId":"rertyy"},"content":"the `undo` command. The `undo` command will call `Model#undoAddressBook()`, which will shift the `currentStatePointer`","lastModifiedDate":"2024-03-02"},{"lineNumber":240,"author":{"gitId":"rertyy"},"content":"once to the left, pointing it to the previous address book state, and restores the address book to that state.","lastModifiedDate":"2024-03-02"},{"lineNumber":241,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":242,"author":{"gitId":"-"},"content":"![UndoRedoState3](images/UndoRedoState3.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":243,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":244,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-info\"\u003e:information_source: **Note:** If the `currentStatePointer` is at index 0, pointing to the initial AddressBook state, then there are no previous AddressBook states to restore. The `undo` command uses `Model#canUndoAddressBook()` to check if this is the case. If so, it will return an error to the user rather","lastModifiedDate":"2020-05-23"},{"lineNumber":245,"author":{"gitId":"-"},"content":"than attempting to perform the undo.","lastModifiedDate":"2020-05-23"},{"lineNumber":246,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":247,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":248,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":249,"author":{"gitId":"-"},"content":"The following sequence diagram shows how an undo operation goes through the `Logic` component:","lastModifiedDate":"2024-02-09"},{"lineNumber":250,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":251,"author":{"gitId":"-"},"content":"![UndoSequenceDiagram](images/UndoSequenceDiagram-Logic.png)","lastModifiedDate":"2024-02-09"},{"lineNumber":252,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":253,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-info\"\u003e:information_source: **Note:** The lifeline for `UndoCommand` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram.","lastModifiedDate":"2020-05-23"},{"lineNumber":254,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":255,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":256,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":257,"author":{"gitId":"-"},"content":"Similarly, how an undo operation goes through the `Model` component is shown below:","lastModifiedDate":"2024-02-09"},{"lineNumber":258,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":259,"author":{"gitId":"-"},"content":"![UndoSequenceDiagram](images/UndoSequenceDiagram-Model.png)","lastModifiedDate":"2024-02-09"},{"lineNumber":260,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":261,"author":{"gitId":"rertyy"},"content":"The `redo` command does the opposite — it calls `Model#redoAddressBook()`, which shifts the `currentStatePointer` once","lastModifiedDate":"2024-03-02"},{"lineNumber":262,"author":{"gitId":"rertyy"},"content":"to the right, pointing to the previously undone state, and restores the address book to that state.","lastModifiedDate":"2024-03-02"},{"lineNumber":263,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":264,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-info\"\u003e:information_source: **Note:** If the `currentStatePointer` is at index `addressBookStateList.size() - 1`, pointing to the latest address book state, then there are no undone AddressBook states to restore. The `redo` command uses `Model#canRedoAddressBook()` to check if this is the case. If so, it will return an error to the user rather than attempting to perform the redo.","lastModifiedDate":"2020-05-23"},{"lineNumber":265,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":266,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":267,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":268,"author":{"gitId":"rertyy"},"content":"Step 5. The user then decides to execute the command `list`. Commands that do not modify the address book, such","lastModifiedDate":"2024-03-02"},{"lineNumber":269,"author":{"gitId":"rertyy"},"content":"as `list`, will usually not call `Model#commitAddressBook()`, `Model#undoAddressBook()` or `Model#redoAddressBook()`.","lastModifiedDate":"2024-03-02"},{"lineNumber":270,"author":{"gitId":"rertyy"},"content":"Thus, the `addressBookStateList` remains unchanged.","lastModifiedDate":"2024-03-02"},{"lineNumber":271,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":272,"author":{"gitId":"-"},"content":"![UndoRedoState4](images/UndoRedoState4.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":273,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":274,"author":{"gitId":"rertyy"},"content":"Step 6. The user executes `clear`, which calls `Model#commitAddressBook()`. Since the `currentStatePointer` is not","lastModifiedDate":"2024-03-02"},{"lineNumber":275,"author":{"gitId":"rertyy"},"content":"pointing at the end of the `addressBookStateList`, all address book states after the `currentStatePointer` will be","lastModifiedDate":"2024-03-02"},{"lineNumber":276,"author":{"gitId":"rertyy"},"content":"purged. Reason: It no longer makes sense to redo the `add n/David …​` command. This is the behavior that most modern","lastModifiedDate":"2024-03-02"},{"lineNumber":277,"author":{"gitId":"rertyy"},"content":"desktop applications follow.","lastModifiedDate":"2024-03-02"},{"lineNumber":278,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":279,"author":{"gitId":"-"},"content":"![UndoRedoState5](images/UndoRedoState5.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":280,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":281,"author":{"gitId":"-"},"content":"The following activity diagram summarizes what happens when a user executes a new command:","lastModifiedDate":"2020-05-23"},{"lineNumber":282,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":283,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/CommitActivityDiagram.png\" width\u003d\"250\" /\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":284,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":285,"author":{"gitId":"-"},"content":"#### Design considerations:","lastModifiedDate":"2021-07-31"},{"lineNumber":286,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":287,"author":{"gitId":"-"},"content":"**Aspect: How undo \u0026 redo executes:**","lastModifiedDate":"2021-07-31"},{"lineNumber":288,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":289,"author":{"gitId":"-"},"content":"* **Alternative 1 (current choice):** Saves the entire address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":290,"author":{"gitId":"-"},"content":" * Pros: Easy to implement.","lastModifiedDate":"2020-05-23"},{"lineNumber":291,"author":{"gitId":"-"},"content":" * Cons: May have performance issues in terms of memory usage.","lastModifiedDate":"2020-05-23"},{"lineNumber":292,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":293,"author":{"gitId":"-"},"content":"* **Alternative 2:** Individual command knows how to undo/redo by","lastModifiedDate":"2020-05-23"},{"lineNumber":294,"author":{"gitId":"-"},"content":" itself.","lastModifiedDate":"2020-05-23"},{"lineNumber":295,"author":{"gitId":"-"},"content":" * Pros: Will use less memory (e.g. for `delete`, just save the person being deleted).","lastModifiedDate":"2020-05-23"},{"lineNumber":296,"author":{"gitId":"-"},"content":" * Cons: We must ensure that the implementation of each individual command are correct.","lastModifiedDate":"2020-05-23"},{"lineNumber":297,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":298,"author":{"gitId":"-"},"content":"_{more aspects and alternatives to be added}_","lastModifiedDate":"2020-05-23"},{"lineNumber":299,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":300,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Data archiving","lastModifiedDate":"2020-05-23"},{"lineNumber":301,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":302,"author":{"gitId":"-"},"content":"_{Explain here how the data archiving feature will be implemented}_","lastModifiedDate":"2020-05-23"},{"lineNumber":303,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":304,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":305,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":306,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":307,"author":{"gitId":"-"},"content":"## **Documentation, logging, testing, configuration, dev-ops**","lastModifiedDate":"2020-06-07"},{"lineNumber":308,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":309,"author":{"gitId":"-"},"content":"* [Documentation guide](Documentation.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":310,"author":{"gitId":"-"},"content":"* [Testing guide](Testing.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":311,"author":{"gitId":"-"},"content":"* [Logging guide](Logging.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":312,"author":{"gitId":"-"},"content":"* [Configuration guide](Configuration.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":313,"author":{"gitId":"-"},"content":"* [DevOps guide](DevOps.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":314,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":315,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":316,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":317,"author":{"gitId":"-"},"content":"## **Appendix: Requirements**","lastModifiedDate":"2020-05-23"},{"lineNumber":318,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":319,"author":{"gitId":"-"},"content":"### Product scope","lastModifiedDate":"2020-05-23"},{"lineNumber":320,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":321,"author":{"gitId":"-"},"content":"**Target user profile**:","lastModifiedDate":"2020-05-23"},{"lineNumber":322,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":323,"author":{"gitId":"-"},"content":"* has a need to manage a significant number of contacts","lastModifiedDate":"2020-05-23"},{"lineNumber":324,"author":{"gitId":"-"},"content":"* prefer desktop apps over other types","lastModifiedDate":"2020-05-23"},{"lineNumber":325,"author":{"gitId":"-"},"content":"* can type fast","lastModifiedDate":"2020-05-23"},{"lineNumber":326,"author":{"gitId":"-"},"content":"* prefers typing to mouse interactions","lastModifiedDate":"2020-05-26"},{"lineNumber":327,"author":{"gitId":"-"},"content":"* is reasonably comfortable using CLI apps","lastModifiedDate":"2020-05-23"},{"lineNumber":328,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":329,"author":{"gitId":"-"},"content":"**Value proposition**: manage contacts faster than a typical mouse/GUI driven app","lastModifiedDate":"2020-05-23"},{"lineNumber":330,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":331,"author":{"gitId":"-"},"content":"### User stories","lastModifiedDate":"2020-06-07"},{"lineNumber":332,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":333,"author":{"gitId":"-"},"content":"Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unlikely to have) - `*`","lastModifiedDate":"2020-05-23"},{"lineNumber":334,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":335,"author":{"gitId":"Jaspertzx"},"content":"| Priority | As a … | I want to … | So that I can… |","lastModifiedDate":"2024-03-05"},{"lineNumber":336,"author":{"gitId":"rertyy"},"content":"|----------|----------------------------------|--------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|","lastModifiedDate":"2024-03-07"},{"lineNumber":337,"author":{"gitId":"Jaspertzx"},"content":"| `* * *` | Small business owner | easily add new customers to my address book | keep track of all my clients\u0027 information in one place. |","lastModifiedDate":"2024-03-05"},{"lineNumber":338,"author":{"gitId":"Jaspertzx"},"content":"| `* * *` | Crocheter | have a search function | quickly find specific customers when I need to reference their details. |","lastModifiedDate":"2024-03-05"},{"lineNumber":339,"author":{"gitId":"Jaspertzx"},"content":"| `* * *` | Busy entrepreneur | be accessible via a command-line interface | efficiently manage my customer list without navigating through complex menus. |","lastModifiedDate":"2024-03-05"},{"lineNumber":340,"author":{"gitId":"Jaspertzx"},"content":"| `* * *` | Crochet business owner | have customizable fields | record specific details about each customer, such as their favorite colors or special requests. |","lastModifiedDate":"2024-03-05"},{"lineNumber":341,"author":{"gitId":"Jaspertzx"},"content":"| `* * *` | Small business owner | be cost-effective and easy to use | maximize productivity without investing in expensive CRM systems. |","lastModifiedDate":"2024-03-05"},{"lineNumber":342,"author":{"gitId":"Jaspertzx"},"content":"| `* * *` | Crochet business owner | have data backup and synchronization capabilities | access my customer information from multiple devices and ensure its security. |","lastModifiedDate":"2024-03-05"},{"lineNumber":343,"author":{"gitId":"Jaspertzx"},"content":"| `* * *` | Small business owner | have secure access controls and permissions settings | restrict sensitive information and ensure data privacy compliance. |","lastModifiedDate":"2024-03-05"},{"lineNumber":344,"author":{"gitId":"Jaspertzx"},"content":"| `* *` | Crochet business owner | categorize my customers | tailor my marketing efforts accordingly based on factors like their preferred crochet items or past purchases. |","lastModifiedDate":"2024-03-05"},{"lineNumber":345,"author":{"gitId":"Jaspertzx"},"content":"| `* *` | Small business owner | generate reports on customer activity | analyze trends and make informed business decisions based on order history and frequency of purchases. |","lastModifiedDate":"2024-03-05"},{"lineNumber":346,"author":{"gitId":"Jaspertzx"},"content":"| `* *` | Small business owner | have a reminder feature | stay organized and follow up with customers on important dates, such as birthdays or anniversaries. |","lastModifiedDate":"2024-03-05"},{"lineNumber":347,"author":{"gitId":"Jaspertzx"},"content":"| `* *` | Small business owner | have customizable templates for invoices and receipts | easily generate and send professional-looking documents to my customers. |","lastModifiedDate":"2024-03-05"},{"lineNumber":348,"author":{"gitId":"Jaspertzx"},"content":"| `* *` | Crocheter offering custom orders | have a notes section for each customer | record specific preferences and requirements for their projects. |","lastModifiedDate":"2024-03-05"},{"lineNumber":349,"author":{"gitId":"Jaspertzx"},"content":"| `* *` | Small business owner | integrate with accounting software | easily track expenses related to each customer and maintain accurate financial records. |","lastModifiedDate":"2024-03-05"},{"lineNumber":350,"author":{"gitId":"Jaspertzx"},"content":"| `*` | Crocheter | have a mobile-friendly interface | easily access customer information on the go and process orders efficiently. |","lastModifiedDate":"2024-03-05"},{"lineNumber":351,"author":{"gitId":"Jaspertzx"},"content":"| `*` | Crocheter | integrate with my email client | send personalized messages and promotions to my customers directly from the platform. |","lastModifiedDate":"2024-03-05"},{"lineNumber":352,"author":{"gitId":"Jaspertzx"},"content":"| `*` | Crocheter | integrate with e-commerce platforms | automatically sync customer data and manage orders efficiently when participating in online marketplaces. |","lastModifiedDate":"2024-03-05"},{"lineNumber":353,"author":{"gitId":"Jaspertzx"},"content":"| `*` | Crochet business owner | track communication history with customers | provide personalized and timely customer service including emails and phone calls. |","lastModifiedDate":"2024-03-05"},{"lineNumber":354,"author":{"gitId":"Jaspertzx"},"content":"| `*` | Crochet business owner | support multiple user accounts with shared access | my team members can collaborate on managing customer relationships. |","lastModifiedDate":"2024-03-05"},{"lineNumber":355,"author":{"gitId":"Jaspertzx"},"content":"| `*` | Crocheter | have a scheduling feature | manage registrations and communicate updates with attendees seamlessly. |","lastModifiedDate":"2024-03-05"},{"lineNumber":356,"author":{"gitId":"Jaspertzx"},"content":"| `*` | Crocheter | have a feature for scanning and capturing customer contact information | grow my mailing list and follow up with potential leads quickly. |","lastModifiedDate":"2024-03-05"},{"lineNumber":357,"author":{"gitId":"Jaspertzx"},"content":"| `*` | Crocheter | integrate with social media platforms | easily connect with customers and engage with them through various channels. |","lastModifiedDate":"2024-03-05"},{"lineNumber":358,"author":{"gitId":"Jaspertzx"},"content":"| `*` | Crochet business owner | provide insights into customer demographics and preferences | tailor my product offerings and marketing campaigns to target specific audiences effectively. |","lastModifiedDate":"2024-03-05"},{"lineNumber":359,"author":{"gitId":"Jaspertzx"},"content":"| `*` | Small business owner | provide analytics and insights on customer behavior | continuously improve my products and services to meet customer needs based on purchase patterns and feedback. |","lastModifiedDate":"2024-03-05"},{"lineNumber":360,"author":{"gitId":"Jaspertzx"},"content":"| `*` | Crochet business owner | provide insights into customer satisfaction through feedback and reviews | address any concerns and improve the overall customer experience. |","lastModifiedDate":"2024-03-05"},{"lineNumber":361,"author":{"gitId":"Jaspertzx"},"content":"| `*` | Small business owner | offer customizable tags or labels for customers | segment my audience and target specific groups with tailored marketing campaigns. |","lastModifiedDate":"2024-03-05"},{"lineNumber":362,"author":{"gitId":"Jaspertzx"},"content":"| `*` | Busy entrepreneur | have a good out of the box experience | immediately use the application without needing to configure it for my own needs. |","lastModifiedDate":"2024-03-05"},{"lineNumber":363,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":364,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":365,"author":{"gitId":"-"},"content":"### Use cases","lastModifiedDate":"2020-06-07"},{"lineNumber":366,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":367,"author":{"gitId":"rertyy"},"content":"(For all use cases below, the **System** is the `AddressBook` and the **Actor** is the `user`, unless specified","lastModifiedDate":"2024-03-02"},{"lineNumber":368,"author":{"gitId":"rertyy"},"content":"otherwise)","lastModifiedDate":"2024-03-02"},{"lineNumber":369,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":370,"author":{"gitId":"-"},"content":"**Use case: Delete a person**","lastModifiedDate":"2020-05-23"},{"lineNumber":371,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":372,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2020-05-23"},{"lineNumber":373,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":374,"author":{"gitId":"rertyy"},"content":"1. User requests to list persons.","lastModifiedDate":"2024-03-07"},{"lineNumber":375,"author":{"gitId":"rertyy"},"content":"2. AddressBook shows a list of persons.","lastModifiedDate":"2024-03-07"},{"lineNumber":376,"author":{"gitId":"rertyy"},"content":"3. User requests to delete a specific person in the list.","lastModifiedDate":"2024-03-07"},{"lineNumber":377,"author":{"gitId":"rertyy"},"content":"4. AddressBook deletes the person.","lastModifiedDate":"2024-03-07"},{"lineNumber":378,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":379,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":380,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":381,"author":{"gitId":"-"},"content":"**Extensions**","lastModifiedDate":"2020-05-23"},{"lineNumber":382,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":383,"author":{"gitId":"-"},"content":"* 2a. The list is empty.","lastModifiedDate":"2020-05-23"},{"lineNumber":384,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":385,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":386,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":387,"author":{"gitId":"-"},"content":"* 3a. The given index is invalid.","lastModifiedDate":"2020-05-23"},{"lineNumber":388,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":389,"author":{"gitId":"-"},"content":" * 3a1. AddressBook shows an error message.","lastModifiedDate":"2020-05-23"},{"lineNumber":390,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":391,"author":{"gitId":"-"},"content":" Use case resumes at step 2.","lastModifiedDate":"2020-05-23"},{"lineNumber":392,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":393,"author":{"gitId":"rertyy"},"content":"**Use case: Add a person**","lastModifiedDate":"2024-03-02"},{"lineNumber":394,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":395,"author":{"gitId":"rertyy"},"content":"**MSS**","lastModifiedDate":"2024-03-02"},{"lineNumber":396,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":397,"author":{"gitId":"rertyy"},"content":"1. User requests to add a person.","lastModifiedDate":"2024-03-07"},{"lineNumber":398,"author":{"gitId":"rertyy"},"content":"2. AddressBook adds a person.","lastModifiedDate":"2024-03-07"},{"lineNumber":399,"author":{"gitId":"rertyy"},"content":"3. AddressBook shows the added person.","lastModifiedDate":"2024-03-07"},{"lineNumber":400,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":401,"author":{"gitId":"rertyy"},"content":" Use case ends.","lastModifiedDate":"2024-03-02"},{"lineNumber":402,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":403,"author":{"gitId":"rertyy"},"content":"**Extensions**","lastModifiedDate":"2024-03-02"},{"lineNumber":404,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":405,"author":{"gitId":"rertyy"},"content":"* 2a. The person already exists.","lastModifiedDate":"2024-03-02"},{"lineNumber":406,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":407,"author":{"gitId":"rertyy"},"content":" * 2a1. AddressBook shows an error message.","lastModifiedDate":"2024-03-02"},{"lineNumber":408,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":409,"author":{"gitId":"rertyy"},"content":" Use case resumes at step 1.","lastModifiedDate":"2024-03-02"},{"lineNumber":410,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":411,"author":{"gitId":"rertyy"},"content":"* 2b. The person details are invalid.","lastModifiedDate":"2024-03-02"},{"lineNumber":412,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":413,"author":{"gitId":"rertyy"},"content":" * 2b1. AddressBook shows an error message.","lastModifiedDate":"2024-03-02"},{"lineNumber":414,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":415,"author":{"gitId":"rertyy"},"content":" Use case resumes at step 1.","lastModifiedDate":"2024-03-02"},{"lineNumber":416,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":417,"author":{"gitId":"rertyy"},"content":"**Use case: Edit a person**","lastModifiedDate":"2024-03-07"},{"lineNumber":418,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":419,"author":{"gitId":"rertyy"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":420,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":421,"author":{"gitId":"rertyy"},"content":"1. User requests to edit a person.","lastModifiedDate":"2024-03-07"},{"lineNumber":422,"author":{"gitId":"rertyy"},"content":"2. AddressBook shows the person to be edited.","lastModifiedDate":"2024-03-07"},{"lineNumber":423,"author":{"gitId":"rertyy"},"content":"3. User edits the person.","lastModifiedDate":"2024-03-07"},{"lineNumber":424,"author":{"gitId":"rertyy"},"content":"4. AddressBook shows the edited person.","lastModifiedDate":"2024-03-07"},{"lineNumber":425,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":426,"author":{"gitId":"rertyy"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":427,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":428,"author":{"gitId":"rertyy"},"content":"**Extensions**","lastModifiedDate":"2024-03-07"},{"lineNumber":429,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":430,"author":{"gitId":"rertyy"},"content":"* 2a. The person does not exist.","lastModifiedDate":"2024-03-07"},{"lineNumber":431,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":432,"author":{"gitId":"rertyy"},"content":" * 2a1. AddressBook shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":433,"author":{"gitId":"rertyy"},"content":" * 2a2. AddressBook shows a list of persons with similar names.","lastModifiedDate":"2024-03-07"},{"lineNumber":434,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":435,"author":{"gitId":"rertyy"},"content":" Use case resumes at step 1.","lastModifiedDate":"2024-03-07"},{"lineNumber":436,"author":{"gitId":"rertyy"},"content":"* 3a. The person details are invalid.","lastModifiedDate":"2024-03-07"},{"lineNumber":437,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":438,"author":{"gitId":"rertyy"},"content":" * 3a1. AddressBook shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":439,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":440,"author":{"gitId":"rertyy"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-03-07"},{"lineNumber":441,"author":{"gitId":"rertyy"},"content":"* 3b. The person details are unchanged.","lastModifiedDate":"2024-03-07"},{"lineNumber":442,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":443,"author":{"gitId":"rertyy"},"content":" * 3b1. AddressBook shows a message indicating no changes are made.","lastModifiedDate":"2024-03-07"},{"lineNumber":444,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":445,"author":{"gitId":"rertyy"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-03-07"},{"lineNumber":446,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":447,"author":{"gitId":"rertyy"},"content":"**Use case: Find a person**","lastModifiedDate":"2024-03-02"},{"lineNumber":448,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":449,"author":{"gitId":"rertyy"},"content":"**MSS**","lastModifiedDate":"2024-03-02"},{"lineNumber":450,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":451,"author":{"gitId":"rertyy"},"content":"1. User requests to find a person by name.","lastModifiedDate":"2024-03-07"},{"lineNumber":452,"author":{"gitId":"rertyy"},"content":"2. AddressBook shows a list of persons whose names contain the given keyword.","lastModifiedDate":"2024-03-07"},{"lineNumber":453,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":454,"author":{"gitId":"rertyy"},"content":" Use case ends.","lastModifiedDate":"2024-03-02"},{"lineNumber":455,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":456,"author":{"gitId":"rertyy"},"content":"**Extensions**","lastModifiedDate":"2024-03-02"},{"lineNumber":457,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":458,"author":{"gitId":"rertyy"},"content":"* 2a. No person is found.","lastModifiedDate":"2024-03-02"},{"lineNumber":459,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":460,"author":{"gitId":"rertyy"},"content":" * 2a1. AddressBook shows a message indicating no person is found.","lastModifiedDate":"2024-03-02"},{"lineNumber":461,"author":{"gitId":"rertyy"},"content":" * 2a2. AddressBook shows the list of persons with similar names.","lastModifiedDate":"2024-03-07"},{"lineNumber":462,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":463,"author":{"gitId":"rertyy"},"content":" Use case ends.","lastModifiedDate":"2024-03-02"},{"lineNumber":464,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":465,"author":{"gitId":"rertyy"},"content":"**Use case: Filter categories**","lastModifiedDate":"2024-03-02"},{"lineNumber":466,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":467,"author":{"gitId":"rertyy"},"content":"**MSS**","lastModifiedDate":"2024-03-02"},{"lineNumber":468,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":469,"author":{"gitId":"rertyy"},"content":"1. User requests to filter categories.","lastModifiedDate":"2024-03-07"},{"lineNumber":470,"author":{"gitId":"rertyy"},"content":"2. AddressBook shows a list of persons with the given category.","lastModifiedDate":"2024-03-07"},{"lineNumber":471,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":472,"author":{"gitId":"rertyy"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":473,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":474,"author":{"gitId":"rertyy"},"content":"**Use case: Sort by order**","lastModifiedDate":"2024-03-07"},{"lineNumber":475,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":476,"author":{"gitId":"rertyy"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":477,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":478,"author":{"gitId":"rertyy"},"content":"1. User requests to sort by order.","lastModifiedDate":"2024-03-07"},{"lineNumber":479,"author":{"gitId":"rertyy"},"content":"2. AddressBook shows a list of persons sorted by the given order.","lastModifiedDate":"2024-03-07"},{"lineNumber":480,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":481,"author":{"gitId":"rertyy"},"content":" Use case ends.","lastModifiedDate":"2024-03-02"},{"lineNumber":482,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":483,"author":{"gitId":"rertyy"},"content":"**Use case: Show help**","lastModifiedDate":"2024-03-02"},{"lineNumber":484,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":485,"author":{"gitId":"rertyy"},"content":"**MSS**","lastModifiedDate":"2024-03-02"},{"lineNumber":486,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":487,"author":{"gitId":"rertyy"},"content":"1. User requests to show help.","lastModifiedDate":"2024-03-07"},{"lineNumber":488,"author":{"gitId":"rertyy"},"content":"2. AddressBook shows a help page.","lastModifiedDate":"2024-03-07"},{"lineNumber":489,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":490,"author":{"gitId":"rertyy"},"content":" Use case ends.","lastModifiedDate":"2024-03-02"},{"lineNumber":491,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":492,"author":{"gitId":"rertyy"},"content":"**Use case: Clear all entries**","lastModifiedDate":"2024-03-02"},{"lineNumber":493,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":494,"author":{"gitId":"rertyy"},"content":"**MSS**","lastModifiedDate":"2024-03-02"},{"lineNumber":495,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":496,"author":{"gitId":"rertyy"},"content":"1. User requests to clear all entries.","lastModifiedDate":"2024-03-07"},{"lineNumber":497,"author":{"gitId":"rertyy"},"content":"2. AddressBook clears all entries.","lastModifiedDate":"2024-03-07"},{"lineNumber":498,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":499,"author":{"gitId":"rertyy"},"content":" Use case ends.","lastModifiedDate":"2024-03-02"},{"lineNumber":500,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":501,"author":{"gitId":"rertyy"},"content":"**Use case: Exit the program**","lastModifiedDate":"2024-03-02"},{"lineNumber":502,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":503,"author":{"gitId":"rertyy"},"content":"**MSS**","lastModifiedDate":"2024-03-02"},{"lineNumber":504,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":505,"author":{"gitId":"rertyy"},"content":"1. User requests to exit the program.","lastModifiedDate":"2024-03-07"},{"lineNumber":506,"author":{"gitId":"rertyy"},"content":"2. AddressBook exits.","lastModifiedDate":"2024-03-07"},{"lineNumber":507,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":508,"author":{"gitId":"rertyy"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":509,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":510,"author":{"gitId":"rertyy"},"content":"**Use case: Import data**","lastModifiedDate":"2024-03-07"},{"lineNumber":511,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":512,"author":{"gitId":"rertyy"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":513,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":514,"author":{"gitId":"rertyy"},"content":"1. User requests to view locally saved data.","lastModifiedDate":"2024-03-07"},{"lineNumber":515,"author":{"gitId":"rertyy"},"content":"2. AddressBook opens location of saved data.","lastModifiedDate":"2024-03-07"},{"lineNumber":516,"author":{"gitId":"rertyy"},"content":"3. User stores new data to local file.","lastModifiedDate":"2024-03-07"},{"lineNumber":517,"author":{"gitId":"rertyy"},"content":"4. AddressBook imports data from file.","lastModifiedDate":"2024-03-07"},{"lineNumber":518,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":519,"author":{"gitId":"rertyy"},"content":" Use case ends.","lastModifiedDate":"2024-03-02"},{"lineNumber":520,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":521,"author":{"gitId":"rertyy"},"content":"**Extensions**","lastModifiedDate":"2024-03-07"},{"lineNumber":522,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":523,"author":{"gitId":"rertyy"},"content":"* 4a. The data is invalid.","lastModifiedDate":"2024-03-07"},{"lineNumber":524,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":525,"author":{"gitId":"rertyy"},"content":" * 4a1. AddressBook shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":526,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":527,"author":{"gitId":"rertyy"},"content":" Use case resumes at step 1.","lastModifiedDate":"2024-03-07"},{"lineNumber":528,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":529,"author":{"gitId":"rertyy"},"content":"**Use case: Export data**","lastModifiedDate":"2024-03-02"},{"lineNumber":530,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":531,"author":{"gitId":"rertyy"},"content":"**MSS**","lastModifiedDate":"2024-03-02"},{"lineNumber":532,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":533,"author":{"gitId":"rertyy"},"content":"1. User requests to export data.","lastModifiedDate":"2024-03-07"},{"lineNumber":534,"author":{"gitId":"rertyy"},"content":"2. AddressBook opens locally saved file.","lastModifiedDate":"2024-03-07"},{"lineNumber":535,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":536,"author":{"gitId":"rertyy"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":537,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":538,"author":{"gitId":"rertyy"},"content":"**Use case: Add order**","lastModifiedDate":"2024-03-07"},{"lineNumber":539,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":540,"author":{"gitId":"rertyy"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":541,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":542,"author":{"gitId":"rertyy"},"content":"1. User requests to add an order.","lastModifiedDate":"2024-03-07"},{"lineNumber":543,"author":{"gitId":"rertyy"},"content":"2. AddressBook adds an order.","lastModifiedDate":"2024-03-07"},{"lineNumber":544,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":545,"author":{"gitId":"rertyy"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":546,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":547,"author":{"gitId":"rertyy"},"content":"**Extensions**","lastModifiedDate":"2024-03-07"},{"lineNumber":548,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":549,"author":{"gitId":"rertyy"},"content":"* 2a. The order already exists.","lastModifiedDate":"2024-03-07"},{"lineNumber":550,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":551,"author":{"gitId":"rertyy"},"content":" * 2a1. AddressBook shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":552,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":553,"author":{"gitId":"rertyy"},"content":" Use case resumes at step 1.","lastModifiedDate":"2024-03-07"},{"lineNumber":554,"author":{"gitId":"rertyy"},"content":"* 2b. The order details are invalid.","lastModifiedDate":"2024-03-07"},{"lineNumber":555,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":556,"author":{"gitId":"rertyy"},"content":" * 2b1. AddressBook shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":557,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":558,"author":{"gitId":"rertyy"},"content":" Use case resumes at step 1.","lastModifiedDate":"2024-03-07"},{"lineNumber":559,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":560,"author":{"gitId":"rertyy"},"content":"**Use case: Edit order**","lastModifiedDate":"2024-03-07"},{"lineNumber":561,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":562,"author":{"gitId":"rertyy"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":563,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":564,"author":{"gitId":"rertyy"},"content":"1. User requests to edit an order.","lastModifiedDate":"2024-03-07"},{"lineNumber":565,"author":{"gitId":"rertyy"},"content":"2. AddressBook shows the order to be edited.","lastModifiedDate":"2024-03-07"},{"lineNumber":566,"author":{"gitId":"rertyy"},"content":"3. User edits the order.","lastModifiedDate":"2024-03-07"},{"lineNumber":567,"author":{"gitId":"rertyy"},"content":"4. AddressBook shows the edited order.","lastModifiedDate":"2024-03-07"},{"lineNumber":568,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":569,"author":{"gitId":"rertyy"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":570,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":571,"author":{"gitId":"rertyy"},"content":"**Extensions**","lastModifiedDate":"2024-03-07"},{"lineNumber":572,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":573,"author":{"gitId":"rertyy"},"content":"* 2a. The order does not exist.","lastModifiedDate":"2024-03-07"},{"lineNumber":574,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":575,"author":{"gitId":"rertyy"},"content":" * 2a1. AddressBook shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":576,"author":{"gitId":"rertyy"},"content":" * 2a2. AddressBook shows a list of orders with similar names.","lastModifiedDate":"2024-03-07"},{"lineNumber":577,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":578,"author":{"gitId":"rertyy"},"content":" Use case resumes at step 1.","lastModifiedDate":"2024-03-07"},{"lineNumber":579,"author":{"gitId":"rertyy"},"content":"* 3a. The order details are invalid.","lastModifiedDate":"2024-03-07"},{"lineNumber":580,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":581,"author":{"gitId":"rertyy"},"content":" * 3a1. AddressBook shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":582,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":583,"author":{"gitId":"rertyy"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-03-07"},{"lineNumber":584,"author":{"gitId":"rertyy"},"content":"* 3b. The order details are unchanged.","lastModifiedDate":"2024-03-07"},{"lineNumber":585,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":586,"author":{"gitId":"rertyy"},"content":" * 3b1. AddressBook shows a message indicating no changes are made.","lastModifiedDate":"2024-03-07"},{"lineNumber":587,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":588,"author":{"gitId":"rertyy"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-03-07"},{"lineNumber":589,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":590,"author":{"gitId":"rertyy"},"content":"**Use case: Delete order**","lastModifiedDate":"2024-03-07"},{"lineNumber":591,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":592,"author":{"gitId":"rertyy"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":593,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":594,"author":{"gitId":"rertyy"},"content":"1. User requests to delete an order.","lastModifiedDate":"2024-03-07"},{"lineNumber":595,"author":{"gitId":"rertyy"},"content":"2. AddressBook deletes the order.","lastModifiedDate":"2024-03-07"},{"lineNumber":596,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":597,"author":{"gitId":"rertyy"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":598,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":599,"author":{"gitId":"rertyy"},"content":"**Extensions**","lastModifiedDate":"2024-03-07"},{"lineNumber":600,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":601,"author":{"gitId":"rertyy"},"content":"* 2a. The order does not exist.","lastModifiedDate":"2024-03-07"},{"lineNumber":602,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":603,"author":{"gitId":"rertyy"},"content":" * 2a1. AddressBook shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":604,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":605,"author":{"gitId":"rertyy"},"content":" Use case resumes at step 1.","lastModifiedDate":"2024-03-07"},{"lineNumber":606,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":607,"author":{"gitId":"rertyy"},"content":"**Use case: Prioritize order**","lastModifiedDate":"2024-03-07"},{"lineNumber":608,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":609,"author":{"gitId":"rertyy"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":610,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":611,"author":{"gitId":"rertyy"},"content":"1. User requests to prioritize an order.","lastModifiedDate":"2024-03-07"},{"lineNumber":612,"author":{"gitId":"rertyy"},"content":"2. AddressBook shows the prioritized order.","lastModifiedDate":"2024-03-07"},{"lineNumber":613,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":614,"author":{"gitId":"rertyy"},"content":" Use case ends.","lastModifiedDate":"2024-03-02"},{"lineNumber":615,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":616,"author":{"gitId":"rertyy"},"content":"**Extensions**","lastModifiedDate":"2024-03-02"},{"lineNumber":617,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":618,"author":{"gitId":"rertyy"},"content":"* 2a. The order does not exist.","lastModifiedDate":"2024-03-07"},{"lineNumber":619,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":620,"author":{"gitId":"rertyy"},"content":" * 2a1. AddressBook shows an error message.","lastModifiedDate":"2024-03-02"},{"lineNumber":621,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":622,"author":{"gitId":"rertyy"},"content":" Use case resumes at step 1.","lastModifiedDate":"2024-03-02"},{"lineNumber":623,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":624,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":625,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":626,"author":{"gitId":"-"},"content":"1. Should work on any _mainstream OS_ as long as it has Java `11` or above installed.","lastModifiedDate":"2020-05-23"},{"lineNumber":627,"author":{"gitId":"-"},"content":"2. Should be able to hold up to 1000 persons without a noticeable sluggishness in performance for typical usage.","lastModifiedDate":"2020-05-23"},{"lineNumber":628,"author":{"gitId":"-"},"content":"3. A user with above average typing speed for regular English text (i.e. not code, not system admin commands) should be able to accomplish most of the tasks faster using commands than using the mouse.","lastModifiedDate":"2020-05-23"},{"lineNumber":629,"author":{"gitId":"shavonneg"},"content":"4. Should provide clear and informative error messages to users in case of unexpected errors. Additionally, detailed logs should be maintained for system administrators to troubleshoot issues effectively.","lastModifiedDate":"2024-03-05"},{"lineNumber":630,"author":{"gitId":"shavonneg"},"content":"5. Application architecture should be scalable to accommodate future growth in terms of users and data volume, without compromising performance.","lastModifiedDate":"2024-03-05"},{"lineNumber":631,"author":{"gitId":"shavonneg"},"content":"6. Automated backups of critical data should be performed, and there should be a documented and tested procedure for data recovery in case of system failures or data loss.","lastModifiedDate":"2024-03-05"},{"lineNumber":632,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":633,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":634,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":635,"author":{"gitId":"-"},"content":"* **Mainstream OS**: Windows, Linux, Unix, MacOS","lastModifiedDate":"2024-02-09"},{"lineNumber":636,"author":{"gitId":"-"},"content":"* **Private contact detail**: A contact detail that is not meant to be shared with others","lastModifiedDate":"2020-05-23"},{"lineNumber":637,"author":{"gitId":"shavonneg"},"content":"* **Application architecture**: Describes the patterns and techniques used to design and build an application","lastModifiedDate":"2024-03-05"},{"lineNumber":638,"author":{"gitId":"shavonneg"},"content":"* **System administrators**: Professionals responsible for managing, configuring, and ensuring the proper operation of computer systems and servers","lastModifiedDate":"2024-03-05"},{"lineNumber":639,"author":{"gitId":"shavonneg"},"content":"* **Detailed logs**: Records that track events, operations, errors, and other significant activities that occur within a software system or application.","lastModifiedDate":"2024-03-05"},{"lineNumber":640,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":641,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":642,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":643,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":644,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":645,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":646,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":647,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-info\"\u003e:information_source: **Note:** These instructions only provide a starting point for testers to work on;","lastModifiedDate":"2020-05-23"},{"lineNumber":648,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":649,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":650,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":651,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":652,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":653,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":654,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":655,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":656,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":657,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":658,"author":{"gitId":"rertyy"},"content":" 1. Double-click the jar file Expected: Shows the GUI with a set of sample contacts. The window size may not be","lastModifiedDate":"2024-03-02"},{"lineNumber":659,"author":{"gitId":"rertyy"},"content":" optimum.","lastModifiedDate":"2024-03-02"},{"lineNumber":660,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":661,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":662,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":663,"author":{"gitId":"-"},"content":" 1. Resize the window to an optimum size. Move the window to a different location. Close the window.","lastModifiedDate":"2020-05-23"},{"lineNumber":664,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":665,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":666,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","lastModifiedDate":"2020-05-23"},{"lineNumber":667,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":668,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":669,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":670,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":671,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":672,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":673,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":674,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":675,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":676,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":677,"author":{"gitId":"rertyy"},"content":" Expected: First contact is deleted from the list. Details of the deleted contact shown in the status message.","lastModifiedDate":"2024-03-02"},{"lineNumber":678,"author":{"gitId":"rertyy"},"content":" Timestamp in the status bar is updated.","lastModifiedDate":"2024-03-02"},{"lineNumber":679,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":680,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":681,"author":{"gitId":"-"},"content":" Expected: No person is deleted. Error details shown in the status message. Status bar remains the same.","lastModifiedDate":"2020-05-23"},{"lineNumber":682,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":683,"author":{"gitId":"-"},"content":" 1. Other incorrect delete commands to try: `delete`, `delete x`, `...` (where x is larger than the list size)\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":684,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":685,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":686,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":687,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":688,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":689,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":690,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":691,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":692,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":693,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":694,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"shavonneg":6,"rertyy":336,"Jaspertzx":27,"-":325}}] +[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"kailinteoo"},"content":"[![CI Status](https://github.com/se-edu/addressbook-level3/workflows/Java%20CI/badge.svg)](https://github.com/AY2324S2-CS2103T-T09-2/tp/actions)","lastModifiedDate":"2024-03-06"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":3,"author":{"gitId":"-"},"content":"[![codecov](https://codecov.io/gh/AY2324S2-CS2103T-T09-2/tp/graph/badge.svg?token\u003dBMICX593IT)](https://codecov.io/gh/AY2324S2-CS2103T-T09-2/tp)","lastModifiedDate":"2024-02-17"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-17"},{"lineNumber":5,"author":{"gitId":"-"},"content":"![Ui](docs/images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":7,"author":{"gitId":"kailinteoo"},"content":"# Introduction","lastModifiedDate":"2024-03-06"},{"lineNumber":8,"author":{"gitId":"kailinteoo"},"content":"Welcome to BookKeeper, your solution for efficient customer management for **small business owners in the crochet","lastModifiedDate":"2024-03-06"},{"lineNumber":9,"author":{"gitId":"kailinteoo"},"content":"industry**. \u003cbr\u003e","lastModifiedDate":"2024-03-06"},{"lineNumber":10,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":11,"author":{"gitId":"kailinteoo"},"content":"This application is designed to streamline customer lists and enhance productivity for individuals operating","lastModifiedDate":"2024-03-06"},{"lineNumber":12,"author":{"gitId":"kailinteoo"},"content":"small businesses with limited resources and manpower. With BookKeeper, you can easily manage customer information, track","lastModifiedDate":"2024-03-06"},{"lineNumber":13,"author":{"gitId":"kailinteoo"},"content":"orders, and personalize your customer interactions, all through a user-friendly command-line interface.","lastModifiedDate":"2024-03-06"},{"lineNumber":14,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":15,"author":{"gitId":"kailinteoo"},"content":"For the detailed documentation of this project, see the [BookKeeper](https://ay2324s2-cs2103t-t09-2.github.io/tp/).","lastModifiedDate":"2024-03-06"},{"lineNumber":16,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":17,"author":{"gitId":"kailinteoo"},"content":"# Acknowledgement","lastModifiedDate":"2024-03-06"},{"lineNumber":18,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":19,"author":{"gitId":"kailinteoo"},"content":"The project simulates an ongoing software project for a desktop application (called _AddressBook_) used for managing","lastModifiedDate":"2024-03-06"},{"lineNumber":20,"author":{"gitId":"-"},"content":" contact details.","lastModifiedDate":"2024-02-17"},{"lineNumber":21,"author":{"gitId":"kailinteoo"},"content":"* It is written in OOP fashion. ","lastModifiedDate":"2024-03-06"},{"lineNumber":22,"author":{"gitId":"kailinteoo"},"content":"* It provides a reasonably well-written code base bigger (around 6 KLoC)","lastModifiedDate":"2024-03-06"},{"lineNumber":23,"author":{"gitId":"kailinteoo"},"content":"* It comes with a reasonable level of user and developer documentation.","lastModifiedDate":"2024-03-06"},{"lineNumber":24,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":25,"author":{"gitId":"kailinteoo"},"content":"This project is based on the AddressBook Level-3 project and is a part of the [se-education.org](https://se-education.org/addressbook-level3) initiative.","lastModifiedDate":"2024-03-06"},{"lineNumber":26,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":27,"author":{"gitId":"kailinteoo"},"content":"# Features","lastModifiedDate":"2024-03-06"},{"lineNumber":28,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":29,"author":{"gitId":"kailinteoo"},"content":"## Customer Feature","lastModifiedDate":"2024-03-06"},{"lineNumber":30,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":31,"author":{"gitId":"kailinteoo"},"content":"### 1. Add Customer","lastModifiedDate":"2024-03-06"},{"lineNumber":32,"author":{"gitId":"kailinteoo"},"content":"Adds a customer to the customer\u0027s storage.","lastModifiedDate":"2024-03-06"},{"lineNumber":33,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":34,"author":{"gitId":"kailinteoo"},"content":"Example: `add \u003ccustomer name\u003e`","lastModifiedDate":"2024-03-06"},{"lineNumber":35,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":36,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":37,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":38,"author":{"gitId":"kailinteoo"},"content":"Successfully added \u003ccustomer name\u003e to your list!","lastModifiedDate":"2024-03-06"},{"lineNumber":39,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":40,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":41,"author":{"gitId":"kailinteoo"},"content":"### 2. Delete Customer","lastModifiedDate":"2024-03-06"},{"lineNumber":42,"author":{"gitId":"kailinteoo"},"content":"Delete selected customer from the customer\u0027s storage.","lastModifiedDate":"2024-03-06"},{"lineNumber":43,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":44,"author":{"gitId":"kailinteoo"},"content":"Example: `delete \u003ccustomer name\u003e`","lastModifiedDate":"2024-03-06"},{"lineNumber":45,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":46,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":47,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":48,"author":{"gitId":"kailinteoo"},"content":"Successfully removed \u003ccustomer name\u003e from the list","lastModifiedDate":"2024-03-06"},{"lineNumber":49,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":50,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":51,"author":{"gitId":"kailinteoo"},"content":"### 3. Edit Customer","lastModifiedDate":"2024-03-06"},{"lineNumber":52,"author":{"gitId":"kailinteoo"},"content":"Edit selected customer information by adding more information such as Age, Phone Number, Past purchased record, ","lastModifiedDate":"2024-03-06"},{"lineNumber":53,"author":{"gitId":"kailinteoo"},"content":"Birthday, Address.","lastModifiedDate":"2024-03-06"},{"lineNumber":54,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":55,"author":{"gitId":"kailinteoo"},"content":"Example: `edit \u003ccustomer name\u003e`","lastModifiedDate":"2024-03-06"},{"lineNumber":56,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":57,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":58,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":59,"author":{"gitId":"kailinteoo"},"content":"Successfully edit \u003ccustomer name\u003e information","lastModifiedDate":"2024-03-06"},{"lineNumber":60,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":61,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":62,"author":{"gitId":"kailinteoo"},"content":"### 4. VIP Customer","lastModifiedDate":"2024-03-06"},{"lineNumber":63,"author":{"gitId":"kailinteoo"},"content":"Indicating that this specific customer is important.","lastModifiedDate":"2024-03-06"},{"lineNumber":64,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":65,"author":{"gitId":"kailinteoo"},"content":"Example: `vip \u003ccustomer name\u003e`","lastModifiedDate":"2024-03-06"},{"lineNumber":66,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":67,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":68,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":69,"author":{"gitId":"kailinteoo"},"content":"Successfully set \u003ccustomer name\u003e as VIP","lastModifiedDate":"2024-03-06"},{"lineNumber":70,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":71,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":72,"author":{"gitId":"kailinteoo"},"content":"## Order Feature","lastModifiedDate":"2024-03-06"},{"lineNumber":73,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":74,"author":{"gitId":"kailinteoo"},"content":"### 1. Add Order","lastModifiedDate":"2024-03-06"},{"lineNumber":75,"author":{"gitId":"kailinteoo"},"content":"Adds a order into the order\u0027s storage, together with the customer name.","lastModifiedDate":"2024-03-06"},{"lineNumber":76,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":77,"author":{"gitId":"kailinteoo"},"content":"Example: `add \u003ccustomer name, order, due date\u003e`","lastModifiedDate":"2024-03-06"},{"lineNumber":78,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":79,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":80,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":81,"author":{"gitId":"kailinteoo"},"content":"An order has been added for \u003ccustomer name\u003e","lastModifiedDate":"2024-03-06"},{"lineNumber":82,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":83,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":84,"author":{"gitId":"kailinteoo"},"content":"### 2. Delete Order","lastModifiedDate":"2024-03-06"},{"lineNumber":85,"author":{"gitId":"kailinteoo"},"content":"Delete order of the specific customer.","lastModifiedDate":"2024-03-06"},{"lineNumber":86,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":87,"author":{"gitId":"kailinteoo"},"content":"Example: `delete \u003ccustomer name, order\u003e`","lastModifiedDate":"2024-03-06"},{"lineNumber":88,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":89,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":90,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":91,"author":{"gitId":"kailinteoo"},"content":"\u003ccustomer name\u003e order of \u003c(order item)\u003e has been cancelled","lastModifiedDate":"2024-03-06"},{"lineNumber":92,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":93,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":94,"author":{"gitId":"kailinteoo"},"content":"### 3. Edit Order","lastModifiedDate":"2024-03-06"},{"lineNumber":95,"author":{"gitId":"kailinteoo"},"content":"Edit the customer\u0027s order.","lastModifiedDate":"2024-03-06"},{"lineNumber":96,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":97,"author":{"gitId":"kailinteoo"},"content":"Example: `edit \u003ccustomer name, old order, new order\u003e`","lastModifiedDate":"2024-03-06"},{"lineNumber":98,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":99,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":100,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":101,"author":{"gitId":"kailinteoo"},"content":"Successfully edit \u003ccustomer name\u003e order","lastModifiedDate":"2024-03-06"},{"lineNumber":102,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":103,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":104,"author":{"gitId":"kailinteoo"},"content":"### 4. Prioritize Order","lastModifiedDate":"2024-03-06"},{"lineNumber":105,"author":{"gitId":"kailinteoo"},"content":"Prioritize the customer\u0027 order.","lastModifiedDate":"2024-03-06"},{"lineNumber":106,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":107,"author":{"gitId":"kailinteoo"},"content":"Example: `prioritize \u003ccustomer name, order\u003e`","lastModifiedDate":"2024-03-06"},{"lineNumber":108,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":109,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":110,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":111,"author":{"gitId":"kailinteoo"},"content":"Successfully prioritized \u003ccustomer name, order\u003e","lastModifiedDate":"2024-03-06"},{"lineNumber":112,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":113,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":114,"author":{"gitId":"kailinteoo"},"content":"## Viewing Feature","lastModifiedDate":"2024-03-06"},{"lineNumber":115,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":116,"author":{"gitId":"kailinteoo"},"content":"### 1. View Customer Detail","lastModifiedDate":"2024-03-06"},{"lineNumber":117,"author":{"gitId":"kailinteoo"},"content":"View customer information, such as Name, Age, Phone Number, Past purchase record, Birthday, Address.","lastModifiedDate":"2024-03-06"},{"lineNumber":118,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":119,"author":{"gitId":"kailinteoo"},"content":"Example: `view \u003ccustomer name\u003e`","lastModifiedDate":"2024-03-06"},{"lineNumber":120,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":121,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":122,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":123,"author":{"gitId":"kailinteoo"},"content":"Jasper Tan info: [...]","lastModifiedDate":"2024-03-06"},{"lineNumber":124,"author":{"gitId":"kailinteoo"},"content":"Tan Qing Yong info : [...]","lastModifiedDate":"2024-03-06"},{"lineNumber":125,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":126,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":127,"author":{"gitId":"kailinteoo"},"content":"### 2. View Order Detail","lastModifiedDate":"2024-03-06"},{"lineNumber":128,"author":{"gitId":"kailinteoo"},"content":"View Order information, such as order by when, who order, quantity.","lastModifiedDate":"2024-03-06"},{"lineNumber":129,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":130,"author":{"gitId":"kailinteoo"},"content":"Example: `view \u003corder\u003e`","lastModifiedDate":"2024-03-06"},{"lineNumber":131,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":132,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":133,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":134,"author":{"gitId":"kailinteoo"},"content":"Frog Crochet: ","lastModifiedDate":"2024-03-06"},{"lineNumber":135,"author":{"gitId":"kailinteoo"},"content":"1. total of \u003cquantity\u003e order by \u003ccustomer name\u003e on \u003cdate\u003e ","lastModifiedDate":"2024-03-06"},{"lineNumber":136,"author":{"gitId":"kailinteoo"},"content":"2. total of \u003cquantity\u003e order by \u003ccustomer name\u003e on \u003cdate\u003e ","lastModifiedDate":"2024-03-06"},{"lineNumber":137,"author":{"gitId":"kailinteoo"},"content":"[...]","lastModifiedDate":"2024-03-06"},{"lineNumber":138,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":139,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":140,"author":{"gitId":"kailinteoo"},"content":"### 3. View Statistics","lastModifiedDate":"2024-03-06"},{"lineNumber":141,"author":{"gitId":"kailinteoo"},"content":"Show how many orders has been completed.","lastModifiedDate":"2024-03-06"},{"lineNumber":142,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":143,"author":{"gitId":"kailinteoo"},"content":"Example: `stat`","lastModifiedDate":"2024-03-06"},{"lineNumber":144,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":145,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":146,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":147,"author":{"gitId":"kailinteoo"},"content":"\u003ca list of stat\u003e","lastModifiedDate":"2024-03-06"},{"lineNumber":148,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":149,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":150,"author":{"gitId":"kailinteoo"},"content":"### 4. View Ranking","lastModifiedDate":"2024-03-06"},{"lineNumber":151,"author":{"gitId":"kailinteoo"},"content":"View which crochet sell the best and total sell quantity.","lastModifiedDate":"2024-03-06"},{"lineNumber":152,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":153,"author":{"gitId":"kailinteoo"},"content":"Example: `view ranking`","lastModifiedDate":"2024-03-06"},{"lineNumber":154,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":155,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":156,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":157,"author":{"gitId":"kailinteoo"},"content":"Top 1: Frog Crochet, total sold of \u003cquantity\u003e ","lastModifiedDate":"2024-03-06"},{"lineNumber":158,"author":{"gitId":"kailinteoo"},"content":"[...]","lastModifiedDate":"2024-03-06"},{"lineNumber":159,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":160,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":161,"author":{"gitId":"kailinteoo"},"content":"## Sorting Feature","lastModifiedDate":"2024-03-06"},{"lineNumber":162,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":163,"author":{"gitId":"kailinteoo"},"content":"### 1. Sort Order by Date","lastModifiedDate":"2024-03-06"},{"lineNumber":164,"author":{"gitId":"kailinteoo"},"content":"Sort when the order is due based on the date (excluding prioritize order).","lastModifiedDate":"2024-03-06"},{"lineNumber":165,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":166,"author":{"gitId":"kailinteoo"},"content":"Example: `sort orderdate`","lastModifiedDate":"2024-03-06"},{"lineNumber":167,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":168,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":169,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":170,"author":{"gitId":"kailinteoo"},"content":"1. Jasper Tan, frog crochet, 24 Feb 2024 ","lastModifiedDate":"2024-03-06"},{"lineNumber":171,"author":{"gitId":"kailinteoo"},"content":"2. Tan Qin Yong, pig crochet, 1 Apr 2024 ","lastModifiedDate":"2024-03-06"},{"lineNumber":172,"author":{"gitId":"kailinteoo"},"content":"[...]","lastModifiedDate":"2024-03-06"},{"lineNumber":173,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":174,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":175,"author":{"gitId":"kailinteoo"},"content":"### 2. Sort Order by order type","lastModifiedDate":"2024-03-06"},{"lineNumber":176,"author":{"gitId":"kailinteoo"},"content":"Sort depending on what kind of order.","lastModifiedDate":"2024-03-06"},{"lineNumber":177,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":178,"author":{"gitId":"kailinteoo"},"content":"Example: `sort ordertype`","lastModifiedDate":"2024-03-06"},{"lineNumber":179,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":180,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":181,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":182,"author":{"gitId":"kailinteoo"},"content":"Frog Crochet:","lastModifiedDate":"2024-03-06"},{"lineNumber":183,"author":{"gitId":"kailinteoo"},"content":"1. Jasper Tan, 24 Feb 2024 ","lastModifiedDate":"2024-03-06"},{"lineNumber":184,"author":{"gitId":"kailinteoo"},"content":"2. QinYong, 1 Apr 2024 ","lastModifiedDate":"2024-03-06"},{"lineNumber":185,"author":{"gitId":"kailinteoo"},"content":"[...]","lastModifiedDate":"2024-03-06"},{"lineNumber":186,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":187,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":188,"author":{"gitId":"kailinteoo"},"content":"### 3. Sort Customer name by alphabetical order","lastModifiedDate":"2024-03-06"},{"lineNumber":189,"author":{"gitId":"kailinteoo"},"content":"sort the customer list.","lastModifiedDate":"2024-03-06"},{"lineNumber":190,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":191,"author":{"gitId":"kailinteoo"},"content":"Example: `sort customer`","lastModifiedDate":"2024-03-06"},{"lineNumber":192,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":193,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":194,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":195,"author":{"gitId":"kailinteoo"},"content":"1. Jasper Tan","lastModifiedDate":"2024-03-06"},{"lineNumber":196,"author":{"gitId":"kailinteoo"},"content":"2. Tan Qing Yong ","lastModifiedDate":"2024-03-06"},{"lineNumber":197,"author":{"gitId":"kailinteoo"},"content":"[...]","lastModifiedDate":"2024-03-06"},{"lineNumber":198,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":199,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":200,"author":{"gitId":"kailinteoo"},"content":"## Notification/ Reminder/ Deadline/ Progress Tracker","lastModifiedDate":"2024-03-06"},{"lineNumber":201,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":202,"author":{"gitId":"kailinteoo"},"content":"### 1. Deadline approaching soon for an order (within a week)","lastModifiedDate":"2024-03-06"},{"lineNumber":203,"author":{"gitId":"kailinteoo"},"content":"Send notification when order is due within a week.","lastModifiedDate":"2024-03-06"},{"lineNumber":204,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":205,"author":{"gitId":"kailinteoo"},"content":"### 2. Progress Bar","lastModifiedDate":"2024-03-06"},{"lineNumber":206,"author":{"gitId":"kailinteoo"},"content":"Show how many order left to be done.","lastModifiedDate":"2024-03-06"},{"lineNumber":207,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":208,"author":{"gitId":"kailinteoo"},"content":"Example: `progress`","lastModifiedDate":"2024-03-06"},{"lineNumber":209,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":210,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":211,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":212,"author":{"gitId":"kailinteoo"},"content":"Left \u003cquantity\u003e ","lastModifiedDate":"2024-03-06"},{"lineNumber":213,"author":{"gitId":"kailinteoo"},"content":"Done \u003cquantity\u003e ","lastModifiedDate":"2024-03-06"},{"lineNumber":214,"author":{"gitId":"kailinteoo"},"content":"Pending \u003cQuantity\u003e\"","lastModifiedDate":"2024-03-06"},{"lineNumber":215,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":216,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":217,"author":{"gitId":"kailinteoo"},"content":"## Usage Help","lastModifiedDate":"2024-03-06"},{"lineNumber":218,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":219,"author":{"gitId":"kailinteoo"},"content":"### 1. Autocomplete","lastModifiedDate":"2024-03-06"},{"lineNumber":220,"author":{"gitId":"kailinteoo"},"content":"Show all possible next commands based on currently keyed in values.","lastModifiedDate":"2024-03-06"},{"lineNumber":221,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":222,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":223,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":224,"author":{"gitId":"kailinteoo"},"content":"/modi(fy)","lastModifiedDate":"2024-03-06"},{"lineNumber":225,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":226,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":227,"author":{"gitId":"kailinteoo"},"content":"### 2. User manual","lastModifiedDate":"2024-03-06"},{"lineNumber":228,"author":{"gitId":"kailinteoo"},"content":"Shows a list of commands that can be used.","lastModifiedDate":"2024-03-06"},{"lineNumber":229,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":230,"author":{"gitId":"kailinteoo"},"content":"Example: `help`","lastModifiedDate":"2024-03-06"},{"lineNumber":231,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":232,"author":{"gitId":"kailinteoo"},"content":"Expected output:","lastModifiedDate":"2024-03-06"},{"lineNumber":233,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":234,"author":{"gitId":"kailinteoo"},"content":"Commands list: ","lastModifiedDate":"2024-03-06"},{"lineNumber":235,"author":{"gitId":"kailinteoo"},"content":"1. add. Adds a new customer to the list. Example: \"add...\" ","lastModifiedDate":"2024-03-06"},{"lineNumber":236,"author":{"gitId":"kailinteoo"},"content":"[...]","lastModifiedDate":"2024-03-06"},{"lineNumber":237,"author":{"gitId":"kailinteoo"},"content":"```","lastModifiedDate":"2024-03-06"},{"lineNumber":238,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"}],"authorContributionMap":{"kailinteoo":232,"-":6}},{"path":"config/pre-commit-setup/add_hook.bat","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"rertyy"},"content":"@echo off","lastModifiedDate":"2024-03-07"},{"lineNumber":2,"author":{"gitId":"rertyy"},"content":"SETLOCAL EnableDelayedExpansion","lastModifiedDate":"2024-03-07"},{"lineNumber":3,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":4,"author":{"gitId":"rertyy"},"content":"REM Define relative path to .git/hooks","lastModifiedDate":"2024-03-07"},{"lineNumber":5,"author":{"gitId":"rertyy"},"content":"SET \"hooksDir\u003d../../.git/hooks\"","lastModifiedDate":"2024-03-07"},{"lineNumber":6,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":7,"author":{"gitId":"rertyy"},"content":"REM Check if .git/hooks directory exists, if not create it","lastModifiedDate":"2024-03-07"},{"lineNumber":8,"author":{"gitId":"rertyy"},"content":"IF NOT EXIST \"!hooksDir!\" (","lastModifiedDate":"2024-03-07"},{"lineNumber":9,"author":{"gitId":"rertyy"},"content":" mkdir \"!hooksDir!\"","lastModifiedDate":"2024-03-07"},{"lineNumber":10,"author":{"gitId":"rertyy"},"content":" echo Created directory: !hooksDir!","lastModifiedDate":"2024-03-07"},{"lineNumber":11,"author":{"gitId":"rertyy"},"content":")","lastModifiedDate":"2024-03-07"},{"lineNumber":12,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":13,"author":{"gitId":"rertyy"},"content":"REM Check if pre-commit hook already exists","lastModifiedDate":"2024-03-07"},{"lineNumber":14,"author":{"gitId":"rertyy"},"content":"IF EXIST \"!hooksDir!/pre-commit\" (","lastModifiedDate":"2024-03-07"},{"lineNumber":15,"author":{"gitId":"rertyy"},"content":" REM Backup existing pre-commit hook","lastModifiedDate":"2024-03-07"},{"lineNumber":16,"author":{"gitId":"rertyy"},"content":" copy /Y \"!hooksDir!/pre-commit\" \"!hooksDir!/pre-commit.bak\"","lastModifiedDate":"2024-03-07"},{"lineNumber":17,"author":{"gitId":"rertyy"},"content":" echo Existing pre-commit hook backed up to: !hooksDir!/pre-commit.bak","lastModifiedDate":"2024-03-07"},{"lineNumber":18,"author":{"gitId":"rertyy"},"content":")","lastModifiedDate":"2024-03-07"},{"lineNumber":19,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":20,"author":{"gitId":"rertyy"},"content":"REM Copy the new pre-commit hook","lastModifiedDate":"2024-03-07"},{"lineNumber":21,"author":{"gitId":"rertyy"},"content":"copy /Y \"pre-commit\" \"!hooksDir!/pre-commit\"","lastModifiedDate":"2024-03-07"},{"lineNumber":22,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":23,"author":{"gitId":"rertyy"},"content":"echo New pre-commit hook setup complete.","lastModifiedDate":"2024-03-07"}],"authorContributionMap":{"rertyy":23}},{"path":"config/pre-commit-setup/add_hook.sh","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"rertyy"},"content":"#!/bin/bash","lastModifiedDate":"2024-03-07"},{"lineNumber":2,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":3,"author":{"gitId":"rertyy"},"content":"# Define relative path to .git/hooks","lastModifiedDate":"2024-03-07"},{"lineNumber":4,"author":{"gitId":"rertyy"},"content":"hooksDir\u003d\"../../.git/hooks\"","lastModifiedDate":"2024-03-07"},{"lineNumber":5,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":6,"author":{"gitId":"rertyy"},"content":"# Check if .git/hooks directory exists, if not create it","lastModifiedDate":"2024-03-07"},{"lineNumber":7,"author":{"gitId":"rertyy"},"content":"if [ ! -d \"$hooksDir\" ]; then","lastModifiedDate":"2024-03-07"},{"lineNumber":8,"author":{"gitId":"rertyy"},"content":" mkdir -p \"$hooksDir\"","lastModifiedDate":"2024-03-07"},{"lineNumber":9,"author":{"gitId":"rertyy"},"content":" echo \"Created directory: $hooksDir\"","lastModifiedDate":"2024-03-07"},{"lineNumber":10,"author":{"gitId":"rertyy"},"content":"fi","lastModifiedDate":"2024-03-07"},{"lineNumber":11,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":12,"author":{"gitId":"rertyy"},"content":"# Check if pre-commit hook already exists","lastModifiedDate":"2024-03-07"},{"lineNumber":13,"author":{"gitId":"rertyy"},"content":"if [ -f \"$hooksDir/pre-commit\" ]; then","lastModifiedDate":"2024-03-07"},{"lineNumber":14,"author":{"gitId":"rertyy"},"content":" # Backup existing pre-commit hook","lastModifiedDate":"2024-03-07"},{"lineNumber":15,"author":{"gitId":"rertyy"},"content":" cp \"$hooksDir/pre-commit\" \"$hooksDir/pre-commit.bak\"","lastModifiedDate":"2024-03-07"},{"lineNumber":16,"author":{"gitId":"rertyy"},"content":" echo \"Existing pre-commit hook backed up to: $hooksDir/pre-commit.bak\"","lastModifiedDate":"2024-03-07"},{"lineNumber":17,"author":{"gitId":"rertyy"},"content":"fi","lastModifiedDate":"2024-03-07"},{"lineNumber":18,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":19,"author":{"gitId":"rertyy"},"content":"# Copy the new pre-commit hook","lastModifiedDate":"2024-03-07"},{"lineNumber":20,"author":{"gitId":"rertyy"},"content":"cp \"pre-commit\" \"$hooksDir/pre-commit\"","lastModifiedDate":"2024-03-07"},{"lineNumber":21,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":22,"author":{"gitId":"rertyy"},"content":"echo \"New pre-commit hook setup complete.\"","lastModifiedDate":"2024-03-07"}],"authorContributionMap":{"rertyy":22}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"kailinteoo"},"content":"# About Us:","lastModifiedDate":"2024-03-06"},{"lineNumber":2,"author":{"gitId":"kailinteoo"},"content":"Welcome to BookKeeper, your trusted companion in customer management for small crochet businesses. We understand the ","lastModifiedDate":"2024-03-06"},{"lineNumber":3,"author":{"gitId":"kailinteoo"},"content":"challenges faced by entrepreneurs like you who are passionate about crafting beautiful items and connecting with","lastModifiedDate":"2024-03-06"},{"lineNumber":4,"author":{"gitId":"kailinteoo"},"content":"customers. BookKeeper is here to simplify your workflow, empower your business, and help you thrive in the world of","lastModifiedDate":"2024-03-06"},{"lineNumber":5,"author":{"gitId":"kailinteoo"},"content":"crochet!","lastModifiedDate":"2024-03-06"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":7,"author":{"gitId":"kailinteoo"},"content":"## Product Name: BookKeeper","lastModifiedDate":"2024-03-06"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"kailinteoo"},"content":"## Target Users","lastModifiedDate":"2024-03-06"},{"lineNumber":10,"author":{"gitId":"kailinteoo"},"content":"Our target users are small business owners across various industries who are looking for efficient ways to manage their ","lastModifiedDate":"2024-03-06"},{"lineNumber":11,"author":{"gitId":"kailinteoo"},"content":"customer lists and streamline their customer management processes. These individuals typically operate businesses with ","lastModifiedDate":"2024-03-06"},{"lineNumber":12,"author":{"gitId":"kailinteoo"},"content":"limited resources and manpower, making it essential for them to optimize their workflows and maximize productivity.","lastModifiedDate":"2024-03-06"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-06-17"},{"lineNumber":14,"author":{"gitId":"kailinteoo"},"content":"## Purpose","lastModifiedDate":"2024-03-06"},{"lineNumber":15,"author":{"gitId":"kailinteoo"},"content":"In the bustling world of a small business, time is precious. BookKeeper aims to provide a seamless solution for managing","lastModifiedDate":"2024-03-06"},{"lineNumber":16,"author":{"gitId":"kailinteoo"},"content":"customer relationships, allowing you to focus on what matters most - creating and selling your craft. Our platform","lastModifiedDate":"2024-03-06"},{"lineNumber":17,"author":{"gitId":"kailinteoo"},"content":"offers a user-friendly interface and powerful features to streamline your workflow, saving your time and effort.","lastModifiedDate":"2024-03-06"},{"lineNumber":18,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":19,"author":{"gitId":"kailinteoo"},"content":"## Unique Selling Point","lastModifiedDate":"2024-03-06"},{"lineNumber":20,"author":{"gitId":"kailinteoo"},"content":"### Centralized Platform","lastModifiedDate":"2024-03-06"},{"lineNumber":21,"author":{"gitId":"kailinteoo"},"content":"Say goodbye to scattered customer lists and spreadsheets. BookKeeper offers a centralized platform to store and search","lastModifiedDate":"2024-03-06"},{"lineNumber":22,"author":{"gitId":"kailinteoo"},"content":"for clients, keeping all your important information in one place.","lastModifiedDate":"2024-03-06"},{"lineNumber":23,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":24,"author":{"gitId":"kailinteoo"},"content":"### Efficiency","lastModifiedDate":"2024-03-06"},{"lineNumber":25,"author":{"gitId":"kailinteoo"},"content":"With a command-line interface, our application is faster and more efficient than traditional methods like CRMs or","lastModifiedDate":"2024-03-06"},{"lineNumber":26,"author":{"gitId":"kailinteoo"},"content":"Excel sheets. Spend less time navigating complex menus and more time serving your customers.","lastModifiedDate":"2024-03-06"},{"lineNumber":27,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":28,"author":{"gitId":"kailinteoo"},"content":"### Tailored for Crochet Businesses","lastModifiedDate":"2024-03-06"},{"lineNumber":29,"author":{"gitId":"kailinteoo"},"content":"We understand the unique needs of crochet businesses, which is why our platform offers customizable fields, customizable","lastModifiedDate":"2024-03-06"},{"lineNumber":30,"author":{"gitId":"kailinteoo"},"content":"tags, and integration with e-commerce platforms.","lastModifiedDate":"2024-03-06"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":32,"author":{"gitId":"kailinteoo"},"content":"### Cost-effective","lastModifiedDate":"2024-03-06"},{"lineNumber":33,"author":{"gitId":"kailinteoo"},"content":"BookKeeper is designed to be cost-effective and easy to use, perfect for businesses with limited resources. Maximize","lastModifiedDate":"2024-03-06"},{"lineNumber":34,"author":{"gitId":"kailinteoo"},"content":"productivity without breaking the bank.","lastModifiedDate":"2024-03-06"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"kailinteoo"},"content":"## Value Proposition","lastModifiedDate":"2024-03-06"},{"lineNumber":37,"author":{"gitId":"kailinteoo"},"content":"For small business owners launching services, organizing customer lists can be challenging. Our address book offers a ","lastModifiedDate":"2024-03-06"},{"lineNumber":38,"author":{"gitId":"kailinteoo"},"content":"centralized platform to store and search for clients, streamlining customer management. With a command-line interface, ","lastModifiedDate":"2024-03-06"},{"lineNumber":39,"author":{"gitId":"kailinteoo"},"content":"our application is faster and more efficient than inputting data into other systems like CRMs or Microsoft Excel.","lastModifiedDate":"2024-03-06"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":41,"author":{"gitId":"kailinteoo"},"content":"## Team Information","lastModifiedDate":"2024-03-06"},{"lineNumber":42,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":43,"author":{"gitId":"kailinteoo"},"content":"We are a team based in the [School of Computing, National University of Singapore](http://www.comp.nus.edu.sg).","lastModifiedDate":"2024-03-06"},{"lineNumber":44,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":45,"author":{"gitId":"kailinteoo"},"content":"You can reach us at the email ","lastModifiedDate":"2024-03-06"},{"lineNumber":46,"author":{"gitId":"kailinteoo"},"content":"`jaspertan@u.nus.edu` `e0967851@u.nus.edu` `ian.tung@u.nus.edu` `e0959354@u.nus.edu`","lastModifiedDate":"2024-03-06"},{"lineNumber":47,"author":{"gitId":"kailinteoo"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":48,"author":{"gitId":"kailinteoo"},"content":"## Project team","lastModifiedDate":"2024-03-06"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":50,"author":{"gitId":"kailinteoo"},"content":"### Jasper Tan Zu Xiang","lastModifiedDate":"2024-03-06"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"kailinteoo"},"content":"\u003cimg src\u003d\"images/jaspertzx.png\" width\u003d\"200px\" height\u003d\"225px\"\u003e","lastModifiedDate":"2024-03-07"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"kailinteoo"},"content":"[[github](https://github.com/Jaspertzx)]","lastModifiedDate":"2024-03-06"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":56,"author":{"gitId":"kailinteoo"},"content":"* Role: Front-End Developer","lastModifiedDate":"2024-03-06"},{"lineNumber":57,"author":{"gitId":"kailinteoo"},"content":"* Responsibilities: Specialize in creating the user interface and user experience of the BookKeeper application. Ensure ","lastModifiedDate":"2024-03-06"},{"lineNumber":58,"author":{"gitId":"kailinteoo"},"content":"that the application is visually appealing, responsive, and easy to navigate for users.","lastModifiedDate":"2024-03-06"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":61,"author":{"gitId":"kailinteoo"},"content":"### Goh Ying Xuan, Shavonne","lastModifiedDate":"2024-03-06"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":63,"author":{"gitId":"kailinteoo"},"content":"\u003cimg src\u003d\"images/shavonneg.png\" width\u003d\"200px\" height\u003d\"225px\"\u003e","lastModifiedDate":"2024-03-06"},{"lineNumber":64,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":65,"author":{"gitId":"kailinteoo"},"content":"[[github](http://github.com/shavonneg)]","lastModifiedDate":"2024-03-06"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":67,"author":{"gitId":"kailinteoo"},"content":"* Role: UI/UX Designer","lastModifiedDate":"2024-03-06"},{"lineNumber":68,"author":{"gitId":"kailinteoo"},"content":"* Responsibilities: Creating a seamless and intuitive user experience for the BookKeeper application. Conduct user","lastModifiedDate":"2024-03-06"},{"lineNumber":69,"author":{"gitId":"kailinteoo"},"content":"research, create wireframes and prototypes, and design user interfaces that are visually appealing and easy to use. ","lastModifiedDate":"2024-03-06"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":71,"author":{"gitId":"kailinteoo"},"content":"### Tung Zhi Yong, Ian","lastModifiedDate":"2024-03-06"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":73,"author":{"gitId":"kailinteoo"},"content":"\u003cimg src\u003d\"images/rertyy.png\" width\u003d\"200px\" height\u003d\"225px\"\u003e","lastModifiedDate":"2024-03-06"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":75,"author":{"gitId":"kailinteoo"},"content":"[[github](http://github.com/rertyy)]","lastModifiedDate":"2024-03-06"},{"lineNumber":76,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":77,"author":{"gitId":"kailinteoo"},"content":"* Role: Full-Stack Developer","lastModifiedDate":"2024-03-06"},{"lineNumber":78,"author":{"gitId":"kailinteoo"},"content":"* Responsibilities: Proficient in both front-end and back-end development. Handle tasks ranging from designing user","lastModifiedDate":"2024-03-06"},{"lineNumber":79,"author":{"gitId":"kailinteoo"},"content":"interfaces to implementing server-side logic and managing database.","lastModifiedDate":"2024-03-06"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":81,"author":{"gitId":"kailinteoo"},"content":"### Kailin Teo","lastModifiedDate":"2024-03-06"},{"lineNumber":82,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":83,"author":{"gitId":"kailinteoo"},"content":"\u003cimg src\u003d\"images/kailinteoo.png\" width\u003d\"200px\" height\u003d\"225px\"\u003e","lastModifiedDate":"2024-03-06"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":85,"author":{"gitId":"kailinteoo"},"content":"[[github](http://github.com/kailinteoo)]","lastModifiedDate":"2024-03-06"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":87,"author":{"gitId":"kailinteoo"},"content":"* Role: Back-End Developer","lastModifiedDate":"2024-03-06"},{"lineNumber":88,"author":{"gitId":"kailinteoo"},"content":"* Responsibilities: Focus on building the server-side components of the BookKeeper application. Handle tasks such as","lastModifiedDate":"2024-03-06"},{"lineNumber":89,"author":{"gitId":"kailinteoo"},"content":"implementing business logic, managing databases, and ensuring the security and scalability of the application. ","lastModifiedDate":"2024-03-06"}],"authorContributionMap":{"kailinteoo":66,"-":23}},{"path":"docs/DeveloperGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":"layout: page","lastModifiedDate":"2020-05-23"},{"lineNumber":3,"author":{"gitId":"-"},"content":"title: Developer Guide","lastModifiedDate":"2020-05-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":6,"author":{"gitId":"-"},"content":"* Table of Contents","lastModifiedDate":"2020-05-23"},{"lineNumber":7,"author":{"gitId":"-"},"content":" {:toc}","lastModifiedDate":"2020-05-23"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":11,"author":{"gitId":"-"},"content":"## **Acknowledgements**","lastModifiedDate":"2021-07-30"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":13,"author":{"gitId":"rertyy"},"content":"* {list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the","lastModifiedDate":"2024-03-02"},{"lineNumber":14,"author":{"gitId":"rertyy"},"content":" original source as well}","lastModifiedDate":"2024-03-02"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":16,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2021-07-30"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"## **Setting up, getting started**","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"-"},"content":"Refer to the guide [_Setting up and getting started_](SettingUp.md).","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":"## **Design**","lastModifiedDate":"2020-05-23"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-primary\"\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"rertyy"},"content":":bulb: **Tip:** The `.puml` files used to create diagrams in this document `docs/diagrams` folder. Refer to the [","lastModifiedDate":"2024-03-02"},{"lineNumber":29,"author":{"gitId":"rertyy"},"content":"_PlantUML Tutorial_ at se-edu/guides](https://se-education.org/guides/tutorials/plantUml.html) to learn how to create","lastModifiedDate":"2024-03-02"},{"lineNumber":30,"author":{"gitId":"rertyy"},"content":"and edit diagrams.","lastModifiedDate":"2024-03-02"},{"lineNumber":31,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":33,"author":{"gitId":"-"},"content":"### Architecture","lastModifiedDate":"2021-07-31"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":35,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/ArchitectureDiagram.png\" width\u003d\"280\" /\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":37,"author":{"gitId":"-"},"content":"The ***Architecture Diagram*** given above explains the high-level design of the App.","lastModifiedDate":"2021-07-31"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"-"},"content":"Given below is a quick overview of main components and how they interact with each other.","lastModifiedDate":"2021-07-31"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":41,"author":{"gitId":"-"},"content":"**Main components of the architecture**","lastModifiedDate":"2021-07-31"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"rertyy"},"content":"**`Main`** (consisting of","lastModifiedDate":"2024-03-02"},{"lineNumber":44,"author":{"gitId":"rertyy"},"content":"classes [`Main`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/Main.java)","lastModifiedDate":"2024-03-02"},{"lineNumber":45,"author":{"gitId":"rertyy"},"content":"and [`MainApp`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/MainApp.java)) is","lastModifiedDate":"2024-03-02"},{"lineNumber":46,"author":{"gitId":"rertyy"},"content":"in charge of the app launch and shut down.","lastModifiedDate":"2024-03-02"},{"lineNumber":47,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":48,"author":{"gitId":"-"},"content":"* At app launch, it initializes the other components in the correct sequence, and connects them up with each other.","lastModifiedDate":"2023-09-03"},{"lineNumber":49,"author":{"gitId":"-"},"content":"* At shut down, it shuts down the other components and invokes cleanup methods where necessary.","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"-"},"content":"The bulk of the app\u0027s work is done by the following four components:","lastModifiedDate":"2023-09-03"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":"* [**`UI`**](#ui-component): The UI of the App.","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"-"},"content":"* [**`Logic`**](#logic-component): The command executor.","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":"* [**`Model`**](#model-component): Holds the data of the App in memory.","lastModifiedDate":"2020-05-23"},{"lineNumber":56,"author":{"gitId":"-"},"content":"* [**`Storage`**](#storage-component): Reads data from, and writes data to, the hard disk.","lastModifiedDate":"2020-05-23"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":58,"author":{"gitId":"-"},"content":"[**`Commons`**](#common-classes) represents a collection of classes used by multiple other components.","lastModifiedDate":"2023-09-03"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":60,"author":{"gitId":"-"},"content":"**How the architecture components interact with each other**","lastModifiedDate":"2020-05-23"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":62,"author":{"gitId":"rertyy"},"content":"The *Sequence Diagram* below shows how the components interact with each other for the scenario where the user issues","lastModifiedDate":"2024-03-02"},{"lineNumber":63,"author":{"gitId":"rertyy"},"content":"the command `delete 1`.","lastModifiedDate":"2024-03-02"},{"lineNumber":64,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":65,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/ArchitectureSequenceDiagram.png\" width\u003d\"574\" /\u003e","lastModifiedDate":"2020-06-07"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":67,"author":{"gitId":"-"},"content":"Each of the four main components (also shown in the diagram above),","lastModifiedDate":"2021-07-31"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":69,"author":{"gitId":"-"},"content":"* defines its *API* in an `interface` with the same name as the Component.","lastModifiedDate":"2021-07-31"},{"lineNumber":70,"author":{"gitId":"rertyy"},"content":"* implements its functionality using a concrete `{Component Name}Manager` class (which follows the corresponding","lastModifiedDate":"2024-03-02"},{"lineNumber":71,"author":{"gitId":"rertyy"},"content":" API `interface` mentioned in the previous point.","lastModifiedDate":"2024-03-02"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":73,"author":{"gitId":"rertyy"},"content":"For example, the `Logic` component defines its API in the `Logic.java` interface and implements its functionality using","lastModifiedDate":"2024-03-02"},{"lineNumber":74,"author":{"gitId":"rertyy"},"content":"the `LogicManager.java` class which follows the `Logic` interface. Other components interact with a given component","lastModifiedDate":"2024-03-02"},{"lineNumber":75,"author":{"gitId":"rertyy"},"content":"through its interface rather than the concrete class (reason: to prevent outside component\u0027s being coupled to the","lastModifiedDate":"2024-03-02"},{"lineNumber":76,"author":{"gitId":"rertyy"},"content":"implementation of a component), as illustrated in the (partial) class diagram below.","lastModifiedDate":"2024-03-02"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":78,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/ComponentManagers.png\" width\u003d\"300\" /\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":80,"author":{"gitId":"-"},"content":"The sections below give more details of each component.","lastModifiedDate":"2020-05-23"},{"lineNumber":81,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":82,"author":{"gitId":"-"},"content":"### UI component","lastModifiedDate":"2020-05-23"},{"lineNumber":83,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":84,"author":{"gitId":"rertyy"},"content":"The **API** of this component is specified","lastModifiedDate":"2024-03-02"},{"lineNumber":85,"author":{"gitId":"rertyy"},"content":"in [`Ui.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/Ui.java)","lastModifiedDate":"2024-03-02"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":87,"author":{"gitId":"-"},"content":"![Structure of the UI Component](images/UiClassDiagram.png)","lastModifiedDate":"2021-07-31"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":89,"author":{"gitId":"rertyy"},"content":"The UI consists of a `MainWindow` that is made up of parts","lastModifiedDate":"2024-03-02"},{"lineNumber":90,"author":{"gitId":"rertyy"},"content":"e.g.`CommandBox`, `ResultDisplay`, `PersonListPanel`, `StatusBarFooter` etc. All these, including the `MainWindow`,","lastModifiedDate":"2024-03-02"},{"lineNumber":91,"author":{"gitId":"rertyy"},"content":"inherit from the abstract `UiPart` class which captures the commonalities between classes that represent parts of the","lastModifiedDate":"2024-03-02"},{"lineNumber":92,"author":{"gitId":"rertyy"},"content":"visible GUI.","lastModifiedDate":"2024-03-02"},{"lineNumber":93,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":94,"author":{"gitId":"rertyy"},"content":"The `UI` component uses the JavaFx UI framework. The layout of these UI parts are defined in matching `.fxml` files that","lastModifiedDate":"2024-03-02"},{"lineNumber":95,"author":{"gitId":"rertyy"},"content":"are in the `src/main/resources/view` folder. For example, the layout of","lastModifiedDate":"2024-03-02"},{"lineNumber":96,"author":{"gitId":"rertyy"},"content":"the [`MainWindow`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/MainWindow.java)","lastModifiedDate":"2024-03-02"},{"lineNumber":97,"author":{"gitId":"rertyy"},"content":"is specified","lastModifiedDate":"2024-03-02"},{"lineNumber":98,"author":{"gitId":"rertyy"},"content":"in [`MainWindow.fxml`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/resources/view/MainWindow.fxml)","lastModifiedDate":"2024-03-02"},{"lineNumber":99,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":100,"author":{"gitId":"-"},"content":"The `UI` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":101,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":102,"author":{"gitId":"-"},"content":"* executes user commands using the `Logic` component.","lastModifiedDate":"2021-07-31"},{"lineNumber":103,"author":{"gitId":"-"},"content":"* listens for changes to `Model` data so that the UI can be updated with the modified data.","lastModifiedDate":"2021-07-31"},{"lineNumber":104,"author":{"gitId":"-"},"content":"* keeps a reference to the `Logic` component, because the `UI` relies on the `Logic` to execute commands.","lastModifiedDate":"2021-07-31"},{"lineNumber":105,"author":{"gitId":"-"},"content":"* depends on some classes in the `Model` component, as it displays `Person` object residing in the `Model`.","lastModifiedDate":"2021-07-31"},{"lineNumber":106,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":107,"author":{"gitId":"-"},"content":"### Logic component","lastModifiedDate":"2020-05-23"},{"lineNumber":108,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":109,"author":{"gitId":"rertyy"},"content":"**API","lastModifiedDate":"2024-03-02"},{"lineNumber":110,"author":{"gitId":"rertyy"},"content":"** : [`Logic.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/logic/Logic.java)","lastModifiedDate":"2024-03-02"},{"lineNumber":111,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":112,"author":{"gitId":"-"},"content":"Here\u0027s a (partial) class diagram of the `Logic` component:","lastModifiedDate":"2021-07-31"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":114,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/LogicClassDiagram.png\" width\u003d\"550\"/\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":115,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":116,"author":{"gitId":"rertyy"},"content":"The sequence diagram below illustrates the interactions within the `Logic` component, taking `execute(\"delete 1\")` API","lastModifiedDate":"2024-03-02"},{"lineNumber":117,"author":{"gitId":"rertyy"},"content":"call as an example.","lastModifiedDate":"2024-03-02"},{"lineNumber":118,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":119,"author":{"gitId":"-"},"content":"![Interactions Inside the Logic Component for the `delete 1` Command](images/DeleteSequenceDiagram.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":121,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-info\"\u003e:information_source: **Note:** The lifeline for `DeleteCommandParser` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline continues till the end of diagram.","lastModifiedDate":"2024-02-09"},{"lineNumber":122,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":123,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":124,"author":{"gitId":"-"},"content":"How the `Logic` component works:","lastModifiedDate":"2023-09-03"},{"lineNumber":125,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":126,"author":{"gitId":"rertyy"},"content":"1. When `Logic` is called upon to execute a command, it is passed to an `AddressBookParser` object which in turn creates","lastModifiedDate":"2024-03-02"},{"lineNumber":127,"author":{"gitId":"rertyy"},"content":" a parser that matches the command (e.g., `DeleteCommandParser`) and uses it to parse the command.","lastModifiedDate":"2024-03-02"},{"lineNumber":128,"author":{"gitId":"rertyy"},"content":"1. This results in a `Command` object (more precisely, an object of one of its subclasses e.g., `DeleteCommand`) which","lastModifiedDate":"2024-03-02"},{"lineNumber":129,"author":{"gitId":"rertyy"},"content":" is executed by the `LogicManager`.","lastModifiedDate":"2024-03-02"},{"lineNumber":130,"author":{"gitId":"-"},"content":"1. The command can communicate with the `Model` when it is executed (e.g. to delete a person).\u003cbr\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":131,"author":{"gitId":"rertyy"},"content":" Note that although this is shown as a single step in the diagram above (for simplicity), in the code it can take","lastModifiedDate":"2024-03-02"},{"lineNumber":132,"author":{"gitId":"rertyy"},"content":" several interactions (between the command object and the `Model`) to achieve.","lastModifiedDate":"2024-03-02"},{"lineNumber":133,"author":{"gitId":"-"},"content":"1. The result of the command execution is encapsulated as a `CommandResult` object which is returned back from `Logic`.","lastModifiedDate":"2023-09-03"},{"lineNumber":134,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":135,"author":{"gitId":"-"},"content":"Here are the other classes in `Logic` (omitted from the class diagram above) that are used for parsing a user command:","lastModifiedDate":"2021-07-31"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":137,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/ParserClasses.png\" width\u003d\"600\"/\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":138,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":139,"author":{"gitId":"-"},"content":"How the parsing works:","lastModifiedDate":"2021-07-31"},{"lineNumber":140,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":141,"author":{"gitId":"rertyy"},"content":"* When called upon to parse a user command, the `AddressBookParser` class creates an `XYZCommandParser` (`XYZ` is a","lastModifiedDate":"2024-03-02"},{"lineNumber":142,"author":{"gitId":"rertyy"},"content":" placeholder for the specific command name e.g., `AddCommandParser`) which uses the other classes shown above to parse","lastModifiedDate":"2024-03-02"},{"lineNumber":143,"author":{"gitId":"rertyy"},"content":" the user command and create a `XYZCommand` object (e.g., `AddCommand`) which the `AddressBookParser` returns back as","lastModifiedDate":"2024-03-02"},{"lineNumber":144,"author":{"gitId":"rertyy"},"content":" a `Command` object.","lastModifiedDate":"2024-03-02"},{"lineNumber":145,"author":{"gitId":"rertyy"},"content":"* All `XYZCommandParser` classes (e.g., `AddCommandParser`, `DeleteCommandParser`, ...) inherit from the `Parser`","lastModifiedDate":"2024-03-02"},{"lineNumber":146,"author":{"gitId":"rertyy"},"content":" interface so that they can be treated similarly where possible e.g, during testing.","lastModifiedDate":"2024-03-02"},{"lineNumber":147,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":148,"author":{"gitId":"-"},"content":"### Model component","lastModifiedDate":"2021-07-31"},{"lineNumber":149,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":150,"author":{"gitId":"rertyy"},"content":"**API","lastModifiedDate":"2024-03-02"},{"lineNumber":151,"author":{"gitId":"rertyy"},"content":"** : [`Model.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/model/Model.java)","lastModifiedDate":"2024-03-02"},{"lineNumber":152,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":153,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/ModelClassDiagram.png\" width\u003d\"450\" /\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":154,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":155,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":156,"author":{"gitId":"-"},"content":"The `Model` component,","lastModifiedDate":"2021-07-31"},{"lineNumber":157,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":158,"author":{"gitId":"-"},"content":"* stores the address book data i.e., all `Person` objects (which are contained in a `UniquePersonList` object).","lastModifiedDate":"2021-07-31"},{"lineNumber":159,"author":{"gitId":"rertyy"},"content":"* stores the currently \u0027selected\u0027 `Person` objects (e.g., results of a search query) as a separate _filtered_ list which","lastModifiedDate":"2024-03-02"},{"lineNumber":160,"author":{"gitId":"rertyy"},"content":" is exposed to outsiders as an unmodifiable `ObservableList\u003cPerson\u003e` that can be \u0027observed\u0027 e.g. the UI can be bound to","lastModifiedDate":"2024-03-02"},{"lineNumber":161,"author":{"gitId":"rertyy"},"content":" this list so that the UI automatically updates when the data in the list change.","lastModifiedDate":"2024-03-02"},{"lineNumber":162,"author":{"gitId":"rertyy"},"content":"* stores a `UserPref` object that represents the user’s preferences. This is exposed to the outside as","lastModifiedDate":"2024-03-02"},{"lineNumber":163,"author":{"gitId":"rertyy"},"content":" a `ReadOnlyUserPref` objects.","lastModifiedDate":"2024-03-02"},{"lineNumber":164,"author":{"gitId":"rertyy"},"content":"* does not depend on any of the other three components (as the `Model` represents data entities of the domain, they","lastModifiedDate":"2024-03-02"},{"lineNumber":165,"author":{"gitId":"rertyy"},"content":" should make sense on their own without depending on other components)","lastModifiedDate":"2024-03-02"},{"lineNumber":166,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":167,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-info\"\u003e:information_source: **Note:** An alternative (arguably, a more OOP) model is given below. It has a `Tag` list in the `AddressBook`, which `Person` references. This allows `AddressBook` to only require one `Tag` object per unique tag, instead of each `Person` needing their own `Tag` objects.\u003cbr\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":168,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":169,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/BetterModelClassDiagram.png\" width\u003d\"450\" /\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":170,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":171,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":172,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":173,"author":{"gitId":"-"},"content":"### Storage component","lastModifiedDate":"2020-05-23"},{"lineNumber":174,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":175,"author":{"gitId":"rertyy"},"content":"**API","lastModifiedDate":"2024-03-02"},{"lineNumber":176,"author":{"gitId":"rertyy"},"content":"** : [`Storage.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/storage/Storage.java)","lastModifiedDate":"2024-03-02"},{"lineNumber":177,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":178,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/StorageClassDiagram.png\" width\u003d\"550\" /\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":179,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":180,"author":{"gitId":"-"},"content":"The `Storage` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":181,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":182,"author":{"gitId":"rertyy"},"content":"* can save both address book data and user preference data in JSON format, and read them back into corresponding","lastModifiedDate":"2024-03-02"},{"lineNumber":183,"author":{"gitId":"rertyy"},"content":" objects.","lastModifiedDate":"2024-03-02"},{"lineNumber":184,"author":{"gitId":"rertyy"},"content":"* inherits from both `AddressBookStorage` and `UserPrefStorage`, which means it can be treated as either one (if only","lastModifiedDate":"2024-03-02"},{"lineNumber":185,"author":{"gitId":"rertyy"},"content":" the functionality of only one is needed).","lastModifiedDate":"2024-03-02"},{"lineNumber":186,"author":{"gitId":"rertyy"},"content":"* depends on some classes in the `Model` component (because the `Storage` component\u0027s job is to save/retrieve objects","lastModifiedDate":"2024-03-02"},{"lineNumber":187,"author":{"gitId":"rertyy"},"content":" that belong to the `Model`)","lastModifiedDate":"2024-03-02"},{"lineNumber":188,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":189,"author":{"gitId":"-"},"content":"### Common classes","lastModifiedDate":"2020-05-23"},{"lineNumber":190,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":191,"author":{"gitId":"-"},"content":"Classes used by multiple components are in the `seedu.addressbook.commons` package.","lastModifiedDate":"2020-05-23"},{"lineNumber":192,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":193,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":194,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":195,"author":{"gitId":"-"},"content":"## **Implementation**","lastModifiedDate":"2020-05-23"},{"lineNumber":196,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":197,"author":{"gitId":"-"},"content":"This section describes some noteworthy details on how certain features are implemented.","lastModifiedDate":"2020-05-23"},{"lineNumber":198,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":199,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Undo/redo feature","lastModifiedDate":"2020-06-07"},{"lineNumber":200,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":201,"author":{"gitId":"-"},"content":"#### Proposed Implementation","lastModifiedDate":"2020-05-23"},{"lineNumber":202,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":203,"author":{"gitId":"rertyy"},"content":"The proposed undo/redo mechanism is facilitated by `VersionedAddressBook`. It extends `AddressBook` with an undo/redo","lastModifiedDate":"2024-03-02"},{"lineNumber":204,"author":{"gitId":"rertyy"},"content":"history, stored internally as an `addressBookStateList` and `currentStatePointer`. Additionally, it implements the","lastModifiedDate":"2024-03-02"},{"lineNumber":205,"author":{"gitId":"rertyy"},"content":"following operations:","lastModifiedDate":"2024-03-02"},{"lineNumber":206,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":207,"author":{"gitId":"rertyy"},"content":"* `VersionedAddressBook#commit()`— Saves the current address book state in its history.","lastModifiedDate":"2024-03-02"},{"lineNumber":208,"author":{"gitId":"rertyy"},"content":"* `VersionedAddressBook#undo()`— Restores the previous address book state from its history.","lastModifiedDate":"2024-03-02"},{"lineNumber":209,"author":{"gitId":"rertyy"},"content":"* `VersionedAddressBook#redo()`— Restores a previously undone address book state from its history.","lastModifiedDate":"2024-03-02"},{"lineNumber":210,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":211,"author":{"gitId":"rertyy"},"content":"These operations are exposed in the `Model` interface as `Model#commitAddressBook()`, `Model#undoAddressBook()`","lastModifiedDate":"2024-03-02"},{"lineNumber":212,"author":{"gitId":"rertyy"},"content":"and `Model#redoAddressBook()` respectively.","lastModifiedDate":"2024-03-02"},{"lineNumber":213,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":214,"author":{"gitId":"-"},"content":"Given below is an example usage scenario and how the undo/redo mechanism behaves at each step.","lastModifiedDate":"2020-05-23"},{"lineNumber":215,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":216,"author":{"gitId":"rertyy"},"content":"Step 1. The user launches the application for the first time. The `VersionedAddressBook` will be initialized with the","lastModifiedDate":"2024-03-02"},{"lineNumber":217,"author":{"gitId":"rertyy"},"content":"initial address book state, and the `currentStatePointer` pointing to that single address book state.","lastModifiedDate":"2024-03-02"},{"lineNumber":218,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":219,"author":{"gitId":"-"},"content":"![UndoRedoState0](images/UndoRedoState0.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":220,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":221,"author":{"gitId":"rertyy"},"content":"Step 2. The user executes `delete 5` command to delete the 5th person in the address book. The `delete` command","lastModifiedDate":"2024-03-02"},{"lineNumber":222,"author":{"gitId":"rertyy"},"content":"calls `Model#commitAddressBook()`, causing the modified state of the address book after the `delete 5` command executes","lastModifiedDate":"2024-03-02"},{"lineNumber":223,"author":{"gitId":"rertyy"},"content":"to be saved in the `addressBookStateList`, and the `currentStatePointer` is shifted to the newly inserted address book","lastModifiedDate":"2024-03-02"},{"lineNumber":224,"author":{"gitId":"rertyy"},"content":"state.","lastModifiedDate":"2024-03-02"},{"lineNumber":225,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":226,"author":{"gitId":"-"},"content":"![UndoRedoState1](images/UndoRedoState1.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":227,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":228,"author":{"gitId":"rertyy"},"content":"Step 3. The user executes `add n/David …​` to add a new person. The `add` command also","lastModifiedDate":"2024-03-02"},{"lineNumber":229,"author":{"gitId":"rertyy"},"content":"calls `Model#commitAddressBook()`, causing another modified address book state to be saved into","lastModifiedDate":"2024-03-02"},{"lineNumber":230,"author":{"gitId":"rertyy"},"content":"the `addressBookStateList`.","lastModifiedDate":"2024-03-02"},{"lineNumber":231,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":232,"author":{"gitId":"-"},"content":"![UndoRedoState2](images/UndoRedoState2.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":233,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":234,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-info\"\u003e:information_source: **Note:** If a command fails its execution, it will not call `Model#commitAddressBook()`, so the address book state will not be saved into the `addressBookStateList`.","lastModifiedDate":"2020-05-23"},{"lineNumber":235,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":236,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":237,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":238,"author":{"gitId":"rertyy"},"content":"Step 4. The user now decides that adding the person was a mistake, and decides to undo that action by executing","lastModifiedDate":"2024-03-02"},{"lineNumber":239,"author":{"gitId":"rertyy"},"content":"the `undo` command. The `undo` command will call `Model#undoAddressBook()`, which will shift the `currentStatePointer`","lastModifiedDate":"2024-03-02"},{"lineNumber":240,"author":{"gitId":"rertyy"},"content":"once to the left, pointing it to the previous address book state, and restores the address book to that state.","lastModifiedDate":"2024-03-02"},{"lineNumber":241,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":242,"author":{"gitId":"-"},"content":"![UndoRedoState3](images/UndoRedoState3.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":243,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":244,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-info\"\u003e:information_source: **Note:** If the `currentStatePointer` is at index 0, pointing to the initial AddressBook state, then there are no previous AddressBook states to restore. The `undo` command uses `Model#canUndoAddressBook()` to check if this is the case. If so, it will return an error to the user rather","lastModifiedDate":"2020-05-23"},{"lineNumber":245,"author":{"gitId":"-"},"content":"than attempting to perform the undo.","lastModifiedDate":"2020-05-23"},{"lineNumber":246,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":247,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":248,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":249,"author":{"gitId":"-"},"content":"The following sequence diagram shows how an undo operation goes through the `Logic` component:","lastModifiedDate":"2024-02-09"},{"lineNumber":250,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":251,"author":{"gitId":"-"},"content":"![UndoSequenceDiagram](images/UndoSequenceDiagram-Logic.png)","lastModifiedDate":"2024-02-09"},{"lineNumber":252,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":253,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-info\"\u003e:information_source: **Note:** The lifeline for `UndoCommand` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram.","lastModifiedDate":"2020-05-23"},{"lineNumber":254,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":255,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":256,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":257,"author":{"gitId":"-"},"content":"Similarly, how an undo operation goes through the `Model` component is shown below:","lastModifiedDate":"2024-02-09"},{"lineNumber":258,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":259,"author":{"gitId":"-"},"content":"![UndoSequenceDiagram](images/UndoSequenceDiagram-Model.png)","lastModifiedDate":"2024-02-09"},{"lineNumber":260,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":261,"author":{"gitId":"rertyy"},"content":"The `redo` command does the opposite — it calls `Model#redoAddressBook()`, which shifts the `currentStatePointer` once","lastModifiedDate":"2024-03-02"},{"lineNumber":262,"author":{"gitId":"rertyy"},"content":"to the right, pointing to the previously undone state, and restores the address book to that state.","lastModifiedDate":"2024-03-02"},{"lineNumber":263,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":264,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-info\"\u003e:information_source: **Note:** If the `currentStatePointer` is at index `addressBookStateList.size() - 1`, pointing to the latest address book state, then there are no undone AddressBook states to restore. The `redo` command uses `Model#canRedoAddressBook()` to check if this is the case. If so, it will return an error to the user rather than attempting to perform the redo.","lastModifiedDate":"2020-05-23"},{"lineNumber":265,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":266,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":267,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":268,"author":{"gitId":"rertyy"},"content":"Step 5. The user then decides to execute the command `list`. Commands that do not modify the address book, such","lastModifiedDate":"2024-03-02"},{"lineNumber":269,"author":{"gitId":"rertyy"},"content":"as `list`, will usually not call `Model#commitAddressBook()`, `Model#undoAddressBook()` or `Model#redoAddressBook()`.","lastModifiedDate":"2024-03-02"},{"lineNumber":270,"author":{"gitId":"rertyy"},"content":"Thus, the `addressBookStateList` remains unchanged.","lastModifiedDate":"2024-03-02"},{"lineNumber":271,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":272,"author":{"gitId":"-"},"content":"![UndoRedoState4](images/UndoRedoState4.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":273,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":274,"author":{"gitId":"rertyy"},"content":"Step 6. The user executes `clear`, which calls `Model#commitAddressBook()`. Since the `currentStatePointer` is not","lastModifiedDate":"2024-03-02"},{"lineNumber":275,"author":{"gitId":"rertyy"},"content":"pointing at the end of the `addressBookStateList`, all address book states after the `currentStatePointer` will be","lastModifiedDate":"2024-03-02"},{"lineNumber":276,"author":{"gitId":"rertyy"},"content":"purged. Reason: It no longer makes sense to redo the `add n/David …​` command. This is the behavior that most modern","lastModifiedDate":"2024-03-02"},{"lineNumber":277,"author":{"gitId":"rertyy"},"content":"desktop applications follow.","lastModifiedDate":"2024-03-02"},{"lineNumber":278,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":279,"author":{"gitId":"-"},"content":"![UndoRedoState5](images/UndoRedoState5.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":280,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":281,"author":{"gitId":"-"},"content":"The following activity diagram summarizes what happens when a user executes a new command:","lastModifiedDate":"2020-05-23"},{"lineNumber":282,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":283,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/CommitActivityDiagram.png\" width\u003d\"250\" /\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":284,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":285,"author":{"gitId":"-"},"content":"#### Design considerations:","lastModifiedDate":"2021-07-31"},{"lineNumber":286,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":287,"author":{"gitId":"-"},"content":"**Aspect: How undo \u0026 redo executes:**","lastModifiedDate":"2021-07-31"},{"lineNumber":288,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":289,"author":{"gitId":"-"},"content":"* **Alternative 1 (current choice):** Saves the entire address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":290,"author":{"gitId":"-"},"content":" * Pros: Easy to implement.","lastModifiedDate":"2020-05-23"},{"lineNumber":291,"author":{"gitId":"-"},"content":" * Cons: May have performance issues in terms of memory usage.","lastModifiedDate":"2020-05-23"},{"lineNumber":292,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":293,"author":{"gitId":"-"},"content":"* **Alternative 2:** Individual command knows how to undo/redo by","lastModifiedDate":"2020-05-23"},{"lineNumber":294,"author":{"gitId":"-"},"content":" itself.","lastModifiedDate":"2020-05-23"},{"lineNumber":295,"author":{"gitId":"-"},"content":" * Pros: Will use less memory (e.g. for `delete`, just save the person being deleted).","lastModifiedDate":"2020-05-23"},{"lineNumber":296,"author":{"gitId":"-"},"content":" * Cons: We must ensure that the implementation of each individual command are correct.","lastModifiedDate":"2020-05-23"},{"lineNumber":297,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":298,"author":{"gitId":"-"},"content":"_{more aspects and alternatives to be added}_","lastModifiedDate":"2020-05-23"},{"lineNumber":299,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":300,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Data archiving","lastModifiedDate":"2020-05-23"},{"lineNumber":301,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":302,"author":{"gitId":"-"},"content":"_{Explain here how the data archiving feature will be implemented}_","lastModifiedDate":"2020-05-23"},{"lineNumber":303,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":304,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":305,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":306,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":307,"author":{"gitId":"-"},"content":"## **Documentation, logging, testing, configuration, dev-ops**","lastModifiedDate":"2020-06-07"},{"lineNumber":308,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":309,"author":{"gitId":"-"},"content":"* [Documentation guide](Documentation.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":310,"author":{"gitId":"-"},"content":"* [Testing guide](Testing.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":311,"author":{"gitId":"-"},"content":"* [Logging guide](Logging.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":312,"author":{"gitId":"-"},"content":"* [Configuration guide](Configuration.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":313,"author":{"gitId":"-"},"content":"* [DevOps guide](DevOps.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":314,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":315,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":316,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":317,"author":{"gitId":"-"},"content":"## **Appendix: Requirements**","lastModifiedDate":"2020-05-23"},{"lineNumber":318,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":319,"author":{"gitId":"-"},"content":"### Product scope","lastModifiedDate":"2020-05-23"},{"lineNumber":320,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":321,"author":{"gitId":"-"},"content":"**Target user profile**:","lastModifiedDate":"2020-05-23"},{"lineNumber":322,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":323,"author":{"gitId":"-"},"content":"* has a need to manage a significant number of contacts","lastModifiedDate":"2020-05-23"},{"lineNumber":324,"author":{"gitId":"-"},"content":"* prefer desktop apps over other types","lastModifiedDate":"2020-05-23"},{"lineNumber":325,"author":{"gitId":"-"},"content":"* can type fast","lastModifiedDate":"2020-05-23"},{"lineNumber":326,"author":{"gitId":"-"},"content":"* prefers typing to mouse interactions","lastModifiedDate":"2020-05-26"},{"lineNumber":327,"author":{"gitId":"-"},"content":"* is reasonably comfortable using CLI apps","lastModifiedDate":"2020-05-23"},{"lineNumber":328,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":329,"author":{"gitId":"-"},"content":"**Value proposition**: manage contacts faster than a typical mouse/GUI driven app","lastModifiedDate":"2020-05-23"},{"lineNumber":330,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":331,"author":{"gitId":"-"},"content":"### User stories","lastModifiedDate":"2020-06-07"},{"lineNumber":332,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":333,"author":{"gitId":"-"},"content":"Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unlikely to have) - `*`","lastModifiedDate":"2020-05-23"},{"lineNumber":334,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":335,"author":{"gitId":"Jaspertzx"},"content":"| Priority | As a … | I want to … | So that I can… |","lastModifiedDate":"2024-03-05"},{"lineNumber":336,"author":{"gitId":"rertyy"},"content":"|----------|----------------------------------|--------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|","lastModifiedDate":"2024-03-07"},{"lineNumber":337,"author":{"gitId":"Jaspertzx"},"content":"| `* * *` | Small business owner | easily add new customers to my address book | keep track of all my clients\u0027 information in one place. |","lastModifiedDate":"2024-03-05"},{"lineNumber":338,"author":{"gitId":"Jaspertzx"},"content":"| `* * *` | Crocheter | have a search function | quickly find specific customers when I need to reference their details. |","lastModifiedDate":"2024-03-05"},{"lineNumber":339,"author":{"gitId":"Jaspertzx"},"content":"| `* * *` | Busy entrepreneur | be accessible via a command-line interface | efficiently manage my customer list without navigating through complex menus. |","lastModifiedDate":"2024-03-05"},{"lineNumber":340,"author":{"gitId":"Jaspertzx"},"content":"| `* * *` | Crochet business owner | have customizable fields | record specific details about each customer, such as their favorite colors or special requests. |","lastModifiedDate":"2024-03-05"},{"lineNumber":341,"author":{"gitId":"Jaspertzx"},"content":"| `* * *` | Small business owner | be cost-effective and easy to use | maximize productivity without investing in expensive CRM systems. |","lastModifiedDate":"2024-03-05"},{"lineNumber":342,"author":{"gitId":"Jaspertzx"},"content":"| `* * *` | Crochet business owner | have data backup and synchronization capabilities | access my customer information from multiple devices and ensure its security. |","lastModifiedDate":"2024-03-05"},{"lineNumber":343,"author":{"gitId":"Jaspertzx"},"content":"| `* * *` | Small business owner | have secure access controls and permissions settings | restrict sensitive information and ensure data privacy compliance. |","lastModifiedDate":"2024-03-05"},{"lineNumber":344,"author":{"gitId":"Jaspertzx"},"content":"| `* *` | Crochet business owner | categorize my customers | tailor my marketing efforts accordingly based on factors like their preferred crochet items or past purchases. |","lastModifiedDate":"2024-03-05"},{"lineNumber":345,"author":{"gitId":"Jaspertzx"},"content":"| `* *` | Small business owner | generate reports on customer activity | analyze trends and make informed business decisions based on order history and frequency of purchases. |","lastModifiedDate":"2024-03-05"},{"lineNumber":346,"author":{"gitId":"Jaspertzx"},"content":"| `* *` | Small business owner | have a reminder feature | stay organized and follow up with customers on important dates, such as birthdays or anniversaries. |","lastModifiedDate":"2024-03-05"},{"lineNumber":347,"author":{"gitId":"Jaspertzx"},"content":"| `* *` | Small business owner | have customizable templates for invoices and receipts | easily generate and send professional-looking documents to my customers. |","lastModifiedDate":"2024-03-05"},{"lineNumber":348,"author":{"gitId":"Jaspertzx"},"content":"| `* *` | Crocheter offering custom orders | have a notes section for each customer | record specific preferences and requirements for their projects. |","lastModifiedDate":"2024-03-05"},{"lineNumber":349,"author":{"gitId":"Jaspertzx"},"content":"| `* *` | Small business owner | integrate with accounting software | easily track expenses related to each customer and maintain accurate financial records. |","lastModifiedDate":"2024-03-05"},{"lineNumber":350,"author":{"gitId":"Jaspertzx"},"content":"| `*` | Crocheter | have a mobile-friendly interface | easily access customer information on the go and process orders efficiently. |","lastModifiedDate":"2024-03-05"},{"lineNumber":351,"author":{"gitId":"Jaspertzx"},"content":"| `*` | Crocheter | integrate with my email client | send personalized messages and promotions to my customers directly from the platform. |","lastModifiedDate":"2024-03-05"},{"lineNumber":352,"author":{"gitId":"Jaspertzx"},"content":"| `*` | Crocheter | integrate with e-commerce platforms | automatically sync customer data and manage orders efficiently when participating in online marketplaces. |","lastModifiedDate":"2024-03-05"},{"lineNumber":353,"author":{"gitId":"Jaspertzx"},"content":"| `*` | Crochet business owner | track communication history with customers | provide personalized and timely customer service including emails and phone calls. |","lastModifiedDate":"2024-03-05"},{"lineNumber":354,"author":{"gitId":"Jaspertzx"},"content":"| `*` | Crochet business owner | support multiple user accounts with shared access | my team members can collaborate on managing customer relationships. |","lastModifiedDate":"2024-03-05"},{"lineNumber":355,"author":{"gitId":"Jaspertzx"},"content":"| `*` | Crocheter | have a scheduling feature | manage registrations and communicate updates with attendees seamlessly. |","lastModifiedDate":"2024-03-05"},{"lineNumber":356,"author":{"gitId":"Jaspertzx"},"content":"| `*` | Crocheter | have a feature for scanning and capturing customer contact information | grow my mailing list and follow up with potential leads quickly. |","lastModifiedDate":"2024-03-05"},{"lineNumber":357,"author":{"gitId":"Jaspertzx"},"content":"| `*` | Crocheter | integrate with social media platforms | easily connect with customers and engage with them through various channels. |","lastModifiedDate":"2024-03-05"},{"lineNumber":358,"author":{"gitId":"Jaspertzx"},"content":"| `*` | Crochet business owner | provide insights into customer demographics and preferences | tailor my product offerings and marketing campaigns to target specific audiences effectively. |","lastModifiedDate":"2024-03-05"},{"lineNumber":359,"author":{"gitId":"Jaspertzx"},"content":"| `*` | Small business owner | provide analytics and insights on customer behavior | continuously improve my products and services to meet customer needs based on purchase patterns and feedback. |","lastModifiedDate":"2024-03-05"},{"lineNumber":360,"author":{"gitId":"Jaspertzx"},"content":"| `*` | Crochet business owner | provide insights into customer satisfaction through feedback and reviews | address any concerns and improve the overall customer experience. |","lastModifiedDate":"2024-03-05"},{"lineNumber":361,"author":{"gitId":"Jaspertzx"},"content":"| `*` | Small business owner | offer customizable tags or labels for customers | segment my audience and target specific groups with tailored marketing campaigns. |","lastModifiedDate":"2024-03-05"},{"lineNumber":362,"author":{"gitId":"Jaspertzx"},"content":"| `*` | Busy entrepreneur | have a good out of the box experience | immediately use the application without needing to configure it for my own needs. |","lastModifiedDate":"2024-03-05"},{"lineNumber":363,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":364,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":365,"author":{"gitId":"-"},"content":"### Use cases","lastModifiedDate":"2020-06-07"},{"lineNumber":366,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":367,"author":{"gitId":"rertyy"},"content":"(For all use cases below, the **System** is the `AddressBook` and the **Actor** is the `user`, unless specified","lastModifiedDate":"2024-03-02"},{"lineNumber":368,"author":{"gitId":"rertyy"},"content":"otherwise)","lastModifiedDate":"2024-03-02"},{"lineNumber":369,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":370,"author":{"gitId":"-"},"content":"**Use case: Delete a person**","lastModifiedDate":"2020-05-23"},{"lineNumber":371,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":372,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2020-05-23"},{"lineNumber":373,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":374,"author":{"gitId":"rertyy"},"content":"1. User requests to list persons.","lastModifiedDate":"2024-03-07"},{"lineNumber":375,"author":{"gitId":"rertyy"},"content":"2. AddressBook shows a list of persons.","lastModifiedDate":"2024-03-07"},{"lineNumber":376,"author":{"gitId":"rertyy"},"content":"3. User requests to delete a specific person in the list.","lastModifiedDate":"2024-03-07"},{"lineNumber":377,"author":{"gitId":"rertyy"},"content":"4. AddressBook deletes the person.","lastModifiedDate":"2024-03-07"},{"lineNumber":378,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":379,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":380,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":381,"author":{"gitId":"-"},"content":"**Extensions**","lastModifiedDate":"2020-05-23"},{"lineNumber":382,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":383,"author":{"gitId":"-"},"content":"* 2a. The list is empty.","lastModifiedDate":"2020-05-23"},{"lineNumber":384,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":385,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":386,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":387,"author":{"gitId":"-"},"content":"* 3a. The given index is invalid.","lastModifiedDate":"2020-05-23"},{"lineNumber":388,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":389,"author":{"gitId":"-"},"content":" * 3a1. AddressBook shows an error message.","lastModifiedDate":"2020-05-23"},{"lineNumber":390,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":391,"author":{"gitId":"-"},"content":" Use case resumes at step 2.","lastModifiedDate":"2020-05-23"},{"lineNumber":392,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":393,"author":{"gitId":"rertyy"},"content":"**Use case: Add a person**","lastModifiedDate":"2024-03-02"},{"lineNumber":394,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":395,"author":{"gitId":"rertyy"},"content":"**MSS**","lastModifiedDate":"2024-03-02"},{"lineNumber":396,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":397,"author":{"gitId":"rertyy"},"content":"1. User requests to add a person.","lastModifiedDate":"2024-03-07"},{"lineNumber":398,"author":{"gitId":"rertyy"},"content":"2. AddressBook adds a person.","lastModifiedDate":"2024-03-07"},{"lineNumber":399,"author":{"gitId":"rertyy"},"content":"3. AddressBook shows the added person.","lastModifiedDate":"2024-03-07"},{"lineNumber":400,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":401,"author":{"gitId":"rertyy"},"content":" Use case ends.","lastModifiedDate":"2024-03-02"},{"lineNumber":402,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":403,"author":{"gitId":"rertyy"},"content":"**Extensions**","lastModifiedDate":"2024-03-02"},{"lineNumber":404,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":405,"author":{"gitId":"rertyy"},"content":"* 2a. The person already exists.","lastModifiedDate":"2024-03-02"},{"lineNumber":406,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":407,"author":{"gitId":"rertyy"},"content":" * 2a1. AddressBook shows an error message.","lastModifiedDate":"2024-03-02"},{"lineNumber":408,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":409,"author":{"gitId":"rertyy"},"content":" Use case resumes at step 1.","lastModifiedDate":"2024-03-02"},{"lineNumber":410,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":411,"author":{"gitId":"rertyy"},"content":"* 2b. The person details are invalid.","lastModifiedDate":"2024-03-02"},{"lineNumber":412,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":413,"author":{"gitId":"rertyy"},"content":" * 2b1. AddressBook shows an error message.","lastModifiedDate":"2024-03-02"},{"lineNumber":414,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":415,"author":{"gitId":"rertyy"},"content":" Use case resumes at step 1.","lastModifiedDate":"2024-03-02"},{"lineNumber":416,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":417,"author":{"gitId":"rertyy"},"content":"**Use case: Edit a person**","lastModifiedDate":"2024-03-07"},{"lineNumber":418,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":419,"author":{"gitId":"rertyy"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":420,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":421,"author":{"gitId":"rertyy"},"content":"1. User requests to edit a person.","lastModifiedDate":"2024-03-07"},{"lineNumber":422,"author":{"gitId":"rertyy"},"content":"2. AddressBook shows the person to be edited.","lastModifiedDate":"2024-03-07"},{"lineNumber":423,"author":{"gitId":"rertyy"},"content":"3. User edits the person.","lastModifiedDate":"2024-03-07"},{"lineNumber":424,"author":{"gitId":"rertyy"},"content":"4. AddressBook shows the edited person.","lastModifiedDate":"2024-03-07"},{"lineNumber":425,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":426,"author":{"gitId":"rertyy"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":427,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":428,"author":{"gitId":"rertyy"},"content":"**Extensions**","lastModifiedDate":"2024-03-07"},{"lineNumber":429,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":430,"author":{"gitId":"rertyy"},"content":"* 2a. The person does not exist.","lastModifiedDate":"2024-03-07"},{"lineNumber":431,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":432,"author":{"gitId":"rertyy"},"content":" * 2a1. AddressBook shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":433,"author":{"gitId":"rertyy"},"content":" * 2a2. AddressBook shows a list of persons with similar names.","lastModifiedDate":"2024-03-07"},{"lineNumber":434,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":435,"author":{"gitId":"rertyy"},"content":" Use case resumes at step 1.","lastModifiedDate":"2024-03-07"},{"lineNumber":436,"author":{"gitId":"rertyy"},"content":"* 3a. The person details are invalid.","lastModifiedDate":"2024-03-07"},{"lineNumber":437,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":438,"author":{"gitId":"rertyy"},"content":" * 3a1. AddressBook shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":439,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":440,"author":{"gitId":"rertyy"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-03-07"},{"lineNumber":441,"author":{"gitId":"rertyy"},"content":"* 3b. The person details are unchanged.","lastModifiedDate":"2024-03-07"},{"lineNumber":442,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":443,"author":{"gitId":"rertyy"},"content":" * 3b1. AddressBook shows a message indicating no changes are made.","lastModifiedDate":"2024-03-07"},{"lineNumber":444,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":445,"author":{"gitId":"rertyy"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-03-07"},{"lineNumber":446,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":447,"author":{"gitId":"rertyy"},"content":"**Use case: Find a person**","lastModifiedDate":"2024-03-02"},{"lineNumber":448,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":449,"author":{"gitId":"rertyy"},"content":"**MSS**","lastModifiedDate":"2024-03-02"},{"lineNumber":450,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":451,"author":{"gitId":"rertyy"},"content":"1. User requests to find a person by name.","lastModifiedDate":"2024-03-07"},{"lineNumber":452,"author":{"gitId":"rertyy"},"content":"2. AddressBook shows a list of persons whose names contain the given keyword.","lastModifiedDate":"2024-03-07"},{"lineNumber":453,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":454,"author":{"gitId":"rertyy"},"content":" Use case ends.","lastModifiedDate":"2024-03-02"},{"lineNumber":455,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":456,"author":{"gitId":"rertyy"},"content":"**Extensions**","lastModifiedDate":"2024-03-02"},{"lineNumber":457,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":458,"author":{"gitId":"rertyy"},"content":"* 2a. No person is found.","lastModifiedDate":"2024-03-02"},{"lineNumber":459,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":460,"author":{"gitId":"rertyy"},"content":" * 2a1. AddressBook shows a message indicating no person is found.","lastModifiedDate":"2024-03-02"},{"lineNumber":461,"author":{"gitId":"rertyy"},"content":" * 2a2. AddressBook shows the list of persons with similar names.","lastModifiedDate":"2024-03-07"},{"lineNumber":462,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":463,"author":{"gitId":"rertyy"},"content":" Use case ends.","lastModifiedDate":"2024-03-02"},{"lineNumber":464,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":465,"author":{"gitId":"rertyy"},"content":"**Use case: Filter categories**","lastModifiedDate":"2024-03-02"},{"lineNumber":466,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":467,"author":{"gitId":"rertyy"},"content":"**MSS**","lastModifiedDate":"2024-03-02"},{"lineNumber":468,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":469,"author":{"gitId":"rertyy"},"content":"1. User requests to filter categories.","lastModifiedDate":"2024-03-07"},{"lineNumber":470,"author":{"gitId":"rertyy"},"content":"2. AddressBook shows a list of persons with the given category.","lastModifiedDate":"2024-03-07"},{"lineNumber":471,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":472,"author":{"gitId":"rertyy"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":473,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":474,"author":{"gitId":"rertyy"},"content":"**Use case: Sort by order**","lastModifiedDate":"2024-03-07"},{"lineNumber":475,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":476,"author":{"gitId":"rertyy"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":477,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":478,"author":{"gitId":"rertyy"},"content":"1. User requests to sort by order.","lastModifiedDate":"2024-03-07"},{"lineNumber":479,"author":{"gitId":"rertyy"},"content":"2. AddressBook shows a list of persons sorted by the given order.","lastModifiedDate":"2024-03-07"},{"lineNumber":480,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":481,"author":{"gitId":"rertyy"},"content":" Use case ends.","lastModifiedDate":"2024-03-02"},{"lineNumber":482,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":483,"author":{"gitId":"rertyy"},"content":"**Use case: Show help**","lastModifiedDate":"2024-03-02"},{"lineNumber":484,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":485,"author":{"gitId":"rertyy"},"content":"**MSS**","lastModifiedDate":"2024-03-02"},{"lineNumber":486,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":487,"author":{"gitId":"rertyy"},"content":"1. User requests to show help.","lastModifiedDate":"2024-03-07"},{"lineNumber":488,"author":{"gitId":"rertyy"},"content":"2. AddressBook shows a help page.","lastModifiedDate":"2024-03-07"},{"lineNumber":489,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":490,"author":{"gitId":"rertyy"},"content":" Use case ends.","lastModifiedDate":"2024-03-02"},{"lineNumber":491,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":492,"author":{"gitId":"rertyy"},"content":"**Use case: Clear all entries**","lastModifiedDate":"2024-03-02"},{"lineNumber":493,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":494,"author":{"gitId":"rertyy"},"content":"**MSS**","lastModifiedDate":"2024-03-02"},{"lineNumber":495,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":496,"author":{"gitId":"rertyy"},"content":"1. User requests to clear all entries.","lastModifiedDate":"2024-03-07"},{"lineNumber":497,"author":{"gitId":"rertyy"},"content":"2. AddressBook clears all entries.","lastModifiedDate":"2024-03-07"},{"lineNumber":498,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":499,"author":{"gitId":"rertyy"},"content":" Use case ends.","lastModifiedDate":"2024-03-02"},{"lineNumber":500,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":501,"author":{"gitId":"rertyy"},"content":"**Use case: Exit the program**","lastModifiedDate":"2024-03-02"},{"lineNumber":502,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":503,"author":{"gitId":"rertyy"},"content":"**MSS**","lastModifiedDate":"2024-03-02"},{"lineNumber":504,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":505,"author":{"gitId":"rertyy"},"content":"1. User requests to exit the program.","lastModifiedDate":"2024-03-07"},{"lineNumber":506,"author":{"gitId":"rertyy"},"content":"2. AddressBook exits.","lastModifiedDate":"2024-03-07"},{"lineNumber":507,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":508,"author":{"gitId":"rertyy"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":509,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":510,"author":{"gitId":"rertyy"},"content":"**Use case: Import data**","lastModifiedDate":"2024-03-07"},{"lineNumber":511,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":512,"author":{"gitId":"rertyy"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":513,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":514,"author":{"gitId":"rertyy"},"content":"1. User requests to view locally saved data.","lastModifiedDate":"2024-03-07"},{"lineNumber":515,"author":{"gitId":"rertyy"},"content":"2. AddressBook opens location of saved data.","lastModifiedDate":"2024-03-07"},{"lineNumber":516,"author":{"gitId":"rertyy"},"content":"3. User stores new data to local file.","lastModifiedDate":"2024-03-07"},{"lineNumber":517,"author":{"gitId":"rertyy"},"content":"4. AddressBook imports data from file.","lastModifiedDate":"2024-03-07"},{"lineNumber":518,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":519,"author":{"gitId":"rertyy"},"content":" Use case ends.","lastModifiedDate":"2024-03-02"},{"lineNumber":520,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":521,"author":{"gitId":"rertyy"},"content":"**Extensions**","lastModifiedDate":"2024-03-07"},{"lineNumber":522,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":523,"author":{"gitId":"rertyy"},"content":"* 4a. The data is invalid.","lastModifiedDate":"2024-03-07"},{"lineNumber":524,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":525,"author":{"gitId":"rertyy"},"content":" * 4a1. AddressBook shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":526,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":527,"author":{"gitId":"rertyy"},"content":" Use case resumes at step 1.","lastModifiedDate":"2024-03-07"},{"lineNumber":528,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":529,"author":{"gitId":"rertyy"},"content":"**Use case: Export data**","lastModifiedDate":"2024-03-02"},{"lineNumber":530,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":531,"author":{"gitId":"rertyy"},"content":"**MSS**","lastModifiedDate":"2024-03-02"},{"lineNumber":532,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":533,"author":{"gitId":"rertyy"},"content":"1. User requests to export data.","lastModifiedDate":"2024-03-07"},{"lineNumber":534,"author":{"gitId":"rertyy"},"content":"2. AddressBook opens locally saved file.","lastModifiedDate":"2024-03-07"},{"lineNumber":535,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":536,"author":{"gitId":"rertyy"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":537,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":538,"author":{"gitId":"rertyy"},"content":"**Use case: Add order**","lastModifiedDate":"2024-03-07"},{"lineNumber":539,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":540,"author":{"gitId":"rertyy"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":541,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":542,"author":{"gitId":"rertyy"},"content":"1. User requests to add an order.","lastModifiedDate":"2024-03-07"},{"lineNumber":543,"author":{"gitId":"rertyy"},"content":"2. AddressBook adds an order.","lastModifiedDate":"2024-03-07"},{"lineNumber":544,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":545,"author":{"gitId":"rertyy"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":546,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":547,"author":{"gitId":"rertyy"},"content":"**Extensions**","lastModifiedDate":"2024-03-07"},{"lineNumber":548,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":549,"author":{"gitId":"rertyy"},"content":"* 2a. The order already exists.","lastModifiedDate":"2024-03-07"},{"lineNumber":550,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":551,"author":{"gitId":"rertyy"},"content":" * 2a1. AddressBook shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":552,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":553,"author":{"gitId":"rertyy"},"content":" Use case resumes at step 1.","lastModifiedDate":"2024-03-07"},{"lineNumber":554,"author":{"gitId":"rertyy"},"content":"* 2b. The order details are invalid.","lastModifiedDate":"2024-03-07"},{"lineNumber":555,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":556,"author":{"gitId":"rertyy"},"content":" * 2b1. AddressBook shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":557,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":558,"author":{"gitId":"rertyy"},"content":" Use case resumes at step 1.","lastModifiedDate":"2024-03-07"},{"lineNumber":559,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":560,"author":{"gitId":"rertyy"},"content":"**Use case: Edit order**","lastModifiedDate":"2024-03-07"},{"lineNumber":561,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":562,"author":{"gitId":"rertyy"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":563,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":564,"author":{"gitId":"rertyy"},"content":"1. User requests to edit an order.","lastModifiedDate":"2024-03-07"},{"lineNumber":565,"author":{"gitId":"rertyy"},"content":"2. AddressBook shows the order to be edited.","lastModifiedDate":"2024-03-07"},{"lineNumber":566,"author":{"gitId":"rertyy"},"content":"3. User edits the order.","lastModifiedDate":"2024-03-07"},{"lineNumber":567,"author":{"gitId":"rertyy"},"content":"4. AddressBook shows the edited order.","lastModifiedDate":"2024-03-07"},{"lineNumber":568,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":569,"author":{"gitId":"rertyy"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":570,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":571,"author":{"gitId":"rertyy"},"content":"**Extensions**","lastModifiedDate":"2024-03-07"},{"lineNumber":572,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":573,"author":{"gitId":"rertyy"},"content":"* 2a. The order does not exist.","lastModifiedDate":"2024-03-07"},{"lineNumber":574,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":575,"author":{"gitId":"rertyy"},"content":" * 2a1. AddressBook shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":576,"author":{"gitId":"rertyy"},"content":" * 2a2. AddressBook shows a list of orders with similar names.","lastModifiedDate":"2024-03-07"},{"lineNumber":577,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":578,"author":{"gitId":"rertyy"},"content":" Use case resumes at step 1.","lastModifiedDate":"2024-03-07"},{"lineNumber":579,"author":{"gitId":"rertyy"},"content":"* 3a. The order details are invalid.","lastModifiedDate":"2024-03-07"},{"lineNumber":580,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":581,"author":{"gitId":"rertyy"},"content":" * 3a1. AddressBook shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":582,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":583,"author":{"gitId":"rertyy"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-03-07"},{"lineNumber":584,"author":{"gitId":"rertyy"},"content":"* 3b. The order details are unchanged.","lastModifiedDate":"2024-03-07"},{"lineNumber":585,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":586,"author":{"gitId":"rertyy"},"content":" * 3b1. AddressBook shows a message indicating no changes are made.","lastModifiedDate":"2024-03-07"},{"lineNumber":587,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":588,"author":{"gitId":"rertyy"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-03-07"},{"lineNumber":589,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":590,"author":{"gitId":"rertyy"},"content":"**Use case: Delete order**","lastModifiedDate":"2024-03-07"},{"lineNumber":591,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":592,"author":{"gitId":"rertyy"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":593,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":594,"author":{"gitId":"rertyy"},"content":"1. User requests to delete an order.","lastModifiedDate":"2024-03-07"},{"lineNumber":595,"author":{"gitId":"rertyy"},"content":"2. AddressBook deletes the order.","lastModifiedDate":"2024-03-07"},{"lineNumber":596,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":597,"author":{"gitId":"rertyy"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":598,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":599,"author":{"gitId":"rertyy"},"content":"**Extensions**","lastModifiedDate":"2024-03-07"},{"lineNumber":600,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":601,"author":{"gitId":"rertyy"},"content":"* 2a. The order does not exist.","lastModifiedDate":"2024-03-07"},{"lineNumber":602,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":603,"author":{"gitId":"rertyy"},"content":" * 2a1. AddressBook shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":604,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":605,"author":{"gitId":"rertyy"},"content":" Use case resumes at step 1.","lastModifiedDate":"2024-03-07"},{"lineNumber":606,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":607,"author":{"gitId":"rertyy"},"content":"**Use case: Prioritize order**","lastModifiedDate":"2024-03-07"},{"lineNumber":608,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":609,"author":{"gitId":"rertyy"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":610,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":611,"author":{"gitId":"rertyy"},"content":"1. User requests to prioritize an order.","lastModifiedDate":"2024-03-07"},{"lineNumber":612,"author":{"gitId":"rertyy"},"content":"2. AddressBook shows the prioritized order.","lastModifiedDate":"2024-03-07"},{"lineNumber":613,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":614,"author":{"gitId":"rertyy"},"content":" Use case ends.","lastModifiedDate":"2024-03-02"},{"lineNumber":615,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":616,"author":{"gitId":"rertyy"},"content":"**Extensions**","lastModifiedDate":"2024-03-02"},{"lineNumber":617,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":618,"author":{"gitId":"rertyy"},"content":"* 2a. The order does not exist.","lastModifiedDate":"2024-03-07"},{"lineNumber":619,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":620,"author":{"gitId":"rertyy"},"content":" * 2a1. AddressBook shows an error message.","lastModifiedDate":"2024-03-02"},{"lineNumber":621,"author":{"gitId":"rertyy"},"content":"","lastModifiedDate":"2024-03-02"},{"lineNumber":622,"author":{"gitId":"rertyy"},"content":" Use case resumes at step 1.","lastModifiedDate":"2024-03-02"},{"lineNumber":623,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":624,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":625,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":626,"author":{"gitId":"-"},"content":"1. Should work on any _mainstream OS_ as long as it has Java `11` or above installed.","lastModifiedDate":"2020-05-23"},{"lineNumber":627,"author":{"gitId":"-"},"content":"2. Should be able to hold up to 1000 persons without a noticeable sluggishness in performance for typical usage.","lastModifiedDate":"2020-05-23"},{"lineNumber":628,"author":{"gitId":"-"},"content":"3. A user with above average typing speed for regular English text (i.e. not code, not system admin commands) should be able to accomplish most of the tasks faster using commands than using the mouse.","lastModifiedDate":"2020-05-23"},{"lineNumber":629,"author":{"gitId":"shavonneg"},"content":"4. Should provide clear and informative error messages to users in case of unexpected errors. Additionally, detailed logs should be maintained for system administrators to troubleshoot issues effectively.","lastModifiedDate":"2024-03-05"},{"lineNumber":630,"author":{"gitId":"shavonneg"},"content":"5. Application architecture should be scalable to accommodate future growth in terms of users and data volume, without compromising performance.","lastModifiedDate":"2024-03-05"},{"lineNumber":631,"author":{"gitId":"shavonneg"},"content":"6. Automated backups of critical data should be performed, and there should be a documented and tested procedure for data recovery in case of system failures or data loss.","lastModifiedDate":"2024-03-05"},{"lineNumber":632,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":633,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":634,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":635,"author":{"gitId":"-"},"content":"* **Mainstream OS**: Windows, Linux, Unix, MacOS","lastModifiedDate":"2024-02-09"},{"lineNumber":636,"author":{"gitId":"-"},"content":"* **Private contact detail**: A contact detail that is not meant to be shared with others","lastModifiedDate":"2020-05-23"},{"lineNumber":637,"author":{"gitId":"shavonneg"},"content":"* **Application architecture**: Describes the patterns and techniques used to design and build an application","lastModifiedDate":"2024-03-05"},{"lineNumber":638,"author":{"gitId":"shavonneg"},"content":"* **System administrators**: Professionals responsible for managing, configuring, and ensuring the proper operation of computer systems and servers","lastModifiedDate":"2024-03-05"},{"lineNumber":639,"author":{"gitId":"shavonneg"},"content":"* **Detailed logs**: Records that track events, operations, errors, and other significant activities that occur within a software system or application.","lastModifiedDate":"2024-03-05"},{"lineNumber":640,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":641,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":642,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":643,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":644,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":645,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":646,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":647,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-info\"\u003e:information_source: **Note:** These instructions only provide a starting point for testers to work on;","lastModifiedDate":"2020-05-23"},{"lineNumber":648,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":649,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":650,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":651,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":652,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":653,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":654,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":655,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":656,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":657,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":658,"author":{"gitId":"rertyy"},"content":" 1. Double-click the jar file Expected: Shows the GUI with a set of sample contacts. The window size may not be","lastModifiedDate":"2024-03-02"},{"lineNumber":659,"author":{"gitId":"rertyy"},"content":" optimum.","lastModifiedDate":"2024-03-02"},{"lineNumber":660,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":661,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":662,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":663,"author":{"gitId":"-"},"content":" 1. Resize the window to an optimum size. Move the window to a different location. Close the window.","lastModifiedDate":"2020-05-23"},{"lineNumber":664,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":665,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":666,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","lastModifiedDate":"2020-05-23"},{"lineNumber":667,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":668,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":669,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":670,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":671,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":672,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":673,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":674,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":675,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":676,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":677,"author":{"gitId":"rertyy"},"content":" Expected: First contact is deleted from the list. Details of the deleted contact shown in the status message.","lastModifiedDate":"2024-03-02"},{"lineNumber":678,"author":{"gitId":"rertyy"},"content":" Timestamp in the status bar is updated.","lastModifiedDate":"2024-03-02"},{"lineNumber":679,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":680,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":681,"author":{"gitId":"-"},"content":" Expected: No person is deleted. Error details shown in the status message. Status bar remains the same.","lastModifiedDate":"2020-05-23"},{"lineNumber":682,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":683,"author":{"gitId":"-"},"content":" 1. Other incorrect delete commands to try: `delete`, `delete x`, `...` (where x is larger than the list size)\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":684,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":685,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":686,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":687,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":688,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":689,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":690,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":691,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":692,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":693,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":694,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"shavonneg":6,"rertyy":336,"Jaspertzx":27,"-":325}}] diff --git a/AY2324S2-CS2103T-T09-2_tp_master/commits.json b/AY2324S2-CS2103T-T09-2_tp_master/commits.json index 93d306c4..c9fc9b8f 100644 --- a/AY2324S2-CS2103T-T09-2_tp_master/commits.json +++ b/AY2324S2-CS2103T-T09-2_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"kailinteoo":[{"date":"2024-03-06","commitResults":[{"hash":"a744f151cd8a507f50a1383abe87b7df1385297e","isMergeCommit":false,"messageTitle":"Update AboutUs and README pages, add UI mockup and build status badge","messageBody":"AboutUs Page:\n- Updated team member details and roles\n- Added profile photos for each member\n- Followed specified format for photo filenames\n\nREADME Page:\n- Updated project details and content to match project\n- Added UI mockup image as docs/images/Ui.png\n\nBuild Status Badge:\n- Updated GitHub Actions build status badge link to reflect team repo\u0027s build status\n\nAcknowledgement:\n- Acknowledged original source of code\n\nThis commit reflects updates made to various pages in the project repository to match our project details and specifications.\n","fileTypesAndContributionMap":{"docs":{"insertions":299,"deletions":51}}},{"hash":"abe2e20ffcfe3f81accf49fd79952588492bda9c","isMergeCommit":false,"messageTitle":"Update README with project details","messageBody":"This commit reflects changes made to the README\nto update project details and information.\nThe README now accurately reflects our project and\nits specifications.\n","fileTypesAndContributionMap":{"docs":{"insertions":20,"deletions":20}}},{"hash":"fb026213c29c5b2af1b3f556987bc19caa3747c0","isMergeCommit":true,"messageTitle":"Merge pull request #34 from Jaspertzx/master","messageBody":"Update User Stories","fileTypesAndContributionMap":{}},{"hash":"8437a8090717b851aeabf17070fefa95c15e07ab","isMergeCommit":false,"messageTitle":"Edit AboutUs.md to fix src image name","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2024-03-07","commitResults":[{"hash":"f50ba2526224ae911f7dfa106770112f3b4bf9b0","isMergeCommit":false,"messageTitle":"Edit AboutUs.md and docs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":2}}},{"hash":"aba87293ce836ef1d1b948649856252c0bf58bc9","isMergeCommit":false,"messageTitle":"Edit AboutUs.md and Docs for img","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"9718e9c917dbd6b7ce7a4b6ac6b7a1bc6bc8cb0a","isMergeCommit":true,"messageTitle":"Merge pull request #39 from shavonneg/update-developer-guide","messageBody":"Update DeveloperGuide.md","fileTypesAndContributionMap":{}},{"hash":"ca44e9112929688b8a84728570666efdb5a6f5de","isMergeCommit":true,"messageTitle":"Merge pull request #43 from Jaspertzx/add-User-Story","messageBody":"Update DeveloperGuide","fileTypesAndContributionMap":{}}]}],"shavonneg":[{"date":"2024-03-05","commitResults":[{"hash":"6e3d411176696a3a0eda9c4a150912ce44958fc0","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":2}}}]}],"rertyy":[{"date":"2024-03-02","commitResults":[{"hash":"7f84ac622f18004b140984fa1771492c72d3d1d6","isMergeCommit":false,"messageTitle":"Add use cases for base entries and export","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":227,"deletions":73}}}]},{"date":"2024-03-06","commitResults":[{"hash":"cfbcd5756f0b6da60db0dc6d821a4866b53e3a3c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into add-use-cases-to-dg","messageBody":"# Conflicts:\n#\tdocs/DeveloperGuide.md\n","fileTypesAndContributionMap":{}}]},{"date":"2024-03-07","commitResults":[{"hash":"b944847798b8c94092a99e26958b3327ef5bb88f","isMergeCommit":false,"messageTitle":"Add remaining use cases for new features","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":185,"deletions":51}}}]}],"Jaspertzx":[{"date":"2024-03-05","commitResults":[{"hash":"8756614a0c823f135b58cce0c52e4973404ef1d2","isMergeCommit":false,"messageTitle":"Update User Stories","messageBody":"The user stories does not align with our overall\nobjective of creating a mini-CRM system.\n\nThis may make the overall project very confusing\nif other developers were to see the developer\nguide and not see the updated user stories.\n\nUpdate the user stories to match what my group\nis trying to attain.\n\nThis will be more accurate to what we would like\nto achieve the next few weeks, and also to meet\nthe requirements of this module.\n\nNo other reference.\n","fileTypesAndContributionMap":{"docs":{"insertions":28,"deletions":8}}}]},{"date":"2024-03-06","commitResults":[{"hash":"63d17a7aafc0ec241a136fdda3d6821a45985120","isMergeCommit":true,"messageTitle":"Merge pull request #1","messageBody":"Update User Stories","fileTypesAndContributionMap":{}},{"hash":"1c8ad53b94ee17d57487e8d421ba4eb8acc86d77","isMergeCommit":true,"messageTitle":"Merge pull request #32 from kailinteoo/website-adapted","messageBody":"Update AboutUs and README pages","fileTypesAndContributionMap":{}},{"hash":"e942a25746e0bc8e4d58a683fd7ada68e4a2ee68","isMergeCommit":true,"messageTitle":"Merge pull request #38 from kailinteoo/website-adapted","messageBody":"Edit AboutUs.md to fix src image name","fileTypesAndContributionMap":{}}]},{"date":"2024-03-07","commitResults":[{"hash":"29330376b0c04158a86a5581e52934eca30d502c","isMergeCommit":true,"messageTitle":"Merge pull request #40 from kailinteoo/website-adapted","messageBody":"Website adapted","fileTypesAndContributionMap":{}},{"hash":"7dc666abc2df1777c63757cde229aa43a779d8d3","isMergeCommit":false,"messageTitle":"Update DeveloperGuide","messageBody":"Fix the wrong tabs on the bottom of the user stories.\n","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":2}}},{"hash":"9f75204cf745ab8543ee75a65fd127382016191c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into add-use-cases-to-dg","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"bc8bae5d0307567fae49d476e36b16877e1b403a","isMergeCommit":true,"messageTitle":"Merge pull request #30 from rertyy/add-use-cases-to-dg","messageBody":"Add use cases","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"kailinteoo":{"docs":298,"functional-code":0,"test-code":0},"shavonneg":{"docs":6,"functional-code":0,"test-code":0},"rertyy":{"docs":336,"functional-code":0,"test-code":0},"Jaspertzx":{"docs":27,"functional-code":0,"test-code":0}},"authorContributionVariance":{"kailinteoo":10173.658,"shavonneg":4.244898,"rertyy":8941.062,"Jaspertzx":85.48979},"authorDisplayNameMap":{"kailinteoo":"CS2103T-T09-2 KAIL.. TEO","shavonneg":"CS2103T-T09-2 GOH ..ONNE","rertyy":"CS2103T-T09-2 TUNG.. IAN","Jaspertzx":"CS2103T-T09-2 JASP..IANG"}} +{"authorDailyContributionsMap":{"kailinteoo":[{"date":"2024-03-06","commitResults":[{"hash":"a744f151cd8a507f50a1383abe87b7df1385297e","isMergeCommit":false,"messageTitle":"Update AboutUs and README pages, add UI mockup and build status badge","messageBody":"AboutUs Page:\n- Updated team member details and roles\n- Added profile photos for each member\n- Followed specified format for photo filenames\n\nREADME Page:\n- Updated project details and content to match project\n- Added UI mockup image as docs/images/Ui.png\n\nBuild Status Badge:\n- Updated GitHub Actions build status badge link to reflect team repo\u0027s build status\n\nAcknowledgement:\n- Acknowledged original source of code\n\nThis commit reflects updates made to various pages in the project repository to match our project details and specifications.\n","fileTypesAndContributionMap":{"docs":{"insertions":299,"deletions":51}}},{"hash":"abe2e20ffcfe3f81accf49fd79952588492bda9c","isMergeCommit":false,"messageTitle":"Update README with project details","messageBody":"This commit reflects changes made to the README\nto update project details and information.\nThe README now accurately reflects our project and\nits specifications.\n","fileTypesAndContributionMap":{"docs":{"insertions":20,"deletions":20}}},{"hash":"fb026213c29c5b2af1b3f556987bc19caa3747c0","isMergeCommit":true,"messageTitle":"Merge pull request #34 from Jaspertzx/master","messageBody":"Update User Stories","fileTypesAndContributionMap":{}},{"hash":"8437a8090717b851aeabf17070fefa95c15e07ab","isMergeCommit":false,"messageTitle":"Edit AboutUs.md to fix src image name","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2024-03-07","commitResults":[{"hash":"f50ba2526224ae911f7dfa106770112f3b4bf9b0","isMergeCommit":false,"messageTitle":"Edit AboutUs.md and docs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":2}}},{"hash":"aba87293ce836ef1d1b948649856252c0bf58bc9","isMergeCommit":false,"messageTitle":"Edit AboutUs.md and Docs for img","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"9718e9c917dbd6b7ce7a4b6ac6b7a1bc6bc8cb0a","isMergeCommit":true,"messageTitle":"Merge pull request #39 from shavonneg/update-developer-guide","messageBody":"Update DeveloperGuide.md","fileTypesAndContributionMap":{}},{"hash":"ca44e9112929688b8a84728570666efdb5a6f5de","isMergeCommit":true,"messageTitle":"Merge pull request #43 from Jaspertzx/add-User-Story","messageBody":"Update DeveloperGuide","fileTypesAndContributionMap":{}}]}],"shavonneg":[{"date":"2024-03-05","commitResults":[{"hash":"6e3d411176696a3a0eda9c4a150912ce44958fc0","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":2}}}]}],"rertyy":[{"date":"2024-03-02","commitResults":[{"hash":"7f84ac622f18004b140984fa1771492c72d3d1d6","isMergeCommit":false,"messageTitle":"Add use cases for base entries and export","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":227,"deletions":73}}}]},{"date":"2024-03-06","commitResults":[{"hash":"cfbcd5756f0b6da60db0dc6d821a4866b53e3a3c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into add-use-cases-to-dg","messageBody":"# Conflicts:\n#\tdocs/DeveloperGuide.md\n","fileTypesAndContributionMap":{}}]},{"date":"2024-03-07","commitResults":[{"hash":"b944847798b8c94092a99e26958b3327ef5bb88f","isMergeCommit":false,"messageTitle":"Add remaining use cases for new features","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":185,"deletions":51}}},{"hash":"c4f2d2bc199eab99289d62934b01da79d549d9d2","isMergeCommit":false,"messageTitle":"Add pre-commit hook","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":45,"deletions":0}}}]}],"Jaspertzx":[{"date":"2024-03-05","commitResults":[{"hash":"8756614a0c823f135b58cce0c52e4973404ef1d2","isMergeCommit":false,"messageTitle":"Update User Stories","messageBody":"The user stories does not align with our overall\nobjective of creating a mini-CRM system.\n\nThis may make the overall project very confusing\nif other developers were to see the developer\nguide and not see the updated user stories.\n\nUpdate the user stories to match what my group\nis trying to attain.\n\nThis will be more accurate to what we would like\nto achieve the next few weeks, and also to meet\nthe requirements of this module.\n\nNo other reference.\n","fileTypesAndContributionMap":{"docs":{"insertions":28,"deletions":8}}}]},{"date":"2024-03-06","commitResults":[{"hash":"63d17a7aafc0ec241a136fdda3d6821a45985120","isMergeCommit":true,"messageTitle":"Merge pull request #1","messageBody":"Update User Stories","fileTypesAndContributionMap":{}},{"hash":"1c8ad53b94ee17d57487e8d421ba4eb8acc86d77","isMergeCommit":true,"messageTitle":"Merge pull request #32 from kailinteoo/website-adapted","messageBody":"Update AboutUs and README pages","fileTypesAndContributionMap":{}},{"hash":"e942a25746e0bc8e4d58a683fd7ada68e4a2ee68","isMergeCommit":true,"messageTitle":"Merge pull request #38 from kailinteoo/website-adapted","messageBody":"Edit AboutUs.md to fix src image name","fileTypesAndContributionMap":{}}]},{"date":"2024-03-07","commitResults":[{"hash":"29330376b0c04158a86a5581e52934eca30d502c","isMergeCommit":true,"messageTitle":"Merge pull request #40 from kailinteoo/website-adapted","messageBody":"Website adapted","fileTypesAndContributionMap":{}},{"hash":"7dc666abc2df1777c63757cde229aa43a779d8d3","isMergeCommit":false,"messageTitle":"Update DeveloperGuide","messageBody":"Fix the wrong tabs on the bottom of the user stories.\n","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":2}}},{"hash":"9f75204cf745ab8543ee75a65fd127382016191c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into add-use-cases-to-dg","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"bc8bae5d0307567fae49d476e36b16877e1b403a","isMergeCommit":true,"messageTitle":"Merge pull request #30 from rertyy/add-use-cases-to-dg","messageBody":"Add use cases","fileTypesAndContributionMap":{}}]},{"date":"2024-03-08","commitResults":[{"hash":"d3de404326b4d81655a3dc9d2698519fb7fd3ac6","isMergeCommit":true,"messageTitle":"Merge pull request #42 from rertyy/add-precommit","messageBody":"Add pre-commit hook","fileTypesAndContributionMap":{}},{"hash":"b0ffda7ac662359202e55165dac221d3146b5ec9","isMergeCommit":true,"messageTitle":"Merge pull request #41 from rertyy/update-editorconfig","messageBody":"Remove unused filetypes for .editorconfig","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"kailinteoo":{"docs":298,"functional-code":0,"test-code":0},"shavonneg":{"docs":6,"functional-code":0,"test-code":0},"rertyy":{"docs":336,"functional-code":0,"test-code":0,"other":45},"Jaspertzx":{"docs":27,"functional-code":0,"test-code":0}},"authorContributionVariance":{"kailinteoo":9545.448,"shavonneg":3.982222,"rertyy":9763.796,"Jaspertzx":80.248886},"authorDisplayNameMap":{"kailinteoo":"CS2103T-T09-2 KAIL.. TEO","shavonneg":"CS2103T-T09-2 GOH ..ONNE","rertyy":"CS2103T-T09-2 TUNG.. IAN","Jaspertzx":"CS2103T-T09-2 JASP..IANG"}} diff --git a/AY2324S2-CS2103T-T14-1_tp_master/authorship.json b/AY2324S2-CS2103T-T14-1_tp_master/authorship.json index c7153abd..8a57de75 100644 --- a/AY2324S2-CS2103T-T14-1_tp_master/authorship.json +++ b/AY2324S2-CS2103T-T14-1_tp_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"yiwern5"},"content":"[![CI Status](https://github.com/se-edu/addressbook-level3/workflows/Java%20CI/badge.svg)](https://github.com/AY2324S2-CS2103T-T14-1/tp/actions)","lastModifiedDate":"2024-03-07"},{"lineNumber":2,"author":{"gitId":"yiwern5"},"content":"[![codecov](https://codecov.io/gh/AY2324S2-CS2103T-T09-4/tp/graph/badge.svg?token\u003dWAIOG42WJK)](https://codecov.io/gh/AY2324S2-CS2103T-T14-1/tp)","lastModifiedDate":"2024-03-07"},{"lineNumber":3,"author":{"gitId":"yiwern5"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":4,"author":{"gitId":"yiwern5"},"content":"# EffiTrack","lastModifiedDate":"2024-03-07"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"![Ui](docs/images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":7,"author":{"gitId":"yiwern5"},"content":"\u003e Boost productivity, streamline success! Welcome to EffiTrack – where efficiency meets innovation. Revolutionize your workday with seamless employee performance tracking.","lastModifiedDate":"2024-03-07"},{"lineNumber":8,"author":{"gitId":"yiwern5"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":9,"author":{"gitId":"yiwern5"},"content":"## Value Proposition","lastModifiedDate":"2024-03-07"},{"lineNumber":10,"author":{"gitId":"yiwern5"},"content":"HR departments often struggle to accurately measure employee efficiency, leading to reduced productivity. Traditional methods of tracking employee performance, such as manual documentation or outdated systems, are time-consuming and prone to errors. EffiTrack solves these challenges by providing a centralized platform to effortlessly monitor employee efficiency.","lastModifiedDate":"2024-03-07"},{"lineNumber":11,"author":{"gitId":"yiwern5"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":12,"author":{"gitId":"yiwern5"},"content":"## Features","lastModifiedDate":"2024-03-07"},{"lineNumber":13,"author":{"gitId":"yiwern5"},"content":"- [ ] Add employee information","lastModifiedDate":"2024-03-07"},{"lineNumber":14,"author":{"gitId":"yiwern5"},"content":"- [ ] List all employees information","lastModifiedDate":"2024-03-07"},{"lineNumber":15,"author":{"gitId":"yiwern5"},"content":"- [ ] Edit an existing employee information","lastModifiedDate":"2024-03-07"},{"lineNumber":16,"author":{"gitId":"yiwern5"},"content":"- [ ] Find employees whose names contain any of the given keywords","lastModifiedDate":"2024-03-07"},{"lineNumber":17,"author":{"gitId":"yiwern5"},"content":"- [ ] Delete a specific employee","lastModifiedDate":"2024-03-07"},{"lineNumber":18,"author":{"gitId":"yiwern5"},"content":"- [ ] Clear all entries","lastModifiedDate":"2024-03-07"},{"lineNumber":19,"author":{"gitId":"yiwern5"},"content":"- [ ] Assign task to an employee","lastModifiedDate":"2024-03-07"},{"lineNumber":20,"author":{"gitId":"yiwern5"},"content":"- [ ] Mark an assigned task as done","lastModifiedDate":"2024-03-07"},{"lineNumber":21,"author":{"gitId":"yiwern5"},"content":"- [ ] Edit deadline of assigned task","lastModifiedDate":"2024-03-07"},{"lineNumber":22,"author":{"gitId":"yiwern5"},"content":"- [ ] Change person in charge of the task","lastModifiedDate":"2024-03-07"},{"lineNumber":23,"author":{"gitId":"yiwern5"},"content":"- [ ] Sort employee based on efficiency","lastModifiedDate":"2024-03-07"},{"lineNumber":24,"author":{"gitId":"yiwern5"},"content":"- [ ] Display upcoming deadlines","lastModifiedDate":"2024-03-07"},{"lineNumber":25,"author":{"gitId":"yiwern5"},"content":"- [ ] Display fire list","lastModifiedDate":"2024-03-07"},{"lineNumber":26,"author":{"gitId":"yiwern5"},"content":"- [ ] Generate efficiency report","lastModifiedDate":"2024-03-07"},{"lineNumber":27,"author":{"gitId":"yiwern5"},"content":" ","lastModifiedDate":"2024-03-07"},{"lineNumber":28,"author":{"gitId":"yiwern5"},"content":"## Get Started","lastModifiedDate":"2024-03-07"},{"lineNumber":29,"author":{"gitId":"yiwern5"},"content":"1. Download EffiTrack here.","lastModifiedDate":"2024-03-07"},{"lineNumber":30,"author":{"gitId":"yiwern5"},"content":"2. Navigate to your Downloads folder using the terminal.","lastModifiedDate":"2024-03-07"},{"lineNumber":31,"author":{"gitId":"yiwern5"},"content":"3. Type `java -jar EffiTrack.jar` in your terminal.","lastModifiedDate":"2024-03-07"},{"lineNumber":32,"author":{"gitId":"yiwern5"},"content":"4. Press enter.","lastModifiedDate":"2024-03-07"},{"lineNumber":33,"author":{"gitId":"yiwern5"},"content":"5. Give it a try now!","lastModifiedDate":"2024-03-07"},{"lineNumber":34,"author":{"gitId":"yiwern5"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":35,"author":{"gitId":"yiwern5"},"content":"## Documentation","lastModifiedDate":"2024-03-07"},{"lineNumber":36,"author":{"gitId":"yiwern5"},"content":"For the detailed documentation of this project, see the **[EffiTrack Product Website](https://ay2324s2-cs2103t-t14-1.github.io/tp/)**.","lastModifiedDate":"2024-03-07"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"yiwern5"},"content":"## Acknowledgement","lastModifiedDate":"2024-03-07"},{"lineNumber":39,"author":{"gitId":"yiwern5"},"content":"This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org)","lastModifiedDate":"2024-03-07"}],"authorContributionMap":{"yiwern5":36,"-":3}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"About Us\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"# About Us","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"-"},"content":"We are a team based in the [School of Computing, National University of Singapore](http://www.comp.nus.edu.sg).","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":10,"author":{"gitId":"-"},"content":"## Project team","lastModifiedDate":"2020-06-07"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"howen02"},"content":"### Yap Ho Wen","lastModifiedDate":"2024-03-07"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":14,"author":{"gitId":"howen02"},"content":"\u003cimg src\u003d\"images/howen02.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-07"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"howen02"},"content":"[[github](https://github.com/howen02)]","lastModifiedDate":"2024-03-07"},{"lineNumber":17,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"howen02"},"content":"* Role: Team Lead","lastModifiedDate":"2024-03-07"},{"lineNumber":20,"author":{"gitId":"howen02"},"content":"* Responsibilities: Git expert, Code Quality","lastModifiedDate":"2024-03-07"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"howen02"},"content":"### Yeo Zi Yi","lastModifiedDate":"2024-03-07"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"ziyi22"},"content":"\u003cimg src\u003d\"images/ziyi22.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-07"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"ziyi22"},"content":"[[github](http://github.com/ziyi22)]","lastModifiedDate":"2024-03-07"},{"lineNumber":27,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":29,"author":{"gitId":"ziyi22"},"content":"* Role: Developer","lastModifiedDate":"2024-03-07"},{"lineNumber":30,"author":{"gitId":"ziyi22"},"content":"* Responsibilities: Code Quality, Deliverables and deadlines, UI","lastModifiedDate":"2024-03-07"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"yiwern5"},"content":"### Tsui Yi Wern","lastModifiedDate":"2024-03-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"yiwern5"},"content":"\u003cimg src\u003d\"images/yiwern5.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"yiwern5"},"content":"[[github](http://github.com/yiwern5)] [[portfolio](team/johndoe.md)]","lastModifiedDate":"2024-03-06"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"yiwern5"},"content":"* Responsibilities: Scheduling and tracking, Deliverables and deadlines, UI","lastModifiedDate":"2024-03-06"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":41,"author":{"gitId":"wolffe88"},"content":"### Yong Li An","lastModifiedDate":"2024-03-06"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"wolffe88"},"content":"\u003cimg src\u003d\"images/wolffe88.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-06"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"wolffe88"},"content":"[[github](http://github.com/wolffe88)]","lastModifiedDate":"2024-03-06"},{"lineNumber":46,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"wolffe88"},"content":"* Responsibilities: Task Management, Deliverables and deadlines, UI","lastModifiedDate":"2024-03-06"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"-"},"content":"### James Doe","lastModifiedDate":"2020-06-17"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/johndoe.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2020-06-17"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":"[[github](http://github.com/johndoe)]","lastModifiedDate":"2020-06-17"},{"lineNumber":56,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":58,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":59,"author":{"gitId":"-"},"content":"* Responsibilities: UI","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"ziyi22":4,"yiwern5":4,"howen02":6,"wolffe88":4,"-":41}},{"path":"docs/DeveloperGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"Developer Guide\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":" pageNav: 3","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"yiwern5"},"content":"# EffiTrack Developer Guide","lastModifiedDate":"2024-03-05"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c!-- * Table of Contents --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003cpage-nav-print /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":14,"author":{"gitId":"-"},"content":"## **Acknowledgements**","lastModifiedDate":"2021-07-30"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":16,"author":{"gitId":"yiwern5"},"content":"This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-03-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":18,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2021-07-30"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"-"},"content":"## **Setting up, getting started**","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"Refer to the guide [_Setting up and getting started_](SettingUp.md).","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"-"},"content":"## **Design**","lastModifiedDate":"2020-05-23"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":"### Architecture","lastModifiedDate":"2021-07-31"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ArchitectureDiagram.puml\" width\u003d\"280\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"-"},"content":"The ***Architecture Diagram*** given above explains the high-level design of the App.","lastModifiedDate":"2021-07-31"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"-"},"content":"Given below is a quick overview of main components and how they interact with each other.","lastModifiedDate":"2021-07-31"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":36,"author":{"gitId":"-"},"content":"**Main components of the architecture**","lastModifiedDate":"2021-07-31"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":"**`Main`** (consisting of classes [`Main`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/Main.java) and [`MainApp`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/MainApp.java)) is in charge of the app launch and shut down.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"-"},"content":"* At app launch, it initializes the other components in the correct sequence, and connects them up with each other.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"-"},"content":"* At shut down, it shuts down the other components and invokes cleanup methods where necessary.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":"The bulk of the app\u0027s work is done by the following four components:","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"-"},"content":"* [**`UI`**](#ui-component): The UI of the App.","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":"* [**`Logic`**](#logic-component): The command executor.","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":"* [**`Model`**](#model-component): Holds the data of the App in memory.","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* [**`Storage`**](#storage-component): Reads data from, and writes data to, the hard disk.","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"-"},"content":"[**`Commons`**](#common-classes) represents a collection of classes used by multiple other components.","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"-"},"content":"**How the architecture components interact with each other**","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":"The *Sequence Diagram* below shows how the components interact with each other for the scenario where the user issues the command `delete 1`.","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ArchitectureSequenceDiagram.puml\" width\u003d\"574\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":57,"author":{"gitId":"-"},"content":"Each of the four main components (also shown in the diagram above),","lastModifiedDate":"2021-07-31"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":59,"author":{"gitId":"-"},"content":"* defines its *API* in an `interface` with the same name as the Component.","lastModifiedDate":"2021-07-31"},{"lineNumber":60,"author":{"gitId":"-"},"content":"* implements its functionality using a concrete `{Component Name}Manager` class (which follows the corresponding API `interface` mentioned in the previous point.","lastModifiedDate":"2021-07-31"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":62,"author":{"gitId":"-"},"content":"For example, the `Logic` component defines its API in the `Logic.java` interface and implements its functionality using the `LogicManager.java` class which follows the `Logic` interface. Other components interact with a given component through its interface rather than the concrete class (reason: to prevent outside component\u0027s being coupled to the implementation of a component), as illustrated in the (partial) class diagram below.","lastModifiedDate":"2021-07-31"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":64,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ComponentManagers.puml\" width\u003d\"300\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":66,"author":{"gitId":"-"},"content":"The sections below give more details of each component.","lastModifiedDate":"2020-05-23"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":68,"author":{"gitId":"-"},"content":"### UI component","lastModifiedDate":"2020-05-23"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":70,"author":{"gitId":"-"},"content":"The **API** of this component is specified in [`Ui.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/Ui.java)","lastModifiedDate":"2021-07-31"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":72,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UiClassDiagram.puml\" alt\u003d\"Structure of the UI Component\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":74,"author":{"gitId":"-"},"content":"The UI consists of a `MainWindow` that is made up of parts e.g.`CommandBox`, `ResultDisplay`, `PersonListPanel`, `StatusBarFooter` etc. All these, including the `MainWindow`, inherit from the abstract `UiPart` class which captures the commonalities between classes that represent parts of the visible GUI.","lastModifiedDate":"2021-07-31"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":76,"author":{"gitId":"-"},"content":"The `UI` component uses the JavaFx UI framework. The layout of these UI parts are defined in matching `.fxml` files that are in the `src/main/resources/view` folder. For example, the layout of the [`MainWindow`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/MainWindow.java) is specified in [`MainWindow.fxml`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/resources/view/MainWindow.fxml)","lastModifiedDate":"2021-07-31"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":78,"author":{"gitId":"-"},"content":"The `UI` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":80,"author":{"gitId":"-"},"content":"* executes user commands using the `Logic` component.","lastModifiedDate":"2021-07-31"},{"lineNumber":81,"author":{"gitId":"-"},"content":"* listens for changes to `Model` data so that the UI can be updated with the modified data.","lastModifiedDate":"2021-07-31"},{"lineNumber":82,"author":{"gitId":"-"},"content":"* keeps a reference to the `Logic` component, because the `UI` relies on the `Logic` to execute commands.","lastModifiedDate":"2021-07-31"},{"lineNumber":83,"author":{"gitId":"-"},"content":"* depends on some classes in the `Model` component, as it displays `Person` object residing in the `Model`.","lastModifiedDate":"2021-07-31"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":85,"author":{"gitId":"-"},"content":"### Logic component","lastModifiedDate":"2020-05-23"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":87,"author":{"gitId":"-"},"content":"**API** : [`Logic.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/logic/Logic.java)","lastModifiedDate":"2021-07-31"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":89,"author":{"gitId":"-"},"content":"Here\u0027s a (partial) class diagram of the `Logic` component:","lastModifiedDate":"2021-07-31"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":91,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/LogicClassDiagram.puml\" width\u003d\"550\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":93,"author":{"gitId":"-"},"content":"The sequence diagram below illustrates the interactions within the `Logic` component, taking `execute(\"delete 1\")` API call as an example.","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":95,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/DeleteSequenceDiagram.puml\" alt\u003d\"Interactions Inside the Logic Component for the `delete 1` Command\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":97,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":98,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":99,"author":{"gitId":"-"},"content":"**Note:** The lifeline for `DeleteCommandParser` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline continues till the end of diagram.","lastModifiedDate":"2023-09-12"},{"lineNumber":100,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":101,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":102,"author":{"gitId":"-"},"content":"How the `Logic` component works:","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"-"},"content":"1. When `Logic` is called upon to execute a command, it is passed to an `AddressBookParser` object which in turn creates a parser that matches the command (e.g., `DeleteCommandParser`) and uses it to parse the command.","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"-"},"content":"1. This results in a `Command` object (more precisely, an object of one of its subclasses e.g., `DeleteCommand`) which is executed by the `LogicManager`.","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"-"},"content":"1. The command can communicate with the `Model` when it is executed (e.g. to delete a person).\u003cbr\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":107,"author":{"gitId":"-"},"content":" Note that although this is shown as a single step in the diagram above (for simplicity), in the code it can take several interactions (between the command object and the `Model`) to achieve.","lastModifiedDate":"2024-02-09"},{"lineNumber":108,"author":{"gitId":"-"},"content":"1. The result of the command execution is encapsulated as a `CommandResult` object which is returned back from `Logic`.","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"-"},"content":"Here are the other classes in `Logic` (omitted from the class diagram above) that are used for parsing a user command:","lastModifiedDate":"2021-07-31"},{"lineNumber":111,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":112,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ParserClasses.puml\" width\u003d\"600\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":114,"author":{"gitId":"-"},"content":"How the parsing works:","lastModifiedDate":"2021-07-31"},{"lineNumber":115,"author":{"gitId":"-"},"content":"* When called upon to parse a user command, the `AddressBookParser` class creates an `XYZCommandParser` (`XYZ` is a placeholder for the specific command name e.g., `AddCommandParser`) which uses the other classes shown above to parse the user command and create a `XYZCommand` object (e.g., `AddCommand`) which the `AddressBookParser` returns back as a `Command` object.","lastModifiedDate":"2021-07-31"},{"lineNumber":116,"author":{"gitId":"-"},"content":"* All `XYZCommandParser` classes (e.g., `AddCommandParser`, `DeleteCommandParser`, ...) inherit from the `Parser` interface so that they can be treated similarly where possible e.g, during testing.","lastModifiedDate":"2021-07-31"},{"lineNumber":117,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":118,"author":{"gitId":"-"},"content":"### Model component","lastModifiedDate":"2021-07-31"},{"lineNumber":119,"author":{"gitId":"-"},"content":"**API** : [`Model.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/model/Model.java)","lastModifiedDate":"2020-05-23"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":121,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ModelClassDiagram.puml\" width\u003d\"450\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":122,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":123,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":124,"author":{"gitId":"-"},"content":"The `Model` component,","lastModifiedDate":"2021-07-31"},{"lineNumber":125,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":126,"author":{"gitId":"-"},"content":"* stores the address book data i.e., all `Person` objects (which are contained in a `UniquePersonList` object).","lastModifiedDate":"2021-07-31"},{"lineNumber":127,"author":{"gitId":"-"},"content":"* stores the currently \u0027selected\u0027 `Person` objects (e.g., results of a search query) as a separate _filtered_ list which is exposed to outsiders as an unmodifiable `ObservableList\u003cPerson\u003e` that can be \u0027observed\u0027 e.g. the UI can be bound to this list so that the UI automatically updates when the data in the list change.","lastModifiedDate":"2021-07-31"},{"lineNumber":128,"author":{"gitId":"-"},"content":"* stores a `UserPref` object that represents the user’s preferences. This is exposed to the outside as a `ReadOnlyUserPref` objects.","lastModifiedDate":"2021-07-31"},{"lineNumber":129,"author":{"gitId":"-"},"content":"* does not depend on any of the other three components (as the `Model` represents data entities of the domain, they should make sense on their own without depending on other components)","lastModifiedDate":"2021-07-31"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":131,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":132,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":133,"author":{"gitId":"-"},"content":"**Note:** An alternative (arguably, a more OOP) model is given below. It has a `Tag` list in the `AddressBook`, which `Person` references. This allows `AddressBook` to only require one `Tag` object per unique tag, instead of each `Person` needing their own `Tag` objects.\u003cbr\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":134,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":135,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/BetterModelClassDiagram.puml\" width\u003d\"450\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":137,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":138,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":139,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":140,"author":{"gitId":"-"},"content":"### Storage component","lastModifiedDate":"2020-05-23"},{"lineNumber":141,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":142,"author":{"gitId":"-"},"content":"**API** : [`Storage.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/storage/Storage.java)","lastModifiedDate":"2020-05-23"},{"lineNumber":143,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":144,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/StorageClassDiagram.puml\" width\u003d\"550\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":145,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":146,"author":{"gitId":"-"},"content":"The `Storage` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":147,"author":{"gitId":"-"},"content":"* can save both address book data and user preference data in JSON format, and read them back into corresponding objects.","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"-"},"content":"* inherits from both `AddressBookStorage` and `UserPrefStorage`, which means it can be treated as either one (if only the functionality of only one is needed).","lastModifiedDate":"2021-07-31"},{"lineNumber":149,"author":{"gitId":"-"},"content":"* depends on some classes in the `Model` component (because the `Storage` component\u0027s job is to save/retrieve objects that belong to the `Model`)","lastModifiedDate":"2021-07-21"},{"lineNumber":150,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":151,"author":{"gitId":"-"},"content":"### Common classes","lastModifiedDate":"2020-05-23"},{"lineNumber":152,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":153,"author":{"gitId":"-"},"content":"Classes used by multiple components are in the `seedu.addressbook.commons` package.","lastModifiedDate":"2020-05-23"},{"lineNumber":154,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":155,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":156,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":157,"author":{"gitId":"-"},"content":"## **Implementation**","lastModifiedDate":"2020-05-23"},{"lineNumber":158,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":159,"author":{"gitId":"-"},"content":"This section describes some noteworthy details on how certain features are implemented.","lastModifiedDate":"2020-05-23"},{"lineNumber":160,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":161,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Undo/redo feature","lastModifiedDate":"2020-06-07"},{"lineNumber":162,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":163,"author":{"gitId":"-"},"content":"#### Proposed Implementation","lastModifiedDate":"2020-05-23"},{"lineNumber":164,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":165,"author":{"gitId":"-"},"content":"The proposed undo/redo mechanism is facilitated by `VersionedAddressBook`. It extends `AddressBook` with an undo/redo history, stored internally as an `addressBookStateList` and `currentStatePointer`. Additionally, it implements the following operations:","lastModifiedDate":"2020-05-23"},{"lineNumber":166,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":167,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#commit()` — Saves the current address book state in its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":168,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#undo()` — Restores the previous address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":169,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#redo()` — Restores a previously undone address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":170,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":171,"author":{"gitId":"-"},"content":"These operations are exposed in the `Model` interface as `Model#commitAddressBook()`, `Model#undoAddressBook()` and `Model#redoAddressBook()` respectively.","lastModifiedDate":"2020-05-23"},{"lineNumber":172,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":173,"author":{"gitId":"-"},"content":"Given below is an example usage scenario and how the undo/redo mechanism behaves at each step.","lastModifiedDate":"2020-05-23"},{"lineNumber":174,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":175,"author":{"gitId":"-"},"content":"Step 1. The user launches the application for the first time. The `VersionedAddressBook` will be initialized with the initial address book state, and the `currentStatePointer` pointing to that single address book state.","lastModifiedDate":"2020-05-23"},{"lineNumber":176,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":177,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState0.puml\" alt\u003d\"UndoRedoState0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":178,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":179,"author":{"gitId":"-"},"content":"Step 2. The user executes `delete 5` command to delete the 5th person in the address book. The `delete` command calls `Model#commitAddressBook()`, causing the modified state of the address book after the `delete 5` command executes to be saved in the `addressBookStateList`, and the `currentStatePointer` is shifted to the newly inserted address book state.","lastModifiedDate":"2020-05-23"},{"lineNumber":180,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":181,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState1.puml\" alt\u003d\"UndoRedoState1\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":182,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":183,"author":{"gitId":"-"},"content":"Step 3. The user executes `add n/David …​` to add a new person. The `add` command also calls `Model#commitAddressBook()`, causing another modified address book state to be saved into the `addressBookStateList`.","lastModifiedDate":"2020-05-23"},{"lineNumber":184,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":185,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState2.puml\" alt\u003d\"UndoRedoState2\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":186,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":187,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":188,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":189,"author":{"gitId":"-"},"content":"**Note:** If a command fails its execution, it will not call `Model#commitAddressBook()`, so the address book state will not be saved into the `addressBookStateList`.","lastModifiedDate":"2023-09-12"},{"lineNumber":190,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":191,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":192,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":193,"author":{"gitId":"-"},"content":"Step 4. The user now decides that adding the person was a mistake, and decides to undo that action by executing the `undo` command. The `undo` command will call `Model#undoAddressBook()`, which will shift the `currentStatePointer` once to the left, pointing it to the previous address book state, and restores the address book to that state.","lastModifiedDate":"2020-05-23"},{"lineNumber":194,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":195,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState3.puml\" alt\u003d\"UndoRedoState3\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":196,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":197,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":198,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":199,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":200,"author":{"gitId":"-"},"content":"**Note:** If the `currentStatePointer` is at index 0, pointing to the initial AddressBook state, then there are no previous AddressBook states to restore. The `undo` command uses `Model#canUndoAddressBook()` to check if this is the case. If so, it will return an error to the user rather","lastModifiedDate":"2023-09-12"},{"lineNumber":201,"author":{"gitId":"-"},"content":"than attempting to perform the undo.","lastModifiedDate":"2020-05-23"},{"lineNumber":202,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":203,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":204,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":205,"author":{"gitId":"-"},"content":"The following sequence diagram shows how an undo operation goes through the `Logic` component:","lastModifiedDate":"2024-02-09"},{"lineNumber":206,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":207,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoSequenceDiagram-Logic.puml\" alt\u003d\"UndoSequenceDiagram-Logic\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":208,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":209,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":210,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":211,"author":{"gitId":"-"},"content":"**Note:** The lifeline for `UndoCommand` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram.","lastModifiedDate":"2023-09-12"},{"lineNumber":212,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":213,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":214,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":215,"author":{"gitId":"-"},"content":"Similarly, how an undo operation goes through the `Model` component is shown below:","lastModifiedDate":"2024-02-09"},{"lineNumber":216,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":217,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoSequenceDiagram-Model.puml\" alt\u003d\"UndoSequenceDiagram-Model\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":218,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":219,"author":{"gitId":"-"},"content":"The `redo` command does the opposite — it calls `Model#redoAddressBook()`, which shifts the `currentStatePointer` once to the right, pointing to the previously undone state, and restores the address book to that state.","lastModifiedDate":"2020-05-23"},{"lineNumber":220,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":221,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":222,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":223,"author":{"gitId":"-"},"content":"**Note:** If the `currentStatePointer` is at index `addressBookStateList.size() - 1`, pointing to the latest address book state, then there are no undone AddressBook states to restore. The `redo` command uses `Model#canRedoAddressBook()` to check if this is the case. If so, it will return an error to the user rather than attempting to perform the redo.","lastModifiedDate":"2023-09-12"},{"lineNumber":224,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":225,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":226,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":227,"author":{"gitId":"-"},"content":"Step 5. The user then decides to execute the command `list`. Commands that do not modify the address book, such as `list`, will usually not call `Model#commitAddressBook()`, `Model#undoAddressBook()` or `Model#redoAddressBook()`. Thus, the `addressBookStateList` remains unchanged.","lastModifiedDate":"2020-05-23"},{"lineNumber":228,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":229,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState4.puml\" alt\u003d\"UndoRedoState4\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":230,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":231,"author":{"gitId":"-"},"content":"Step 6. The user executes `clear`, which calls `Model#commitAddressBook()`. Since the `currentStatePointer` is not pointing at the end of the `addressBookStateList`, all address book states after the `currentStatePointer` will be purged. Reason: It no longer makes sense to redo the `add n/David …​` command. This is the behavior that most modern desktop applications follow.","lastModifiedDate":"2020-05-23"},{"lineNumber":232,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":233,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState5.puml\" alt\u003d\"UndoRedoState5\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":234,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":235,"author":{"gitId":"-"},"content":"The following activity diagram summarizes what happens when a user executes a new command:","lastModifiedDate":"2020-05-23"},{"lineNumber":236,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":237,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/CommitActivityDiagram.puml\" width\u003d\"250\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":238,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":239,"author":{"gitId":"-"},"content":"#### Design considerations:","lastModifiedDate":"2021-07-31"},{"lineNumber":240,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":241,"author":{"gitId":"-"},"content":"**Aspect: How undo \u0026 redo executes:**","lastModifiedDate":"2021-07-31"},{"lineNumber":242,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":243,"author":{"gitId":"-"},"content":"* **Alternative 1 (current choice):** Saves the entire address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":244,"author":{"gitId":"-"},"content":" * Pros: Easy to implement.","lastModifiedDate":"2020-05-23"},{"lineNumber":245,"author":{"gitId":"-"},"content":" * Cons: May have performance issues in terms of memory usage.","lastModifiedDate":"2020-05-23"},{"lineNumber":246,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":247,"author":{"gitId":"-"},"content":"* **Alternative 2:** Individual command knows how to undo/redo by","lastModifiedDate":"2020-05-23"},{"lineNumber":248,"author":{"gitId":"-"},"content":" itself.","lastModifiedDate":"2020-05-23"},{"lineNumber":249,"author":{"gitId":"-"},"content":" * Pros: Will use less memory (e.g. for `delete`, just save the person being deleted).","lastModifiedDate":"2020-05-23"},{"lineNumber":250,"author":{"gitId":"-"},"content":" * Cons: We must ensure that the implementation of each individual command are correct.","lastModifiedDate":"2020-05-23"},{"lineNumber":251,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":252,"author":{"gitId":"-"},"content":"_{more aspects and alternatives to be added}_","lastModifiedDate":"2020-05-23"},{"lineNumber":253,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":254,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Data archiving","lastModifiedDate":"2020-05-23"},{"lineNumber":255,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":256,"author":{"gitId":"-"},"content":"_{Explain here how the data archiving feature will be implemented}_","lastModifiedDate":"2020-05-23"},{"lineNumber":257,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":258,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":259,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":260,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":261,"author":{"gitId":"-"},"content":"## **Documentation, logging, testing, configuration, dev-ops**","lastModifiedDate":"2020-06-07"},{"lineNumber":262,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":263,"author":{"gitId":"-"},"content":"* [Documentation guide](Documentation.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":264,"author":{"gitId":"-"},"content":"* [Testing guide](Testing.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":265,"author":{"gitId":"-"},"content":"* [Logging guide](Logging.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":266,"author":{"gitId":"-"},"content":"* [Configuration guide](Configuration.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":267,"author":{"gitId":"-"},"content":"* [DevOps guide](DevOps.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":268,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":269,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":270,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":271,"author":{"gitId":"-"},"content":"## **Appendix: Requirements**","lastModifiedDate":"2020-05-23"},{"lineNumber":272,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":273,"author":{"gitId":"-"},"content":"### Product scope","lastModifiedDate":"2020-05-23"},{"lineNumber":274,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":275,"author":{"gitId":"-"},"content":"**Target user profile**:","lastModifiedDate":"2020-05-23"},{"lineNumber":276,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":277,"author":{"gitId":"-"},"content":"* has a need to manage a significant number of contacts","lastModifiedDate":"2020-05-23"},{"lineNumber":278,"author":{"gitId":"-"},"content":"* prefer desktop apps over other types","lastModifiedDate":"2020-05-23"},{"lineNumber":279,"author":{"gitId":"-"},"content":"* can type fast","lastModifiedDate":"2020-05-23"},{"lineNumber":280,"author":{"gitId":"-"},"content":"* prefers typing to mouse interactions","lastModifiedDate":"2020-05-26"},{"lineNumber":281,"author":{"gitId":"-"},"content":"* is reasonably comfortable using CLI apps","lastModifiedDate":"2020-05-23"},{"lineNumber":282,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":283,"author":{"gitId":"-"},"content":"**Value proposition**: manage contacts faster than a typical mouse/GUI driven app","lastModifiedDate":"2020-05-23"},{"lineNumber":284,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":285,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":286,"author":{"gitId":"-"},"content":"### User stories","lastModifiedDate":"2020-06-07"},{"lineNumber":287,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":288,"author":{"gitId":"-"},"content":"Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unlikely to have) - `*`","lastModifiedDate":"2020-05-23"},{"lineNumber":289,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":290,"author":{"gitId":"-"},"content":"| Priority | As a …​ | I want to …​ | So that I can…​ |","lastModifiedDate":"2020-05-23"},{"lineNumber":291,"author":{"gitId":"-"},"content":"|----------|--------------------------------------------|------------------------------|------------------------------------------------------------------------|","lastModifiedDate":"2023-09-12"},{"lineNumber":292,"author":{"gitId":"-"},"content":"| `* * *` | new user | see usage instructions | refer to instructions when I forget how to use the App |","lastModifiedDate":"2020-05-23"},{"lineNumber":293,"author":{"gitId":"-"},"content":"| `* * *` | user | add a new person | |","lastModifiedDate":"2020-05-23"},{"lineNumber":294,"author":{"gitId":"-"},"content":"| `* * *` | user | delete a person | remove entries that I no longer need |","lastModifiedDate":"2020-05-23"},{"lineNumber":295,"author":{"gitId":"-"},"content":"| `* * *` | user | find a person by name | locate details of persons without having to go through the entire list |","lastModifiedDate":"2020-05-23"},{"lineNumber":296,"author":{"gitId":"-"},"content":"| `* *` | user | hide private contact details | minimize chance of someone else seeing them by accident |","lastModifiedDate":"2020-05-23"},{"lineNumber":297,"author":{"gitId":"-"},"content":"| `*` | user with many persons in the address book | sort persons by name | locate a person easily |","lastModifiedDate":"2020-05-23"},{"lineNumber":298,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":299,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":300,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":301,"author":{"gitId":"-"},"content":"### Use cases","lastModifiedDate":"2020-06-07"},{"lineNumber":302,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":303,"author":{"gitId":"-"},"content":"(For all use cases below, the **System** is the `AddressBook` and the **Actor** is the `user`, unless specified otherwise)","lastModifiedDate":"2020-05-23"},{"lineNumber":304,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":305,"author":{"gitId":"-"},"content":"**Use case: Delete a person**","lastModifiedDate":"2020-05-23"},{"lineNumber":306,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":307,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2020-05-23"},{"lineNumber":308,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":309,"author":{"gitId":"-"},"content":"1. User requests to list persons","lastModifiedDate":"2020-05-23"},{"lineNumber":310,"author":{"gitId":"-"},"content":"2. AddressBook shows a list of persons","lastModifiedDate":"2020-05-23"},{"lineNumber":311,"author":{"gitId":"-"},"content":"3. User requests to delete a specific person in the list","lastModifiedDate":"2020-05-23"},{"lineNumber":312,"author":{"gitId":"-"},"content":"4. AddressBook deletes the person","lastModifiedDate":"2020-05-23"},{"lineNumber":313,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":314,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":315,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":316,"author":{"gitId":"-"},"content":"**Extensions**","lastModifiedDate":"2020-05-23"},{"lineNumber":317,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":318,"author":{"gitId":"-"},"content":"* 2a. The list is empty.","lastModifiedDate":"2020-05-23"},{"lineNumber":319,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":320,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":321,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":322,"author":{"gitId":"-"},"content":"* 3a. The given index is invalid.","lastModifiedDate":"2020-05-23"},{"lineNumber":323,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":324,"author":{"gitId":"-"},"content":" * 3a1. AddressBook shows an error message.","lastModifiedDate":"2020-05-23"},{"lineNumber":325,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":326,"author":{"gitId":"-"},"content":" Use case resumes at step 2.","lastModifiedDate":"2020-05-23"},{"lineNumber":327,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":328,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":329,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":330,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":331,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":332,"author":{"gitId":"-"},"content":"1. Should work on any _mainstream OS_ as long as it has Java `11` or above installed.","lastModifiedDate":"2020-05-23"},{"lineNumber":333,"author":{"gitId":"-"},"content":"2. Should be able to hold up to 1000 persons without a noticeable sluggishness in performance for typical usage.","lastModifiedDate":"2020-05-23"},{"lineNumber":334,"author":{"gitId":"-"},"content":"3. A user with above average typing speed for regular English text (i.e. not code, not system admin commands) should be able to accomplish most of the tasks faster using commands than using the mouse.","lastModifiedDate":"2020-05-23"},{"lineNumber":335,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":336,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":337,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":338,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":339,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":340,"author":{"gitId":"-"},"content":"* **Mainstream OS**: Windows, Linux, Unix, MacOS","lastModifiedDate":"2024-02-09"},{"lineNumber":341,"author":{"gitId":"-"},"content":"* **Private contact detail**: A contact detail that is not meant to be shared with others","lastModifiedDate":"2020-05-23"},{"lineNumber":342,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":343,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":344,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":345,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":346,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":347,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":348,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":349,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":350,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":351,"author":{"gitId":"-"},"content":"**Note:** These instructions only provide a starting point for testers to work on;","lastModifiedDate":"2023-09-12"},{"lineNumber":352,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":353,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":354,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":355,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":356,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":357,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":358,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":359,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":360,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":361,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":362,"author":{"gitId":"-"},"content":" 1. Double-click the jar file Expected: Shows the GUI with a set of sample contacts. The window size may not be optimum.","lastModifiedDate":"2020-05-23"},{"lineNumber":363,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":364,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":365,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":366,"author":{"gitId":"-"},"content":" 1. Resize the window to an optimum size. Move the window to a different location. Close the window.","lastModifiedDate":"2020-05-23"},{"lineNumber":367,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":368,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":369,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","lastModifiedDate":"2020-05-23"},{"lineNumber":370,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":371,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":372,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":373,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":374,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":375,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":376,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":377,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":378,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":379,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":380,"author":{"gitId":"-"},"content":" Expected: First contact is deleted from the list. Details of the deleted contact shown in the status message. Timestamp in the status bar is updated.","lastModifiedDate":"2020-05-23"},{"lineNumber":381,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":382,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":383,"author":{"gitId":"-"},"content":" Expected: No person is deleted. Error details shown in the status message. Status bar remains the same.","lastModifiedDate":"2020-05-23"},{"lineNumber":384,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":385,"author":{"gitId":"-"},"content":" 1. Other incorrect delete commands to try: `delete`, `delete x`, `...` (where x is larger than the list size)\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":386,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":387,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":388,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":389,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":390,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":391,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":392,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":393,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":394,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":395,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":396,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"yiwern5":2,"-":394}},{"path":"docs/_markbind/layouts/default.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003chead-bottom\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003clink rel\u003d\"stylesheet\" href\u003d\"{{baseUrl}}/stylesheets/main.css\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003c/head-bottom\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cheader sticky\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cnavbar type\u003d\"dark\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"yiwern5"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"{{baseUrl}}/index.html\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003eEffiTrack\u003c/a\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/index.html\" class\u003d\"nav-link\"\u003eHome\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/UserGuide.html\" class\u003d\"nav-link\"\u003eUser Guide\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/DeveloperGuide.html\" class\u003d\"nav-link\"\u003eDeveloper Guide\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/AboutUs.html\" class\u003d\"nav-link\"\u003eAbout Us\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"https://github.com/se-edu/addressbook-level3\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003e\u003cmd\u003e:fab-github:\u003c/md\u003e\u003c/a\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003cli slot\u003d\"right\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003cform class\u003d\"navbar-form\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\" menu-align-right\u003e\u003c/searchbar\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003c/form\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003c/navbar\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"-"},"content":"\u003c/header\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"flex-body\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"site-nav\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"site-nav-top\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"fw-bold mb-2\" style\u003d\"font-size: 1.25rem;\"\u003eSite Map\u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003csite-nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"-"},"content":"* [Home]({{ baseUrl }}/index.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"-"},"content":"* [User Guide]({{ baseUrl }}/UserGuide.html) :expanded:","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * [Quick Start]({{ baseUrl }}/UserGuide.html#quick-start)","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"-"},"content":" * [Features]({{ baseUrl }}/UserGuide.html#features)","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * [FAQ]({{ baseUrl }}/UserGuide.html#faq)","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * [Command Summary]({{ baseUrl }}/UserGuide.html#faq)","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"-"},"content":"* [Developer Guide]({{ baseUrl }}/DeveloperGuide.html) :expanded:","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * [Acknowledgements]({{ baseUrl }}/DeveloperGuide.html#acknowledgements)","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * [Setting Up]({{ baseUrl }}/DeveloperGuide.html#setting-up-getting-started)","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"-"},"content":" * [Design]({{ baseUrl }}/DeveloperGuide.html#design)","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * [Implementation]({{ baseUrl }}/DeveloperGuide.html#implementation)","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"-"},"content":" * [Documentation, logging, testing, configuration, dev-ops]({{ baseUrl }}/DeveloperGuide.html#documentation-logging-testing-configuration-dev-ops)","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * [Appendix: Requirements]({{ baseUrl }}/DeveloperGuide.html#appendix-requirements)","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * [Appendix: Instructions for manual testing]({{ baseUrl }}/DeveloperGuide.html#appendix-instructions-for-manual-testing)","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"-"},"content":"* Tutorials","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * [Tracing code]({{ baseUrl }}/tutorials/TracingCode.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"-"},"content":" * [Adding a command]({{ baseUrl }}/tutorials/AddRemark.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"-"},"content":" * [Removing Fields]({{ baseUrl }}/tutorials/RemovingFields.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* [About Us]({{ baseUrl }}/AboutUs.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003c/site-nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003c/nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003cdiv id\u003d\"content-wrapper\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"-"},"content":" {{ content }}","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"page-nav\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"-"},"content":" \u003cpage-nav /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"-"},"content":" \u003c/nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"-"},"content":" \u003cscroll-top-button\u003e\u003c/scroll-top-button\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"-"},"content":"\u003cfooter\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u003c!-- Support MarkBind by including a link to us on your landing page! --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"text-center\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"-"},"content":" \u003csmall\u003e[\u003cmd\u003e**Powered by**\u003c/md\u003e \u003cimg src\u003d\"https://markbind.org/favicon.ico\" width\u003d\"30\"\u003e {{MarkBind}}, generated on {{timestamp}}]\u003c/small\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"-"},"content":"\u003c/footer\u003e","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"yiwern5":1,"-":66}}] +[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"yiwern5"},"content":"[![CI Status](https://github.com/se-edu/addressbook-level3/workflows/Java%20CI/badge.svg)](https://github.com/AY2324S2-CS2103T-T14-1/tp/actions)","lastModifiedDate":"2024-03-07"},{"lineNumber":2,"author":{"gitId":"yiwern5"},"content":"[![codecov](https://codecov.io/gh/AY2324S2-CS2103T-T09-4/tp/graph/badge.svg?token\u003dWAIOG42WJK)](https://codecov.io/gh/AY2324S2-CS2103T-T14-1/tp)","lastModifiedDate":"2024-03-07"},{"lineNumber":3,"author":{"gitId":"yiwern5"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":4,"author":{"gitId":"yiwern5"},"content":"# EffiTrack","lastModifiedDate":"2024-03-07"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"![Ui](docs/images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":7,"author":{"gitId":"yiwern5"},"content":"\u003e Boost productivity, streamline success! Welcome to EffiTrack – where efficiency meets innovation. Revolutionize your workday with seamless employee performance tracking.","lastModifiedDate":"2024-03-07"},{"lineNumber":8,"author":{"gitId":"yiwern5"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":9,"author":{"gitId":"yiwern5"},"content":"## Value Proposition","lastModifiedDate":"2024-03-07"},{"lineNumber":10,"author":{"gitId":"yiwern5"},"content":"HR departments often struggle to accurately measure employee efficiency, leading to reduced productivity. Traditional methods of tracking employee performance, such as manual documentation or outdated systems, are time-consuming and prone to errors. EffiTrack solves these challenges by providing a centralized platform to effortlessly monitor employee efficiency.","lastModifiedDate":"2024-03-07"},{"lineNumber":11,"author":{"gitId":"yiwern5"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":12,"author":{"gitId":"yiwern5"},"content":"## Features","lastModifiedDate":"2024-03-07"},{"lineNumber":13,"author":{"gitId":"yiwern5"},"content":"- [ ] Add employee information","lastModifiedDate":"2024-03-07"},{"lineNumber":14,"author":{"gitId":"yiwern5"},"content":"- [ ] List all employees information","lastModifiedDate":"2024-03-07"},{"lineNumber":15,"author":{"gitId":"yiwern5"},"content":"- [ ] Edit an existing employee information","lastModifiedDate":"2024-03-07"},{"lineNumber":16,"author":{"gitId":"yiwern5"},"content":"- [ ] Find employees whose names contain any of the given keywords","lastModifiedDate":"2024-03-07"},{"lineNumber":17,"author":{"gitId":"yiwern5"},"content":"- [ ] Delete a specific employee","lastModifiedDate":"2024-03-07"},{"lineNumber":18,"author":{"gitId":"yiwern5"},"content":"- [ ] Clear all entries","lastModifiedDate":"2024-03-07"},{"lineNumber":19,"author":{"gitId":"yiwern5"},"content":"- [ ] Assign task to an employee","lastModifiedDate":"2024-03-07"},{"lineNumber":20,"author":{"gitId":"yiwern5"},"content":"- [ ] Mark an assigned task as done","lastModifiedDate":"2024-03-07"},{"lineNumber":21,"author":{"gitId":"yiwern5"},"content":"- [ ] Edit deadline of assigned task","lastModifiedDate":"2024-03-07"},{"lineNumber":22,"author":{"gitId":"yiwern5"},"content":"- [ ] Change person in charge of the task","lastModifiedDate":"2024-03-07"},{"lineNumber":23,"author":{"gitId":"yiwern5"},"content":"- [ ] Sort employee based on efficiency","lastModifiedDate":"2024-03-07"},{"lineNumber":24,"author":{"gitId":"yiwern5"},"content":"- [ ] Display upcoming deadlines","lastModifiedDate":"2024-03-07"},{"lineNumber":25,"author":{"gitId":"yiwern5"},"content":"- [ ] Display fire list","lastModifiedDate":"2024-03-07"},{"lineNumber":26,"author":{"gitId":"yiwern5"},"content":"- [ ] Generate efficiency report","lastModifiedDate":"2024-03-07"},{"lineNumber":27,"author":{"gitId":"yiwern5"},"content":" ","lastModifiedDate":"2024-03-07"},{"lineNumber":28,"author":{"gitId":"yiwern5"},"content":"## Get Started","lastModifiedDate":"2024-03-07"},{"lineNumber":29,"author":{"gitId":"yiwern5"},"content":"1. Download EffiTrack here.","lastModifiedDate":"2024-03-07"},{"lineNumber":30,"author":{"gitId":"yiwern5"},"content":"2. Navigate to your Downloads folder using the terminal.","lastModifiedDate":"2024-03-07"},{"lineNumber":31,"author":{"gitId":"yiwern5"},"content":"3. Type `java -jar EffiTrack.jar` in your terminal.","lastModifiedDate":"2024-03-07"},{"lineNumber":32,"author":{"gitId":"yiwern5"},"content":"4. Press enter.","lastModifiedDate":"2024-03-07"},{"lineNumber":33,"author":{"gitId":"yiwern5"},"content":"5. Give it a try now!","lastModifiedDate":"2024-03-07"},{"lineNumber":34,"author":{"gitId":"yiwern5"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":35,"author":{"gitId":"yiwern5"},"content":"## Documentation","lastModifiedDate":"2024-03-07"},{"lineNumber":36,"author":{"gitId":"yiwern5"},"content":"For the detailed documentation of this project, see the **[EffiTrack Product Website](https://ay2324s2-cs2103t-t14-1.github.io/tp/)**.","lastModifiedDate":"2024-03-07"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"yiwern5"},"content":"## Acknowledgement","lastModifiedDate":"2024-03-07"},{"lineNumber":39,"author":{"gitId":"yiwern5"},"content":"This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org)","lastModifiedDate":"2024-03-07"}],"authorContributionMap":{"yiwern5":36,"-":3}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"About Us\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"# About Us","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"-"},"content":"We are a team based in the [School of Computing, National University of Singapore](http://www.comp.nus.edu.sg).","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":10,"author":{"gitId":"-"},"content":"## Project team","lastModifiedDate":"2020-06-07"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"howen02"},"content":"### Yap Ho Wen","lastModifiedDate":"2024-03-07"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":14,"author":{"gitId":"howen02"},"content":"\u003cimg src\u003d\"images/howen02.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-07"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"howen02"},"content":"[[github](https://github.com/howen02)]","lastModifiedDate":"2024-03-07"},{"lineNumber":17,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"howen02"},"content":"* Role: Team Lead","lastModifiedDate":"2024-03-07"},{"lineNumber":20,"author":{"gitId":"howen02"},"content":"* Responsibilities: Git expert, Code Quality","lastModifiedDate":"2024-03-07"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"howen02"},"content":"### Yeo Zi Yi","lastModifiedDate":"2024-03-07"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"ziyi22"},"content":"\u003cimg src\u003d\"images/ziyi22.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-07"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"ziyi22"},"content":"[[github](http://github.com/ziyi22)]","lastModifiedDate":"2024-03-07"},{"lineNumber":27,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":29,"author":{"gitId":"ziyi22"},"content":"* Role: Developer","lastModifiedDate":"2024-03-07"},{"lineNumber":30,"author":{"gitId":"ziyi22"},"content":"* Responsibilities: Code Quality, Deliverables and deadlines, UI","lastModifiedDate":"2024-03-07"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"yiwern5"},"content":"### Tsui Yi Wern","lastModifiedDate":"2024-03-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"yiwern5"},"content":"\u003cimg src\u003d\"images/yiwern5.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"yiwern5"},"content":"[[github](http://github.com/yiwern5)] [[portfolio](team/johndoe.md)]","lastModifiedDate":"2024-03-06"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"yiwern5"},"content":"* Responsibilities: Scheduling and tracking, Deliverables and deadlines, UI","lastModifiedDate":"2024-03-06"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":41,"author":{"gitId":"wolffe88"},"content":"### Yong Li An","lastModifiedDate":"2024-03-06"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"wolffe88"},"content":"\u003cimg src\u003d\"images/wolffe88.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-06"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"wolffe88"},"content":"[[github](http://github.com/wolffe88)]","lastModifiedDate":"2024-03-06"},{"lineNumber":46,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"wolffe88"},"content":"* Responsibilities: Task Management, Deliverables and deadlines, UI","lastModifiedDate":"2024-03-06"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"-"},"content":"### James Doe","lastModifiedDate":"2020-06-17"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/johndoe.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2020-06-17"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":"[[github](http://github.com/johndoe)]","lastModifiedDate":"2020-06-17"},{"lineNumber":56,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":58,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":59,"author":{"gitId":"-"},"content":"* Responsibilities: UI","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"ziyi22":4,"yiwern5":4,"howen02":6,"wolffe88":4,"-":41}},{"path":"docs/DeveloperGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"Developer Guide\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":" pageNav: 3","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"yiwern5"},"content":"# EffiTrack Developer Guide","lastModifiedDate":"2024-03-05"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c!-- * Table of Contents --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003cpage-nav-print /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":14,"author":{"gitId":"-"},"content":"## **Acknowledgements**","lastModifiedDate":"2021-07-30"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":16,"author":{"gitId":"yiwern5"},"content":"This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-03-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":18,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2021-07-30"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"-"},"content":"## **Setting up, getting started**","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"Refer to the guide [_Setting up and getting started_](SettingUp.md).","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"-"},"content":"## **Design**","lastModifiedDate":"2020-05-23"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":"### Architecture","lastModifiedDate":"2021-07-31"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ArchitectureDiagram.puml\" width\u003d\"280\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"-"},"content":"The ***Architecture Diagram*** given above explains the high-level design of the App.","lastModifiedDate":"2021-07-31"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"-"},"content":"Given below is a quick overview of main components and how they interact with each other.","lastModifiedDate":"2021-07-31"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":36,"author":{"gitId":"-"},"content":"**Main components of the architecture**","lastModifiedDate":"2021-07-31"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":"**`Main`** (consisting of classes [`Main`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/Main.java) and [`MainApp`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/MainApp.java)) is in charge of the app launch and shut down.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"-"},"content":"* At app launch, it initializes the other components in the correct sequence, and connects them up with each other.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"-"},"content":"* At shut down, it shuts down the other components and invokes cleanup methods where necessary.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":"The bulk of the app\u0027s work is done by the following four components:","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"-"},"content":"* [**`UI`**](#ui-component): The UI of the App.","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":"* [**`Logic`**](#logic-component): The command executor.","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":"* [**`Model`**](#model-component): Holds the data of the App in memory.","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* [**`Storage`**](#storage-component): Reads data from, and writes data to, the hard disk.","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"-"},"content":"[**`Commons`**](#common-classes) represents a collection of classes used by multiple other components.","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"-"},"content":"**How the architecture components interact with each other**","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":"The *Sequence Diagram* below shows how the components interact with each other for the scenario where the user issues the command `delete 1`.","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ArchitectureSequenceDiagram.puml\" width\u003d\"574\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":57,"author":{"gitId":"-"},"content":"Each of the four main components (also shown in the diagram above),","lastModifiedDate":"2021-07-31"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":59,"author":{"gitId":"-"},"content":"* defines its *API* in an `interface` with the same name as the Component.","lastModifiedDate":"2021-07-31"},{"lineNumber":60,"author":{"gitId":"-"},"content":"* implements its functionality using a concrete `{Component Name}Manager` class (which follows the corresponding API `interface` mentioned in the previous point.","lastModifiedDate":"2021-07-31"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":62,"author":{"gitId":"-"},"content":"For example, the `Logic` component defines its API in the `Logic.java` interface and implements its functionality using the `LogicManager.java` class which follows the `Logic` interface. Other components interact with a given component through its interface rather than the concrete class (reason: to prevent outside component\u0027s being coupled to the implementation of a component), as illustrated in the (partial) class diagram below.","lastModifiedDate":"2021-07-31"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":64,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ComponentManagers.puml\" width\u003d\"300\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":66,"author":{"gitId":"-"},"content":"The sections below give more details of each component.","lastModifiedDate":"2020-05-23"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":68,"author":{"gitId":"-"},"content":"### UI component","lastModifiedDate":"2020-05-23"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":70,"author":{"gitId":"-"},"content":"The **API** of this component is specified in [`Ui.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/Ui.java)","lastModifiedDate":"2021-07-31"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":72,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UiClassDiagram.puml\" alt\u003d\"Structure of the UI Component\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":74,"author":{"gitId":"-"},"content":"The UI consists of a `MainWindow` that is made up of parts e.g.`CommandBox`, `ResultDisplay`, `PersonListPanel`, `StatusBarFooter` etc. All these, including the `MainWindow`, inherit from the abstract `UiPart` class which captures the commonalities between classes that represent parts of the visible GUI.","lastModifiedDate":"2021-07-31"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":76,"author":{"gitId":"-"},"content":"The `UI` component uses the JavaFx UI framework. The layout of these UI parts are defined in matching `.fxml` files that are in the `src/main/resources/view` folder. For example, the layout of the [`MainWindow`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/MainWindow.java) is specified in [`MainWindow.fxml`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/resources/view/MainWindow.fxml)","lastModifiedDate":"2021-07-31"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":78,"author":{"gitId":"-"},"content":"The `UI` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":80,"author":{"gitId":"-"},"content":"* executes user commands using the `Logic` component.","lastModifiedDate":"2021-07-31"},{"lineNumber":81,"author":{"gitId":"-"},"content":"* listens for changes to `Model` data so that the UI can be updated with the modified data.","lastModifiedDate":"2021-07-31"},{"lineNumber":82,"author":{"gitId":"-"},"content":"* keeps a reference to the `Logic` component, because the `UI` relies on the `Logic` to execute commands.","lastModifiedDate":"2021-07-31"},{"lineNumber":83,"author":{"gitId":"-"},"content":"* depends on some classes in the `Model` component, as it displays `Person` object residing in the `Model`.","lastModifiedDate":"2021-07-31"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":85,"author":{"gitId":"-"},"content":"### Logic component","lastModifiedDate":"2020-05-23"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":87,"author":{"gitId":"-"},"content":"**API** : [`Logic.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/logic/Logic.java)","lastModifiedDate":"2021-07-31"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":89,"author":{"gitId":"-"},"content":"Here\u0027s a (partial) class diagram of the `Logic` component:","lastModifiedDate":"2021-07-31"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":91,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/LogicClassDiagram.puml\" width\u003d\"550\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":93,"author":{"gitId":"-"},"content":"The sequence diagram below illustrates the interactions within the `Logic` component, taking `execute(\"delete 1\")` API call as an example.","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":95,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/DeleteSequenceDiagram.puml\" alt\u003d\"Interactions Inside the Logic Component for the `delete 1` Command\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":97,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":98,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":99,"author":{"gitId":"-"},"content":"**Note:** The lifeline for `DeleteCommandParser` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline continues till the end of diagram.","lastModifiedDate":"2023-09-12"},{"lineNumber":100,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":101,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":102,"author":{"gitId":"-"},"content":"How the `Logic` component works:","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"-"},"content":"1. When `Logic` is called upon to execute a command, it is passed to an `AddressBookParser` object which in turn creates a parser that matches the command (e.g., `DeleteCommandParser`) and uses it to parse the command.","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"-"},"content":"1. This results in a `Command` object (more precisely, an object of one of its subclasses e.g., `DeleteCommand`) which is executed by the `LogicManager`.","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"-"},"content":"1. The command can communicate with the `Model` when it is executed (e.g. to delete a person).\u003cbr\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":107,"author":{"gitId":"-"},"content":" Note that although this is shown as a single step in the diagram above (for simplicity), in the code it can take several interactions (between the command object and the `Model`) to achieve.","lastModifiedDate":"2024-02-09"},{"lineNumber":108,"author":{"gitId":"-"},"content":"1. The result of the command execution is encapsulated as a `CommandResult` object which is returned back from `Logic`.","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"-"},"content":"Here are the other classes in `Logic` (omitted from the class diagram above) that are used for parsing a user command:","lastModifiedDate":"2021-07-31"},{"lineNumber":111,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":112,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ParserClasses.puml\" width\u003d\"600\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":114,"author":{"gitId":"-"},"content":"How the parsing works:","lastModifiedDate":"2021-07-31"},{"lineNumber":115,"author":{"gitId":"-"},"content":"* When called upon to parse a user command, the `AddressBookParser` class creates an `XYZCommandParser` (`XYZ` is a placeholder for the specific command name e.g., `AddCommandParser`) which uses the other classes shown above to parse the user command and create a `XYZCommand` object (e.g., `AddCommand`) which the `AddressBookParser` returns back as a `Command` object.","lastModifiedDate":"2021-07-31"},{"lineNumber":116,"author":{"gitId":"-"},"content":"* All `XYZCommandParser` classes (e.g., `AddCommandParser`, `DeleteCommandParser`, ...) inherit from the `Parser` interface so that they can be treated similarly where possible e.g, during testing.","lastModifiedDate":"2021-07-31"},{"lineNumber":117,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":118,"author":{"gitId":"-"},"content":"### Model component","lastModifiedDate":"2021-07-31"},{"lineNumber":119,"author":{"gitId":"-"},"content":"**API** : [`Model.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/model/Model.java)","lastModifiedDate":"2020-05-23"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":121,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ModelClassDiagram.puml\" width\u003d\"450\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":122,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":123,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":124,"author":{"gitId":"-"},"content":"The `Model` component,","lastModifiedDate":"2021-07-31"},{"lineNumber":125,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":126,"author":{"gitId":"-"},"content":"* stores the address book data i.e., all `Person` objects (which are contained in a `UniquePersonList` object).","lastModifiedDate":"2021-07-31"},{"lineNumber":127,"author":{"gitId":"-"},"content":"* stores the currently \u0027selected\u0027 `Person` objects (e.g., results of a search query) as a separate _filtered_ list which is exposed to outsiders as an unmodifiable `ObservableList\u003cPerson\u003e` that can be \u0027observed\u0027 e.g. the UI can be bound to this list so that the UI automatically updates when the data in the list change.","lastModifiedDate":"2021-07-31"},{"lineNumber":128,"author":{"gitId":"-"},"content":"* stores a `UserPref` object that represents the user’s preferences. This is exposed to the outside as a `ReadOnlyUserPref` objects.","lastModifiedDate":"2021-07-31"},{"lineNumber":129,"author":{"gitId":"-"},"content":"* does not depend on any of the other three components (as the `Model` represents data entities of the domain, they should make sense on their own without depending on other components)","lastModifiedDate":"2021-07-31"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":131,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":132,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":133,"author":{"gitId":"-"},"content":"**Note:** An alternative (arguably, a more OOP) model is given below. It has a `Tag` list in the `AddressBook`, which `Person` references. This allows `AddressBook` to only require one `Tag` object per unique tag, instead of each `Person` needing their own `Tag` objects.\u003cbr\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":134,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":135,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/BetterModelClassDiagram.puml\" width\u003d\"450\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":137,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":138,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":139,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":140,"author":{"gitId":"-"},"content":"### Storage component","lastModifiedDate":"2020-05-23"},{"lineNumber":141,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":142,"author":{"gitId":"-"},"content":"**API** : [`Storage.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/storage/Storage.java)","lastModifiedDate":"2020-05-23"},{"lineNumber":143,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":144,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/StorageClassDiagram.puml\" width\u003d\"550\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":145,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":146,"author":{"gitId":"-"},"content":"The `Storage` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":147,"author":{"gitId":"-"},"content":"* can save both address book data and user preference data in JSON format, and read them back into corresponding objects.","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"-"},"content":"* inherits from both `AddressBookStorage` and `UserPrefStorage`, which means it can be treated as either one (if only the functionality of only one is needed).","lastModifiedDate":"2021-07-31"},{"lineNumber":149,"author":{"gitId":"-"},"content":"* depends on some classes in the `Model` component (because the `Storage` component\u0027s job is to save/retrieve objects that belong to the `Model`)","lastModifiedDate":"2021-07-21"},{"lineNumber":150,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":151,"author":{"gitId":"-"},"content":"### Common classes","lastModifiedDate":"2020-05-23"},{"lineNumber":152,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":153,"author":{"gitId":"-"},"content":"Classes used by multiple components are in the `seedu.addressbook.commons` package.","lastModifiedDate":"2020-05-23"},{"lineNumber":154,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":155,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":156,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":157,"author":{"gitId":"-"},"content":"## **Implementation**","lastModifiedDate":"2020-05-23"},{"lineNumber":158,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":159,"author":{"gitId":"-"},"content":"This section describes some noteworthy details on how certain features are implemented.","lastModifiedDate":"2020-05-23"},{"lineNumber":160,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":161,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Undo/redo feature","lastModifiedDate":"2020-06-07"},{"lineNumber":162,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":163,"author":{"gitId":"-"},"content":"#### Proposed Implementation","lastModifiedDate":"2020-05-23"},{"lineNumber":164,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":165,"author":{"gitId":"-"},"content":"The proposed undo/redo mechanism is facilitated by `VersionedAddressBook`. It extends `AddressBook` with an undo/redo history, stored internally as an `addressBookStateList` and `currentStatePointer`. Additionally, it implements the following operations:","lastModifiedDate":"2020-05-23"},{"lineNumber":166,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":167,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#commit()` — Saves the current address book state in its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":168,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#undo()` — Restores the previous address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":169,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#redo()` — Restores a previously undone address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":170,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":171,"author":{"gitId":"-"},"content":"These operations are exposed in the `Model` interface as `Model#commitAddressBook()`, `Model#undoAddressBook()` and `Model#redoAddressBook()` respectively.","lastModifiedDate":"2020-05-23"},{"lineNumber":172,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":173,"author":{"gitId":"-"},"content":"Given below is an example usage scenario and how the undo/redo mechanism behaves at each step.","lastModifiedDate":"2020-05-23"},{"lineNumber":174,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":175,"author":{"gitId":"-"},"content":"Step 1. The user launches the application for the first time. The `VersionedAddressBook` will be initialized with the initial address book state, and the `currentStatePointer` pointing to that single address book state.","lastModifiedDate":"2020-05-23"},{"lineNumber":176,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":177,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState0.puml\" alt\u003d\"UndoRedoState0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":178,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":179,"author":{"gitId":"-"},"content":"Step 2. The user executes `delete 5` command to delete the 5th person in the address book. The `delete` command calls `Model#commitAddressBook()`, causing the modified state of the address book after the `delete 5` command executes to be saved in the `addressBookStateList`, and the `currentStatePointer` is shifted to the newly inserted address book state.","lastModifiedDate":"2020-05-23"},{"lineNumber":180,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":181,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState1.puml\" alt\u003d\"UndoRedoState1\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":182,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":183,"author":{"gitId":"-"},"content":"Step 3. The user executes `add n/David …​` to add a new person. The `add` command also calls `Model#commitAddressBook()`, causing another modified address book state to be saved into the `addressBookStateList`.","lastModifiedDate":"2020-05-23"},{"lineNumber":184,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":185,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState2.puml\" alt\u003d\"UndoRedoState2\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":186,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":187,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":188,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":189,"author":{"gitId":"-"},"content":"**Note:** If a command fails its execution, it will not call `Model#commitAddressBook()`, so the address book state will not be saved into the `addressBookStateList`.","lastModifiedDate":"2023-09-12"},{"lineNumber":190,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":191,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":192,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":193,"author":{"gitId":"-"},"content":"Step 4. The user now decides that adding the person was a mistake, and decides to undo that action by executing the `undo` command. The `undo` command will call `Model#undoAddressBook()`, which will shift the `currentStatePointer` once to the left, pointing it to the previous address book state, and restores the address book to that state.","lastModifiedDate":"2020-05-23"},{"lineNumber":194,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":195,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState3.puml\" alt\u003d\"UndoRedoState3\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":196,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":197,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":198,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":199,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":200,"author":{"gitId":"-"},"content":"**Note:** If the `currentStatePointer` is at index 0, pointing to the initial AddressBook state, then there are no previous AddressBook states to restore. The `undo` command uses `Model#canUndoAddressBook()` to check if this is the case. If so, it will return an error to the user rather","lastModifiedDate":"2023-09-12"},{"lineNumber":201,"author":{"gitId":"-"},"content":"than attempting to perform the undo.","lastModifiedDate":"2020-05-23"},{"lineNumber":202,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":203,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":204,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":205,"author":{"gitId":"-"},"content":"The following sequence diagram shows how an undo operation goes through the `Logic` component:","lastModifiedDate":"2024-02-09"},{"lineNumber":206,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":207,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoSequenceDiagram-Logic.puml\" alt\u003d\"UndoSequenceDiagram-Logic\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":208,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":209,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":210,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":211,"author":{"gitId":"-"},"content":"**Note:** The lifeline for `UndoCommand` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram.","lastModifiedDate":"2023-09-12"},{"lineNumber":212,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":213,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":214,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":215,"author":{"gitId":"-"},"content":"Similarly, how an undo operation goes through the `Model` component is shown below:","lastModifiedDate":"2024-02-09"},{"lineNumber":216,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":217,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoSequenceDiagram-Model.puml\" alt\u003d\"UndoSequenceDiagram-Model\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":218,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":219,"author":{"gitId":"-"},"content":"The `redo` command does the opposite — it calls `Model#redoAddressBook()`, which shifts the `currentStatePointer` once to the right, pointing to the previously undone state, and restores the address book to that state.","lastModifiedDate":"2020-05-23"},{"lineNumber":220,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":221,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":222,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":223,"author":{"gitId":"-"},"content":"**Note:** If the `currentStatePointer` is at index `addressBookStateList.size() - 1`, pointing to the latest address book state, then there are no undone AddressBook states to restore. The `redo` command uses `Model#canRedoAddressBook()` to check if this is the case. If so, it will return an error to the user rather than attempting to perform the redo.","lastModifiedDate":"2023-09-12"},{"lineNumber":224,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":225,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":226,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":227,"author":{"gitId":"-"},"content":"Step 5. The user then decides to execute the command `list`. Commands that do not modify the address book, such as `list`, will usually not call `Model#commitAddressBook()`, `Model#undoAddressBook()` or `Model#redoAddressBook()`. Thus, the `addressBookStateList` remains unchanged.","lastModifiedDate":"2020-05-23"},{"lineNumber":228,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":229,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState4.puml\" alt\u003d\"UndoRedoState4\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":230,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":231,"author":{"gitId":"-"},"content":"Step 6. The user executes `clear`, which calls `Model#commitAddressBook()`. Since the `currentStatePointer` is not pointing at the end of the `addressBookStateList`, all address book states after the `currentStatePointer` will be purged. Reason: It no longer makes sense to redo the `add n/David …​` command. This is the behavior that most modern desktop applications follow.","lastModifiedDate":"2020-05-23"},{"lineNumber":232,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":233,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState5.puml\" alt\u003d\"UndoRedoState5\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":234,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":235,"author":{"gitId":"-"},"content":"The following activity diagram summarizes what happens when a user executes a new command:","lastModifiedDate":"2020-05-23"},{"lineNumber":236,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":237,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/CommitActivityDiagram.puml\" width\u003d\"250\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":238,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":239,"author":{"gitId":"-"},"content":"#### Design considerations:","lastModifiedDate":"2021-07-31"},{"lineNumber":240,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":241,"author":{"gitId":"-"},"content":"**Aspect: How undo \u0026 redo executes:**","lastModifiedDate":"2021-07-31"},{"lineNumber":242,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":243,"author":{"gitId":"-"},"content":"* **Alternative 1 (current choice):** Saves the entire address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":244,"author":{"gitId":"-"},"content":" * Pros: Easy to implement.","lastModifiedDate":"2020-05-23"},{"lineNumber":245,"author":{"gitId":"-"},"content":" * Cons: May have performance issues in terms of memory usage.","lastModifiedDate":"2020-05-23"},{"lineNumber":246,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":247,"author":{"gitId":"-"},"content":"* **Alternative 2:** Individual command knows how to undo/redo by","lastModifiedDate":"2020-05-23"},{"lineNumber":248,"author":{"gitId":"-"},"content":" itself.","lastModifiedDate":"2020-05-23"},{"lineNumber":249,"author":{"gitId":"-"},"content":" * Pros: Will use less memory (e.g. for `delete`, just save the person being deleted).","lastModifiedDate":"2020-05-23"},{"lineNumber":250,"author":{"gitId":"-"},"content":" * Cons: We must ensure that the implementation of each individual command are correct.","lastModifiedDate":"2020-05-23"},{"lineNumber":251,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":252,"author":{"gitId":"-"},"content":"_{more aspects and alternatives to be added}_","lastModifiedDate":"2020-05-23"},{"lineNumber":253,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":254,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Data archiving","lastModifiedDate":"2020-05-23"},{"lineNumber":255,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":256,"author":{"gitId":"-"},"content":"_{Explain here how the data archiving feature will be implemented}_","lastModifiedDate":"2020-05-23"},{"lineNumber":257,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":258,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":259,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":260,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":261,"author":{"gitId":"-"},"content":"## **Documentation, logging, testing, configuration, dev-ops**","lastModifiedDate":"2020-06-07"},{"lineNumber":262,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":263,"author":{"gitId":"-"},"content":"* [Documentation guide](Documentation.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":264,"author":{"gitId":"-"},"content":"* [Testing guide](Testing.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":265,"author":{"gitId":"-"},"content":"* [Logging guide](Logging.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":266,"author":{"gitId":"-"},"content":"* [Configuration guide](Configuration.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":267,"author":{"gitId":"-"},"content":"* [DevOps guide](DevOps.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":268,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":269,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":270,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":271,"author":{"gitId":"-"},"content":"## **Appendix: Requirements**","lastModifiedDate":"2020-05-23"},{"lineNumber":272,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":273,"author":{"gitId":"-"},"content":"### Product scope","lastModifiedDate":"2020-05-23"},{"lineNumber":274,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":275,"author":{"gitId":"-"},"content":"**Target user profile**:","lastModifiedDate":"2020-05-23"},{"lineNumber":276,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":277,"author":{"gitId":"-"},"content":"* has a need to manage a significant number of contacts","lastModifiedDate":"2020-05-23"},{"lineNumber":278,"author":{"gitId":"-"},"content":"* prefer desktop apps over other types","lastModifiedDate":"2020-05-23"},{"lineNumber":279,"author":{"gitId":"-"},"content":"* can type fast","lastModifiedDate":"2020-05-23"},{"lineNumber":280,"author":{"gitId":"-"},"content":"* prefers typing to mouse interactions","lastModifiedDate":"2020-05-26"},{"lineNumber":281,"author":{"gitId":"-"},"content":"* is reasonably comfortable using CLI apps","lastModifiedDate":"2020-05-23"},{"lineNumber":282,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":283,"author":{"gitId":"-"},"content":"**Value proposition**: manage contacts faster than a typical mouse/GUI driven app","lastModifiedDate":"2020-05-23"},{"lineNumber":284,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":285,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":286,"author":{"gitId":"-"},"content":"### User stories","lastModifiedDate":"2020-06-07"},{"lineNumber":287,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":288,"author":{"gitId":"-"},"content":"Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unlikely to have) - `*`","lastModifiedDate":"2020-05-23"},{"lineNumber":289,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":290,"author":{"gitId":"-"},"content":"| Priority | As a …​ | I want to …​ | So that I can…​ |","lastModifiedDate":"2020-05-23"},{"lineNumber":291,"author":{"gitId":"-"},"content":"|----------|--------------------------------------------|------------------------------|------------------------------------------------------------------------|","lastModifiedDate":"2023-09-12"},{"lineNumber":292,"author":{"gitId":"-"},"content":"| `* * *` | new user | see usage instructions | refer to instructions when I forget how to use the App |","lastModifiedDate":"2020-05-23"},{"lineNumber":293,"author":{"gitId":"-"},"content":"| `* * *` | user | add a new person | |","lastModifiedDate":"2020-05-23"},{"lineNumber":294,"author":{"gitId":"-"},"content":"| `* * *` | user | delete a person | remove entries that I no longer need |","lastModifiedDate":"2020-05-23"},{"lineNumber":295,"author":{"gitId":"-"},"content":"| `* * *` | user | find a person by name | locate details of persons without having to go through the entire list |","lastModifiedDate":"2020-05-23"},{"lineNumber":296,"author":{"gitId":"-"},"content":"| `* *` | user | hide private contact details | minimize chance of someone else seeing them by accident |","lastModifiedDate":"2020-05-23"},{"lineNumber":297,"author":{"gitId":"-"},"content":"| `*` | user with many persons in the address book | sort persons by name | locate a person easily |","lastModifiedDate":"2020-05-23"},{"lineNumber":298,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":299,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":300,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":301,"author":{"gitId":"-"},"content":"### Use cases","lastModifiedDate":"2020-06-07"},{"lineNumber":302,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":303,"author":{"gitId":"-"},"content":"(For all use cases below, the **System** is the `AddressBook` and the **Actor** is the `user`, unless specified otherwise)","lastModifiedDate":"2020-05-23"},{"lineNumber":304,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":305,"author":{"gitId":"-"},"content":"**Use case: Delete a person**","lastModifiedDate":"2020-05-23"},{"lineNumber":306,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":307,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2020-05-23"},{"lineNumber":308,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":309,"author":{"gitId":"-"},"content":"1. User requests to list persons","lastModifiedDate":"2020-05-23"},{"lineNumber":310,"author":{"gitId":"-"},"content":"2. AddressBook shows a list of persons","lastModifiedDate":"2020-05-23"},{"lineNumber":311,"author":{"gitId":"-"},"content":"3. User requests to delete a specific person in the list","lastModifiedDate":"2020-05-23"},{"lineNumber":312,"author":{"gitId":"-"},"content":"4. AddressBook deletes the person","lastModifiedDate":"2020-05-23"},{"lineNumber":313,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":314,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":315,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":316,"author":{"gitId":"-"},"content":"**Extensions**","lastModifiedDate":"2020-05-23"},{"lineNumber":317,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":318,"author":{"gitId":"-"},"content":"* 2a. The list is empty.","lastModifiedDate":"2020-05-23"},{"lineNumber":319,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":320,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":321,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":322,"author":{"gitId":"-"},"content":"* 3a. The given index is invalid.","lastModifiedDate":"2020-05-23"},{"lineNumber":323,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":324,"author":{"gitId":"-"},"content":" * 3a1. AddressBook shows an error message.","lastModifiedDate":"2020-05-23"},{"lineNumber":325,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":326,"author":{"gitId":"-"},"content":" Use case resumes at step 2.","lastModifiedDate":"2020-05-23"},{"lineNumber":327,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":328,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":329,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":330,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":331,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":332,"author":{"gitId":"-"},"content":"1. Should work on any _mainstream OS_ as long as it has Java `11` or above installed.","lastModifiedDate":"2020-05-23"},{"lineNumber":333,"author":{"gitId":"-"},"content":"2. Should be able to hold up to 1000 persons without a noticeable sluggishness in performance for typical usage.","lastModifiedDate":"2020-05-23"},{"lineNumber":334,"author":{"gitId":"-"},"content":"3. A user with above average typing speed for regular English text (i.e. not code, not system admin commands) should be able to accomplish most of the tasks faster using commands than using the mouse.","lastModifiedDate":"2020-05-23"},{"lineNumber":335,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":336,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":337,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":338,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":339,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":340,"author":{"gitId":"yiwern5"},"content":"* **Efficiency**: The employee\u0027s default efficiency score is 80% and capped at 100%. Efficiency will increase by 1% when the employee completes an assigned task within the deadline and decrease by 1% for each subsequent day the deadline is exceeded.","lastModifiedDate":"2024-03-07"},{"lineNumber":341,"author":{"gitId":"yiwern5"},"content":"* **Efficiency Threshold**: A user-defined benchmark in the app, classifying employee performance. For instance, a threshold below 20% indicates poor performance, while 20-50% suggests problematic performance requiring attention.","lastModifiedDate":"2024-03-07"},{"lineNumber":342,"author":{"gitId":"yiwern5"},"content":"* **Fire list**: List of employees who are below the efficiency threshold.","lastModifiedDate":"2024-03-07"},{"lineNumber":343,"author":{"gitId":"yiwern5"},"content":"* **Key Performance Indicators (KPIs)**: Quantifiable measures used to evaluate the success of an employee or a department in achieving specific objectives.","lastModifiedDate":"2024-03-07"},{"lineNumber":344,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":345,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":346,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":347,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":348,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":349,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":350,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":351,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":352,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":353,"author":{"gitId":"-"},"content":"**Note:** These instructions only provide a starting point for testers to work on;","lastModifiedDate":"2023-09-12"},{"lineNumber":354,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":355,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":356,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":357,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":358,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":359,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":360,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":361,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":362,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":363,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":364,"author":{"gitId":"-"},"content":" 1. Double-click the jar file Expected: Shows the GUI with a set of sample contacts. The window size may not be optimum.","lastModifiedDate":"2020-05-23"},{"lineNumber":365,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":366,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":367,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":368,"author":{"gitId":"-"},"content":" 1. Resize the window to an optimum size. Move the window to a different location. Close the window.","lastModifiedDate":"2020-05-23"},{"lineNumber":369,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":370,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":371,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","lastModifiedDate":"2020-05-23"},{"lineNumber":372,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":373,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":374,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":375,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":376,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":377,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":378,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":379,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":380,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":381,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":382,"author":{"gitId":"-"},"content":" Expected: First contact is deleted from the list. Details of the deleted contact shown in the status message. Timestamp in the status bar is updated.","lastModifiedDate":"2020-05-23"},{"lineNumber":383,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":384,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":385,"author":{"gitId":"-"},"content":" Expected: No person is deleted. Error details shown in the status message. Status bar remains the same.","lastModifiedDate":"2020-05-23"},{"lineNumber":386,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":387,"author":{"gitId":"-"},"content":" 1. Other incorrect delete commands to try: `delete`, `delete x`, `...` (where x is larger than the list size)\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":388,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":389,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":390,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":391,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":392,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":393,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":394,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":395,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":396,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":397,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":398,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"yiwern5":6,"-":392}},{"path":"docs/_markbind/layouts/default.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003chead-bottom\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003clink rel\u003d\"stylesheet\" href\u003d\"{{baseUrl}}/stylesheets/main.css\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003c/head-bottom\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cheader sticky\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cnavbar type\u003d\"dark\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"yiwern5"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"{{baseUrl}}/index.html\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003eEffiTrack\u003c/a\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/index.html\" class\u003d\"nav-link\"\u003eHome\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/UserGuide.html\" class\u003d\"nav-link\"\u003eUser Guide\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/DeveloperGuide.html\" class\u003d\"nav-link\"\u003eDeveloper Guide\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/AboutUs.html\" class\u003d\"nav-link\"\u003eAbout Us\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"https://github.com/se-edu/addressbook-level3\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003e\u003cmd\u003e:fab-github:\u003c/md\u003e\u003c/a\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003cli slot\u003d\"right\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003cform class\u003d\"navbar-form\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\" menu-align-right\u003e\u003c/searchbar\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003c/form\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003c/navbar\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"-"},"content":"\u003c/header\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"flex-body\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"site-nav\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"site-nav-top\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"fw-bold mb-2\" style\u003d\"font-size: 1.25rem;\"\u003eSite Map\u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003csite-nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"-"},"content":"* [Home]({{ baseUrl }}/index.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"-"},"content":"* [User Guide]({{ baseUrl }}/UserGuide.html) :expanded:","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * [Quick Start]({{ baseUrl }}/UserGuide.html#quick-start)","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"-"},"content":" * [Features]({{ baseUrl }}/UserGuide.html#features)","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * [FAQ]({{ baseUrl }}/UserGuide.html#faq)","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * [Command Summary]({{ baseUrl }}/UserGuide.html#faq)","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"-"},"content":"* [Developer Guide]({{ baseUrl }}/DeveloperGuide.html) :expanded:","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * [Acknowledgements]({{ baseUrl }}/DeveloperGuide.html#acknowledgements)","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * [Setting Up]({{ baseUrl }}/DeveloperGuide.html#setting-up-getting-started)","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"-"},"content":" * [Design]({{ baseUrl }}/DeveloperGuide.html#design)","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * [Implementation]({{ baseUrl }}/DeveloperGuide.html#implementation)","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"-"},"content":" * [Documentation, logging, testing, configuration, dev-ops]({{ baseUrl }}/DeveloperGuide.html#documentation-logging-testing-configuration-dev-ops)","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * [Appendix: Requirements]({{ baseUrl }}/DeveloperGuide.html#appendix-requirements)","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * [Appendix: Instructions for manual testing]({{ baseUrl }}/DeveloperGuide.html#appendix-instructions-for-manual-testing)","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"-"},"content":"* Tutorials","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * [Tracing code]({{ baseUrl }}/tutorials/TracingCode.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"-"},"content":" * [Adding a command]({{ baseUrl }}/tutorials/AddRemark.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"-"},"content":" * [Removing Fields]({{ baseUrl }}/tutorials/RemovingFields.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* [About Us]({{ baseUrl }}/AboutUs.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003c/site-nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003c/nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003cdiv id\u003d\"content-wrapper\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"-"},"content":" {{ content }}","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"page-nav\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"-"},"content":" \u003cpage-nav /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"-"},"content":" \u003c/nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"-"},"content":" \u003cscroll-top-button\u003e\u003c/scroll-top-button\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"-"},"content":"\u003cfooter\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u003c!-- Support MarkBind by including a link to us on your landing page! --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"text-center\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"-"},"content":" \u003csmall\u003e[\u003cmd\u003e**Powered by**\u003c/md\u003e \u003cimg src\u003d\"https://markbind.org/favicon.ico\" width\u003d\"30\"\u003e {{MarkBind}}, generated on {{timestamp}}]\u003c/small\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"-"},"content":"\u003c/footer\u003e","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"yiwern5":1,"-":66}}] diff --git a/AY2324S2-CS2103T-T14-1_tp_master/commits.json b/AY2324S2-CS2103T-T14-1_tp_master/commits.json index 68720c85..4e19ea00 100644 --- a/AY2324S2-CS2103T-T14-1_tp_master/commits.json +++ b/AY2324S2-CS2103T-T14-1_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"KiatLun":[],"yiwern5":[{"date":"2024-02-26","commitResults":[{"hash":"6f56dc07d867733f444ba907d97d818fb135ef56","isMergeCommit":false,"messageTitle":"Configure MarkBind","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"cd676177dcfec166a93be5b66897d883194aa9d0","isMergeCommit":true,"messageTitle":"Merge pull request #1 from AY2324S2-CS2103T-T14-1/switch-docs-to-markbind","messageBody":"Switch docs to markbind","fileTypesAndContributionMap":{}}]},{"date":"2024-03-04","commitResults":[{"hash":"49f56bf1f16bc1b4f9b45fab550e3193cf15deee","isMergeCommit":false,"messageTitle":"Adding Command","messageBody":"Tutorial\n","fileTypesAndContributionMap":{"functional-code":{"insertions":314,"deletions":118},"test-code":{"insertions":169,"deletions":15}}},{"hash":"4768e4fe53a49a57f47be123d799d9ec400714d8","isMergeCommit":false,"messageTitle":"Fix Adding Command","messageBody":"Checkstyle and run tests\n","fileTypesAndContributionMap":{"functional-code":{"insertions":61,"deletions":54},"test-code":{"insertions":135,"deletions":135}}}]},{"date":"2024-03-05","commitResults":[{"hash":"511c44cecc89f2f6718ac05c43a82e68f9c0943a","isMergeCommit":false,"messageTitle":"About Us and DG","messageBody":"Update photo and product name\n","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":6}}}]},{"date":"2024-03-06","commitResults":[{"hash":"446b52e4df9e8f787e4d738af25433ea859cb1b8","isMergeCommit":false,"messageTitle":"About Us and Project Website","messageBody":"Update github link and title prefix\n","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":5}}},{"hash":"66eef5ead03625a386d197d4c9e6868cb75914eb","isMergeCommit":true,"messageTitle":"About Us and Project Website","messageBody":"About Us and Project Website","fileTypesAndContributionMap":{}}]},{"date":"2024-03-07","commitResults":[{"hash":"24a0de7bdaa4cf9f639aa2b0c2827d0b141f9046","isMergeCommit":false,"messageTitle":"Update README and About Us pic","messageBody":"update readme\n","fileTypesAndContributionMap":{"docs":{"insertions":36,"deletions":11}}},{"hash":"db1d6daf8f792e304e3f080044ad5adb9b78730e","isMergeCommit":false,"messageTitle":"Update README and About Us pic","messageBody":"update readme\n","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"49b61ee830e2022f0ad3f7ee85a1be83bc699b3d","isMergeCommit":true,"messageTitle":"Update README and About Us pic","messageBody":"Update README and About Us pic","fileTypesAndContributionMap":{}}]}],"ziyi22":[{"date":"2024-03-07","commitResults":[{"hash":"b6a009b7d3c9d00f0b0140c814c12aef2ad548b9","isMergeCommit":false,"messageTitle":"Edit AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}},{"hash":"669de9ea51844376e913ba0686a976c9961f8c1e","isMergeCommit":false,"messageTitle":"Edit AboutUs.md: Edit github link","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"76e76931a89794f8153b85b8257dc3a622595f9c","isMergeCommit":true,"messageTitle":"Merge pull request #34 from ziyi22/branch-update-AboutUs","messageBody":"Edit AboutUs.md","fileTypesAndContributionMap":{}}]}],"howen02":[{"date":"2024-03-05","commitResults":[{"hash":"835e0ad385ba8724647dcff810f1d4317b343ca7","isMergeCommit":true,"messageTitle":"Merge pull request #22 from yiwern5/yiwern-pw","messageBody":"Yi Wern About Us","fileTypesAndContributionMap":{}},{"hash":"4a4a2b6c4c514394b93d33b28d45e0dda177cec3","isMergeCommit":false,"messageTitle":"Revert \"Fix Adding Command\"","messageBody":"This reverts commit 4768e4fe53a49a57f47be123d799d9ec400714d8.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":54,"deletions":61},"test-code":{"insertions":135,"deletions":135}}},{"hash":"8e2519485cab2974d15edf2d0b22ff7a1375f4ee","isMergeCommit":false,"messageTitle":"Revert \"Adding Command\"","messageBody":"This reverts commit 49f56bf1f16bc1b4f9b45fab550e3193cf15deee.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":118,"deletions":314},"test-code":{"insertions":15,"deletions":169}}},{"hash":"7f2858d449394b63e01b1bd4337dd8359ccff147","isMergeCommit":true,"messageTitle":"Merge pull request #24 from howen02/master","messageBody":"Undo tutorial pull request","fileTypesAndContributionMap":{}}]},{"date":"2024-03-07","commitResults":[{"hash":"eb7aa66746862101b40580b6b47bad13b2db533b","isMergeCommit":false,"messageTitle":"Update my section in AboutUs Update product logo and titleSuffix in site.json","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"8b7c00a58abd96a31919a96a9417f1eb9e2b1cb6","isMergeCommit":true,"messageTitle":"Merge pull request #32 from howen02/master","messageBody":"Update my section in AboutUs","fileTypesAndContributionMap":{}}]}],"wolffe88":[{"date":"2024-03-06","commitResults":[{"hash":"e8538b4a625368206a00804a45d83dac97530dfa","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":3}}},{"hash":"da334d9a9fe423b99902cbadfbd7dff5d072811d","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"98c1b30267832ffe155c3dc763574deb7cfff5ab","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":2}}}]},{"date":"2024-03-07","commitResults":[{"hash":"dd70f4f9622cac0f430a574fc3e9d4283ecb2bfa","isMergeCommit":true,"messageTitle":"Merge pull request #26 from wolffe88/master","messageBody":"added profile in about us","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"KiatLun":{"docs":0,"functional-code":0,"test-code":0},"yiwern5":{"docs":43,"functional-code":0,"test-code":0},"ziyi22":{"docs":4,"functional-code":0,"test-code":0},"howen02":{"docs":6,"functional-code":0,"test-code":0},"wolffe88":{"docs":4,"functional-code":0,"test-code":0}},"authorContributionVariance":{"KiatLun":0.0,"yiwern5":65894.96,"ziyi22":4.244898,"howen02":66329.25,"wolffe88":13.0},"authorDisplayNameMap":{"KiatLun":"CS2103T-T14-1 KHOO.. LUN","yiwern5":"CS2103T-T14-1 TSUI..WERN","ziyi22":"CS2103T-T14-1 YEO ..I YI","howen02":"CS2103T-T14-1 YAP .. WEN","wolffe88":"CS2103T-T14-1 YONG..I AN"}} +{"authorDailyContributionsMap":{"KiatLun":[],"yiwern5":[{"date":"2024-02-26","commitResults":[{"hash":"6f56dc07d867733f444ba907d97d818fb135ef56","isMergeCommit":false,"messageTitle":"Configure MarkBind","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"cd676177dcfec166a93be5b66897d883194aa9d0","isMergeCommit":true,"messageTitle":"Merge pull request #1 from AY2324S2-CS2103T-T14-1/switch-docs-to-markbind","messageBody":"Switch docs to markbind","fileTypesAndContributionMap":{}}]},{"date":"2024-03-04","commitResults":[{"hash":"49f56bf1f16bc1b4f9b45fab550e3193cf15deee","isMergeCommit":false,"messageTitle":"Adding Command","messageBody":"Tutorial\n","fileTypesAndContributionMap":{"functional-code":{"insertions":314,"deletions":118},"test-code":{"insertions":169,"deletions":15}}},{"hash":"4768e4fe53a49a57f47be123d799d9ec400714d8","isMergeCommit":false,"messageTitle":"Fix Adding Command","messageBody":"Checkstyle and run tests\n","fileTypesAndContributionMap":{"functional-code":{"insertions":61,"deletions":54},"test-code":{"insertions":135,"deletions":135}}}]},{"date":"2024-03-05","commitResults":[{"hash":"511c44cecc89f2f6718ac05c43a82e68f9c0943a","isMergeCommit":false,"messageTitle":"About Us and DG","messageBody":"Update photo and product name\n","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":6}}}]},{"date":"2024-03-06","commitResults":[{"hash":"446b52e4df9e8f787e4d738af25433ea859cb1b8","isMergeCommit":false,"messageTitle":"About Us and Project Website","messageBody":"Update github link and title prefix\n","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":5}}},{"hash":"66eef5ead03625a386d197d4c9e6868cb75914eb","isMergeCommit":true,"messageTitle":"About Us and Project Website","messageBody":"About Us and Project Website","fileTypesAndContributionMap":{}}]},{"date":"2024-03-07","commitResults":[{"hash":"24a0de7bdaa4cf9f639aa2b0c2827d0b141f9046","isMergeCommit":false,"messageTitle":"Update README and About Us pic","messageBody":"update readme\n","fileTypesAndContributionMap":{"docs":{"insertions":36,"deletions":11}}},{"hash":"db1d6daf8f792e304e3f080044ad5adb9b78730e","isMergeCommit":false,"messageTitle":"Update README and About Us pic","messageBody":"update readme\n","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"49b61ee830e2022f0ad3f7ee85a1be83bc699b3d","isMergeCommit":true,"messageTitle":"Update README and About Us pic","messageBody":"Update README and About Us pic","fileTypesAndContributionMap":{}},{"hash":"0b2d156d686edcf31212432072f11f5100e0351b","isMergeCommit":false,"messageTitle":"Update Dev Guide","messageBody":"Glossary\n","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":2}}}]},{"date":"2024-03-08","commitResults":[{"hash":"813edfe8872fc1821e9047efac564c7b6150d43a","isMergeCommit":true,"messageTitle":"Merge pull request #36 from yiwern5/yw-dg","messageBody":"Update Dev Guide","fileTypesAndContributionMap":{}}]}],"ziyi22":[{"date":"2024-03-07","commitResults":[{"hash":"b6a009b7d3c9d00f0b0140c814c12aef2ad548b9","isMergeCommit":false,"messageTitle":"Edit AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}},{"hash":"669de9ea51844376e913ba0686a976c9961f8c1e","isMergeCommit":false,"messageTitle":"Edit AboutUs.md: Edit github link","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"76e76931a89794f8153b85b8257dc3a622595f9c","isMergeCommit":true,"messageTitle":"Merge pull request #34 from ziyi22/branch-update-AboutUs","messageBody":"Edit AboutUs.md","fileTypesAndContributionMap":{}}]}],"howen02":[{"date":"2024-03-05","commitResults":[{"hash":"835e0ad385ba8724647dcff810f1d4317b343ca7","isMergeCommit":true,"messageTitle":"Merge pull request #22 from yiwern5/yiwern-pw","messageBody":"Yi Wern About Us","fileTypesAndContributionMap":{}},{"hash":"4a4a2b6c4c514394b93d33b28d45e0dda177cec3","isMergeCommit":false,"messageTitle":"Revert \"Fix Adding Command\"","messageBody":"This reverts commit 4768e4fe53a49a57f47be123d799d9ec400714d8.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":54,"deletions":61},"test-code":{"insertions":135,"deletions":135}}},{"hash":"8e2519485cab2974d15edf2d0b22ff7a1375f4ee","isMergeCommit":false,"messageTitle":"Revert \"Adding Command\"","messageBody":"This reverts commit 49f56bf1f16bc1b4f9b45fab550e3193cf15deee.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":118,"deletions":314},"test-code":{"insertions":15,"deletions":169}}},{"hash":"7f2858d449394b63e01b1bd4337dd8359ccff147","isMergeCommit":true,"messageTitle":"Merge pull request #24 from howen02/master","messageBody":"Undo tutorial pull request","fileTypesAndContributionMap":{}}]},{"date":"2024-03-07","commitResults":[{"hash":"eb7aa66746862101b40580b6b47bad13b2db533b","isMergeCommit":false,"messageTitle":"Update my section in AboutUs Update product logo and titleSuffix in site.json","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"8b7c00a58abd96a31919a96a9417f1eb9e2b1cb6","isMergeCommit":true,"messageTitle":"Merge pull request #32 from howen02/master","messageBody":"Update my section in AboutUs","fileTypesAndContributionMap":{}}]}],"wolffe88":[{"date":"2024-03-06","commitResults":[{"hash":"e8538b4a625368206a00804a45d83dac97530dfa","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":3}}},{"hash":"da334d9a9fe423b99902cbadfbd7dff5d072811d","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"98c1b30267832ffe155c3dc763574deb7cfff5ab","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":2}}}]},{"date":"2024-03-07","commitResults":[{"hash":"dd70f4f9622cac0f430a574fc3e9d4283ecb2bfa","isMergeCommit":true,"messageTitle":"Merge pull request #26 from wolffe88/master","messageBody":"added profile in about us","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"KiatLun":{"docs":0,"functional-code":0,"test-code":0},"yiwern5":{"docs":47,"functional-code":0,"test-code":0},"ziyi22":{"docs":4,"functional-code":0,"test-code":0},"howen02":{"docs":6,"functional-code":0,"test-code":0},"wolffe88":{"docs":4,"functional-code":0,"test-code":0}},"authorContributionVariance":{"KiatLun":0.0,"yiwern5":61851.043,"ziyi22":3.9822223,"howen02":62234.35,"wolffe88":12.195555},"authorDisplayNameMap":{"KiatLun":"CS2103T-T14-1 KHOO.. LUN","yiwern5":"CS2103T-T14-1 TSUI..WERN","ziyi22":"CS2103T-T14-1 YEO ..I YI","howen02":"CS2103T-T14-1 YAP .. WEN","wolffe88":"CS2103T-T14-1 YONG..I AN"}} diff --git a/AY2324S2-CS2103T-W09-2_tp_master/authorship.json b/AY2324S2-CS2103T-W09-2_tp_master/authorship.json index ef7b6a8e..b9643f0d 100644 --- a/AY2324S2-CS2103T-W09-2_tp_master/authorship.json +++ b/AY2324S2-CS2103T-W09-2_tp_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"menatahari"},"content":"[![CI Status](https://github.com/AY2324S2-CS2103T-W09-2/tp/workflows/Java%20CI/badge.svg)](https://github.com/AY2324S2-CS2103T-W09-2/tp/actions)","lastModifiedDate":"2024-03-07"},{"lineNumber":2,"author":{"gitId":"menatahari"},"content":"# Capital Connect #","lastModifiedDate":"2024-03-07"},{"lineNumber":3,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"![Ui](docs/images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"menatahari"},"content":"## Description ##","lastModifiedDate":"2024-03-07"},{"lineNumber":7,"author":{"gitId":"menatahari"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":8,"author":{"gitId":"menatahari"},"content":"---","lastModifiedDate":"2024-03-07"},{"lineNumber":9,"author":{"gitId":"menatahari"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":10,"author":{"gitId":"menatahari"},"content":"Capital Connect is an app that is designed to streamline the management of startup investments, enabling VC firms to easily add, categorize, and track a diverse portfolio of investments in various industries and funding stages.","lastModifiedDate":"2024-03-07"},{"lineNumber":11,"author":{"gitId":"menatahari"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":12,"author":{"gitId":"menatahari"},"content":"## Documentation ##","lastModifiedDate":"2024-03-07"},{"lineNumber":13,"author":{"gitId":"menatahari"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":14,"author":{"gitId":"menatahari"},"content":"---","lastModifiedDate":"2024-03-07"},{"lineNumber":15,"author":{"gitId":"menatahari"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":16,"author":{"gitId":"menatahari"},"content":"For the detailed documentation of this project, see the **[Capital Connect Product Website](https://ay2324s2-cs2103t-w09-2.github.io/tp/)**.","lastModifiedDate":"2024-03-07"},{"lineNumber":17,"author":{"gitId":"menatahari"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":18,"author":{"gitId":"menatahari"},"content":"## Credits and Acknowledgements ##","lastModifiedDate":"2024-03-07"},{"lineNumber":19,"author":{"gitId":"menatahari"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":20,"author":{"gitId":"menatahari"},"content":"---","lastModifiedDate":"2024-03-07"},{"lineNumber":21,"author":{"gitId":"menatahari"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":22,"author":{"gitId":"menatahari"},"content":"* This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-03-07"}],"authorContributionMap":{"menatahari":19,"-":3}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"About Us\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"# About Us","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"-"},"content":"We are a team based in the [School of Computing, National University of Singapore](http://www.comp.nus.edu.sg).","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":10,"author":{"gitId":"-"},"content":"You can reach us at the email `seer[at]comp.nus.edu.sg`","lastModifiedDate":"2020-06-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-06-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":"## Project team","lastModifiedDate":"2020-06-07"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":14,"author":{"gitId":"yeoshuheng"},"content":"### Yeo Shu Heng","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"yeoshuheng"},"content":"\u003cimg src\u003d\"images/yeoshuheng.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"yeoshuheng"},"content":"[[homepage](https://www.linkedin.com/in/yeoshuheng/)]","lastModifiedDate":"2024-02-25"},{"lineNumber":19,"author":{"gitId":"yeoshuheng"},"content":"[[github](https://github.com/yeoshuheng)]","lastModifiedDate":"2024-02-25"},{"lineNumber":20,"author":{"gitId":"yeoshuheng"},"content":"[[portfolio](team/shuheng.md)]","lastModifiedDate":"2024-02-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"yeoshuheng"},"content":"* Role: Developer","lastModifiedDate":"2024-02-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"dwangwk"},"content":"### Daniel Wang","lastModifiedDate":"2024-03-07"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"dwangwk"},"content":"\u003cimg src\u003d\"images/wangwenkaidaniel.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-07"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"dwangwk"},"content":"[[github](http://github.com/dwangwk)]","lastModifiedDate":"2024-03-07"},{"lineNumber":29,"author":{"gitId":"dwangwk"},"content":"[[portfolio](team/danielwang.md)]","lastModifiedDate":"2024-03-07"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2024-03-07"},{"lineNumber":32,"author":{"gitId":"-"},"content":"* Responsibilities: Data","lastModifiedDate":"2024-03-07"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"dwangwk"},"content":"### Ye Si Fan","lastModifiedDate":"2024-03-07"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"dwangwk"},"content":"\u003cimg src\u003d\"images/yesifan.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-07"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"dwangwk"},"content":"[[github](http://github.com/yespiggy)] [[portfolio](team/sifan.md)]","lastModifiedDate":"2024-03-07"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":40,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":41,"author":{"gitId":"dwangwk"},"content":"* Responsibilities: UI","lastModifiedDate":"2024-03-07"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"dwangwk"},"content":"### Natasya Hadiatullah Buhari","lastModifiedDate":"2024-03-07"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/johndoe.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2020-06-17"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"dwangwk"},"content":"[[github](http://github.com/menatahari)]","lastModifiedDate":"2024-03-07"},{"lineNumber":48,"author":{"gitId":"dwangwk"},"content":"[[portfolio](team/natasya.md)]","lastModifiedDate":"2024-03-07"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":50,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"dwangwk"},"content":"* Responsibilities: Dev Ops","lastModifiedDate":"2024-03-07"}],"authorContributionMap":{"dwangwk":12,"-":33,"yeoshuheng":6}},{"path":"docs/DeveloperGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"Developer Guide\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":" pageNav: 3","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"yespiggy"},"content":"# CapitalConnect Developer Guide","lastModifiedDate":"2024-03-07"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c!-- * Table of Contents --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003cpage-nav-print /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":14,"author":{"gitId":"-"},"content":"## **Acknowledgements**","lastModifiedDate":"2021-07-30"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":16,"author":{"gitId":"-"},"content":"_{ list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the original source as well }_","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":18,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2021-07-30"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"-"},"content":"## **Setting up, getting started**","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"Refer to the guide [_Setting up and getting started_](SettingUp.md).","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"-"},"content":"## **Design**","lastModifiedDate":"2020-05-23"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":"### Architecture","lastModifiedDate":"2021-07-31"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ArchitectureDiagram.puml\" width\u003d\"280\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"-"},"content":"The ***Architecture Diagram*** given above explains the high-level design of the App.","lastModifiedDate":"2021-07-31"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"-"},"content":"Given below is a quick overview of main components and how they interact with each other.","lastModifiedDate":"2021-07-31"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":36,"author":{"gitId":"-"},"content":"**Main components of the architecture**","lastModifiedDate":"2021-07-31"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":"**`Main`** (consisting of classes [`Main`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/Main.java) and [`MainApp`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/MainApp.java)) is in charge of the app launch and shut down.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"-"},"content":"* At app launch, it initializes the other components in the correct sequence, and connects them up with each other.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"-"},"content":"* At shut down, it shuts down the other components and invokes cleanup methods where necessary.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":"The bulk of the app\u0027s work is done by the following four components:","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"-"},"content":"* [**`UI`**](#ui-component): The UI of the App.","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":"* [**`Logic`**](#logic-component): The command executor.","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":"* [**`Model`**](#model-component): Holds the data of the App in memory.","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* [**`Storage`**](#storage-component): Reads data from, and writes data to, the hard disk.","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"-"},"content":"[**`Commons`**](#common-classes) represents a collection of classes used by multiple other components.","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"-"},"content":"**How the architecture components interact with each other**","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":"The *Sequence Diagram* below shows how the components interact with each other for the scenario where the user issues the command `delete 1`.","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ArchitectureSequenceDiagram.puml\" width\u003d\"574\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":57,"author":{"gitId":"-"},"content":"Each of the four main components (also shown in the diagram above),","lastModifiedDate":"2021-07-31"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":59,"author":{"gitId":"-"},"content":"* defines its *API* in an `interface` with the same name as the Component.","lastModifiedDate":"2021-07-31"},{"lineNumber":60,"author":{"gitId":"-"},"content":"* implements its functionality using a concrete `{Component Name}Manager` class (which follows the corresponding API `interface` mentioned in the previous point.","lastModifiedDate":"2021-07-31"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":62,"author":{"gitId":"-"},"content":"For example, the `Logic` component defines its API in the `Logic.java` interface and implements its functionality using the `LogicManager.java` class which follows the `Logic` interface. Other components interact with a given component through its interface rather than the concrete class (reason: to prevent outside component\u0027s being coupled to the implementation of a component), as illustrated in the (partial) class diagram below.","lastModifiedDate":"2021-07-31"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":64,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ComponentManagers.puml\" width\u003d\"300\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":66,"author":{"gitId":"-"},"content":"The sections below give more details of each component.","lastModifiedDate":"2020-05-23"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":68,"author":{"gitId":"-"},"content":"### UI component","lastModifiedDate":"2020-05-23"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":70,"author":{"gitId":"-"},"content":"The **API** of this component is specified in [`Ui.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/Ui.java)","lastModifiedDate":"2021-07-31"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":72,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UiClassDiagram.puml\" alt\u003d\"Structure of the UI Component\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":74,"author":{"gitId":"-"},"content":"The UI consists of a `MainWindow` that is made up of parts e.g.`CommandBox`, `ResultDisplay`, `PersonListPanel`, `StatusBarFooter` etc. All these, including the `MainWindow`, inherit from the abstract `UiPart` class which captures the commonalities between classes that represent parts of the visible GUI.","lastModifiedDate":"2021-07-31"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":76,"author":{"gitId":"-"},"content":"The `UI` component uses the JavaFx UI framework. The layout of these UI parts are defined in matching `.fxml` files that are in the `src/main/resources/view` folder. For example, the layout of the [`MainWindow`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/MainWindow.java) is specified in [`MainWindow.fxml`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/resources/view/MainWindow.fxml)","lastModifiedDate":"2021-07-31"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":78,"author":{"gitId":"-"},"content":"The `UI` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":80,"author":{"gitId":"-"},"content":"* executes user commands using the `Logic` component.","lastModifiedDate":"2021-07-31"},{"lineNumber":81,"author":{"gitId":"-"},"content":"* listens for changes to `Model` data so that the UI can be updated with the modified data.","lastModifiedDate":"2021-07-31"},{"lineNumber":82,"author":{"gitId":"-"},"content":"* keeps a reference to the `Logic` component, because the `UI` relies on the `Logic` to execute commands.","lastModifiedDate":"2021-07-31"},{"lineNumber":83,"author":{"gitId":"-"},"content":"* depends on some classes in the `Model` component, as it displays `Person` object residing in the `Model`.","lastModifiedDate":"2021-07-31"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":85,"author":{"gitId":"-"},"content":"### Logic component","lastModifiedDate":"2020-05-23"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":87,"author":{"gitId":"-"},"content":"**API** : [`Logic.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/logic/Logic.java)","lastModifiedDate":"2021-07-31"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":89,"author":{"gitId":"-"},"content":"Here\u0027s a (partial) class diagram of the `Logic` component:","lastModifiedDate":"2021-07-31"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":91,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/LogicClassDiagram.puml\" width\u003d\"550\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":93,"author":{"gitId":"-"},"content":"The sequence diagram below illustrates the interactions within the `Logic` component, taking `execute(\"delete 1\")` API call as an example.","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":95,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/DeleteSequenceDiagram.puml\" alt\u003d\"Interactions Inside the Logic Component for the `delete 1` Command\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":97,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":98,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":99,"author":{"gitId":"-"},"content":"**Note:** The lifeline for `DeleteCommandParser` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline continues till the end of diagram.","lastModifiedDate":"2023-09-12"},{"lineNumber":100,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":101,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":102,"author":{"gitId":"-"},"content":"How the `Logic` component works:","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"-"},"content":"1. When `Logic` is called upon to execute a command, it is passed to an `AddressBookParser` object which in turn creates a parser that matches the command (e.g., `DeleteCommandParser`) and uses it to parse the command.","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"-"},"content":"1. This results in a `Command` object (more precisely, an object of one of its subclasses e.g., `DeleteCommand`) which is executed by the `LogicManager`.","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"-"},"content":"1. The command can communicate with the `Model` when it is executed (e.g. to delete a person).\u003cbr\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":107,"author":{"gitId":"-"},"content":" Note that although this is shown as a single step in the diagram above (for simplicity), in the code it can take several interactions (between the command object and the `Model`) to achieve.","lastModifiedDate":"2024-02-09"},{"lineNumber":108,"author":{"gitId":"-"},"content":"1. The result of the command execution is encapsulated as a `CommandResult` object which is returned back from `Logic`.","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"-"},"content":"Here are the other classes in `Logic` (omitted from the class diagram above) that are used for parsing a user command:","lastModifiedDate":"2021-07-31"},{"lineNumber":111,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":112,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ParserClasses.puml\" width\u003d\"600\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":114,"author":{"gitId":"-"},"content":"How the parsing works:","lastModifiedDate":"2021-07-31"},{"lineNumber":115,"author":{"gitId":"-"},"content":"* When called upon to parse a user command, the `AddressBookParser` class creates an `XYZCommandParser` (`XYZ` is a placeholder for the specific command name e.g., `AddCommandParser`) which uses the other classes shown above to parse the user command and create a `XYZCommand` object (e.g., `AddCommand`) which the `AddressBookParser` returns back as a `Command` object.","lastModifiedDate":"2021-07-31"},{"lineNumber":116,"author":{"gitId":"-"},"content":"* All `XYZCommandParser` classes (e.g., `AddCommandParser`, `DeleteCommandParser`, ...) inherit from the `Parser` interface so that they can be treated similarly where possible e.g, during testing.","lastModifiedDate":"2021-07-31"},{"lineNumber":117,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":118,"author":{"gitId":"-"},"content":"### Model component","lastModifiedDate":"2021-07-31"},{"lineNumber":119,"author":{"gitId":"-"},"content":"**API** : [`Model.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/model/Model.java)","lastModifiedDate":"2020-05-23"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":121,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ModelClassDiagram.puml\" width\u003d\"450\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":122,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":123,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":124,"author":{"gitId":"-"},"content":"The `Model` component,","lastModifiedDate":"2021-07-31"},{"lineNumber":125,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":126,"author":{"gitId":"-"},"content":"* stores the address book data i.e., all `Person` objects (which are contained in a `UniquePersonList` object).","lastModifiedDate":"2021-07-31"},{"lineNumber":127,"author":{"gitId":"-"},"content":"* stores the currently \u0027selected\u0027 `Person` objects (e.g., results of a search query) as a separate _filtered_ list which is exposed to outsiders as an unmodifiable `ObservableList\u003cPerson\u003e` that can be \u0027observed\u0027 e.g. the UI can be bound to this list so that the UI automatically updates when the data in the list change.","lastModifiedDate":"2021-07-31"},{"lineNumber":128,"author":{"gitId":"-"},"content":"* stores a `UserPref` object that represents the user’s preferences. This is exposed to the outside as a `ReadOnlyUserPref` objects.","lastModifiedDate":"2021-07-31"},{"lineNumber":129,"author":{"gitId":"-"},"content":"* does not depend on any of the other three components (as the `Model` represents data entities of the domain, they should make sense on their own without depending on other components)","lastModifiedDate":"2021-07-31"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":131,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":132,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":133,"author":{"gitId":"-"},"content":"**Note:** An alternative (arguably, a more OOP) model is given below. It has a `Tag` list in the `AddressBook`, which `Person` references. This allows `AddressBook` to only require one `Tag` object per unique tag, instead of each `Person` needing their own `Tag` objects.\u003cbr\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":134,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":135,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/BetterModelClassDiagram.puml\" width\u003d\"450\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":137,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":138,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":139,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":140,"author":{"gitId":"-"},"content":"### Storage component","lastModifiedDate":"2020-05-23"},{"lineNumber":141,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":142,"author":{"gitId":"-"},"content":"**API** : [`Storage.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/storage/Storage.java)","lastModifiedDate":"2020-05-23"},{"lineNumber":143,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":144,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/StorageClassDiagram.puml\" width\u003d\"550\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":145,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":146,"author":{"gitId":"-"},"content":"The `Storage` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":147,"author":{"gitId":"-"},"content":"* can save both address book data and user preference data in JSON format, and read them back into corresponding objects.","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"-"},"content":"* inherits from both `AddressBookStorage` and `UserPrefStorage`, which means it can be treated as either one (if only the functionality of only one is needed).","lastModifiedDate":"2021-07-31"},{"lineNumber":149,"author":{"gitId":"-"},"content":"* depends on some classes in the `Model` component (because the `Storage` component\u0027s job is to save/retrieve objects that belong to the `Model`)","lastModifiedDate":"2021-07-21"},{"lineNumber":150,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":151,"author":{"gitId":"-"},"content":"### Common classes","lastModifiedDate":"2020-05-23"},{"lineNumber":152,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":153,"author":{"gitId":"-"},"content":"Classes used by multiple components are in the `seedu.addressbook.commons` package.","lastModifiedDate":"2020-05-23"},{"lineNumber":154,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":155,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":156,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":157,"author":{"gitId":"-"},"content":"## **Implementation**","lastModifiedDate":"2020-05-23"},{"lineNumber":158,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":159,"author":{"gitId":"-"},"content":"This section describes some noteworthy details on how certain features are implemented.","lastModifiedDate":"2020-05-23"},{"lineNumber":160,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":161,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Undo/redo feature","lastModifiedDate":"2020-06-07"},{"lineNumber":162,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":163,"author":{"gitId":"-"},"content":"#### Proposed Implementation","lastModifiedDate":"2020-05-23"},{"lineNumber":164,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":165,"author":{"gitId":"-"},"content":"The proposed undo/redo mechanism is facilitated by `VersionedAddressBook`. It extends `AddressBook` with an undo/redo history, stored internally as an `addressBookStateList` and `currentStatePointer`. Additionally, it implements the following operations:","lastModifiedDate":"2020-05-23"},{"lineNumber":166,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":167,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#commit()` — Saves the current address book state in its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":168,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#undo()` — Restores the previous address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":169,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#redo()` — Restores a previously undone address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":170,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":171,"author":{"gitId":"-"},"content":"These operations are exposed in the `Model` interface as `Model#commitAddressBook()`, `Model#undoAddressBook()` and `Model#redoAddressBook()` respectively.","lastModifiedDate":"2020-05-23"},{"lineNumber":172,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":173,"author":{"gitId":"-"},"content":"Given below is an example usage scenario and how the undo/redo mechanism behaves at each step.","lastModifiedDate":"2020-05-23"},{"lineNumber":174,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":175,"author":{"gitId":"-"},"content":"Step 1. The user launches the application for the first time. The `VersionedAddressBook` will be initialized with the initial address book state, and the `currentStatePointer` pointing to that single address book state.","lastModifiedDate":"2020-05-23"},{"lineNumber":176,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":177,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState0.puml\" alt\u003d\"UndoRedoState0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":178,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":179,"author":{"gitId":"-"},"content":"Step 2. The user executes `delete 5` command to delete the 5th person in the address book. The `delete` command calls `Model#commitAddressBook()`, causing the modified state of the address book after the `delete 5` command executes to be saved in the `addressBookStateList`, and the `currentStatePointer` is shifted to the newly inserted address book state.","lastModifiedDate":"2020-05-23"},{"lineNumber":180,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":181,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState1.puml\" alt\u003d\"UndoRedoState1\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":182,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":183,"author":{"gitId":"-"},"content":"Step 3. The user executes `add n/David …​` to add a new person. The `add` command also calls `Model#commitAddressBook()`, causing another modified address book state to be saved into the `addressBookStateList`.","lastModifiedDate":"2020-05-23"},{"lineNumber":184,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":185,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState2.puml\" alt\u003d\"UndoRedoState2\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":186,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":187,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":188,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":189,"author":{"gitId":"-"},"content":"**Note:** If a command fails its execution, it will not call `Model#commitAddressBook()`, so the address book state will not be saved into the `addressBookStateList`.","lastModifiedDate":"2023-09-12"},{"lineNumber":190,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":191,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":192,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":193,"author":{"gitId":"-"},"content":"Step 4. The user now decides that adding the person was a mistake, and decides to undo that action by executing the `undo` command. The `undo` command will call `Model#undoAddressBook()`, which will shift the `currentStatePointer` once to the left, pointing it to the previous address book state, and restores the address book to that state.","lastModifiedDate":"2020-05-23"},{"lineNumber":194,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":195,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState3.puml\" alt\u003d\"UndoRedoState3\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":196,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":197,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":198,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":199,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":200,"author":{"gitId":"-"},"content":"**Note:** If the `currentStatePointer` is at index 0, pointing to the initial AddressBook state, then there are no previous AddressBook states to restore. The `undo` command uses `Model#canUndoAddressBook()` to check if this is the case. If so, it will return an error to the user rather","lastModifiedDate":"2023-09-12"},{"lineNumber":201,"author":{"gitId":"-"},"content":"than attempting to perform the undo.","lastModifiedDate":"2020-05-23"},{"lineNumber":202,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":203,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":204,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":205,"author":{"gitId":"-"},"content":"The following sequence diagram shows how an undo operation goes through the `Logic` component:","lastModifiedDate":"2024-02-09"},{"lineNumber":206,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":207,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoSequenceDiagram-Logic.puml\" alt\u003d\"UndoSequenceDiagram-Logic\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":208,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":209,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":210,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":211,"author":{"gitId":"-"},"content":"**Note:** The lifeline for `UndoCommand` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram.","lastModifiedDate":"2023-09-12"},{"lineNumber":212,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":213,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":214,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":215,"author":{"gitId":"-"},"content":"Similarly, how an undo operation goes through the `Model` component is shown below:","lastModifiedDate":"2024-02-09"},{"lineNumber":216,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":217,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoSequenceDiagram-Model.puml\" alt\u003d\"UndoSequenceDiagram-Model\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":218,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":219,"author":{"gitId":"-"},"content":"The `redo` command does the opposite — it calls `Model#redoAddressBook()`, which shifts the `currentStatePointer` once to the right, pointing to the previously undone state, and restores the address book to that state.","lastModifiedDate":"2020-05-23"},{"lineNumber":220,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":221,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":222,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":223,"author":{"gitId":"-"},"content":"**Note:** If the `currentStatePointer` is at index `addressBookStateList.size() - 1`, pointing to the latest address book state, then there are no undone AddressBook states to restore. The `redo` command uses `Model#canRedoAddressBook()` to check if this is the case. If so, it will return an error to the user rather than attempting to perform the redo.","lastModifiedDate":"2023-09-12"},{"lineNumber":224,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":225,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":226,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":227,"author":{"gitId":"-"},"content":"Step 5. The user then decides to execute the command `list`. Commands that do not modify the address book, such as `list`, will usually not call `Model#commitAddressBook()`, `Model#undoAddressBook()` or `Model#redoAddressBook()`. Thus, the `addressBookStateList` remains unchanged.","lastModifiedDate":"2020-05-23"},{"lineNumber":228,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":229,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState4.puml\" alt\u003d\"UndoRedoState4\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":230,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":231,"author":{"gitId":"-"},"content":"Step 6. The user executes `clear`, which calls `Model#commitAddressBook()`. Since the `currentStatePointer` is not pointing at the end of the `addressBookStateList`, all address book states after the `currentStatePointer` will be purged. Reason: It no longer makes sense to redo the `add n/David …​` command. This is the behavior that most modern desktop applications follow.","lastModifiedDate":"2020-05-23"},{"lineNumber":232,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":233,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState5.puml\" alt\u003d\"UndoRedoState5\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":234,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":235,"author":{"gitId":"-"},"content":"The following activity diagram summarizes what happens when a user executes a new command:","lastModifiedDate":"2020-05-23"},{"lineNumber":236,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":237,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/CommitActivityDiagram.puml\" width\u003d\"250\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":238,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":239,"author":{"gitId":"-"},"content":"#### Design considerations:","lastModifiedDate":"2021-07-31"},{"lineNumber":240,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":241,"author":{"gitId":"-"},"content":"**Aspect: How undo \u0026 redo executes:**","lastModifiedDate":"2021-07-31"},{"lineNumber":242,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":243,"author":{"gitId":"-"},"content":"* **Alternative 1 (current choice):** Saves the entire address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":244,"author":{"gitId":"-"},"content":" * Pros: Easy to implement.","lastModifiedDate":"2020-05-23"},{"lineNumber":245,"author":{"gitId":"-"},"content":" * Cons: May have performance issues in terms of memory usage.","lastModifiedDate":"2020-05-23"},{"lineNumber":246,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":247,"author":{"gitId":"-"},"content":"* **Alternative 2:** Individual command knows how to undo/redo by","lastModifiedDate":"2020-05-23"},{"lineNumber":248,"author":{"gitId":"-"},"content":" itself.","lastModifiedDate":"2020-05-23"},{"lineNumber":249,"author":{"gitId":"-"},"content":" * Pros: Will use less memory (e.g. for `delete`, just save the person being deleted).","lastModifiedDate":"2020-05-23"},{"lineNumber":250,"author":{"gitId":"-"},"content":" * Cons: We must ensure that the implementation of each individual command are correct.","lastModifiedDate":"2020-05-23"},{"lineNumber":251,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":252,"author":{"gitId":"-"},"content":"_{more aspects and alternatives to be added}_","lastModifiedDate":"2020-05-23"},{"lineNumber":253,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":254,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Data archiving","lastModifiedDate":"2020-05-23"},{"lineNumber":255,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":256,"author":{"gitId":"-"},"content":"_{Explain here how the data archiving feature will be implemented}_","lastModifiedDate":"2020-05-23"},{"lineNumber":257,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":258,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":259,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":260,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":261,"author":{"gitId":"-"},"content":"## **Documentation, logging, testing, configuration, dev-ops**","lastModifiedDate":"2020-06-07"},{"lineNumber":262,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":263,"author":{"gitId":"-"},"content":"* [Documentation guide](Documentation.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":264,"author":{"gitId":"-"},"content":"* [Testing guide](Testing.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":265,"author":{"gitId":"-"},"content":"* [Logging guide](Logging.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":266,"author":{"gitId":"-"},"content":"* [Configuration guide](Configuration.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":267,"author":{"gitId":"-"},"content":"* [DevOps guide](DevOps.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":268,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":269,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":270,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":271,"author":{"gitId":"-"},"content":"## **Appendix: Requirements**","lastModifiedDate":"2020-05-23"},{"lineNumber":272,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":273,"author":{"gitId":"-"},"content":"### Product scope","lastModifiedDate":"2020-05-23"},{"lineNumber":274,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":275,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":276,"author":{"gitId":"yespiggy"},"content":"**Target user profile**: A venture capital portfolio manager who","lastModifiedDate":"2024-03-07"},{"lineNumber":277,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":278,"author":{"gitId":"yespiggy"},"content":"* has a need to keep a significant amount of startup investments","lastModifiedDate":"2024-03-07"},{"lineNumber":279,"author":{"gitId":"-"},"content":"* prefer desktop apps over other types","lastModifiedDate":"2020-05-23"},{"lineNumber":280,"author":{"gitId":"-"},"content":"* can type fast","lastModifiedDate":"2020-05-23"},{"lineNumber":281,"author":{"gitId":"-"},"content":"* prefers typing to mouse interactions","lastModifiedDate":"2020-05-26"},{"lineNumber":282,"author":{"gitId":"-"},"content":"* is reasonably comfortable using CLI apps","lastModifiedDate":"2020-05-23"},{"lineNumber":283,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":284,"author":{"gitId":"yespiggy"},"content":"**Value proposition**: Venture capital firms manage diverse portfolios of startup ","lastModifiedDate":"2024-03-07"},{"lineNumber":285,"author":{"gitId":"yespiggy"},"content":"investments across various industries. The app streamlines the management of startup","lastModifiedDate":"2024-03-07"},{"lineNumber":286,"author":{"gitId":"yespiggy"},"content":"investments, enabling VC firms to easily add, categorize, and track a diverse ","lastModifiedDate":"2024-03-07"},{"lineNumber":287,"author":{"gitId":"yespiggy"},"content":"portfolio of investments in various industries and funding stages.","lastModifiedDate":"2024-03-07"},{"lineNumber":288,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":289,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":290,"author":{"gitId":"-"},"content":"### User stories","lastModifiedDate":"2020-06-07"},{"lineNumber":291,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":292,"author":{"gitId":"-"},"content":"Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unlikely to have) - `*`","lastModifiedDate":"2020-05-23"},{"lineNumber":293,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":294,"author":{"gitId":"-"},"content":"| Priority | As a …​ | I want to …​ | So that I can…​ |","lastModifiedDate":"2020-05-23"},{"lineNumber":295,"author":{"gitId":"yespiggy"},"content":"|-----------|-------------------|-------------------------------------------------------|--------------------------------------------------------------------------|","lastModifiedDate":"2024-03-07"},{"lineNumber":296,"author":{"gitId":"-"},"content":"| `* * *` | new user | see usage instructions | refer to instructions when I forget how to use the App |","lastModifiedDate":"2020-05-23"},{"lineNumber":297,"author":{"gitId":"yespiggy"},"content":"| `* * *` | user | view the startup investments in my portfolio | see the list of startup investments that I\u0027m interested in |","lastModifiedDate":"2024-03-07"},{"lineNumber":298,"author":{"gitId":"yespiggy"},"content":"| `* * *` | user | add a new startup investment to my portfolio | save the details of the new startup investment |","lastModifiedDate":"2024-03-07"},{"lineNumber":299,"author":{"gitId":"yespiggy"},"content":"| `* * *` | user | delete a startup investment to my portfolio | remove the startup investment that I am no longer interested in |","lastModifiedDate":"2024-03-07"},{"lineNumber":300,"author":{"gitId":"yespiggy"},"content":"| `* *` | user | find a startup investment by name | locate a startup investment without having to go through the entire list |","lastModifiedDate":"2024-03-07"},{"lineNumber":301,"author":{"gitId":"yespiggy"},"content":"| `* *` | intermediate user | assign funding stages to startup investments | know more about the startup investment when checking it through the app |","lastModifiedDate":"2024-03-07"},{"lineNumber":302,"author":{"gitId":"yespiggy"},"content":"| `* *` | intermediate user | find a startup investment by industry \u0026 funding stage | locate a startup investment without having to go through the entire list |","lastModifiedDate":"2024-03-07"},{"lineNumber":303,"author":{"gitId":"yespiggy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":304,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":305,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":306,"author":{"gitId":"-"},"content":"### Use cases","lastModifiedDate":"2020-06-07"},{"lineNumber":307,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":308,"author":{"gitId":"-"},"content":"(For all use cases below, the **System** is the `AddressBook` and the **Actor** is the `user`, unless specified otherwise)","lastModifiedDate":"2020-05-23"},{"lineNumber":309,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":310,"author":{"gitId":"dwangwk"},"content":"**Use case: Add a startup investment**","lastModifiedDate":"2024-03-07"},{"lineNumber":311,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":312,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2020-05-23"},{"lineNumber":313,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":314,"author":{"gitId":"dwangwk"},"content":"1. User requests to add a new startup investment to their portfolio.","lastModifiedDate":"2024-03-07"},{"lineNumber":315,"author":{"gitId":"dwangwk"},"content":"2. CapitalConnect dashboard prompts the user to provide details including:","lastModifiedDate":"2024-03-07"},{"lineNumber":316,"author":{"gitId":"dwangwk"},"content":" * Startup name","lastModifiedDate":"2024-03-07"},{"lineNumber":317,"author":{"gitId":"dwangwk"},"content":" * Industry","lastModifiedDate":"2024-03-07"},{"lineNumber":318,"author":{"gitId":"dwangwk"},"content":" * Funding stage","lastModifiedDate":"2024-03-07"},{"lineNumber":319,"author":{"gitId":"dwangwk"},"content":" * Address","lastModifiedDate":"2024-03-07"},{"lineNumber":320,"author":{"gitId":"dwangwk"},"content":" * Contact information","lastModifiedDate":"2024-03-07"},{"lineNumber":321,"author":{"gitId":"dwangwk"},"content":"3. User provides the necessary details.","lastModifiedDate":"2024-03-07"},{"lineNumber":322,"author":{"gitId":"dwangwk"},"content":"4. CapitalConnect verifies the input for validity.","lastModifiedDate":"2024-03-07"},{"lineNumber":323,"author":{"gitId":"dwangwk"},"content":"5. CapitalConnect adds the new startup investment to the user\u0027s portfolio in the dashboard.","lastModifiedDate":"2024-03-07"},{"lineNumber":324,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":325,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":326,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":327,"author":{"gitId":"-"},"content":"**Extensions**","lastModifiedDate":"2020-05-23"},{"lineNumber":328,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":329,"author":{"gitId":"dwangwk"},"content":"* 4a. Invalid input or missing parameters.","lastModifiedDate":"2024-03-07"},{"lineNumber":330,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":331,"author":{"gitId":"dwangwk"},"content":" * 4a1. CapitalConnect shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":332,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":333,"author":{"gitId":"dwangwk"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-03-07"},{"lineNumber":334,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":335,"author":{"gitId":"dwangwk"},"content":"* 4b. Startup name already exists in the portfolio.","lastModifiedDate":"2024-03-07"},{"lineNumber":336,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":337,"author":{"gitId":"dwangwk"},"content":" * 4b1. CapitalConnect notifies the user about the duplicate entry.","lastModifiedDate":"2024-03-07"},{"lineNumber":338,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":339,"author":{"gitId":"dwangwk"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-03-07"},{"lineNumber":340,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":341,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":342,"author":{"gitId":"dwangwk"},"content":"**Use case: Search for startup investments by industry \u0026 funding stage**","lastModifiedDate":"2024-03-07"},{"lineNumber":343,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":344,"author":{"gitId":"dwangwk"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":345,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":346,"author":{"gitId":"dwangwk"},"content":"1. User requests to search for startup investments by industry and funding stage.","lastModifiedDate":"2024-03-07"},{"lineNumber":347,"author":{"gitId":"dwangwk"},"content":"2. CapitalConnect dashboard prompts the user to input the industry and funding stage.","lastModifiedDate":"2024-03-07"},{"lineNumber":348,"author":{"gitId":"dwangwk"},"content":"3. User provides the industry and funding stage.","lastModifiedDate":"2024-03-07"},{"lineNumber":349,"author":{"gitId":"dwangwk"},"content":"4. CapitalConnect verifies the input for validity.","lastModifiedDate":"2024-03-07"},{"lineNumber":350,"author":{"gitId":"dwangwk"},"content":"5. CapitalConnect searches for startup investments matching the specified industry and funding stage in the user\u0027s portfolio.","lastModifiedDate":"2024-03-07"},{"lineNumber":351,"author":{"gitId":"dwangwk"},"content":"6. CapitalConnect displays the startup investments matching the search criteria.","lastModifiedDate":"2024-03-07"},{"lineNumber":352,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":353,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":354,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":355,"author":{"gitId":"dwangwk"},"content":"**Extensions**","lastModifiedDate":"2024-03-07"},{"lineNumber":356,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":357,"author":{"gitId":"dwangwk"},"content":"* 4a. Invalid input or missing parameters.","lastModifiedDate":"2024-03-07"},{"lineNumber":358,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":359,"author":{"gitId":"dwangwk"},"content":" * 4a1. CapitalConnect shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":360,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":361,"author":{"gitId":"-"},"content":" Use case resumes at step 2.","lastModifiedDate":"2020-05-23"},{"lineNumber":362,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":363,"author":{"gitId":"dwangwk"},"content":"* 6a. No startup investments match the search criteria.","lastModifiedDate":"2024-03-07"},{"lineNumber":364,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":365,"author":{"gitId":"dwangwk"},"content":" * 6a1. CapitalConnect shows an error message indicating no matches found.","lastModifiedDate":"2024-03-07"},{"lineNumber":366,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":367,"author":{"gitId":"dwangwk"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":368,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":369,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":370,"author":{"gitId":"dwangwk"},"content":"**Use case: Search for startup investments by name**","lastModifiedDate":"2024-03-07"},{"lineNumber":371,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":372,"author":{"gitId":"dwangwk"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":373,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":374,"author":{"gitId":"dwangwk"},"content":"1. User requests to search for startup investments by name.","lastModifiedDate":"2024-03-07"},{"lineNumber":375,"author":{"gitId":"dwangwk"},"content":"2. CapitalConnect dashboard prompts the user to input the name of the startup.","lastModifiedDate":"2024-03-07"},{"lineNumber":376,"author":{"gitId":"dwangwk"},"content":"3. User provides the name of the startup.","lastModifiedDate":"2024-03-07"},{"lineNumber":377,"author":{"gitId":"dwangwk"},"content":"4. CapitalConnect verifies the input for validity.","lastModifiedDate":"2024-03-07"},{"lineNumber":378,"author":{"gitId":"dwangwk"},"content":"5. CapitalConnect searches for startup investments matching the specified name in the user\u0027s portfolio.","lastModifiedDate":"2024-03-07"},{"lineNumber":379,"author":{"gitId":"dwangwk"},"content":"6. CapitalConnect displays the startup investments matching the search criteria.","lastModifiedDate":"2024-03-07"},{"lineNumber":380,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":381,"author":{"gitId":"dwangwk"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":382,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":383,"author":{"gitId":"dwangwk"},"content":"**Extensions**","lastModifiedDate":"2024-03-07"},{"lineNumber":384,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":385,"author":{"gitId":"dwangwk"},"content":"* 4a. Invalid input or missing parameters.","lastModifiedDate":"2024-03-07"},{"lineNumber":386,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":387,"author":{"gitId":"dwangwk"},"content":" * 4a1. CapitalConnect shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":388,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":389,"author":{"gitId":"dwangwk"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-03-07"},{"lineNumber":390,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":391,"author":{"gitId":"dwangwk"},"content":"* 6a. No startup investments match the provided name.","lastModifiedDate":"2024-03-07"},{"lineNumber":392,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":393,"author":{"gitId":"dwangwk"},"content":" * 6a1. CapitalConnect shows an error message indicating no matches found.","lastModifiedDate":"2024-03-07"},{"lineNumber":394,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":395,"author":{"gitId":"dwangwk"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":396,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":397,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":398,"author":{"gitId":"dwangwk"},"content":"**Use case: Save the current state of CapitalConnect dashboard**","lastModifiedDate":"2024-03-07"},{"lineNumber":399,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":400,"author":{"gitId":"dwangwk"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":401,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":402,"author":{"gitId":"dwangwk"},"content":"1. CapitalConnect automatically saves the state of the dashboard after every add and delete operation.","lastModifiedDate":"2024-03-07"},{"lineNumber":403,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":404,"author":{"gitId":"dwangwk"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":405,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":406,"author":{"gitId":"dwangwk"},"content":"**Extensions**","lastModifiedDate":"2024-03-07"},{"lineNumber":407,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":408,"author":{"gitId":"dwangwk"},"content":"* 1a. Issue with saving the dashboard state.","lastModifiedDate":"2024-03-07"},{"lineNumber":409,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":410,"author":{"gitId":"dwangwk"},"content":" * 1a1. CapitalConnect shows an error message indicating the issue with saving the dashboard state.","lastModifiedDate":"2024-03-07"},{"lineNumber":411,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":412,"author":{"gitId":"dwangwk"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":413,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":414,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":415,"author":{"gitId":"dwangwk"},"content":"**Use case: Delete a startup investment from the portfolio**","lastModifiedDate":"2024-03-07"},{"lineNumber":416,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":417,"author":{"gitId":"dwangwk"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":418,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":419,"author":{"gitId":"dwangwk"},"content":"1. User requests to delete a specific startup investment from their portfolio.","lastModifiedDate":"2024-03-07"},{"lineNumber":420,"author":{"gitId":"dwangwk"},"content":"2. CapitalConnect dashboard prompts the user to input the index of the startup investment to be deleted.","lastModifiedDate":"2024-03-07"},{"lineNumber":421,"author":{"gitId":"dwangwk"},"content":"3. User provides the index of the startup investment.","lastModifiedDate":"2024-03-07"},{"lineNumber":422,"author":{"gitId":"dwangwk"},"content":"4. CapitalConnect verifies the input for validity.","lastModifiedDate":"2024-03-07"},{"lineNumber":423,"author":{"gitId":"dwangwk"},"content":"5. CapitalConnect deletes the startup investment at the specified index from the user\u0027s portfolio.","lastModifiedDate":"2024-03-07"},{"lineNumber":424,"author":{"gitId":"dwangwk"},"content":"6. CapitalConnect displays a confirmation message indicating successful deletion of the startup investment.","lastModifiedDate":"2024-03-07"},{"lineNumber":425,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":426,"author":{"gitId":"dwangwk"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":427,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":428,"author":{"gitId":"dwangwk"},"content":"**Extensions**","lastModifiedDate":"2024-03-07"},{"lineNumber":429,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":430,"author":{"gitId":"dwangwk"},"content":"* 4a. Invalid input or missing parameters.","lastModifiedDate":"2024-03-07"},{"lineNumber":431,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":432,"author":{"gitId":"dwangwk"},"content":" * 4a1. CapitalConnect shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":433,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":434,"author":{"gitId":"dwangwk"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-03-07"},{"lineNumber":435,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":436,"author":{"gitId":"dwangwk"},"content":"* 5a. Specified index is out of range or no startup investments at the specified index.","lastModifiedDate":"2024-03-07"},{"lineNumber":437,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":438,"author":{"gitId":"dwangwk"},"content":" * 5a1. CapitalConnect shows an error message indicating the issue.","lastModifiedDate":"2024-03-07"},{"lineNumber":439,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":440,"author":{"gitId":"dwangwk"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":441,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":442,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":443,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":444,"author":{"gitId":"-"},"content":"1. Should work on any _mainstream OS_ as long as it has Java `11` or above installed.","lastModifiedDate":"2020-05-23"},{"lineNumber":445,"author":{"gitId":"dwangwk"},"content":"2. Should be able to hold up to 1000 startups without a noticeable sluggishness in performance for typical usage.","lastModifiedDate":"2024-03-07"},{"lineNumber":446,"author":{"gitId":"-"},"content":"3. A user with above average typing speed for regular English text (i.e. not code, not system admin commands) should be able to accomplish most of the tasks faster using commands than using the mouse.","lastModifiedDate":"2020-05-23"},{"lineNumber":447,"author":{"gitId":"dwangwk"},"content":"4. The system should have a response time of less than 1 second for common operations, such as adding or deleting a startup investment, to provide a smooth user experience.","lastModifiedDate":"2024-03-07"},{"lineNumber":448,"author":{"gitId":"dwangwk"},"content":"5. The application should provide clear and user-friendly error messages in case of invalid input or system errors to assist users in troubleshooting issues efficiently.","lastModifiedDate":"2024-03-07"},{"lineNumber":449,"author":{"gitId":"dwangwk"},"content":"6. The dashboard interface should be responsive and adapt to different screen sizes, ensuring a seamless user experience across devices such as desktops, laptops, tablets, and smartphones.","lastModifiedDate":"2024-03-07"},{"lineNumber":450,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":451,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":452,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":453,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":454,"author":{"gitId":"-"},"content":"* **Mainstream OS**: Windows, Linux, Unix, MacOS","lastModifiedDate":"2024-02-09"},{"lineNumber":455,"author":{"gitId":"-"},"content":"* **Private contact detail**: A contact detail that is not meant to be shared with others","lastModifiedDate":"2020-05-23"},{"lineNumber":456,"author":{"gitId":"dwangwk"},"content":"* **CapitalConnect dashboard**: The user interface of the CapitalConnect application where users can manage their startup investments, perform searches, and view their portfolio.","lastModifiedDate":"2024-03-07"},{"lineNumber":457,"author":{"gitId":"dwangwk"},"content":"* **Startup investment**: An investment made by a user in a startup company, typically including details such as the startup name, industry, funding stage, address, and contact information.","lastModifiedDate":"2024-03-07"},{"lineNumber":458,"author":{"gitId":"dwangwk"},"content":"* **Industry**: The sector or field in which a startup operates, such as Tech, Biotech, or Finance.","lastModifiedDate":"2024-03-07"},{"lineNumber":459,"author":{"gitId":"dwangwk"},"content":"* **Funding stage**: The development stage of a startup at which it has received a certain level of investment, such as Seed, Series A, or Series B.","lastModifiedDate":"2024-03-07"},{"lineNumber":460,"author":{"gitId":"dwangwk"},"content":"* **Dashboard state**: The current configuration and data displayed in the CapitalConnect dashboard, including startup investments and any applied filters or search results.","lastModifiedDate":"2024-03-07"},{"lineNumber":461,"author":{"gitId":"dwangwk"},"content":"* **Index**: A numeric value representing the position of an item within a list, used in commands to reference specific startup investments in the portfolio.","lastModifiedDate":"2024-03-07"},{"lineNumber":462,"author":{"gitId":"dwangwk"},"content":"* **Confirmation message**: A notification displayed to the user indicating the successful completion of an action, such as adding or deleting a startup investment.","lastModifiedDate":"2024-03-07"},{"lineNumber":463,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":464,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":465,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":466,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":467,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":468,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":469,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":470,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":471,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":472,"author":{"gitId":"-"},"content":"**Note:** These instructions only provide a starting point for testers to work on;","lastModifiedDate":"2023-09-12"},{"lineNumber":473,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":474,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":475,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":476,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":477,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":478,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":479,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":480,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":481,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":482,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":483,"author":{"gitId":"-"},"content":" 1. Double-click the jar file Expected: Shows the GUI with a set of sample contacts. The window size may not be optimum.","lastModifiedDate":"2020-05-23"},{"lineNumber":484,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":485,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":486,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":487,"author":{"gitId":"-"},"content":" 1. Resize the window to an optimum size. Move the window to a different location. Close the window.","lastModifiedDate":"2020-05-23"},{"lineNumber":488,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":489,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":490,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","lastModifiedDate":"2020-05-23"},{"lineNumber":491,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":492,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":493,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":494,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":495,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":496,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":497,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":498,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":499,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":500,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":501,"author":{"gitId":"-"},"content":" Expected: First contact is deleted from the list. Details of the deleted contact shown in the status message. Timestamp in the status bar is updated.","lastModifiedDate":"2020-05-23"},{"lineNumber":502,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":503,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":504,"author":{"gitId":"-"},"content":" Expected: No person is deleted. Error details shown in the status message. Status bar remains the same.","lastModifiedDate":"2020-05-23"},{"lineNumber":505,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":506,"author":{"gitId":"-"},"content":" 1. Other incorrect delete commands to try: `delete`, `delete x`, `...` (where x is larger than the list size)\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":507,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":508,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":509,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":510,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":511,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":512,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":513,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":514,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":515,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":516,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":517,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"dwangwk":126,"yespiggy":15,"-":376}},{"path":"docs/team/danielwang.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"dwangwk"},"content":"---","lastModifiedDate":"2024-03-07"},{"lineNumber":2,"author":{"gitId":"dwangwk"},"content":" layout: default.md","lastModifiedDate":"2024-03-07"},{"lineNumber":3,"author":{"gitId":"dwangwk"},"content":" title: \"Daniel Wang\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-07"},{"lineNumber":4,"author":{"gitId":"dwangwk"},"content":"---","lastModifiedDate":"2024-03-07"},{"lineNumber":5,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":6,"author":{"gitId":"dwangwk"},"content":"### Project: AddressBook Level 3","lastModifiedDate":"2024-03-07"},{"lineNumber":7,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":8,"author":{"gitId":"dwangwk"},"content":"AddressBook - Level 3 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.","lastModifiedDate":"2024-03-07"},{"lineNumber":9,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":10,"author":{"gitId":"dwangwk"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-03-07"},{"lineNumber":11,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":12,"author":{"gitId":"dwangwk"},"content":"* **New Feature**: Added the ability to delete startups from the project.","lastModifiedDate":"2024-03-07"},{"lineNumber":13,"author":{"gitId":"dwangwk"},"content":" * What it does: This allows users to delete startups from the Capital Connect data.","lastModifiedDate":"2024-03-07"},{"lineNumber":14,"author":{"gitId":"dwangwk"},"content":" * Justification: This is imperative for our users to upkeep the data with the latest information.","lastModifiedDate":"2024-03-07"},{"lineNumber":15,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":16,"author":{"gitId":"dwangwk"},"content":"* **Code contributed**: [RepoSense link]()","lastModifiedDate":"2024-03-07"},{"lineNumber":17,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":18,"author":{"gitId":"dwangwk"},"content":"* **Project management**:","lastModifiedDate":"2024-03-07"},{"lineNumber":19,"author":{"gitId":"dwangwk"},"content":" * Managed releases `v1.3` - `v1.5rc` (3 releases) on GitHub","lastModifiedDate":"2024-03-07"},{"lineNumber":20,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":21,"author":{"gitId":"dwangwk"},"content":"* **Enhancements to existing features**:","lastModifiedDate":"2024-03-07"},{"lineNumber":22,"author":{"gitId":"dwangwk"},"content":" * Updated the GUI color scheme (Pull requests [\\#33](), [\\#34]())","lastModifiedDate":"2024-03-07"},{"lineNumber":23,"author":{"gitId":"dwangwk"},"content":" * Wrote additional tests for existing features to increase coverage from 88% to 92% (Pull requests [\\#36](), [\\#38]())","lastModifiedDate":"2024-03-07"},{"lineNumber":24,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":25,"author":{"gitId":"dwangwk"},"content":"* **Documentation**:","lastModifiedDate":"2024-03-07"},{"lineNumber":26,"author":{"gitId":"dwangwk"},"content":" * User Guide:","lastModifiedDate":"2024-03-07"},{"lineNumber":27,"author":{"gitId":"dwangwk"},"content":" * Added documentation for the features `delete` and `find` [\\#72]()","lastModifiedDate":"2024-03-07"},{"lineNumber":28,"author":{"gitId":"dwangwk"},"content":" * Did cosmetic tweaks to existing documentation of features `clear`, `exit`: [\\#74]()","lastModifiedDate":"2024-03-07"},{"lineNumber":29,"author":{"gitId":"dwangwk"},"content":" * Developer Guide:","lastModifiedDate":"2024-03-07"},{"lineNumber":30,"author":{"gitId":"dwangwk"},"content":" * Added implementation details of the `delete` feature.","lastModifiedDate":"2024-03-07"},{"lineNumber":31,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":32,"author":{"gitId":"dwangwk"},"content":"* **Community**:","lastModifiedDate":"2024-03-07"},{"lineNumber":33,"author":{"gitId":"dwangwk"},"content":" * PRs reviewed (with non-trivial review comments): [\\#12](), [\\#32](), [\\#19](), [\\#42]()","lastModifiedDate":"2024-03-07"},{"lineNumber":34,"author":{"gitId":"dwangwk"},"content":" * Contributed to forum discussions (examples: [1](), [2](), [3](), [4]())","lastModifiedDate":"2024-03-07"},{"lineNumber":35,"author":{"gitId":"dwangwk"},"content":" * Reported bugs and suggestions for other teams in the class (examples: [1](), [2](), [3]())","lastModifiedDate":"2024-03-07"},{"lineNumber":36,"author":{"gitId":"dwangwk"},"content":" * Some parts of the history feature I added was adopted by several other class mates ([1](), [2]())","lastModifiedDate":"2024-03-07"},{"lineNumber":37,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":38,"author":{"gitId":"dwangwk"},"content":"* **Tools**:","lastModifiedDate":"2024-03-07"},{"lineNumber":39,"author":{"gitId":"dwangwk"},"content":" * Integrated a third party library (Natty) to the project ([\\#42]())","lastModifiedDate":"2024-03-07"},{"lineNumber":40,"author":{"gitId":"dwangwk"},"content":" * Integrated a new Github plugin (CircleCI) to the team repo","lastModifiedDate":"2024-03-07"},{"lineNumber":41,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":42,"author":{"gitId":"dwangwk"},"content":"* _{you can add/remove categories in the list above}_","lastModifiedDate":"2024-03-07"}],"authorContributionMap":{"dwangwk":42}},{"path":"docs/team/natasya.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"dwangwk"},"content":"---","lastModifiedDate":"2024-03-07"},{"lineNumber":2,"author":{"gitId":"dwangwk"},"content":" layout: default.md","lastModifiedDate":"2024-03-07"},{"lineNumber":3,"author":{"gitId":"dwangwk"},"content":" title: \"Natasya\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-07"},{"lineNumber":4,"author":{"gitId":"dwangwk"},"content":"---","lastModifiedDate":"2024-03-07"},{"lineNumber":5,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":6,"author":{"gitId":"dwangwk"},"content":"### Project: AddressBook Level 3","lastModifiedDate":"2024-03-07"},{"lineNumber":7,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":8,"author":{"gitId":"dwangwk"},"content":"AddressBook - Level 3 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.","lastModifiedDate":"2024-03-07"},{"lineNumber":9,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":10,"author":{"gitId":"dwangwk"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-03-07"},{"lineNumber":11,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":12,"author":{"gitId":"dwangwk"},"content":"* **New Feature**: Added the ability to delete startups from the project.","lastModifiedDate":"2024-03-07"},{"lineNumber":13,"author":{"gitId":"dwangwk"},"content":" * What it does: This allows users to delete startups from the Capital Connect data.","lastModifiedDate":"2024-03-07"},{"lineNumber":14,"author":{"gitId":"dwangwk"},"content":" * Justification: This is imperative for our users to upkeep the data with the latest information.","lastModifiedDate":"2024-03-07"},{"lineNumber":15,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":16,"author":{"gitId":"dwangwk"},"content":"* **Code contributed**: [RepoSense link]()","lastModifiedDate":"2024-03-07"},{"lineNumber":17,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":18,"author":{"gitId":"dwangwk"},"content":"* **Project management**:","lastModifiedDate":"2024-03-07"},{"lineNumber":19,"author":{"gitId":"dwangwk"},"content":" * Managed releases `v1.3` - `v1.5rc` (3 releases) on GitHub","lastModifiedDate":"2024-03-07"},{"lineNumber":20,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":21,"author":{"gitId":"dwangwk"},"content":"* **Enhancements to existing features**:","lastModifiedDate":"2024-03-07"},{"lineNumber":22,"author":{"gitId":"dwangwk"},"content":" * Updated the GUI color scheme (Pull requests [\\#33](), [\\#34]())","lastModifiedDate":"2024-03-07"},{"lineNumber":23,"author":{"gitId":"dwangwk"},"content":" * Wrote additional tests for existing features to increase coverage from 88% to 92% (Pull requests [\\#36](), [\\#38]())","lastModifiedDate":"2024-03-07"},{"lineNumber":24,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":25,"author":{"gitId":"dwangwk"},"content":"* **Documentation**:","lastModifiedDate":"2024-03-07"},{"lineNumber":26,"author":{"gitId":"dwangwk"},"content":" * User Guide:","lastModifiedDate":"2024-03-07"},{"lineNumber":27,"author":{"gitId":"dwangwk"},"content":" * Added documentation for the features `delete` and `find` [\\#72]()","lastModifiedDate":"2024-03-07"},{"lineNumber":28,"author":{"gitId":"dwangwk"},"content":" * Did cosmetic tweaks to existing documentation of features `clear`, `exit`: [\\#74]()","lastModifiedDate":"2024-03-07"},{"lineNumber":29,"author":{"gitId":"dwangwk"},"content":" * Developer Guide:","lastModifiedDate":"2024-03-07"},{"lineNumber":30,"author":{"gitId":"dwangwk"},"content":" * Added implementation details of the `delete` feature.","lastModifiedDate":"2024-03-07"},{"lineNumber":31,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":32,"author":{"gitId":"dwangwk"},"content":"* **Community**:","lastModifiedDate":"2024-03-07"},{"lineNumber":33,"author":{"gitId":"dwangwk"},"content":" * PRs reviewed (with non-trivial review comments): [\\#12](), [\\#32](), [\\#19](), [\\#42]()","lastModifiedDate":"2024-03-07"},{"lineNumber":34,"author":{"gitId":"dwangwk"},"content":" * Contributed to forum discussions (examples: [1](), [2](), [3](), [4]())","lastModifiedDate":"2024-03-07"},{"lineNumber":35,"author":{"gitId":"dwangwk"},"content":" * Reported bugs and suggestions for other teams in the class (examples: [1](), [2](), [3]())","lastModifiedDate":"2024-03-07"},{"lineNumber":36,"author":{"gitId":"dwangwk"},"content":" * Some parts of the history feature I added was adopted by several other class mates ([1](), [2]())","lastModifiedDate":"2024-03-07"},{"lineNumber":37,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":38,"author":{"gitId":"dwangwk"},"content":"* **Tools**:","lastModifiedDate":"2024-03-07"},{"lineNumber":39,"author":{"gitId":"dwangwk"},"content":" * Integrated a third party library (Natty) to the project ([\\#42]())","lastModifiedDate":"2024-03-07"},{"lineNumber":40,"author":{"gitId":"dwangwk"},"content":" * Integrated a new Github plugin (CircleCI) to the team repo","lastModifiedDate":"2024-03-07"},{"lineNumber":41,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":42,"author":{"gitId":"dwangwk"},"content":"* _{you can add/remove categories in the list above}_","lastModifiedDate":"2024-03-07"}],"authorContributionMap":{"dwangwk":42}},{"path":"docs/team/shuheng.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"John Doe\u0027s Project Portfolio Page\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"### Project: AddressBook Level 3","lastModifiedDate":"2021-07-30"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":8,"author":{"gitId":"-"},"content":"AddressBook - Level 3 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":10,"author":{"gitId":"-"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2020-05-23"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"yeoshuheng"},"content":"* **New Feature**: Added the ability to add startups to the project.","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"yeoshuheng"},"content":" * What it does: This allows users to add startups to Capital Connect alongside information such as funding stage.","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"yeoshuheng"},"content":" * Justification: This is imperative for our users as they consist of key information they have to track.","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"-"},"content":"* **New Feature**: Added a history command that allows the user to navigate to previous commands using up/down keys.","lastModifiedDate":"2020-05-23"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"* **Code contributed**: [RepoSense link]()","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"-"},"content":"* **Project management**:","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":" * Managed releases `v1.3` - `v1.5rc` (3 releases) on GitHub","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"-"},"content":"* **Enhancements to existing features**:","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * Updated the GUI color scheme (Pull requests [\\#33](), [\\#34]())","lastModifiedDate":"2020-05-23"},{"lineNumber":25,"author":{"gitId":"-"},"content":" * Wrote additional tests for existing features to increase coverage from 88% to 92% (Pull requests [\\#36](), [\\#38]())","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":27,"author":{"gitId":"-"},"content":"* **Documentation**:","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":" * User Guide:","lastModifiedDate":"2020-05-23"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * Added documentation for the features `delete` and `find` [\\#72]()","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":" * Did cosmetic tweaks to existing documentation of features `clear`, `exit`: [\\#74]()","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * Developer Guide:","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"-"},"content":" * Added implementation details of the `delete` feature.","lastModifiedDate":"2020-05-23"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"-"},"content":"* **Community**:","lastModifiedDate":"2020-05-23"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * PRs reviewed (with non-trivial review comments): [\\#12](), [\\#32](), [\\#19](), [\\#42]()","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * Contributed to forum discussions (examples: [1](), [2](), [3](), [4]())","lastModifiedDate":"2020-05-23"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * Reported bugs and suggestions for other teams in the class (examples: [1](), [2](), [3]())","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":" * Some parts of the history feature I added was adopted by several other class mates ([1](), [2]())","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":40,"author":{"gitId":"-"},"content":"* **Tools**:","lastModifiedDate":"2020-05-23"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * Integrated a third party library (Natty) to the project ([\\#42]())","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * Integrated a new Github plugin (CircleCI) to the team repo","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"-"},"content":"* _{you can add/remove categories in the list above}_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"-":41,"yeoshuheng":3}},{"path":"docs/team/sifan.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"dwangwk"},"content":"---","lastModifiedDate":"2024-03-07"},{"lineNumber":2,"author":{"gitId":"dwangwk"},"content":" layout: default.md","lastModifiedDate":"2024-03-07"},{"lineNumber":3,"author":{"gitId":"dwangwk"},"content":" title: \"Si Fan\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-07"},{"lineNumber":4,"author":{"gitId":"dwangwk"},"content":"---","lastModifiedDate":"2024-03-07"},{"lineNumber":5,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":6,"author":{"gitId":"dwangwk"},"content":"### Project: AddressBook Level 3","lastModifiedDate":"2024-03-07"},{"lineNumber":7,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":8,"author":{"gitId":"dwangwk"},"content":"AddressBook - Level 3 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.","lastModifiedDate":"2024-03-07"},{"lineNumber":9,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":10,"author":{"gitId":"dwangwk"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-03-07"},{"lineNumber":11,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":12,"author":{"gitId":"dwangwk"},"content":"* **New Feature**: Added the ability to delete startups from the project.","lastModifiedDate":"2024-03-07"},{"lineNumber":13,"author":{"gitId":"dwangwk"},"content":" * What it does: This allows users to delete startups from the Capital Connect data.","lastModifiedDate":"2024-03-07"},{"lineNumber":14,"author":{"gitId":"dwangwk"},"content":" * Justification: This is imperative for our users to upkeep the data with the latest information.","lastModifiedDate":"2024-03-07"},{"lineNumber":15,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":16,"author":{"gitId":"dwangwk"},"content":"* **Code contributed**: [RepoSense link]()","lastModifiedDate":"2024-03-07"},{"lineNumber":17,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":18,"author":{"gitId":"dwangwk"},"content":"* **Project management**:","lastModifiedDate":"2024-03-07"},{"lineNumber":19,"author":{"gitId":"dwangwk"},"content":" * Managed releases `v1.3` - `v1.5rc` (3 releases) on GitHub","lastModifiedDate":"2024-03-07"},{"lineNumber":20,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":21,"author":{"gitId":"dwangwk"},"content":"* **Enhancements to existing features**:","lastModifiedDate":"2024-03-07"},{"lineNumber":22,"author":{"gitId":"dwangwk"},"content":" * Updated the GUI color scheme (Pull requests [\\#33](), [\\#34]())","lastModifiedDate":"2024-03-07"},{"lineNumber":23,"author":{"gitId":"dwangwk"},"content":" * Wrote additional tests for existing features to increase coverage from 88% to 92% (Pull requests [\\#36](), [\\#38]())","lastModifiedDate":"2024-03-07"},{"lineNumber":24,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":25,"author":{"gitId":"dwangwk"},"content":"* **Documentation**:","lastModifiedDate":"2024-03-07"},{"lineNumber":26,"author":{"gitId":"dwangwk"},"content":" * User Guide:","lastModifiedDate":"2024-03-07"},{"lineNumber":27,"author":{"gitId":"dwangwk"},"content":" * Added documentation for the features `delete` and `find` [\\#72]()","lastModifiedDate":"2024-03-07"},{"lineNumber":28,"author":{"gitId":"dwangwk"},"content":" * Did cosmetic tweaks to existing documentation of features `clear`, `exit`: [\\#74]()","lastModifiedDate":"2024-03-07"},{"lineNumber":29,"author":{"gitId":"dwangwk"},"content":" * Developer Guide:","lastModifiedDate":"2024-03-07"},{"lineNumber":30,"author":{"gitId":"dwangwk"},"content":" * Added implementation details of the `delete` feature.","lastModifiedDate":"2024-03-07"},{"lineNumber":31,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":32,"author":{"gitId":"dwangwk"},"content":"* **Community**:","lastModifiedDate":"2024-03-07"},{"lineNumber":33,"author":{"gitId":"dwangwk"},"content":" * PRs reviewed (with non-trivial review comments): [\\#12](), [\\#32](), [\\#19](), [\\#42]()","lastModifiedDate":"2024-03-07"},{"lineNumber":34,"author":{"gitId":"dwangwk"},"content":" * Contributed to forum discussions (examples: [1](), [2](), [3](), [4]())","lastModifiedDate":"2024-03-07"},{"lineNumber":35,"author":{"gitId":"dwangwk"},"content":" * Reported bugs and suggestions for other teams in the class (examples: [1](), [2](), [3]())","lastModifiedDate":"2024-03-07"},{"lineNumber":36,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":37,"author":{"gitId":"dwangwk"},"content":"* **Tools**:","lastModifiedDate":"2024-03-07"},{"lineNumber":38,"author":{"gitId":"dwangwk"},"content":" * Integrated a third party library (Natty) to the project ([\\#42]())","lastModifiedDate":"2024-03-07"},{"lineNumber":39,"author":{"gitId":"dwangwk"},"content":" * Integrated a new Github plugin (CircleCI) to the team repo","lastModifiedDate":"2024-03-07"},{"lineNumber":40,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":41,"author":{"gitId":"dwangwk"},"content":"* _{you can add/remove categories in the list above}_","lastModifiedDate":"2024-03-07"}],"authorContributionMap":{"dwangwk":41}},{"path":"src/main/java/seedu/address/logic/Messages.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic;","lastModifiedDate":"2023-07-13"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2023-07-14"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-07-14"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.stream.Stream;","lastModifiedDate":"2023-07-14"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.Prefix;","lastModifiedDate":"2023-07-14"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2019-02-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":10,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":" * Container for user visible messages.","lastModifiedDate":"2016-08-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class Messages {","lastModifiedDate":"2016-08-24"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":" public static final String MESSAGE_UNKNOWN_COMMAND \u003d \"Unknown command\";","lastModifiedDate":"2016-09-21"},{"lineNumber":16,"author":{"gitId":"-"},"content":" public static final String MESSAGE_INVALID_COMMAND_FORMAT \u003d \"Invalid command format! \\n%1$s\";","lastModifiedDate":"2016-08-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":" public static final String MESSAGE_INVALID_PERSON_DISPLAYED_INDEX \u003d \"The person index provided is invalid\";","lastModifiedDate":"2016-08-24"},{"lineNumber":18,"author":{"gitId":"-"},"content":" public static final String MESSAGE_PERSONS_LISTED_OVERVIEW \u003d \"%1$d persons listed!\";","lastModifiedDate":"2016-08-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":" public static final String MESSAGE_DUPLICATE_FIELDS \u003d","lastModifiedDate":"2023-07-14"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \"Multiple values specified for the following single-valued field(s): \";","lastModifiedDate":"2023-07-14"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":22,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-07-14"},{"lineNumber":23,"author":{"gitId":"-"},"content":" * Returns an error message indicating the duplicate prefixes.","lastModifiedDate":"2023-07-14"},{"lineNumber":24,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-07-14"},{"lineNumber":25,"author":{"gitId":"-"},"content":" public static String getErrorMessageForDuplicatePrefixes(Prefix... duplicatePrefixes) {","lastModifiedDate":"2023-07-14"},{"lineNumber":26,"author":{"gitId":"-"},"content":" assert duplicatePrefixes.length \u003e 0;","lastModifiedDate":"2023-07-14"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":28,"author":{"gitId":"-"},"content":" Set\u003cString\u003e duplicateFields \u003d","lastModifiedDate":"2023-07-14"},{"lineNumber":29,"author":{"gitId":"-"},"content":" Stream.of(duplicatePrefixes).map(Prefix::toString).collect(Collectors.toSet());","lastModifiedDate":"2023-07-14"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":31,"author":{"gitId":"-"},"content":" return MESSAGE_DUPLICATE_FIELDS + String.join(\" \", duplicateFields);","lastModifiedDate":"2023-07-14"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-14"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-28"},{"lineNumber":34,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2019-02-23"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * Formats the {@code person} for display to the user.","lastModifiedDate":"2019-02-23"},{"lineNumber":36,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2019-02-23"},{"lineNumber":37,"author":{"gitId":"-"},"content":" public static String format(Person person) {","lastModifiedDate":"2019-02-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":" final StringBuilder builder \u003d new StringBuilder();","lastModifiedDate":"2019-02-23"},{"lineNumber":39,"author":{"gitId":"-"},"content":" builder.append(person.getName())","lastModifiedDate":"2019-02-23"},{"lineNumber":40,"author":{"gitId":"yeoshuheng"},"content":" .append(\"; Industry: \")","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"yeoshuheng"},"content":" .append(person.getIndustry())","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"yeoshuheng"},"content":" .append(\"; Funding Stage: \")","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"yeoshuheng"},"content":" .append(person.getFundingStage())","lastModifiedDate":"2024-02-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" .append(\"; Phone: \")","lastModifiedDate":"2019-02-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":" .append(person.getPhone())","lastModifiedDate":"2019-02-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":" .append(\"; Email: \")","lastModifiedDate":"2019-02-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":" .append(person.getEmail())","lastModifiedDate":"2019-02-23"},{"lineNumber":48,"author":{"gitId":"-"},"content":" .append(\"; Address: \")","lastModifiedDate":"2019-02-23"},{"lineNumber":49,"author":{"gitId":"-"},"content":" .append(person.getAddress())","lastModifiedDate":"2019-02-23"},{"lineNumber":50,"author":{"gitId":"-"},"content":" .append(\"; Tags: \");","lastModifiedDate":"2019-02-23"},{"lineNumber":51,"author":{"gitId":"-"},"content":" person.getTags().forEach(builder::append);","lastModifiedDate":"2019-02-23"},{"lineNumber":52,"author":{"gitId":"-"},"content":" return builder.toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-24"}],"authorContributionMap":{"-":51,"yeoshuheng":4}},{"path":"src/main/java/seedu/address/logic/commands/AddCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.commands;","lastModifiedDate":"2016-09-22"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2017-05-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2024-02-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2024-02-25"},{"lineNumber":6,"author":{"gitId":"yeoshuheng"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_FUNDING_STAGE;","lastModifiedDate":"2024-02-25"},{"lineNumber":7,"author":{"gitId":"yeoshuheng"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INDUSTRY;","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-09"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.ToStringBuilder;","lastModifiedDate":"2019-02-23"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.logic.Messages;","lastModifiedDate":"2023-07-13"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.exceptions.CommandException;","lastModifiedDate":"2017-02-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.model.Model;","lastModifiedDate":"2018-08-08"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2017-01-18"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":18,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * Adds a person to the address book.","lastModifiedDate":"2016-08-24"},{"lineNumber":20,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":21,"author":{"gitId":"-"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2018-04-19"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":23,"author":{"gitId":"-"},"content":" public static final String COMMAND_WORD \u003d \"add\";","lastModifiedDate":"2016-08-24"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":25,"author":{"gitId":"-"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Adds a person to the address book. \"","lastModifiedDate":"2016-08-24"},{"lineNumber":26,"author":{"gitId":"-"},"content":" + \"Parameters: \"","lastModifiedDate":"2017-06-06"},{"lineNumber":27,"author":{"gitId":"-"},"content":" + PREFIX_NAME + \"NAME \"","lastModifiedDate":"2017-06-06"},{"lineNumber":28,"author":{"gitId":"yeoshuheng"},"content":" + PREFIX_INDUSTRY + \"INDUSTRY \"","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"yeoshuheng"},"content":" + PREFIX_FUNDING_STAGE + \"FUNDING STAGE \"","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" + PREFIX_PHONE + \"PHONE \"","lastModifiedDate":"2017-05-09"},{"lineNumber":31,"author":{"gitId":"-"},"content":" + PREFIX_EMAIL + \"EMAIL \"","lastModifiedDate":"2017-05-09"},{"lineNumber":32,"author":{"gitId":"-"},"content":" + PREFIX_ADDRESS + \"ADDRESS \"","lastModifiedDate":"2017-05-09"},{"lineNumber":33,"author":{"gitId":"-"},"content":" + \"[\" + PREFIX_TAG + \"TAG]...\\n\"","lastModifiedDate":"2017-05-09"},{"lineNumber":34,"author":{"gitId":"-"},"content":" + \"Example: \" + COMMAND_WORD + \" \"","lastModifiedDate":"2017-06-06"},{"lineNumber":35,"author":{"gitId":"-"},"content":" + PREFIX_NAME + \"John Doe \"","lastModifiedDate":"2017-06-06"},{"lineNumber":36,"author":{"gitId":"-"},"content":" + PREFIX_PHONE + \"98765432 \"","lastModifiedDate":"2017-05-09"},{"lineNumber":37,"author":{"gitId":"-"},"content":" + PREFIX_EMAIL + \"johnd@example.com \"","lastModifiedDate":"2017-05-09"},{"lineNumber":38,"author":{"gitId":"-"},"content":" + PREFIX_ADDRESS + \"311, Clementi Ave 2, #02-25 \"","lastModifiedDate":"2017-05-09"},{"lineNumber":39,"author":{"gitId":"-"},"content":" + PREFIX_TAG + \"friends \"","lastModifiedDate":"2017-05-09"},{"lineNumber":40,"author":{"gitId":"-"},"content":" + PREFIX_TAG + \"owesMoney\";","lastModifiedDate":"2017-05-09"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":42,"author":{"gitId":"-"},"content":" public static final String MESSAGE_SUCCESS \u003d \"New person added: %1$s\";","lastModifiedDate":"2016-08-24"},{"lineNumber":43,"author":{"gitId":"-"},"content":" public static final String MESSAGE_DUPLICATE_PERSON \u003d \"This person already exists in the address book\";","lastModifiedDate":"2016-08-24"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":45,"author":{"gitId":"-"},"content":" private final Person toAdd;","lastModifiedDate":"2016-08-24"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":47,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-09-21"},{"lineNumber":48,"author":{"gitId":"-"},"content":" * Creates an AddCommand to add the specified {@code Person}","lastModifiedDate":"2018-01-10"},{"lineNumber":49,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-09-21"},{"lineNumber":50,"author":{"gitId":"-"},"content":" public AddCommand(Person person) {","lastModifiedDate":"2018-01-10"},{"lineNumber":51,"author":{"gitId":"-"},"content":" requireNonNull(person);","lastModifiedDate":"2018-01-10"},{"lineNumber":52,"author":{"gitId":"-"},"content":" toAdd \u003d person;","lastModifiedDate":"2018-01-10"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-21"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":55,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":56,"author":{"gitId":"-"},"content":" public CommandResult execute(Model model) throws CommandException {","lastModifiedDate":"2019-01-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" requireNonNull(model);","lastModifiedDate":"2017-05-15"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-07"},{"lineNumber":59,"author":{"gitId":"-"},"content":" if (model.hasPerson(toAdd)) {","lastModifiedDate":"2018-08-07"},{"lineNumber":60,"author":{"gitId":"-"},"content":" throw new CommandException(MESSAGE_DUPLICATE_PERSON);","lastModifiedDate":"2018-08-07"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-07"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-07"},{"lineNumber":63,"author":{"gitId":"-"},"content":" model.addPerson(toAdd);","lastModifiedDate":"2016-09-25"},{"lineNumber":64,"author":{"gitId":"-"},"content":" return new CommandResult(String.format(MESSAGE_SUCCESS, Messages.format(toAdd)));","lastModifiedDate":"2019-02-23"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":67,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-06-22"},{"lineNumber":68,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2017-06-22"},{"lineNumber":69,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2023-07-13"},{"lineNumber":70,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2023-07-13"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-13"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-13"},{"lineNumber":73,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2023-07-13"},{"lineNumber":74,"author":{"gitId":"-"},"content":" if (!(other instanceof AddCommand)) {","lastModifiedDate":"2023-07-13"},{"lineNumber":75,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2023-07-13"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-13"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-13"},{"lineNumber":78,"author":{"gitId":"-"},"content":" AddCommand otherAddCommand \u003d (AddCommand) other;","lastModifiedDate":"2023-07-13"},{"lineNumber":79,"author":{"gitId":"-"},"content":" return toAdd.equals(otherAddCommand.toAdd);","lastModifiedDate":"2023-07-13"},{"lineNumber":80,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-22"},{"lineNumber":81,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":82,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2019-02-23"},{"lineNumber":83,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2019-02-23"},{"lineNumber":84,"author":{"gitId":"-"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2019-02-23"},{"lineNumber":85,"author":{"gitId":"-"},"content":" .add(\"toAdd\", toAdd)","lastModifiedDate":"2019-02-23"},{"lineNumber":86,"author":{"gitId":"-"},"content":" .toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":87,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":88,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-24"}],"authorContributionMap":{"-":84,"yeoshuheng":4}},{"path":"src/main/java/seedu/address/logic/commands/EditCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.commands;","lastModifiedDate":"2016-12-26"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2017-05-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2024-02-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2024-02-25"},{"lineNumber":6,"author":{"gitId":"yeoshuheng"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_FUNDING_STAGE;","lastModifiedDate":"2024-02-25"},{"lineNumber":7,"author":{"gitId":"yeoshuheng"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INDUSTRY;","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import static seedu.address.model.Model.PREDICATE_SHOW_ALL_PERSONS;","lastModifiedDate":"2017-08-05"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-09"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import java.util.Collections;","lastModifiedDate":"2018-01-11"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import java.util.HashSet;","lastModifiedDate":"2018-01-11"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2016-12-26"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import java.util.Objects;","lastModifiedDate":"2023-07-13"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import java.util.Optional;","lastModifiedDate":"2016-12-26"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-03-07"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2017-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.CollectionUtil;","lastModifiedDate":"2016-12-26"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.ToStringBuilder;","lastModifiedDate":"2019-02-23"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import seedu.address.logic.Messages;","lastModifiedDate":"2023-07-13"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.exceptions.CommandException;","lastModifiedDate":"2017-02-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import seedu.address.model.Model;","lastModifiedDate":"2018-08-08"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.model.person.FundingStage;","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.model.person.Industry;","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2024-02-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-03-07"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":35,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-12-26"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * Edits the details of an existing person in the address book.","lastModifiedDate":"2016-12-26"},{"lineNumber":37,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-26"},{"lineNumber":38,"author":{"gitId":"-"},"content":"public class EditCommand extends Command {","lastModifiedDate":"2018-04-19"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":40,"author":{"gitId":"-"},"content":" public static final String COMMAND_WORD \u003d \"edit\";","lastModifiedDate":"2016-12-26"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":42,"author":{"gitId":"-"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Edits the details of the person identified \"","lastModifiedDate":"2016-12-26"},{"lineNumber":43,"author":{"gitId":"-"},"content":" + \"by the index number used in the displayed person list. \"","lastModifiedDate":"2018-04-01"},{"lineNumber":44,"author":{"gitId":"-"},"content":" + \"Existing values will be overwritten by the input values.\\n\"","lastModifiedDate":"2016-12-26"},{"lineNumber":45,"author":{"gitId":"-"},"content":" + \"Parameters: INDEX (must be a positive integer) \"","lastModifiedDate":"2017-06-06"},{"lineNumber":46,"author":{"gitId":"-"},"content":" + \"[\" + PREFIX_NAME + \"NAME] \"","lastModifiedDate":"2017-06-06"},{"lineNumber":47,"author":{"gitId":"yeoshuheng"},"content":" + \"[\" + PREFIX_INDUSTRY + \"INDUSTRY\" + \"] \"","lastModifiedDate":"2024-02-25"},{"lineNumber":48,"author":{"gitId":"yeoshuheng"},"content":" + \"[\" + PREFIX_FUNDING_STAGE + \"FUNDING STAGE] \"","lastModifiedDate":"2024-02-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" + \"[\" + PREFIX_PHONE + \"PHONE] \"","lastModifiedDate":"2017-05-09"},{"lineNumber":50,"author":{"gitId":"-"},"content":" + \"[\" + PREFIX_EMAIL + \"EMAIL] \"","lastModifiedDate":"2017-05-09"},{"lineNumber":51,"author":{"gitId":"-"},"content":" + \"[\" + PREFIX_ADDRESS + \"ADDRESS] \"","lastModifiedDate":"2017-05-09"},{"lineNumber":52,"author":{"gitId":"-"},"content":" + \"[\" + PREFIX_TAG + \"TAG]...\\n\"","lastModifiedDate":"2017-05-09"},{"lineNumber":53,"author":{"gitId":"-"},"content":" + \"Example: \" + COMMAND_WORD + \" 1 \"","lastModifiedDate":"2017-05-09"},{"lineNumber":54,"author":{"gitId":"-"},"content":" + PREFIX_PHONE + \"91234567 \"","lastModifiedDate":"2017-05-09"},{"lineNumber":55,"author":{"gitId":"-"},"content":" + PREFIX_EMAIL + \"johndoe@example.com\";","lastModifiedDate":"2017-05-09"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":57,"author":{"gitId":"-"},"content":" public static final String MESSAGE_EDIT_PERSON_SUCCESS \u003d \"Edited Person: %1$s\";","lastModifiedDate":"2016-12-26"},{"lineNumber":58,"author":{"gitId":"-"},"content":" public static final String MESSAGE_NOT_EDITED \u003d \"At least one field to edit must be provided.\";","lastModifiedDate":"2016-12-26"},{"lineNumber":59,"author":{"gitId":"-"},"content":" public static final String MESSAGE_DUPLICATE_PERSON \u003d \"This person already exists in the address book.\";","lastModifiedDate":"2016-12-26"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":61,"author":{"gitId":"-"},"content":" private final Index index;","lastModifiedDate":"2017-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" private final EditPersonDescriptor editPersonDescriptor;","lastModifiedDate":"2016-12-26"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":64,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-12-26"},{"lineNumber":65,"author":{"gitId":"-"},"content":" * @param index of the person in the filtered person list to edit","lastModifiedDate":"2017-05-25"},{"lineNumber":66,"author":{"gitId":"-"},"content":" * @param editPersonDescriptor details to edit the person with","lastModifiedDate":"2016-12-26"},{"lineNumber":67,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-26"},{"lineNumber":68,"author":{"gitId":"-"},"content":" public EditCommand(Index index, EditPersonDescriptor editPersonDescriptor) {","lastModifiedDate":"2017-05-25"},{"lineNumber":69,"author":{"gitId":"-"},"content":" requireNonNull(index);","lastModifiedDate":"2017-05-25"},{"lineNumber":70,"author":{"gitId":"-"},"content":" requireNonNull(editPersonDescriptor);","lastModifiedDate":"2017-05-15"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":72,"author":{"gitId":"-"},"content":" this.index \u003d index;","lastModifiedDate":"2017-05-25"},{"lineNumber":73,"author":{"gitId":"-"},"content":" this.editPersonDescriptor \u003d new EditPersonDescriptor(editPersonDescriptor);","lastModifiedDate":"2016-12-26"},{"lineNumber":74,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":76,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-12-26"},{"lineNumber":77,"author":{"gitId":"-"},"content":" public CommandResult execute(Model model) throws CommandException {","lastModifiedDate":"2019-01-25"},{"lineNumber":78,"author":{"gitId":"-"},"content":" requireNonNull(model);","lastModifiedDate":"2018-08-08"},{"lineNumber":79,"author":{"gitId":"-"},"content":" List\u003cPerson\u003e lastShownList \u003d model.getFilteredPersonList();","lastModifiedDate":"2018-04-19"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":81,"author":{"gitId":"-"},"content":" if (index.getZeroBased() \u003e\u003d lastShownList.size()) {","lastModifiedDate":"2018-04-19"},{"lineNumber":82,"author":{"gitId":"-"},"content":" throw new CommandException(Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX);","lastModifiedDate":"2018-04-19"},{"lineNumber":83,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-04-19"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":85,"author":{"gitId":"-"},"content":" Person personToEdit \u003d lastShownList.get(index.getZeroBased());","lastModifiedDate":"2018-04-19"},{"lineNumber":86,"author":{"gitId":"-"},"content":" Person editedPerson \u003d createEditedPerson(personToEdit, editPersonDescriptor);","lastModifiedDate":"2018-04-19"},{"lineNumber":87,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":88,"author":{"gitId":"-"},"content":" if (!personToEdit.isSamePerson(editedPerson) \u0026\u0026 model.hasPerson(editedPerson)) {","lastModifiedDate":"2018-08-07"},{"lineNumber":89,"author":{"gitId":"-"},"content":" throw new CommandException(MESSAGE_DUPLICATE_PERSON);","lastModifiedDate":"2018-08-07"},{"lineNumber":90,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-07"},{"lineNumber":91,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-07"},{"lineNumber":92,"author":{"gitId":"-"},"content":" model.setPerson(personToEdit, editedPerson);","lastModifiedDate":"2018-08-17"},{"lineNumber":93,"author":{"gitId":"-"},"content":" model.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS);","lastModifiedDate":"2017-08-05"},{"lineNumber":94,"author":{"gitId":"-"},"content":" return new CommandResult(String.format(MESSAGE_EDIT_PERSON_SUCCESS, Messages.format(editedPerson)));","lastModifiedDate":"2019-02-23"},{"lineNumber":95,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":97,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-12-26"},{"lineNumber":98,"author":{"gitId":"-"},"content":" * Creates and returns a {@code Person} with the details of {@code personToEdit}","lastModifiedDate":"2016-12-26"},{"lineNumber":99,"author":{"gitId":"-"},"content":" * edited with {@code editPersonDescriptor}.","lastModifiedDate":"2016-12-26"},{"lineNumber":100,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-26"},{"lineNumber":101,"author":{"gitId":"-"},"content":" private static Person createEditedPerson(Person personToEdit, EditPersonDescriptor editPersonDescriptor) {","lastModifiedDate":"2018-01-10"},{"lineNumber":102,"author":{"gitId":"-"},"content":" assert personToEdit !\u003d null;","lastModifiedDate":"2016-12-26"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":104,"author":{"gitId":"-"},"content":" Name updatedName \u003d editPersonDescriptor.getName().orElse(personToEdit.getName());","lastModifiedDate":"2017-06-21"},{"lineNumber":105,"author":{"gitId":"-"},"content":" Phone updatedPhone \u003d editPersonDescriptor.getPhone().orElse(personToEdit.getPhone());","lastModifiedDate":"2017-06-21"},{"lineNumber":106,"author":{"gitId":"yeoshuheng"},"content":" FundingStage updatedFundingStage \u003d editPersonDescriptor.getFundingStage().orElse(","lastModifiedDate":"2024-02-25"},{"lineNumber":107,"author":{"gitId":"yeoshuheng"},"content":" personToEdit.getFundingStage());","lastModifiedDate":"2024-02-25"},{"lineNumber":108,"author":{"gitId":"yeoshuheng"},"content":" Industry updatedIndustry \u003d editPersonDescriptor.getIndustry().orElse(personToEdit.getIndustry());","lastModifiedDate":"2024-02-25"},{"lineNumber":109,"author":{"gitId":"-"},"content":" Email updatedEmail \u003d editPersonDescriptor.getEmail().orElse(personToEdit.getEmail());","lastModifiedDate":"2017-06-21"},{"lineNumber":110,"author":{"gitId":"-"},"content":" Address updatedAddress \u003d editPersonDescriptor.getAddress().orElse(personToEdit.getAddress());","lastModifiedDate":"2017-06-21"},{"lineNumber":111,"author":{"gitId":"-"},"content":" Set\u003cTag\u003e updatedTags \u003d editPersonDescriptor.getTags().orElse(personToEdit.getTags());","lastModifiedDate":"2017-06-21"},{"lineNumber":112,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":113,"author":{"gitId":"yeoshuheng"},"content":" return new Person(updatedName, updatedFundingStage, updatedIndustry,","lastModifiedDate":"2024-02-25"},{"lineNumber":114,"author":{"gitId":"yeoshuheng"},"content":" updatedPhone, updatedEmail, updatedAddress, updatedTags);","lastModifiedDate":"2024-02-25"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":116,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":117,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-05-08"},{"lineNumber":118,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2017-05-08"},{"lineNumber":119,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2017-05-08"},{"lineNumber":120,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2017-05-08"},{"lineNumber":121,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-08"},{"lineNumber":122,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":123,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2017-05-08"},{"lineNumber":124,"author":{"gitId":"-"},"content":" if (!(other instanceof EditCommand)) {","lastModifiedDate":"2017-05-08"},{"lineNumber":125,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2017-05-08"},{"lineNumber":126,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-08"},{"lineNumber":127,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":128,"author":{"gitId":"-"},"content":" EditCommand otherEditCommand \u003d (EditCommand) other;","lastModifiedDate":"2023-07-13"},{"lineNumber":129,"author":{"gitId":"-"},"content":" return index.equals(otherEditCommand.index)","lastModifiedDate":"2023-07-13"},{"lineNumber":130,"author":{"gitId":"-"},"content":" \u0026\u0026 editPersonDescriptor.equals(otherEditCommand.editPersonDescriptor);","lastModifiedDate":"2023-07-13"},{"lineNumber":131,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-08"},{"lineNumber":132,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":133,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2019-02-23"},{"lineNumber":134,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2019-02-23"},{"lineNumber":135,"author":{"gitId":"-"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2019-02-23"},{"lineNumber":136,"author":{"gitId":"-"},"content":" .add(\"index\", index)","lastModifiedDate":"2019-02-23"},{"lineNumber":137,"author":{"gitId":"-"},"content":" .add(\"editPersonDescriptor\", editPersonDescriptor)","lastModifiedDate":"2019-02-23"},{"lineNumber":138,"author":{"gitId":"-"},"content":" .toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":139,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":140,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":141,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-12-26"},{"lineNumber":142,"author":{"gitId":"-"},"content":" * Stores the details to edit the person with. Each non-empty field value will replace the","lastModifiedDate":"2016-12-26"},{"lineNumber":143,"author":{"gitId":"-"},"content":" * corresponding field value of the person.","lastModifiedDate":"2016-12-26"},{"lineNumber":144,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-26"},{"lineNumber":145,"author":{"gitId":"-"},"content":" public static class EditPersonDescriptor {","lastModifiedDate":"2016-12-26"},{"lineNumber":146,"author":{"gitId":"-"},"content":" private Name name;","lastModifiedDate":"2017-06-21"},{"lineNumber":147,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":148,"author":{"gitId":"yeoshuheng"},"content":" private Industry industry;","lastModifiedDate":"2024-02-25"},{"lineNumber":149,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":150,"author":{"gitId":"yeoshuheng"},"content":" private FundingStage fundingStage;","lastModifiedDate":"2024-02-25"},{"lineNumber":151,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":152,"author":{"gitId":"-"},"content":" private Phone phone;","lastModifiedDate":"2017-06-21"},{"lineNumber":153,"author":{"gitId":"-"},"content":" private Email email;","lastModifiedDate":"2017-06-21"},{"lineNumber":154,"author":{"gitId":"-"},"content":" private Address address;","lastModifiedDate":"2017-06-21"},{"lineNumber":155,"author":{"gitId":"-"},"content":" private Set\u003cTag\u003e tags;","lastModifiedDate":"2017-06-21"},{"lineNumber":156,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":157,"author":{"gitId":"-"},"content":" public EditPersonDescriptor() {}","lastModifiedDate":"2016-12-26"},{"lineNumber":158,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":159,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-01-11"},{"lineNumber":160,"author":{"gitId":"-"},"content":" * Copy constructor.","lastModifiedDate":"2018-01-11"},{"lineNumber":161,"author":{"gitId":"-"},"content":" * A defensive copy of {@code tags} is used internally.","lastModifiedDate":"2018-01-11"},{"lineNumber":162,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-01-11"},{"lineNumber":163,"author":{"gitId":"-"},"content":" public EditPersonDescriptor(EditPersonDescriptor toCopy) {","lastModifiedDate":"2016-12-26"},{"lineNumber":164,"author":{"gitId":"-"},"content":" setName(toCopy.name);","lastModifiedDate":"2018-01-15"},{"lineNumber":165,"author":{"gitId":"yeoshuheng"},"content":" setFundingStage(toCopy.fundingStage);","lastModifiedDate":"2024-02-25"},{"lineNumber":166,"author":{"gitId":"yeoshuheng"},"content":" setIndustry(toCopy.industry);","lastModifiedDate":"2024-02-25"},{"lineNumber":167,"author":{"gitId":"-"},"content":" setPhone(toCopy.phone);","lastModifiedDate":"2018-01-15"},{"lineNumber":168,"author":{"gitId":"-"},"content":" setEmail(toCopy.email);","lastModifiedDate":"2018-01-15"},{"lineNumber":169,"author":{"gitId":"-"},"content":" setAddress(toCopy.address);","lastModifiedDate":"2018-01-15"},{"lineNumber":170,"author":{"gitId":"-"},"content":" setTags(toCopy.tags);","lastModifiedDate":"2018-01-11"},{"lineNumber":171,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":172,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":173,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-12-26"},{"lineNumber":174,"author":{"gitId":"-"},"content":" * Returns true if at least one field is edited.","lastModifiedDate":"2016-12-26"},{"lineNumber":175,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-26"},{"lineNumber":176,"author":{"gitId":"-"},"content":" public boolean isAnyFieldEdited() {","lastModifiedDate":"2016-12-26"},{"lineNumber":177,"author":{"gitId":"yeoshuheng"},"content":" return CollectionUtil.isAnyNonNull(name, industry, fundingStage, phone, email, address, tags);","lastModifiedDate":"2024-02-25"},{"lineNumber":178,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":179,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":180,"author":{"gitId":"yeoshuheng"},"content":" public void setIndustry(Industry industry) {","lastModifiedDate":"2024-02-25"},{"lineNumber":181,"author":{"gitId":"yeoshuheng"},"content":" this.industry \u003d industry;","lastModifiedDate":"2024-02-25"},{"lineNumber":182,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":183,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":184,"author":{"gitId":"yeoshuheng"},"content":" public void setFundingStage(FundingStage fundingStage) {","lastModifiedDate":"2024-02-25"},{"lineNumber":185,"author":{"gitId":"yeoshuheng"},"content":" this.fundingStage \u003d fundingStage;","lastModifiedDate":"2024-02-25"},{"lineNumber":186,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":187,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":188,"author":{"gitId":"-"},"content":" public void setName(Name name) {","lastModifiedDate":"2017-06-21"},{"lineNumber":189,"author":{"gitId":"-"},"content":" this.name \u003d name;","lastModifiedDate":"2017-06-21"},{"lineNumber":190,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":191,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":192,"author":{"gitId":"-"},"content":" public Optional\u003cName\u003e getName() {","lastModifiedDate":"2016-12-26"},{"lineNumber":193,"author":{"gitId":"-"},"content":" return Optional.ofNullable(name);","lastModifiedDate":"2017-06-21"},{"lineNumber":194,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":195,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":196,"author":{"gitId":"yeoshuheng"},"content":" public Optional\u003cIndustry\u003e getIndustry() {","lastModifiedDate":"2024-02-25"},{"lineNumber":197,"author":{"gitId":"yeoshuheng"},"content":" return Optional.ofNullable(industry);","lastModifiedDate":"2024-02-25"},{"lineNumber":198,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":199,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":200,"author":{"gitId":"yeoshuheng"},"content":" public Optional\u003cFundingStage\u003e getFundingStage() {","lastModifiedDate":"2024-02-25"},{"lineNumber":201,"author":{"gitId":"yeoshuheng"},"content":" return Optional.ofNullable(fundingStage);","lastModifiedDate":"2024-02-25"},{"lineNumber":202,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":203,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":204,"author":{"gitId":"-"},"content":" public void setPhone(Phone phone) {","lastModifiedDate":"2017-06-21"},{"lineNumber":205,"author":{"gitId":"-"},"content":" this.phone \u003d phone;","lastModifiedDate":"2017-06-21"},{"lineNumber":206,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":207,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":208,"author":{"gitId":"-"},"content":" public Optional\u003cPhone\u003e getPhone() {","lastModifiedDate":"2016-12-26"},{"lineNumber":209,"author":{"gitId":"-"},"content":" return Optional.ofNullable(phone);","lastModifiedDate":"2017-06-21"},{"lineNumber":210,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":211,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":212,"author":{"gitId":"-"},"content":" public void setEmail(Email email) {","lastModifiedDate":"2017-06-21"},{"lineNumber":213,"author":{"gitId":"-"},"content":" this.email \u003d email;","lastModifiedDate":"2017-06-21"},{"lineNumber":214,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":215,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":216,"author":{"gitId":"-"},"content":" public Optional\u003cEmail\u003e getEmail() {","lastModifiedDate":"2016-12-26"},{"lineNumber":217,"author":{"gitId":"-"},"content":" return Optional.ofNullable(email);","lastModifiedDate":"2017-06-21"},{"lineNumber":218,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":219,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":220,"author":{"gitId":"-"},"content":" public void setAddress(Address address) {","lastModifiedDate":"2017-06-21"},{"lineNumber":221,"author":{"gitId":"-"},"content":" this.address \u003d address;","lastModifiedDate":"2017-06-21"},{"lineNumber":222,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":223,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":224,"author":{"gitId":"-"},"content":" public Optional\u003cAddress\u003e getAddress() {","lastModifiedDate":"2016-12-26"},{"lineNumber":225,"author":{"gitId":"-"},"content":" return Optional.ofNullable(address);","lastModifiedDate":"2017-06-21"},{"lineNumber":226,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":227,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":228,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-01-11"},{"lineNumber":229,"author":{"gitId":"-"},"content":" * Sets {@code tags} to this object\u0027s {@code tags}.","lastModifiedDate":"2018-01-11"},{"lineNumber":230,"author":{"gitId":"-"},"content":" * A defensive copy of {@code tags} is used internally.","lastModifiedDate":"2018-01-11"},{"lineNumber":231,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-01-11"},{"lineNumber":232,"author":{"gitId":"-"},"content":" public void setTags(Set\u003cTag\u003e tags) {","lastModifiedDate":"2017-06-21"},{"lineNumber":233,"author":{"gitId":"-"},"content":" this.tags \u003d (tags !\u003d null) ? new HashSet\u003c\u003e(tags) : null;","lastModifiedDate":"2018-01-11"},{"lineNumber":234,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":235,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":236,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-01-11"},{"lineNumber":237,"author":{"gitId":"-"},"content":" * Returns an unmodifiable tag set, which throws {@code UnsupportedOperationException}","lastModifiedDate":"2018-01-11"},{"lineNumber":238,"author":{"gitId":"-"},"content":" * if modification is attempted.","lastModifiedDate":"2018-01-11"},{"lineNumber":239,"author":{"gitId":"-"},"content":" * Returns {@code Optional#empty()} if {@code tags} is null.","lastModifiedDate":"2018-01-11"},{"lineNumber":240,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-01-11"},{"lineNumber":241,"author":{"gitId":"-"},"content":" public Optional\u003cSet\u003cTag\u003e\u003e getTags() {","lastModifiedDate":"2017-03-07"},{"lineNumber":242,"author":{"gitId":"-"},"content":" return (tags !\u003d null) ? Optional.of(Collections.unmodifiableSet(tags)) : Optional.empty();","lastModifiedDate":"2018-01-11"},{"lineNumber":243,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":244,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":245,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-05-05"},{"lineNumber":246,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2017-05-05"},{"lineNumber":247,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2017-05-05"},{"lineNumber":248,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2017-05-05"},{"lineNumber":249,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":250,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":251,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2017-05-05"},{"lineNumber":252,"author":{"gitId":"-"},"content":" if (!(other instanceof EditPersonDescriptor)) {","lastModifiedDate":"2017-05-05"},{"lineNumber":253,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2017-05-05"},{"lineNumber":254,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":255,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":256,"author":{"gitId":"-"},"content":" EditPersonDescriptor otherEditPersonDescriptor \u003d (EditPersonDescriptor) other;","lastModifiedDate":"2023-07-13"},{"lineNumber":257,"author":{"gitId":"-"},"content":" return Objects.equals(name, otherEditPersonDescriptor.name)","lastModifiedDate":"2023-07-13"},{"lineNumber":258,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(phone, otherEditPersonDescriptor.phone)","lastModifiedDate":"2023-07-13"},{"lineNumber":259,"author":{"gitId":"yeoshuheng"},"content":" \u0026\u0026 Objects.equals(fundingStage, otherEditPersonDescriptor.fundingStage)","lastModifiedDate":"2024-02-25"},{"lineNumber":260,"author":{"gitId":"yeoshuheng"},"content":" \u0026\u0026 Objects.equals(industry, otherEditPersonDescriptor.industry)","lastModifiedDate":"2024-02-25"},{"lineNumber":261,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(email, otherEditPersonDescriptor.email)","lastModifiedDate":"2023-07-13"},{"lineNumber":262,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(address, otherEditPersonDescriptor.address)","lastModifiedDate":"2023-07-13"},{"lineNumber":263,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(tags, otherEditPersonDescriptor.tags);","lastModifiedDate":"2023-07-13"},{"lineNumber":264,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":265,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":266,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2019-02-23"},{"lineNumber":267,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2019-02-23"},{"lineNumber":268,"author":{"gitId":"-"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2019-02-23"},{"lineNumber":269,"author":{"gitId":"-"},"content":" .add(\"name\", name)","lastModifiedDate":"2019-02-23"},{"lineNumber":270,"author":{"gitId":"yeoshuheng"},"content":" .add(\"industry\", industry)","lastModifiedDate":"2024-02-25"},{"lineNumber":271,"author":{"gitId":"yeoshuheng"},"content":" .add(\"funding stage\", fundingStage)","lastModifiedDate":"2024-02-25"},{"lineNumber":272,"author":{"gitId":"-"},"content":" .add(\"phone\", phone)","lastModifiedDate":"2019-02-23"},{"lineNumber":273,"author":{"gitId":"-"},"content":" .add(\"email\", email)","lastModifiedDate":"2019-02-23"},{"lineNumber":274,"author":{"gitId":"-"},"content":" .add(\"address\", address)","lastModifiedDate":"2019-02-23"},{"lineNumber":275,"author":{"gitId":"-"},"content":" .add(\"tags\", tags)","lastModifiedDate":"2019-02-23"},{"lineNumber":276,"author":{"gitId":"-"},"content":" .toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":277,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":278,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":279,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-12-26"}],"authorContributionMap":{"-":240,"yeoshuheng":39}},{"path":"src/main/java/seedu/address/logic/parser/AddCommandParser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-02-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-07-13"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2024-02-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2024-02-25"},{"lineNumber":6,"author":{"gitId":"yeoshuheng"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_FUNDING_STAGE;","lastModifiedDate":"2024-02-25"},{"lineNumber":7,"author":{"gitId":"yeoshuheng"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INDUSTRY;","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-03-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import java.util.stream.Stream;","lastModifiedDate":"2017-03-17"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.AddCommand;","lastModifiedDate":"2017-02-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2017-03-11"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2024-02-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2024-02-25"},{"lineNumber":19,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.model.person.FundingStage;","lastModifiedDate":"2024-02-25"},{"lineNumber":20,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.model.person.Industry;","lastModifiedDate":"2024-02-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2024-02-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2024-02-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2024-02-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-03-17"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-02-05"},{"lineNumber":27,"author":{"gitId":"-"},"content":" * Parses input arguments and creates a new AddCommand object","lastModifiedDate":"2017-02-05"},{"lineNumber":28,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-05"},{"lineNumber":29,"author":{"gitId":"-"},"content":"public class AddCommandParser implements Parser\u003cAddCommand\u003e {","lastModifiedDate":"2017-07-06"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":31,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-02-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":" * Parses the given {@code String} of arguments in the context of the AddCommand","lastModifiedDate":"2017-02-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * and returns an AddCommand object for execution.","lastModifiedDate":"2017-02-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * @throws ParseException if the user input does not conform the expected format","lastModifiedDate":"2017-03-11"},{"lineNumber":35,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-05"},{"lineNumber":36,"author":{"gitId":"-"},"content":" public AddCommand parse(String args) throws ParseException {","lastModifiedDate":"2017-03-11"},{"lineNumber":37,"author":{"gitId":"-"},"content":" ArgumentMultimap argMultimap \u003d","lastModifiedDate":"2017-03-20"},{"lineNumber":38,"author":{"gitId":"yeoshuheng"},"content":" ArgumentTokenizer.tokenize(args, PREFIX_NAME,","lastModifiedDate":"2024-02-25"},{"lineNumber":39,"author":{"gitId":"yeoshuheng"},"content":" PREFIX_INDUSTRY, PREFIX_FUNDING_STAGE, PREFIX_PHONE,","lastModifiedDate":"2024-02-25"},{"lineNumber":40,"author":{"gitId":"yeoshuheng"},"content":" PREFIX_EMAIL, PREFIX_ADDRESS, PREFIX_TAG);","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-17"},{"lineNumber":42,"author":{"gitId":"yeoshuheng"},"content":" if (!arePrefixesPresent(argMultimap, PREFIX_NAME, PREFIX_INDUSTRY,","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"yeoshuheng"},"content":" PREFIX_FUNDING_STAGE, PREFIX_ADDRESS,","lastModifiedDate":"2024-02-25"},{"lineNumber":44,"author":{"gitId":"yeoshuheng"},"content":" PREFIX_PHONE, PREFIX_EMAIL)","lastModifiedDate":"2024-02-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" || !argMultimap.getPreamble().isEmpty()) {","lastModifiedDate":"2017-12-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":" throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddCommand.MESSAGE_USAGE));","lastModifiedDate":"2017-03-11"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-03-17"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-17"},{"lineNumber":49,"author":{"gitId":"yeoshuheng"},"content":" argMultimap.verifyNoDuplicatePrefixesFor(PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS,","lastModifiedDate":"2024-03-05"},{"lineNumber":50,"author":{"gitId":"yeoshuheng"},"content":" PREFIX_FUNDING_STAGE, PREFIX_INDUSTRY);","lastModifiedDate":"2024-03-05"},{"lineNumber":51,"author":{"gitId":"-"},"content":" Name name \u003d ParserUtil.parseName(argMultimap.getValue(PREFIX_NAME).get());","lastModifiedDate":"2018-07-10"},{"lineNumber":52,"author":{"gitId":"yeoshuheng"},"content":" FundingStage fundingStage \u003d ParserUtil.parseFundingStage(argMultimap.getValue(PREFIX_FUNDING_STAGE).get());","lastModifiedDate":"2024-02-25"},{"lineNumber":53,"author":{"gitId":"yeoshuheng"},"content":" Industry industry \u003d ParserUtil.parseIndustry(argMultimap.getValue(PREFIX_INDUSTRY).get());","lastModifiedDate":"2024-02-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" Phone phone \u003d ParserUtil.parsePhone(argMultimap.getValue(PREFIX_PHONE).get());","lastModifiedDate":"2018-07-10"},{"lineNumber":55,"author":{"gitId":"-"},"content":" Email email \u003d ParserUtil.parseEmail(argMultimap.getValue(PREFIX_EMAIL).get());","lastModifiedDate":"2018-07-10"},{"lineNumber":56,"author":{"gitId":"-"},"content":" Address address \u003d ParserUtil.parseAddress(argMultimap.getValue(PREFIX_ADDRESS).get());","lastModifiedDate":"2018-07-10"},{"lineNumber":57,"author":{"gitId":"-"},"content":" Set\u003cTag\u003e tagList \u003d ParserUtil.parseTags(argMultimap.getAllValues(PREFIX_TAG));","lastModifiedDate":"2017-03-17"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-17"},{"lineNumber":59,"author":{"gitId":"yeoshuheng"},"content":" Person person \u003d new Person(name, fundingStage, industry, phone, email, address, tagList);","lastModifiedDate":"2024-02-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-17"},{"lineNumber":61,"author":{"gitId":"-"},"content":" return new AddCommand(person);","lastModifiedDate":"2017-03-17"},{"lineNumber":62,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-05"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":64,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-03-17"},{"lineNumber":65,"author":{"gitId":"-"},"content":" * Returns true if none of the prefixes contains empty {@code Optional} values in the given","lastModifiedDate":"2017-03-17"},{"lineNumber":66,"author":{"gitId":"-"},"content":" * {@code ArgumentMultimap}.","lastModifiedDate":"2017-03-17"},{"lineNumber":67,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-03-17"},{"lineNumber":68,"author":{"gitId":"-"},"content":" private static boolean arePrefixesPresent(ArgumentMultimap argumentMultimap, Prefix... prefixes) {","lastModifiedDate":"2017-03-17"},{"lineNumber":69,"author":{"gitId":"-"},"content":" return Stream.of(prefixes).allMatch(prefix -\u003e argumentMultimap.getValue(prefix).isPresent());","lastModifiedDate":"2017-03-17"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-03-17"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-17"},{"lineNumber":72,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-02-05"}],"authorContributionMap":{"-":57,"yeoshuheng":15}},{"path":"src/main/java/seedu/address/logic/parser/CliSyntax.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-02-11"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":3,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-02-11"},{"lineNumber":4,"author":{"gitId":"-"},"content":" * Contains Command Line Interface (CLI) syntax definitions common to multiple commands","lastModifiedDate":"2017-02-11"},{"lineNumber":5,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-11"},{"lineNumber":6,"author":{"gitId":"-"},"content":"public class CliSyntax {","lastModifiedDate":"2017-02-11"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":8,"author":{"gitId":"-"},"content":" /* Prefix definitions */","lastModifiedDate":"2017-02-11"},{"lineNumber":9,"author":{"gitId":"-"},"content":" public static final Prefix PREFIX_NAME \u003d new Prefix(\"n/\");","lastModifiedDate":"2017-06-06"},{"lineNumber":10,"author":{"gitId":"yeoshuheng"},"content":" public static final Prefix PREFIX_INDUSTRY \u003d new Prefix(\"i/\");","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"yeoshuheng"},"content":" public static final Prefix PREFIX_FUNDING_STAGE \u003d new Prefix(\"f/\");","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" public static final Prefix PREFIX_PHONE \u003d new Prefix(\"p/\");","lastModifiedDate":"2017-02-11"},{"lineNumber":13,"author":{"gitId":"-"},"content":" public static final Prefix PREFIX_EMAIL \u003d new Prefix(\"e/\");","lastModifiedDate":"2017-02-11"},{"lineNumber":14,"author":{"gitId":"-"},"content":" public static final Prefix PREFIX_ADDRESS \u003d new Prefix(\"a/\");","lastModifiedDate":"2017-02-11"},{"lineNumber":15,"author":{"gitId":"-"},"content":" public static final Prefix PREFIX_TAG \u003d new Prefix(\"t/\");","lastModifiedDate":"2017-02-11"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":17,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-02-11"}],"authorContributionMap":{"-":15,"yeoshuheng":2}},{"path":"src/main/java/seedu/address/logic/parser/EditCommandParser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-01-26"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2017-05-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-07-13"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.Collection;","lastModifiedDate":"2017-01-26"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.Collections;","lastModifiedDate":"2017-01-26"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.Optional;","lastModifiedDate":"2017-01-26"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-03-07"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2017-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand;","lastModifiedDate":"2017-01-26"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand.EditPersonDescriptor;","lastModifiedDate":"2017-01-26"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2017-03-11"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-03-07"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":17,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-01-26"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * Parses input arguments and creates a new EditCommand object","lastModifiedDate":"2017-01-26"},{"lineNumber":19,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-01-26"},{"lineNumber":20,"author":{"gitId":"-"},"content":"public class EditCommandParser implements Parser\u003cEditCommand\u003e {","lastModifiedDate":"2017-07-06"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":22,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-01-26"},{"lineNumber":23,"author":{"gitId":"-"},"content":" * Parses the given {@code String} of arguments in the context of the EditCommand","lastModifiedDate":"2017-01-26"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * and returns an EditCommand object for execution.","lastModifiedDate":"2017-01-26"},{"lineNumber":25,"author":{"gitId":"-"},"content":" * @throws ParseException if the user input does not conform the expected format","lastModifiedDate":"2017-03-11"},{"lineNumber":26,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-01-26"},{"lineNumber":27,"author":{"gitId":"-"},"content":" public EditCommand parse(String args) throws ParseException {","lastModifiedDate":"2017-03-11"},{"lineNumber":28,"author":{"gitId":"-"},"content":" requireNonNull(args);","lastModifiedDate":"2017-05-15"},{"lineNumber":29,"author":{"gitId":"-"},"content":" ArgumentMultimap argMultimap \u003d","lastModifiedDate":"2017-03-20"},{"lineNumber":30,"author":{"gitId":"yeoshuheng"},"content":" ArgumentTokenizer.tokenize(args, CliSyntax.PREFIX_NAME,","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"yeoshuheng"},"content":" CliSyntax.PREFIX_INDUSTRY, CliSyntax.PREFIX_FUNDING_STAGE, CliSyntax.PREFIX_PHONE,","lastModifiedDate":"2024-02-25"},{"lineNumber":32,"author":{"gitId":"yeoshuheng"},"content":" CliSyntax.PREFIX_EMAIL, CliSyntax.PREFIX_ADDRESS, CliSyntax.PREFIX_TAG);","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-15"},{"lineNumber":34,"author":{"gitId":"-"},"content":" Index index;","lastModifiedDate":"2017-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-15"},{"lineNumber":36,"author":{"gitId":"-"},"content":" try {","lastModifiedDate":"2017-05-15"},{"lineNumber":37,"author":{"gitId":"-"},"content":" index \u003d ParserUtil.parseIndex(argMultimap.getPreamble());","lastModifiedDate":"2017-06-06"},{"lineNumber":38,"author":{"gitId":"-"},"content":" } catch (ParseException pe) {","lastModifiedDate":"2018-07-10"},{"lineNumber":39,"author":{"gitId":"-"},"content":" throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, EditCommand.MESSAGE_USAGE), pe);","lastModifiedDate":"2018-08-06"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-01-26"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":42,"author":{"gitId":"yeoshuheng"},"content":" argMultimap.verifyNoDuplicatePrefixesFor(CliSyntax.PREFIX_NAME, CliSyntax.PREFIX_PHONE,","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"yeoshuheng"},"content":" CliSyntax.PREFIX_EMAIL, CliSyntax.PREFIX_ADDRESS);","lastModifiedDate":"2024-02-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":45,"author":{"gitId":"-"},"content":" EditPersonDescriptor editPersonDescriptor \u003d new EditPersonDescriptor();","lastModifiedDate":"2017-01-26"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":47,"author":{"gitId":"yeoshuheng"},"content":" if (argMultimap.getValue(CliSyntax.PREFIX_NAME).isPresent()) {","lastModifiedDate":"2024-02-25"},{"lineNumber":48,"author":{"gitId":"yeoshuheng"},"content":" editPersonDescriptor.setName(ParserUtil.parseName(argMultimap.getValue(CliSyntax.PREFIX_NAME).get()));","lastModifiedDate":"2024-02-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-07-10"},{"lineNumber":50,"author":{"gitId":"yeoshuheng"},"content":" if (argMultimap.getValue(CliSyntax.PREFIX_FUNDING_STAGE).isPresent()) {","lastModifiedDate":"2024-02-25"},{"lineNumber":51,"author":{"gitId":"yeoshuheng"},"content":" editPersonDescriptor.setFundingStage(","lastModifiedDate":"2024-02-25"},{"lineNumber":52,"author":{"gitId":"yeoshuheng"},"content":" ParserUtil.parseFundingStage(argMultimap.getValue(CliSyntax.PREFIX_FUNDING_STAGE).get()));","lastModifiedDate":"2024-02-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-07-10"},{"lineNumber":54,"author":{"gitId":"yeoshuheng"},"content":" if (argMultimap.getValue(CliSyntax.PREFIX_INDUSTRY).isPresent()) {","lastModifiedDate":"2024-02-25"},{"lineNumber":55,"author":{"gitId":"yeoshuheng"},"content":" editPersonDescriptor.setIndustry(","lastModifiedDate":"2024-02-25"},{"lineNumber":56,"author":{"gitId":"yeoshuheng"},"content":" ParserUtil.parseIndustry(argMultimap.getValue(CliSyntax.PREFIX_INDUSTRY).get()));","lastModifiedDate":"2024-02-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-07-10"},{"lineNumber":58,"author":{"gitId":"yeoshuheng"},"content":" if (argMultimap.getValue(CliSyntax.PREFIX_PHONE).isPresent()) {","lastModifiedDate":"2024-02-25"},{"lineNumber":59,"author":{"gitId":"yeoshuheng"},"content":" editPersonDescriptor.setPhone(","lastModifiedDate":"2024-02-25"},{"lineNumber":60,"author":{"gitId":"yeoshuheng"},"content":" ParserUtil.parsePhone(argMultimap.getValue(CliSyntax.PREFIX_PHONE).get()));","lastModifiedDate":"2024-02-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-07-10"},{"lineNumber":62,"author":{"gitId":"yeoshuheng"},"content":" if (argMultimap.getValue(CliSyntax.PREFIX_EMAIL).isPresent()) {","lastModifiedDate":"2024-02-25"},{"lineNumber":63,"author":{"gitId":"yeoshuheng"},"content":" editPersonDescriptor.setEmail(ParserUtil.parseEmail(argMultimap.getValue(CliSyntax.PREFIX_EMAIL).get()));","lastModifiedDate":"2024-02-25"},{"lineNumber":64,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":65,"author":{"gitId":"yeoshuheng"},"content":" if (argMultimap.getValue(CliSyntax.PREFIX_ADDRESS).isPresent()) {","lastModifiedDate":"2024-02-25"},{"lineNumber":66,"author":{"gitId":"yeoshuheng"},"content":" editPersonDescriptor.setAddress(ParserUtil.parseAddress(","lastModifiedDate":"2024-02-25"},{"lineNumber":67,"author":{"gitId":"yeoshuheng"},"content":" argMultimap.getValue(CliSyntax.PREFIX_ADDRESS).get()));","lastModifiedDate":"2024-02-25"},{"lineNumber":68,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":69,"author":{"gitId":"yeoshuheng"},"content":" parseTagsForEdit(argMultimap.getAllValues(CliSyntax.PREFIX_TAG)).ifPresent(editPersonDescriptor::setTags);","lastModifiedDate":"2024-02-25"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":71,"author":{"gitId":"-"},"content":" if (!editPersonDescriptor.isAnyFieldEdited()) {","lastModifiedDate":"2017-01-26"},{"lineNumber":72,"author":{"gitId":"-"},"content":" throw new ParseException(EditCommand.MESSAGE_NOT_EDITED);","lastModifiedDate":"2017-03-11"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-01-26"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":75,"author":{"gitId":"-"},"content":" return new EditCommand(index, editPersonDescriptor);","lastModifiedDate":"2017-05-15"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-01-26"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":78,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-01-26"},{"lineNumber":79,"author":{"gitId":"-"},"content":" * Parses {@code Collection\u003cString\u003e tags} into a {@code Set\u003cTag\u003e} if {@code tags} is non-empty.","lastModifiedDate":"2017-03-07"},{"lineNumber":80,"author":{"gitId":"-"},"content":" * If {@code tags} contain only one element which is an empty string, it will be parsed into a","lastModifiedDate":"2017-01-26"},{"lineNumber":81,"author":{"gitId":"-"},"content":" * {@code Set\u003cTag\u003e} containing zero tags.","lastModifiedDate":"2017-03-07"},{"lineNumber":82,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-01-26"},{"lineNumber":83,"author":{"gitId":"-"},"content":" private Optional\u003cSet\u003cTag\u003e\u003e parseTagsForEdit(Collection\u003cString\u003e tags) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":84,"author":{"gitId":"-"},"content":" assert tags !\u003d null;","lastModifiedDate":"2017-01-26"},{"lineNumber":85,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":86,"author":{"gitId":"-"},"content":" if (tags.isEmpty()) {","lastModifiedDate":"2017-01-26"},{"lineNumber":87,"author":{"gitId":"-"},"content":" return Optional.empty();","lastModifiedDate":"2017-01-26"},{"lineNumber":88,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-01-26"},{"lineNumber":89,"author":{"gitId":"-"},"content":" Collection\u003cString\u003e tagSet \u003d tags.size() \u003d\u003d 1 \u0026\u0026 tags.contains(\"\") ? Collections.emptySet() : tags;","lastModifiedDate":"2017-01-26"},{"lineNumber":90,"author":{"gitId":"-"},"content":" return Optional.of(ParserUtil.parseTags(tagSet));","lastModifiedDate":"2017-01-26"},{"lineNumber":91,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-01-26"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":93,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-01-26"}],"authorContributionMap":{"-":69,"yeoshuheng":24}},{"path":"src/main/java/seedu/address/logic/parser/ParserUtil.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-02-11"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2017-05-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.Collection;","lastModifiedDate":"2017-02-11"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.HashSet;","lastModifiedDate":"2017-02-11"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-02-11"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2017-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.StringUtil;","lastModifiedDate":"2017-02-11"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2018-07-10"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.model.person.FundingStage;","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.model.person.Industry;","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2024-02-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-02-11"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":20,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-02-11"},{"lineNumber":21,"author":{"gitId":"-"},"content":" * Contains utility methods used for parsing strings in the various *Parser classes.","lastModifiedDate":"2017-07-18"},{"lineNumber":22,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-11"},{"lineNumber":23,"author":{"gitId":"-"},"content":"public class ParserUtil {","lastModifiedDate":"2017-02-11"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":25,"author":{"gitId":"-"},"content":" public static final String MESSAGE_INVALID_INDEX \u003d \"Index is not a non-zero unsigned integer.\";","lastModifiedDate":"2017-06-02"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-02"},{"lineNumber":27,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-02-11"},{"lineNumber":28,"author":{"gitId":"-"},"content":" * Parses {@code oneBasedIndex} into an {@code Index} and returns it. Leading and trailing whitespaces will be","lastModifiedDate":"2017-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * trimmed.","lastModifiedDate":"2017-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" * @throws ParseException if the specified index is invalid (not non-zero unsigned integer).","lastModifiedDate":"2018-07-10"},{"lineNumber":31,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-11"},{"lineNumber":32,"author":{"gitId":"-"},"content":" public static Index parseIndex(String oneBasedIndex) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":33,"author":{"gitId":"-"},"content":" String trimmedIndex \u003d oneBasedIndex.trim();","lastModifiedDate":"2017-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" if (!StringUtil.isNonZeroUnsignedInteger(trimmedIndex)) {","lastModifiedDate":"2017-06-02"},{"lineNumber":35,"author":{"gitId":"-"},"content":" throw new ParseException(MESSAGE_INVALID_INDEX);","lastModifiedDate":"2018-07-10"},{"lineNumber":36,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-11"},{"lineNumber":37,"author":{"gitId":"-"},"content":" return Index.fromOneBased(Integer.parseInt(trimmedIndex));","lastModifiedDate":"2017-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-11"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":40,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-29"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * Parses a {@code String name} into a {@code Name}.","lastModifiedDate":"2017-05-29"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2017-05-29"},{"lineNumber":43,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2017-05-29"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * @throws ParseException if the given {@code name} is invalid.","lastModifiedDate":"2018-07-10"},{"lineNumber":45,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-29"},{"lineNumber":46,"author":{"gitId":"-"},"content":" public static Name parseName(String name) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":47,"author":{"gitId":"-"},"content":" requireNonNull(name);","lastModifiedDate":"2017-05-29"},{"lineNumber":48,"author":{"gitId":"-"},"content":" String trimmedName \u003d name.trim();","lastModifiedDate":"2017-05-29"},{"lineNumber":49,"author":{"gitId":"-"},"content":" if (!Name.isValidName(trimmedName)) {","lastModifiedDate":"2017-05-30"},{"lineNumber":50,"author":{"gitId":"-"},"content":" throw new ParseException(Name.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":51,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":52,"author":{"gitId":"-"},"content":" return new Name(trimmedName);","lastModifiedDate":"2017-05-29"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-29"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-29"},{"lineNumber":55,"author":{"gitId":"yeoshuheng"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":56,"author":{"gitId":"yeoshuheng"},"content":" * Parses a {@code String industry} into a {@code Industry}.","lastModifiedDate":"2024-02-25"},{"lineNumber":57,"author":{"gitId":"yeoshuheng"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2024-02-25"},{"lineNumber":58,"author":{"gitId":"yeoshuheng"},"content":" *","lastModifiedDate":"2024-02-25"},{"lineNumber":59,"author":{"gitId":"yeoshuheng"},"content":" * @throws ParseException if the given {@code industry} is invalid.","lastModifiedDate":"2024-02-25"},{"lineNumber":60,"author":{"gitId":"yeoshuheng"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":61,"author":{"gitId":"yeoshuheng"},"content":" public static Industry parseIndustry(String industry) throws ParseException {","lastModifiedDate":"2024-02-25"},{"lineNumber":62,"author":{"gitId":"yeoshuheng"},"content":" requireNonNull(industry);","lastModifiedDate":"2024-02-25"},{"lineNumber":63,"author":{"gitId":"yeoshuheng"},"content":" String trimmedIndustry \u003d industry.trim();","lastModifiedDate":"2024-02-25"},{"lineNumber":64,"author":{"gitId":"yeoshuheng"},"content":" if (!Industry.isValidIndustry(trimmedIndustry)) {","lastModifiedDate":"2024-02-25"},{"lineNumber":65,"author":{"gitId":"yeoshuheng"},"content":" throw new ParseException(Industry.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":66,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":67,"author":{"gitId":"yeoshuheng"},"content":" return new Industry(trimmedIndustry);","lastModifiedDate":"2024-02-25"},{"lineNumber":68,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":69,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":70,"author":{"gitId":"yeoshuheng"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":71,"author":{"gitId":"yeoshuheng"},"content":" * Parses a {@code String fundingLevel} into a {@code FundingStage}.","lastModifiedDate":"2024-02-25"},{"lineNumber":72,"author":{"gitId":"yeoshuheng"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2024-02-25"},{"lineNumber":73,"author":{"gitId":"yeoshuheng"},"content":" *","lastModifiedDate":"2024-02-25"},{"lineNumber":74,"author":{"gitId":"yeoshuheng"},"content":" * @throws ParseException if the given {@code fundingStage} is invalid.","lastModifiedDate":"2024-02-25"},{"lineNumber":75,"author":{"gitId":"yeoshuheng"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":76,"author":{"gitId":"yeoshuheng"},"content":" public static FundingStage parseFundingStage(String fundingLevel) throws ParseException {","lastModifiedDate":"2024-02-25"},{"lineNumber":77,"author":{"gitId":"yeoshuheng"},"content":" requireNonNull(fundingLevel);","lastModifiedDate":"2024-02-25"},{"lineNumber":78,"author":{"gitId":"yeoshuheng"},"content":" String trimmedFundingLevel \u003d fundingLevel.trim();","lastModifiedDate":"2024-02-25"},{"lineNumber":79,"author":{"gitId":"yeoshuheng"},"content":" if (!FundingStage.isValidFundingLevel(fundingLevel)) {","lastModifiedDate":"2024-02-25"},{"lineNumber":80,"author":{"gitId":"yeoshuheng"},"content":" throw new ParseException(FundingStage.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":81,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":82,"author":{"gitId":"yeoshuheng"},"content":" return new FundingStage(trimmedFundingLevel);","lastModifiedDate":"2024-02-25"},{"lineNumber":83,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":84,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":85,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":86,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-30"},{"lineNumber":87,"author":{"gitId":"-"},"content":" * Parses a {@code String phone} into a {@code Phone}.","lastModifiedDate":"2017-05-30"},{"lineNumber":88,"author":{"gitId":"-"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2017-05-30"},{"lineNumber":89,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2017-05-30"},{"lineNumber":90,"author":{"gitId":"-"},"content":" * @throws ParseException if the given {@code phone} is invalid.","lastModifiedDate":"2018-07-10"},{"lineNumber":91,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-30"},{"lineNumber":92,"author":{"gitId":"-"},"content":" public static Phone parsePhone(String phone) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":93,"author":{"gitId":"-"},"content":" requireNonNull(phone);","lastModifiedDate":"2017-05-30"},{"lineNumber":94,"author":{"gitId":"-"},"content":" String trimmedPhone \u003d phone.trim();","lastModifiedDate":"2017-05-30"},{"lineNumber":95,"author":{"gitId":"-"},"content":" if (!Phone.isValidPhone(trimmedPhone)) {","lastModifiedDate":"2017-05-30"},{"lineNumber":96,"author":{"gitId":"-"},"content":" throw new ParseException(Phone.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":97,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":98,"author":{"gitId":"-"},"content":" return new Phone(trimmedPhone);","lastModifiedDate":"2017-05-30"},{"lineNumber":99,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":100,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":101,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-30"},{"lineNumber":102,"author":{"gitId":"-"},"content":" * Parses a {@code String address} into an {@code Address}.","lastModifiedDate":"2017-05-30"},{"lineNumber":103,"author":{"gitId":"-"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2017-05-30"},{"lineNumber":104,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2017-05-30"},{"lineNumber":105,"author":{"gitId":"-"},"content":" * @throws ParseException if the given {@code address} is invalid.","lastModifiedDate":"2018-07-10"},{"lineNumber":106,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-30"},{"lineNumber":107,"author":{"gitId":"-"},"content":" public static Address parseAddress(String address) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":108,"author":{"gitId":"-"},"content":" requireNonNull(address);","lastModifiedDate":"2017-05-30"},{"lineNumber":109,"author":{"gitId":"-"},"content":" String trimmedAddress \u003d address.trim();","lastModifiedDate":"2017-05-30"},{"lineNumber":110,"author":{"gitId":"-"},"content":" if (!Address.isValidAddress(trimmedAddress)) {","lastModifiedDate":"2017-05-30"},{"lineNumber":111,"author":{"gitId":"-"},"content":" throw new ParseException(Address.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":113,"author":{"gitId":"-"},"content":" return new Address(trimmedAddress);","lastModifiedDate":"2017-05-30"},{"lineNumber":114,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":115,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":116,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-30"},{"lineNumber":117,"author":{"gitId":"-"},"content":" * Parses a {@code String email} into an {@code Email}.","lastModifiedDate":"2017-05-30"},{"lineNumber":118,"author":{"gitId":"-"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2017-05-30"},{"lineNumber":119,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2017-05-30"},{"lineNumber":120,"author":{"gitId":"-"},"content":" * @throws ParseException if the given {@code email} is invalid.","lastModifiedDate":"2018-07-10"},{"lineNumber":121,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-30"},{"lineNumber":122,"author":{"gitId":"-"},"content":" public static Email parseEmail(String email) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":123,"author":{"gitId":"-"},"content":" requireNonNull(email);","lastModifiedDate":"2017-05-30"},{"lineNumber":124,"author":{"gitId":"-"},"content":" String trimmedEmail \u003d email.trim();","lastModifiedDate":"2017-05-30"},{"lineNumber":125,"author":{"gitId":"-"},"content":" if (!Email.isValidEmail(trimmedEmail)) {","lastModifiedDate":"2017-05-30"},{"lineNumber":126,"author":{"gitId":"-"},"content":" throw new ParseException(Email.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":127,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":128,"author":{"gitId":"-"},"content":" return new Email(trimmedEmail);","lastModifiedDate":"2017-05-30"},{"lineNumber":129,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":131,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-30"},{"lineNumber":132,"author":{"gitId":"-"},"content":" * Parses a {@code String tag} into a {@code Tag}.","lastModifiedDate":"2017-05-30"},{"lineNumber":133,"author":{"gitId":"-"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2017-05-30"},{"lineNumber":134,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2017-05-30"},{"lineNumber":135,"author":{"gitId":"-"},"content":" * @throws ParseException if the given {@code tag} is invalid.","lastModifiedDate":"2018-07-10"},{"lineNumber":136,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-30"},{"lineNumber":137,"author":{"gitId":"-"},"content":" public static Tag parseTag(String tag) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":138,"author":{"gitId":"-"},"content":" requireNonNull(tag);","lastModifiedDate":"2017-05-30"},{"lineNumber":139,"author":{"gitId":"-"},"content":" String trimmedTag \u003d tag.trim();","lastModifiedDate":"2017-05-30"},{"lineNumber":140,"author":{"gitId":"-"},"content":" if (!Tag.isValidTagName(trimmedTag)) {","lastModifiedDate":"2017-05-30"},{"lineNumber":141,"author":{"gitId":"-"},"content":" throw new ParseException(Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":143,"author":{"gitId":"-"},"content":" return new Tag(trimmedTag);","lastModifiedDate":"2017-05-30"},{"lineNumber":144,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":145,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":146,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-02-11"},{"lineNumber":147,"author":{"gitId":"-"},"content":" * Parses {@code Collection\u003cString\u003e tags} into a {@code Set\u003cTag\u003e}.","lastModifiedDate":"2017-03-07"},{"lineNumber":148,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-11"},{"lineNumber":149,"author":{"gitId":"-"},"content":" public static Set\u003cTag\u003e parseTags(Collection\u003cString\u003e tags) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":150,"author":{"gitId":"-"},"content":" requireNonNull(tags);","lastModifiedDate":"2017-05-15"},{"lineNumber":151,"author":{"gitId":"-"},"content":" final Set\u003cTag\u003e tagSet \u003d new HashSet\u003c\u003e();","lastModifiedDate":"2017-02-11"},{"lineNumber":152,"author":{"gitId":"-"},"content":" for (String tagName : tags) {","lastModifiedDate":"2017-02-11"},{"lineNumber":153,"author":{"gitId":"-"},"content":" tagSet.add(parseTag(tagName));","lastModifiedDate":"2017-05-30"},{"lineNumber":154,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-11"},{"lineNumber":155,"author":{"gitId":"-"},"content":" return tagSet;","lastModifiedDate":"2017-03-07"},{"lineNumber":156,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-11"},{"lineNumber":157,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-02-11"}],"authorContributionMap":{"-":124,"yeoshuheng":33}},{"path":"src/main/java/seedu/address/model/person/FundingStage.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"yeoshuheng"},"content":"package seedu.address.model.person;","lastModifiedDate":"2024-02-25"},{"lineNumber":2,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":3,"author":{"gitId":"yeoshuheng"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2024-02-25"},{"lineNumber":4,"author":{"gitId":"yeoshuheng"},"content":"import static seedu.address.commons.util.AppUtil.checkArgument;","lastModifiedDate":"2024-02-25"},{"lineNumber":5,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":6,"author":{"gitId":"yeoshuheng"},"content":"/**","lastModifiedDate":"2024-02-25"},{"lineNumber":7,"author":{"gitId":"yeoshuheng"},"content":" * Represents funding stage of current project.","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"yeoshuheng"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"yeoshuheng"},"content":"public class FundingStage {","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"yeoshuheng"},"content":" public static final String MESSAGE_CONSTRAINTS \u003d","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"yeoshuheng"},"content":" \"Funding stages should be either \u0027A\u0027, \u0027B\u0027 or \u0027C\u0027.\";","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"yeoshuheng"},"content":" public final String value;","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"yeoshuheng"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"yeoshuheng"},"content":" * Constructor for a funding stage.","lastModifiedDate":"2024-02-25"},{"lineNumber":18,"author":{"gitId":"yeoshuheng"},"content":" * @param fundingLevel The funding level (A, B, C) of the current stage.","lastModifiedDate":"2024-02-25"},{"lineNumber":19,"author":{"gitId":"yeoshuheng"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":20,"author":{"gitId":"yeoshuheng"},"content":" public FundingStage(String fundingLevel) {","lastModifiedDate":"2024-02-25"},{"lineNumber":21,"author":{"gitId":"yeoshuheng"},"content":" requireNonNull(fundingLevel);","lastModifiedDate":"2024-02-25"},{"lineNumber":22,"author":{"gitId":"yeoshuheng"},"content":" fundingLevel \u003d fundingLevel.toUpperCase();","lastModifiedDate":"2024-02-25"},{"lineNumber":23,"author":{"gitId":"yeoshuheng"},"content":" checkArgument(isValidFundingLevel(fundingLevel), MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":24,"author":{"gitId":"yeoshuheng"},"content":" value \u003d fundingLevel;","lastModifiedDate":"2024-02-25"},{"lineNumber":25,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":26,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"yeoshuheng"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"yeoshuheng"},"content":" * Returns true if a given industry is a valid industry.","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"yeoshuheng"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"yeoshuheng"},"content":" public static boolean isValidFundingLevel(String fundingLevel) {","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"yeoshuheng"},"content":" return fundingLevel.equals(\"A\") || fundingLevel.equals(\"B\") || fundingLevel.equals(\"C\");","lastModifiedDate":"2024-02-25"},{"lineNumber":32,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"yeoshuheng"},"content":" @Override","lastModifiedDate":"2024-02-25"},{"lineNumber":35,"author":{"gitId":"yeoshuheng"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2024-02-25"},{"lineNumber":36,"author":{"gitId":"yeoshuheng"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"yeoshuheng"},"content":" return true;","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":39,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":40,"author":{"gitId":"yeoshuheng"},"content":" // instanceof handles nulls","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"yeoshuheng"},"content":" if (!(other instanceof FundingStage)) {","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"yeoshuheng"},"content":" return false;","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":44,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":45,"author":{"gitId":"yeoshuheng"},"content":" FundingStage otherFundingStage \u003d (FundingStage) other;","lastModifiedDate":"2024-02-25"},{"lineNumber":46,"author":{"gitId":"yeoshuheng"},"content":" return value.equals(otherFundingStage.value);","lastModifiedDate":"2024-02-25"},{"lineNumber":47,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":48,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":49,"author":{"gitId":"yeoshuheng"},"content":" @Override","lastModifiedDate":"2024-02-25"},{"lineNumber":50,"author":{"gitId":"yeoshuheng"},"content":" public String toString() {","lastModifiedDate":"2024-02-25"},{"lineNumber":51,"author":{"gitId":"yeoshuheng"},"content":" return this.value;","lastModifiedDate":"2024-02-25"},{"lineNumber":52,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":53,"author":{"gitId":"yeoshuheng"},"content":"}","lastModifiedDate":"2024-02-25"}],"authorContributionMap":{"yeoshuheng":53}},{"path":"src/main/java/seedu/address/model/person/Industry.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"yeoshuheng"},"content":"package seedu.address.model.person;","lastModifiedDate":"2024-02-25"},{"lineNumber":2,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":3,"author":{"gitId":"yeoshuheng"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2024-02-25"},{"lineNumber":4,"author":{"gitId":"yeoshuheng"},"content":"import static seedu.address.commons.util.AppUtil.checkArgument;","lastModifiedDate":"2024-02-25"},{"lineNumber":5,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":6,"author":{"gitId":"yeoshuheng"},"content":"/**","lastModifiedDate":"2024-02-25"},{"lineNumber":7,"author":{"gitId":"yeoshuheng"},"content":" * Represents industry person is from.","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"yeoshuheng"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"yeoshuheng"},"content":"public class Industry {","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"yeoshuheng"},"content":" public static final String MESSAGE_CONSTRAINTS \u003d","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"yeoshuheng"},"content":" \"Industry names should only contain alphanumeric characters and spaces, and it should not be blank\";","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"yeoshuheng"},"content":" /*","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"yeoshuheng"},"content":" * The first character of the address must not be a whitespace,","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"yeoshuheng"},"content":" * otherwise \" \" (a blank string) becomes a valid input.","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"yeoshuheng"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":18,"author":{"gitId":"yeoshuheng"},"content":" public static final String VALIDATION_REGEX \u003d \"[\\\\p{Alnum}][\\\\p{Alnum} ]*\";","lastModifiedDate":"2024-02-25"},{"lineNumber":19,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":20,"author":{"gitId":"yeoshuheng"},"content":" public final String value;","lastModifiedDate":"2024-02-25"},{"lineNumber":21,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":22,"author":{"gitId":"yeoshuheng"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":23,"author":{"gitId":"yeoshuheng"},"content":" * Constructor for an industry.","lastModifiedDate":"2024-02-25"},{"lineNumber":24,"author":{"gitId":"yeoshuheng"},"content":" * @param industry Name of the industry.","lastModifiedDate":"2024-02-25"},{"lineNumber":25,"author":{"gitId":"yeoshuheng"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":26,"author":{"gitId":"yeoshuheng"},"content":" public Industry(String industry) {","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"yeoshuheng"},"content":" requireNonNull(industry);","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"yeoshuheng"},"content":" checkArgument(isValidIndustry(industry), MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"yeoshuheng"},"content":" value \u003d industry.toUpperCase();","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":32,"author":{"gitId":"yeoshuheng"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"yeoshuheng"},"content":" * Returns true if a given industry is a valid industry.","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"yeoshuheng"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":35,"author":{"gitId":"yeoshuheng"},"content":" public static boolean isValidIndustry(String test) {","lastModifiedDate":"2024-02-25"},{"lineNumber":36,"author":{"gitId":"yeoshuheng"},"content":" return test.matches(VALIDATION_REGEX);","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":39,"author":{"gitId":"yeoshuheng"},"content":" @Override","lastModifiedDate":"2024-02-25"},{"lineNumber":40,"author":{"gitId":"yeoshuheng"},"content":" public String toString() {","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"yeoshuheng"},"content":" return this.value;","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":44,"author":{"gitId":"yeoshuheng"},"content":" @Override","lastModifiedDate":"2024-02-25"},{"lineNumber":45,"author":{"gitId":"yeoshuheng"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2024-02-25"},{"lineNumber":46,"author":{"gitId":"yeoshuheng"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2024-02-25"},{"lineNumber":47,"author":{"gitId":"yeoshuheng"},"content":" return true;","lastModifiedDate":"2024-02-25"},{"lineNumber":48,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":49,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":50,"author":{"gitId":"yeoshuheng"},"content":" // instanceof handles nulls","lastModifiedDate":"2024-02-25"},{"lineNumber":51,"author":{"gitId":"yeoshuheng"},"content":" if (!(other instanceof Industry)) {","lastModifiedDate":"2024-02-25"},{"lineNumber":52,"author":{"gitId":"yeoshuheng"},"content":" return false;","lastModifiedDate":"2024-02-25"},{"lineNumber":53,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":54,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":55,"author":{"gitId":"yeoshuheng"},"content":" Industry otherIndustry \u003d (Industry) other;","lastModifiedDate":"2024-02-25"},{"lineNumber":56,"author":{"gitId":"yeoshuheng"},"content":" return value.equals(otherIndustry.value);","lastModifiedDate":"2024-02-25"},{"lineNumber":57,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":58,"author":{"gitId":"yeoshuheng"},"content":"}","lastModifiedDate":"2024-02-25"}],"authorContributionMap":{"yeoshuheng":58}},{"path":"src/main/java/seedu/address/model/person/Person.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model.person;","lastModifiedDate":"2016-08-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.commons.util.CollectionUtil.requireAllNonNull;","lastModifiedDate":"2017-05-19"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.Collections;","lastModifiedDate":"2017-03-07"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.HashSet;","lastModifiedDate":"2018-03-26"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.Objects;","lastModifiedDate":"2017-01-19"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-03-07"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-19"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.ToStringBuilder;","lastModifiedDate":"2019-02-23"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-03-07"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-24"},{"lineNumber":14,"author":{"gitId":"-"},"content":" * Represents a Person in the address book.","lastModifiedDate":"2016-08-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":" * Guarantees: details are present and not null, field values are validated, immutable.","lastModifiedDate":"2017-12-20"},{"lineNumber":16,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":"public class Person {","lastModifiedDate":"2018-01-10"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":" // Identity fields","lastModifiedDate":"2018-04-19"},{"lineNumber":20,"author":{"gitId":"-"},"content":" private final Name name;","lastModifiedDate":"2017-12-20"},{"lineNumber":21,"author":{"gitId":"-"},"content":" private final Phone phone;","lastModifiedDate":"2017-12-20"},{"lineNumber":22,"author":{"gitId":"-"},"content":" private final Email email;","lastModifiedDate":"2017-12-20"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":24,"author":{"gitId":"-"},"content":" // Data fields","lastModifiedDate":"2018-04-19"},{"lineNumber":25,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":26,"author":{"gitId":"yeoshuheng"},"content":" private final FundingStage fundingStage;","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"yeoshuheng"},"content":" private final Industry industry;","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" private final Address address;","lastModifiedDate":"2018-04-19"},{"lineNumber":31,"author":{"gitId":"-"},"content":" private final Set\u003cTag\u003e tags \u003d new HashSet\u003c\u003e();","lastModifiedDate":"2018-03-26"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":33,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-08-24"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * Every field must be present and not null.","lastModifiedDate":"2016-08-24"},{"lineNumber":35,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":36,"author":{"gitId":"yeoshuheng"},"content":" public Person(Name name, FundingStage fundingStage, Industry industry,","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"yeoshuheng"},"content":" Phone phone, Email email, Address address, Set\u003cTag\u003e tags) {","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"yeoshuheng"},"content":" requireAllNonNull(name, fundingStage, industry, phone, email, address, tags);","lastModifiedDate":"2024-02-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" this.name \u003d name;","lastModifiedDate":"2017-12-20"},{"lineNumber":40,"author":{"gitId":"yeoshuheng"},"content":" this.fundingStage \u003d fundingStage;","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"yeoshuheng"},"content":" this.industry \u003d industry;","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" this.phone \u003d phone;","lastModifiedDate":"2017-12-20"},{"lineNumber":43,"author":{"gitId":"-"},"content":" this.email \u003d email;","lastModifiedDate":"2017-12-20"},{"lineNumber":44,"author":{"gitId":"-"},"content":" this.address \u003d address;","lastModifiedDate":"2017-12-20"},{"lineNumber":45,"author":{"gitId":"-"},"content":" this.tags.addAll(tags);","lastModifiedDate":"2018-03-26"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":48,"author":{"gitId":"yeoshuheng"},"content":" public FundingStage getFundingStage() {","lastModifiedDate":"2024-02-25"},{"lineNumber":49,"author":{"gitId":"yeoshuheng"},"content":" return this.fundingStage;","lastModifiedDate":"2024-02-25"},{"lineNumber":50,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":51,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":52,"author":{"gitId":"yeoshuheng"},"content":" public Industry getIndustry() {","lastModifiedDate":"2024-02-25"},{"lineNumber":53,"author":{"gitId":"yeoshuheng"},"content":" return this.industry;","lastModifiedDate":"2024-02-25"},{"lineNumber":54,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":55,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" public Name getName() {","lastModifiedDate":"2017-07-12"},{"lineNumber":57,"author":{"gitId":"-"},"content":" return name;","lastModifiedDate":"2017-12-20"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":60,"author":{"gitId":"-"},"content":" public Phone getPhone() {","lastModifiedDate":"2017-07-12"},{"lineNumber":61,"author":{"gitId":"-"},"content":" return phone;","lastModifiedDate":"2017-12-20"},{"lineNumber":62,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":64,"author":{"gitId":"-"},"content":" public Email getEmail() {","lastModifiedDate":"2017-07-12"},{"lineNumber":65,"author":{"gitId":"-"},"content":" return email;","lastModifiedDate":"2017-12-20"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":68,"author":{"gitId":"-"},"content":" public Address getAddress() {","lastModifiedDate":"2017-07-12"},{"lineNumber":69,"author":{"gitId":"-"},"content":" return address;","lastModifiedDate":"2017-12-20"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-07-12"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-12"},{"lineNumber":72,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-03-07"},{"lineNumber":73,"author":{"gitId":"-"},"content":" * Returns an immutable tag set, which throws {@code UnsupportedOperationException}","lastModifiedDate":"2017-03-07"},{"lineNumber":74,"author":{"gitId":"-"},"content":" * if modification is attempted.","lastModifiedDate":"2017-03-07"},{"lineNumber":75,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-03-07"},{"lineNumber":76,"author":{"gitId":"-"},"content":" public Set\u003cTag\u003e getTags() {","lastModifiedDate":"2017-03-07"},{"lineNumber":77,"author":{"gitId":"-"},"content":" return Collections.unmodifiableSet(tags);","lastModifiedDate":"2018-03-26"},{"lineNumber":78,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-21"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":80,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-04-19"},{"lineNumber":81,"author":{"gitId":"-"},"content":" * Returns true if both persons have the same name.","lastModifiedDate":"2020-12-18"},{"lineNumber":82,"author":{"gitId":"-"},"content":" * This defines a weaker notion of equality between two persons.","lastModifiedDate":"2018-04-19"},{"lineNumber":83,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-04-19"},{"lineNumber":84,"author":{"gitId":"-"},"content":" public boolean isSamePerson(Person otherPerson) {","lastModifiedDate":"2018-04-19"},{"lineNumber":85,"author":{"gitId":"-"},"content":" if (otherPerson \u003d\u003d this) {","lastModifiedDate":"2018-04-19"},{"lineNumber":86,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2018-04-19"},{"lineNumber":87,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-04-19"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":89,"author":{"gitId":"-"},"content":" return otherPerson !\u003d null","lastModifiedDate":"2018-04-19"},{"lineNumber":90,"author":{"gitId":"-"},"content":" \u0026\u0026 otherPerson.getName().equals(getName());","lastModifiedDate":"2020-12-18"},{"lineNumber":91,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-04-19"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":93,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-04-19"},{"lineNumber":94,"author":{"gitId":"-"},"content":" * Returns true if both persons have the same identity and data fields.","lastModifiedDate":"2018-04-19"},{"lineNumber":95,"author":{"gitId":"-"},"content":" * This defines a stronger notion of equality between two persons.","lastModifiedDate":"2018-04-19"},{"lineNumber":96,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-04-19"},{"lineNumber":97,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":98,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2016-08-24"},{"lineNumber":99,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2018-01-10"},{"lineNumber":100,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2018-01-10"},{"lineNumber":101,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-01-10"},{"lineNumber":102,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-01-10"},{"lineNumber":103,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2023-07-13"},{"lineNumber":104,"author":{"gitId":"-"},"content":" if (!(other instanceof Person)) {","lastModifiedDate":"2018-01-10"},{"lineNumber":105,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2018-01-10"},{"lineNumber":106,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-01-10"},{"lineNumber":107,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-01-10"},{"lineNumber":108,"author":{"gitId":"-"},"content":" Person otherPerson \u003d (Person) other;","lastModifiedDate":"2018-01-10"},{"lineNumber":109,"author":{"gitId":"-"},"content":" return name.equals(otherPerson.name)","lastModifiedDate":"2023-07-13"},{"lineNumber":110,"author":{"gitId":"yeoshuheng"},"content":" \u0026\u0026 industry.equals(otherPerson.industry)","lastModifiedDate":"2024-02-25"},{"lineNumber":111,"author":{"gitId":"yeoshuheng"},"content":" \u0026\u0026 fundingStage.equals(otherPerson.fundingStage)","lastModifiedDate":"2024-02-25"},{"lineNumber":112,"author":{"gitId":"-"},"content":" \u0026\u0026 phone.equals(otherPerson.phone)","lastModifiedDate":"2023-07-13"},{"lineNumber":113,"author":{"gitId":"-"},"content":" \u0026\u0026 email.equals(otherPerson.email)","lastModifiedDate":"2023-07-13"},{"lineNumber":114,"author":{"gitId":"-"},"content":" \u0026\u0026 address.equals(otherPerson.address)","lastModifiedDate":"2023-07-13"},{"lineNumber":115,"author":{"gitId":"-"},"content":" \u0026\u0026 tags.equals(otherPerson.tags);","lastModifiedDate":"2023-07-13"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":117,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":118,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":119,"author":{"gitId":"-"},"content":" public int hashCode() {","lastModifiedDate":"2016-08-24"},{"lineNumber":120,"author":{"gitId":"-"},"content":" // use this method for custom fields hashing instead of implementing your own","lastModifiedDate":"2016-08-24"},{"lineNumber":121,"author":{"gitId":"-"},"content":" return Objects.hash(name, phone, email, address, tags);","lastModifiedDate":"2016-08-24"},{"lineNumber":122,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":123,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":124,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":125,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2016-08-24"},{"lineNumber":126,"author":{"gitId":"-"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2019-02-23"},{"lineNumber":127,"author":{"gitId":"-"},"content":" .add(\"name\", name)","lastModifiedDate":"2019-02-23"},{"lineNumber":128,"author":{"gitId":"yeoshuheng"},"content":" .add(\"industry\", industry)","lastModifiedDate":"2024-02-25"},{"lineNumber":129,"author":{"gitId":"yeoshuheng"},"content":" .add(\"funding stage\", fundingStage)","lastModifiedDate":"2024-02-25"},{"lineNumber":130,"author":{"gitId":"-"},"content":" .add(\"phone\", phone)","lastModifiedDate":"2019-02-23"},{"lineNumber":131,"author":{"gitId":"-"},"content":" .add(\"email\", email)","lastModifiedDate":"2019-02-23"},{"lineNumber":132,"author":{"gitId":"-"},"content":" .add(\"address\", address)","lastModifiedDate":"2019-02-23"},{"lineNumber":133,"author":{"gitId":"-"},"content":" .add(\"tags\", tags)","lastModifiedDate":"2019-02-23"},{"lineNumber":134,"author":{"gitId":"-"},"content":" .toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":135,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":137,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-24"}],"authorContributionMap":{"-":115,"yeoshuheng":22}},{"path":"src/main/java/seedu/address/model/util/SampleDataUtil.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model.util;","lastModifiedDate":"2016-12-20"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-20"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.Arrays;","lastModifiedDate":"2018-01-21"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-03-14"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2018-01-21"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-14"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import seedu.address.model.AddressBook;","lastModifiedDate":"2016-12-20"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import seedu.address.model.ReadOnlyAddressBook;","lastModifiedDate":"2016-12-20"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.model.person.FundingStage;","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.model.person.Industry;","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-03-14"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-20"},{"lineNumber":18,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-08-16"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * Contains utility methods for populating {@code AddressBook} with sample data.","lastModifiedDate":"2017-08-16"},{"lineNumber":20,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-08-16"},{"lineNumber":21,"author":{"gitId":"-"},"content":"public class SampleDataUtil {","lastModifiedDate":"2016-12-20"},{"lineNumber":22,"author":{"gitId":"-"},"content":" public static Person[] getSamplePersons() {","lastModifiedDate":"2016-12-20"},{"lineNumber":23,"author":{"gitId":"-"},"content":" return new Person[] {","lastModifiedDate":"2016-12-20"},{"lineNumber":24,"author":{"gitId":"yeoshuheng"},"content":" new Person(new Name(\"Alex Yeoh\"), new FundingStage(\"A\"), new Industry(\"Finance\"),","lastModifiedDate":"2024-02-25"},{"lineNumber":25,"author":{"gitId":"yeoshuheng"},"content":" new Phone(\"87438807\"), new Email(\"alexyeoh@example.com\"),","lastModifiedDate":"2024-02-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" new Address(\"Blk 30 Geylang Street 29, #06-40\"),","lastModifiedDate":"2016-12-20"},{"lineNumber":27,"author":{"gitId":"-"},"content":" getTagSet(\"friends\")),","lastModifiedDate":"2017-03-14"},{"lineNumber":28,"author":{"gitId":"yeoshuheng"},"content":" new Person(new Name(\"Bernice Yu\"), new FundingStage(\"B\"), new Industry(\"GreenTech\"),","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"yeoshuheng"},"content":" new Phone(\"99272758\"), new Email(\"berniceyu@example.com\"),","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" new Address(\"Blk 30 Lorong 3 Serangoon Gardens, #07-18\"),","lastModifiedDate":"2016-12-20"},{"lineNumber":31,"author":{"gitId":"-"},"content":" getTagSet(\"colleagues\", \"friends\")),","lastModifiedDate":"2017-03-14"},{"lineNumber":32,"author":{"gitId":"yeoshuheng"},"content":" new Person(new Name(\"Charlotte Oliveiro\"), new FundingStage(\"C\"), new Industry(\"Health\"),","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"yeoshuheng"},"content":" new Phone(\"93210283\"), new Email(\"charlotte@example.com\"),","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" new Address(\"Blk 11 Ang Mo Kio Street 74, #11-04\"),","lastModifiedDate":"2016-12-20"},{"lineNumber":35,"author":{"gitId":"-"},"content":" getTagSet(\"neighbours\")),","lastModifiedDate":"2017-03-14"},{"lineNumber":36,"author":{"gitId":"yeoshuheng"},"content":" new Person(new Name(\"David Li\"), new FundingStage(\"A\"), new Industry(\"Manufacturing\"),","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"yeoshuheng"},"content":" new Phone(\"91031282\"), new Email(\"lidavid@example.com\"),","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" new Address(\"Blk 436 Serangoon Gardens Street 26, #16-43\"),","lastModifiedDate":"2016-12-20"},{"lineNumber":39,"author":{"gitId":"-"},"content":" getTagSet(\"family\")),","lastModifiedDate":"2017-03-14"},{"lineNumber":40,"author":{"gitId":"yeoshuheng"},"content":" new Person(new Name(\"Irfan Ibrahim\"), new FundingStage(\"C\"), new Industry(\"Tech\"),","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"yeoshuheng"},"content":" new Phone(\"92492021\"), new Email(\"irfan@example.com\"),","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" new Address(\"Blk 47 Tampines Street 20, #17-35\"),","lastModifiedDate":"2016-12-20"},{"lineNumber":43,"author":{"gitId":"-"},"content":" getTagSet(\"classmates\")),","lastModifiedDate":"2017-03-14"},{"lineNumber":44,"author":{"gitId":"yeoshuheng"},"content":" new Person(new Name(\"Roy Balakrishnan\"), new FundingStage(\"A\"), new Industry(\"Food\"),","lastModifiedDate":"2024-02-25"},{"lineNumber":45,"author":{"gitId":"yeoshuheng"},"content":" new Phone(\"92624417\"), new Email(\"royb@example.com\"),","lastModifiedDate":"2024-02-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" new Address(\"Blk 45 Aljunied Street 85, #11-31\"),","lastModifiedDate":"2016-12-20"},{"lineNumber":47,"author":{"gitId":"-"},"content":" getTagSet(\"colleagues\"))","lastModifiedDate":"2017-03-14"},{"lineNumber":48,"author":{"gitId":"-"},"content":" };","lastModifiedDate":"2016-12-20"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-20"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-20"},{"lineNumber":51,"author":{"gitId":"-"},"content":" public static ReadOnlyAddressBook getSampleAddressBook() {","lastModifiedDate":"2016-12-20"},{"lineNumber":52,"author":{"gitId":"-"},"content":" AddressBook sampleAb \u003d new AddressBook();","lastModifiedDate":"2017-04-07"},{"lineNumber":53,"author":{"gitId":"-"},"content":" for (Person samplePerson : getSamplePersons()) {","lastModifiedDate":"2016-12-20"},{"lineNumber":54,"author":{"gitId":"-"},"content":" sampleAb.addPerson(samplePerson);","lastModifiedDate":"2017-04-07"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-20"},{"lineNumber":56,"author":{"gitId":"-"},"content":" return sampleAb;","lastModifiedDate":"2017-04-07"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-20"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-14"},{"lineNumber":59,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-03-14"},{"lineNumber":60,"author":{"gitId":"-"},"content":" * Returns a tag set containing the list of strings given.","lastModifiedDate":"2017-03-14"},{"lineNumber":61,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-03-14"},{"lineNumber":62,"author":{"gitId":"-"},"content":" public static Set\u003cTag\u003e getTagSet(String... strings) {","lastModifiedDate":"2017-05-30"},{"lineNumber":63,"author":{"gitId":"-"},"content":" return Arrays.stream(strings)","lastModifiedDate":"2018-01-21"},{"lineNumber":64,"author":{"gitId":"-"},"content":" .map(Tag::new)","lastModifiedDate":"2018-01-21"},{"lineNumber":65,"author":{"gitId":"-"},"content":" .collect(Collectors.toSet());","lastModifiedDate":"2018-01-21"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-03-14"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-14"},{"lineNumber":68,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-12-20"}],"authorContributionMap":{"-":54,"yeoshuheng":14}},{"path":"src/main/java/seedu/address/storage/JsonAdaptedPerson.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.storage;","lastModifiedDate":"2018-08-13"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.ArrayList;","lastModifiedDate":"2018-08-13"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.HashSet;","lastModifiedDate":"2018-08-13"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2018-08-13"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2018-08-13"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2018-08-13"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import com.fasterxml.jackson.annotation.JsonCreator;","lastModifiedDate":"2018-08-13"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import com.fasterxml.jackson.annotation.JsonProperty;","lastModifiedDate":"2018-08-13"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.commons.exceptions.IllegalValueException;","lastModifiedDate":"2018-08-13"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.model.person.FundingStage;","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.model.person.Industry;","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2024-02-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2024-02-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2024-02-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2018-08-13"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":22,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2018-08-13"},{"lineNumber":23,"author":{"gitId":"-"},"content":" * Jackson-friendly version of {@link Person}.","lastModifiedDate":"2018-08-13"},{"lineNumber":24,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-13"},{"lineNumber":25,"author":{"gitId":"-"},"content":"class JsonAdaptedPerson {","lastModifiedDate":"2018-12-03"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":27,"author":{"gitId":"-"},"content":" public static final String MISSING_FIELD_MESSAGE_FORMAT \u003d \"Person\u0027s %s field is missing!\";","lastModifiedDate":"2018-08-13"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":29,"author":{"gitId":"-"},"content":" private final String name;","lastModifiedDate":"2018-08-13"},{"lineNumber":30,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"yeoshuheng"},"content":" private final String industry;","lastModifiedDate":"2024-02-25"},{"lineNumber":32,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"yeoshuheng"},"content":" private final String fundingStage;","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" private final String phone;","lastModifiedDate":"2018-08-13"},{"lineNumber":36,"author":{"gitId":"-"},"content":" private final String email;","lastModifiedDate":"2018-08-13"},{"lineNumber":37,"author":{"gitId":"-"},"content":" private final String address;","lastModifiedDate":"2018-08-13"},{"lineNumber":38,"author":{"gitId":"-"},"content":" private final List\u003cJsonAdaptedTag\u003e tags \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-01-09"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":40,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-13"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * Constructs a {@code JsonAdaptedPerson} with the given person details.","lastModifiedDate":"2018-08-13"},{"lineNumber":42,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-13"},{"lineNumber":43,"author":{"gitId":"-"},"content":" @JsonCreator","lastModifiedDate":"2018-08-13"},{"lineNumber":44,"author":{"gitId":"yeoshuheng"},"content":" public JsonAdaptedPerson(@JsonProperty(\"name\") String name, @JsonProperty(\"industry\") String industry,","lastModifiedDate":"2024-02-25"},{"lineNumber":45,"author":{"gitId":"yeoshuheng"},"content":" @JsonProperty(\"fundingStage\") String fundingStage, @JsonProperty(\"phone\") String phone,","lastModifiedDate":"2024-02-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" @JsonProperty(\"email\") String email, @JsonProperty(\"address\") String address,","lastModifiedDate":"2018-08-13"},{"lineNumber":47,"author":{"gitId":"-"},"content":" @JsonProperty(\"tags\") List\u003cJsonAdaptedTag\u003e tags) {","lastModifiedDate":"2023-05-12"},{"lineNumber":48,"author":{"gitId":"-"},"content":" this.name \u003d name;","lastModifiedDate":"2018-08-13"},{"lineNumber":49,"author":{"gitId":"yeoshuheng"},"content":" this.fundingStage \u003d fundingStage;","lastModifiedDate":"2024-02-25"},{"lineNumber":50,"author":{"gitId":"yeoshuheng"},"content":" this.industry \u003d industry;","lastModifiedDate":"2024-02-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" this.phone \u003d phone;","lastModifiedDate":"2018-08-13"},{"lineNumber":52,"author":{"gitId":"-"},"content":" this.email \u003d email;","lastModifiedDate":"2018-08-13"},{"lineNumber":53,"author":{"gitId":"-"},"content":" this.address \u003d address;","lastModifiedDate":"2018-08-13"},{"lineNumber":54,"author":{"gitId":"-"},"content":" if (tags !\u003d null) {","lastModifiedDate":"2023-01-09"},{"lineNumber":55,"author":{"gitId":"-"},"content":" this.tags.addAll(tags);","lastModifiedDate":"2023-01-09"},{"lineNumber":56,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":59,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-13"},{"lineNumber":60,"author":{"gitId":"-"},"content":" * Converts a given {@code Person} into this class for Jackson use.","lastModifiedDate":"2018-08-13"},{"lineNumber":61,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-13"},{"lineNumber":62,"author":{"gitId":"-"},"content":" public JsonAdaptedPerson(Person source) {","lastModifiedDate":"2018-08-13"},{"lineNumber":63,"author":{"gitId":"-"},"content":" name \u003d source.getName().fullName;","lastModifiedDate":"2018-08-13"},{"lineNumber":64,"author":{"gitId":"-"},"content":" phone \u003d source.getPhone().value;","lastModifiedDate":"2018-08-13"},{"lineNumber":65,"author":{"gitId":"-"},"content":" email \u003d source.getEmail().value;","lastModifiedDate":"2018-08-13"},{"lineNumber":66,"author":{"gitId":"-"},"content":" address \u003d source.getAddress().value;","lastModifiedDate":"2018-08-13"},{"lineNumber":67,"author":{"gitId":"yeoshuheng"},"content":" industry \u003d source.getIndustry().value;","lastModifiedDate":"2024-02-25"},{"lineNumber":68,"author":{"gitId":"yeoshuheng"},"content":" fundingStage \u003d source.getFundingStage().value;","lastModifiedDate":"2024-02-25"},{"lineNumber":69,"author":{"gitId":"-"},"content":" tags.addAll(source.getTags().stream()","lastModifiedDate":"2023-01-09"},{"lineNumber":70,"author":{"gitId":"-"},"content":" .map(JsonAdaptedTag::new)","lastModifiedDate":"2018-08-13"},{"lineNumber":71,"author":{"gitId":"-"},"content":" .collect(Collectors.toList()));","lastModifiedDate":"2018-08-13"},{"lineNumber":72,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":73,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":74,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-13"},{"lineNumber":75,"author":{"gitId":"-"},"content":" * Converts this Jackson-friendly adapted person object into the model\u0027s {@code Person} object.","lastModifiedDate":"2018-08-13"},{"lineNumber":76,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2018-08-13"},{"lineNumber":77,"author":{"gitId":"-"},"content":" * @throws IllegalValueException if there were any data constraints violated in the adapted person.","lastModifiedDate":"2018-08-13"},{"lineNumber":78,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-13"},{"lineNumber":79,"author":{"gitId":"-"},"content":" public Person toModelType() throws IllegalValueException {","lastModifiedDate":"2018-08-13"},{"lineNumber":80,"author":{"gitId":"-"},"content":" final List\u003cTag\u003e personTags \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2018-08-13"},{"lineNumber":81,"author":{"gitId":"-"},"content":" for (JsonAdaptedTag tag : tags) {","lastModifiedDate":"2023-01-09"},{"lineNumber":82,"author":{"gitId":"-"},"content":" personTags.add(tag.toModelType());","lastModifiedDate":"2018-08-13"},{"lineNumber":83,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":85,"author":{"gitId":"-"},"content":" if (name \u003d\u003d null) {","lastModifiedDate":"2018-08-13"},{"lineNumber":86,"author":{"gitId":"-"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Name.class.getSimpleName()));","lastModifiedDate":"2018-08-13"},{"lineNumber":87,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":88,"author":{"gitId":"-"},"content":" if (!Name.isValidName(name)) {","lastModifiedDate":"2018-08-13"},{"lineNumber":89,"author":{"gitId":"-"},"content":" throw new IllegalValueException(Name.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-08-13"},{"lineNumber":90,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":91,"author":{"gitId":"-"},"content":" final Name modelName \u003d new Name(name);","lastModifiedDate":"2018-08-13"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":93,"author":{"gitId":"yeoshuheng"},"content":" if (industry \u003d\u003d null) {","lastModifiedDate":"2024-02-25"},{"lineNumber":94,"author":{"gitId":"yeoshuheng"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT,","lastModifiedDate":"2024-02-25"},{"lineNumber":95,"author":{"gitId":"yeoshuheng"},"content":" Industry.class.getSimpleName()));","lastModifiedDate":"2024-02-25"},{"lineNumber":96,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":97,"author":{"gitId":"yeoshuheng"},"content":" if (!Industry.isValidIndustry(industry)) {","lastModifiedDate":"2024-02-25"},{"lineNumber":98,"author":{"gitId":"yeoshuheng"},"content":" throw new IllegalValueException(Industry.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":99,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":100,"author":{"gitId":"yeoshuheng"},"content":" final Industry modelIndustry \u003d new Industry(industry);","lastModifiedDate":"2024-02-25"},{"lineNumber":101,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":102,"author":{"gitId":"yeoshuheng"},"content":" if (fundingStage \u003d\u003d null) {","lastModifiedDate":"2024-02-25"},{"lineNumber":103,"author":{"gitId":"yeoshuheng"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT,","lastModifiedDate":"2024-02-25"},{"lineNumber":104,"author":{"gitId":"yeoshuheng"},"content":" FundingStage.class.getSimpleName()));","lastModifiedDate":"2024-02-25"},{"lineNumber":105,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":106,"author":{"gitId":"yeoshuheng"},"content":" if (!FundingStage.isValidFundingLevel(fundingStage)) {","lastModifiedDate":"2024-02-25"},{"lineNumber":107,"author":{"gitId":"yeoshuheng"},"content":" throw new IllegalValueException(FundingStage.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":108,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":109,"author":{"gitId":"yeoshuheng"},"content":" final FundingStage modelFundingStage \u003d new FundingStage(fundingStage);","lastModifiedDate":"2024-02-25"},{"lineNumber":110,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":111,"author":{"gitId":"-"},"content":" if (phone \u003d\u003d null) {","lastModifiedDate":"2018-08-13"},{"lineNumber":112,"author":{"gitId":"-"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Phone.class.getSimpleName()));","lastModifiedDate":"2018-08-13"},{"lineNumber":113,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":114,"author":{"gitId":"-"},"content":" if (!Phone.isValidPhone(phone)) {","lastModifiedDate":"2018-08-13"},{"lineNumber":115,"author":{"gitId":"-"},"content":" throw new IllegalValueException(Phone.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-08-13"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":117,"author":{"gitId":"-"},"content":" final Phone modelPhone \u003d new Phone(phone);","lastModifiedDate":"2018-08-13"},{"lineNumber":118,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":119,"author":{"gitId":"-"},"content":" if (email \u003d\u003d null) {","lastModifiedDate":"2018-08-13"},{"lineNumber":120,"author":{"gitId":"-"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Email.class.getSimpleName()));","lastModifiedDate":"2018-08-13"},{"lineNumber":121,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":122,"author":{"gitId":"-"},"content":" if (!Email.isValidEmail(email)) {","lastModifiedDate":"2018-08-13"},{"lineNumber":123,"author":{"gitId":"-"},"content":" throw new IllegalValueException(Email.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-08-13"},{"lineNumber":124,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":125,"author":{"gitId":"-"},"content":" final Email modelEmail \u003d new Email(email);","lastModifiedDate":"2018-08-13"},{"lineNumber":126,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":127,"author":{"gitId":"-"},"content":" if (address \u003d\u003d null) {","lastModifiedDate":"2018-08-13"},{"lineNumber":128,"author":{"gitId":"-"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Address.class.getSimpleName()));","lastModifiedDate":"2018-08-13"},{"lineNumber":129,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":130,"author":{"gitId":"-"},"content":" if (!Address.isValidAddress(address)) {","lastModifiedDate":"2018-08-13"},{"lineNumber":131,"author":{"gitId":"-"},"content":" throw new IllegalValueException(Address.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-08-13"},{"lineNumber":132,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":133,"author":{"gitId":"-"},"content":" final Address modelAddress \u003d new Address(address);","lastModifiedDate":"2018-08-13"},{"lineNumber":134,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":135,"author":{"gitId":"-"},"content":" final Set\u003cTag\u003e modelTags \u003d new HashSet\u003c\u003e(personTags);","lastModifiedDate":"2018-08-13"},{"lineNumber":136,"author":{"gitId":"yeoshuheng"},"content":" return new Person(modelName, modelFundingStage, modelIndustry, modelPhone, modelEmail, modelAddress, modelTags);","lastModifiedDate":"2024-02-25"},{"lineNumber":137,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":138,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":139,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2018-08-13"}],"authorContributionMap":{"-":107,"yeoshuheng":32}},{"path":"src/test/java/seedu/address/logic/LogicManagerTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic;","lastModifiedDate":"2016-09-21"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-03-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX;","lastModifiedDate":"2023-07-13"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_UNKNOWN_COMMAND;","lastModifiedDate":"2023-07-13"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-14"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.AMY;","lastModifiedDate":"2018-12-09"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-19"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.io.IOException;","lastModifiedDate":"2018-12-09"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import java.nio.file.AccessDeniedException;","lastModifiedDate":"2023-06-13"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import java.nio.file.Path;","lastModifiedDate":"2018-12-09"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2019-04-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2019-04-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-19"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.AddCommand;","lastModifiedDate":"2018-12-09"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.CommandResult;","lastModifiedDate":"2017-01-18"},{"lineNumber":19,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.logic.commands.CommandTestUtil;","lastModifiedDate":"2024-02-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.ListCommand;","lastModifiedDate":"2017-06-19"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.exceptions.CommandException;","lastModifiedDate":"2017-02-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2017-03-11"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import seedu.address.model.Model;","lastModifiedDate":"2016-09-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import seedu.address.model.ModelManager;","lastModifiedDate":"2016-09-21"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import seedu.address.model.ReadOnlyAddressBook;","lastModifiedDate":"2018-12-09"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import seedu.address.model.UserPrefs;","lastModifiedDate":"2017-05-31"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-12-09"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import seedu.address.storage.JsonAddressBookStorage;","lastModifiedDate":"2018-12-09"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import seedu.address.storage.JsonUserPrefsStorage;","lastModifiedDate":"2018-12-09"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import seedu.address.storage.StorageManager;","lastModifiedDate":"2018-12-09"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import seedu.address.testutil.PersonBuilder;","lastModifiedDate":"2018-12-09"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":33,"author":{"gitId":"-"},"content":"public class LogicManagerTest {","lastModifiedDate":"2016-09-22"},{"lineNumber":34,"author":{"gitId":"-"},"content":" private static final IOException DUMMY_IO_EXCEPTION \u003d new IOException(\"dummy IO exception\");","lastModifiedDate":"2023-06-13"},{"lineNumber":35,"author":{"gitId":"-"},"content":" private static final IOException DUMMY_AD_EXCEPTION \u003d new AccessDeniedException(\"dummy access denied exception\");","lastModifiedDate":"2023-06-13"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":37,"author":{"gitId":"-"},"content":" @TempDir","lastModifiedDate":"2019-04-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" public Path temporaryFolder;","lastModifiedDate":"2019-04-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":40,"author":{"gitId":"-"},"content":" private Model model \u003d new ModelManager();","lastModifiedDate":"2017-06-20"},{"lineNumber":41,"author":{"gitId":"-"},"content":" private Logic logic;","lastModifiedDate":"2018-12-09"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":43,"author":{"gitId":"-"},"content":" @BeforeEach","lastModifiedDate":"2019-04-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" public void setUp() {","lastModifiedDate":"2019-04-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" JsonAddressBookStorage addressBookStorage \u003d","lastModifiedDate":"2019-04-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" new JsonAddressBookStorage(temporaryFolder.resolve(\"addressBook.json\"));","lastModifiedDate":"2019-04-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" JsonUserPrefsStorage userPrefsStorage \u003d new JsonUserPrefsStorage(temporaryFolder.resolve(\"userPrefs.json\"));","lastModifiedDate":"2019-04-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" StorageManager storage \u003d new StorageManager(addressBookStorage, userPrefsStorage);","lastModifiedDate":"2018-12-09"},{"lineNumber":49,"author":{"gitId":"-"},"content":" logic \u003d new LogicManager(model, storage);","lastModifiedDate":"2018-12-09"},{"lineNumber":50,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":52,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-20"},{"lineNumber":53,"author":{"gitId":"-"},"content":" public void execute_invalidCommandFormat_throwsParseException() {","lastModifiedDate":"2017-08-15"},{"lineNumber":54,"author":{"gitId":"-"},"content":" String invalidCommand \u003d \"uicfhmowqewca\";","lastModifiedDate":"2017-06-20"},{"lineNumber":55,"author":{"gitId":"-"},"content":" assertParseException(invalidCommand, MESSAGE_UNKNOWN_COMMAND);","lastModifiedDate":"2017-06-20"},{"lineNumber":56,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-20"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-20"},{"lineNumber":58,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-14"},{"lineNumber":59,"author":{"gitId":"-"},"content":" public void execute_commandExecutionError_throwsCommandException() {","lastModifiedDate":"2017-08-15"},{"lineNumber":60,"author":{"gitId":"-"},"content":" String deleteCommand \u003d \"delete 9\";","lastModifiedDate":"2017-06-14"},{"lineNumber":61,"author":{"gitId":"-"},"content":" assertCommandException(deleteCommand, MESSAGE_INVALID_PERSON_DISPLAYED_INDEX);","lastModifiedDate":"2017-06-14"},{"lineNumber":62,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-14"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-14"},{"lineNumber":64,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-19"},{"lineNumber":65,"author":{"gitId":"-"},"content":" public void execute_validCommand_success() throws Exception {","lastModifiedDate":"2019-03-14"},{"lineNumber":66,"author":{"gitId":"-"},"content":" String listCommand \u003d ListCommand.COMMAND_WORD;","lastModifiedDate":"2017-06-19"},{"lineNumber":67,"author":{"gitId":"-"},"content":" assertCommandSuccess(listCommand, ListCommand.MESSAGE_SUCCESS, model);","lastModifiedDate":"2017-06-19"},{"lineNumber":68,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-20"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-20"},{"lineNumber":70,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-12-09"},{"lineNumber":71,"author":{"gitId":"-"},"content":" public void execute_storageThrowsIoException_throwsCommandException() {","lastModifiedDate":"2019-04-25"},{"lineNumber":72,"author":{"gitId":"-"},"content":" assertCommandFailureForExceptionFromStorage(DUMMY_IO_EXCEPTION, String.format(","lastModifiedDate":"2023-06-13"},{"lineNumber":73,"author":{"gitId":"-"},"content":" LogicManager.FILE_OPS_ERROR_FORMAT, DUMMY_IO_EXCEPTION.getMessage()));","lastModifiedDate":"2023-06-13"},{"lineNumber":74,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-06-13"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":76,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-06-13"},{"lineNumber":77,"author":{"gitId":"-"},"content":" public void execute_storageThrowsAdException_throwsCommandException() {","lastModifiedDate":"2023-06-13"},{"lineNumber":78,"author":{"gitId":"-"},"content":" assertCommandFailureForExceptionFromStorage(DUMMY_AD_EXCEPTION, String.format(","lastModifiedDate":"2023-06-13"},{"lineNumber":79,"author":{"gitId":"-"},"content":" LogicManager.FILE_OPS_PERMISSION_ERROR_FORMAT, DUMMY_AD_EXCEPTION.getMessage()));","lastModifiedDate":"2023-06-13"},{"lineNumber":80,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":81,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":82,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-09-01"},{"lineNumber":83,"author":{"gitId":"-"},"content":" public void getFilteredPersonList_modifyList_throwsUnsupportedOperationException() {","lastModifiedDate":"2017-09-01"},{"lineNumber":84,"author":{"gitId":"-"},"content":" assertThrows(UnsupportedOperationException.class, () -\u003e logic.getFilteredPersonList().remove(0));","lastModifiedDate":"2019-03-23"},{"lineNumber":85,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-09-01"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":87,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-09-21"},{"lineNumber":88,"author":{"gitId":"-"},"content":" * Executes the command and confirms that","lastModifiedDate":"2019-03-14"},{"lineNumber":89,"author":{"gitId":"-"},"content":" * - no exceptions are thrown \u003cbr\u003e","lastModifiedDate":"2019-03-14"},{"lineNumber":90,"author":{"gitId":"-"},"content":" * - the feedback message is equal to {@code expectedMessage} \u003cbr\u003e","lastModifiedDate":"2019-03-14"},{"lineNumber":91,"author":{"gitId":"-"},"content":" * - the internal model manager state is the same as that in {@code expectedModel} \u003cbr\u003e","lastModifiedDate":"2019-03-14"},{"lineNumber":92,"author":{"gitId":"-"},"content":" * @see #assertCommandFailure(String, Class, String, Model)","lastModifiedDate":"2019-03-14"},{"lineNumber":93,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-09-21"},{"lineNumber":94,"author":{"gitId":"-"},"content":" private void assertCommandSuccess(String inputCommand, String expectedMessage,","lastModifiedDate":"2019-03-14"},{"lineNumber":95,"author":{"gitId":"-"},"content":" Model expectedModel) throws CommandException, ParseException {","lastModifiedDate":"2019-03-14"},{"lineNumber":96,"author":{"gitId":"-"},"content":" CommandResult result \u003d logic.execute(inputCommand);","lastModifiedDate":"2019-03-14"},{"lineNumber":97,"author":{"gitId":"-"},"content":" assertEquals(expectedMessage, result.getFeedbackToUser());","lastModifiedDate":"2019-03-14"},{"lineNumber":98,"author":{"gitId":"-"},"content":" assertEquals(expectedModel, model);","lastModifiedDate":"2019-03-14"},{"lineNumber":99,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-21"},{"lineNumber":100,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":101,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-03-11"},{"lineNumber":102,"author":{"gitId":"-"},"content":" * Executes the command, confirms that a ParseException is thrown and that the result message is correct.","lastModifiedDate":"2017-03-11"},{"lineNumber":103,"author":{"gitId":"-"},"content":" * @see #assertCommandFailure(String, Class, String, Model)","lastModifiedDate":"2019-03-14"},{"lineNumber":104,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-03-11"},{"lineNumber":105,"author":{"gitId":"-"},"content":" private void assertParseException(String inputCommand, String expectedMessage) {","lastModifiedDate":"2017-03-11"},{"lineNumber":106,"author":{"gitId":"-"},"content":" assertCommandFailure(inputCommand, ParseException.class, expectedMessage);","lastModifiedDate":"2017-03-11"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-03-11"},{"lineNumber":108,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-11"},{"lineNumber":109,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-06-14"},{"lineNumber":110,"author":{"gitId":"-"},"content":" * Executes the command, confirms that a CommandException is thrown and that the result message is correct.","lastModifiedDate":"2017-06-14"},{"lineNumber":111,"author":{"gitId":"-"},"content":" * @see #assertCommandFailure(String, Class, String, Model)","lastModifiedDate":"2019-03-14"},{"lineNumber":112,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-06-14"},{"lineNumber":113,"author":{"gitId":"-"},"content":" private void assertCommandException(String inputCommand, String expectedMessage) {","lastModifiedDate":"2017-06-14"},{"lineNumber":114,"author":{"gitId":"-"},"content":" assertCommandFailure(inputCommand, CommandException.class, expectedMessage);","lastModifiedDate":"2017-06-14"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-14"},{"lineNumber":116,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-14"},{"lineNumber":117,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-03-11"},{"lineNumber":118,"author":{"gitId":"-"},"content":" * Executes the command, confirms that the exception is thrown and that the result message is correct.","lastModifiedDate":"2017-03-11"},{"lineNumber":119,"author":{"gitId":"-"},"content":" * @see #assertCommandFailure(String, Class, String, Model)","lastModifiedDate":"2019-03-14"},{"lineNumber":120,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-03-11"},{"lineNumber":121,"author":{"gitId":"-"},"content":" private void assertCommandFailure(String inputCommand, Class\u003c? extends Throwable\u003e expectedException,","lastModifiedDate":"2019-03-14"},{"lineNumber":122,"author":{"gitId":"-"},"content":" String expectedMessage) {","lastModifiedDate":"2019-03-14"},{"lineNumber":123,"author":{"gitId":"-"},"content":" Model expectedModel \u003d new ModelManager(model.getAddressBook(), new UserPrefs());","lastModifiedDate":"2017-05-31"},{"lineNumber":124,"author":{"gitId":"-"},"content":" assertCommandFailure(inputCommand, expectedException, expectedMessage, expectedModel);","lastModifiedDate":"2019-03-14"},{"lineNumber":125,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-05"},{"lineNumber":126,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":127,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-02-05"},{"lineNumber":128,"author":{"gitId":"-"},"content":" * Executes the command and confirms that","lastModifiedDate":"2019-03-14"},{"lineNumber":129,"author":{"gitId":"-"},"content":" * - the {@code expectedException} is thrown \u003cbr\u003e","lastModifiedDate":"2019-03-14"},{"lineNumber":130,"author":{"gitId":"-"},"content":" * - the resulting error message is equal to {@code expectedMessage} \u003cbr\u003e","lastModifiedDate":"2019-03-14"},{"lineNumber":131,"author":{"gitId":"-"},"content":" * - the internal model manager state is the same as that in {@code expectedModel} \u003cbr\u003e","lastModifiedDate":"2019-03-14"},{"lineNumber":132,"author":{"gitId":"-"},"content":" * @see #assertCommandSuccess(String, String, Model)","lastModifiedDate":"2019-03-14"},{"lineNumber":133,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-09-21"},{"lineNumber":134,"author":{"gitId":"-"},"content":" private void assertCommandFailure(String inputCommand, Class\u003c? extends Throwable\u003e expectedException,","lastModifiedDate":"2019-03-14"},{"lineNumber":135,"author":{"gitId":"-"},"content":" String expectedMessage, Model expectedModel) {","lastModifiedDate":"2017-05-31"},{"lineNumber":136,"author":{"gitId":"-"},"content":" assertThrows(expectedException, expectedMessage, () -\u003e logic.execute(inputCommand));","lastModifiedDate":"2019-03-14"},{"lineNumber":137,"author":{"gitId":"-"},"content":" assertEquals(expectedModel, model);","lastModifiedDate":"2017-05-31"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-21"},{"lineNumber":139,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-19"},{"lineNumber":140,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-12-09"},{"lineNumber":141,"author":{"gitId":"-"},"content":" * Tests the Logic component\u0027s handling of an {@code IOException} thrown by the Storage component.","lastModifiedDate":"2023-06-13"},{"lineNumber":142,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2023-06-13"},{"lineNumber":143,"author":{"gitId":"-"},"content":" * @param e the exception to be thrown by the Storage component","lastModifiedDate":"2023-06-13"},{"lineNumber":144,"author":{"gitId":"-"},"content":" * @param expectedMessage the message expected inside exception thrown by the Logic component","lastModifiedDate":"2023-06-13"},{"lineNumber":145,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-12-09"},{"lineNumber":146,"author":{"gitId":"-"},"content":" private void assertCommandFailureForExceptionFromStorage(IOException e, String expectedMessage) {","lastModifiedDate":"2023-06-13"},{"lineNumber":147,"author":{"gitId":"-"},"content":" Path prefPath \u003d temporaryFolder.resolve(\"ExceptionUserPrefs.json\");","lastModifiedDate":"2023-06-13"},{"lineNumber":148,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":149,"author":{"gitId":"-"},"content":" // Inject LogicManager with an AddressBookStorage that throws the IOException e when saving","lastModifiedDate":"2023-06-13"},{"lineNumber":150,"author":{"gitId":"-"},"content":" JsonAddressBookStorage addressBookStorage \u003d new JsonAddressBookStorage(prefPath) {","lastModifiedDate":"2023-06-13"},{"lineNumber":151,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-12-09"},{"lineNumber":152,"author":{"gitId":"-"},"content":" public void saveAddressBook(ReadOnlyAddressBook addressBook, Path filePath)","lastModifiedDate":"2023-06-13"},{"lineNumber":153,"author":{"gitId":"-"},"content":" throws IOException {","lastModifiedDate":"2023-06-13"},{"lineNumber":154,"author":{"gitId":"-"},"content":" throw e;","lastModifiedDate":"2023-06-13"},{"lineNumber":155,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":156,"author":{"gitId":"-"},"content":" };","lastModifiedDate":"2023-06-13"},{"lineNumber":157,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-06-13"},{"lineNumber":158,"author":{"gitId":"-"},"content":" JsonUserPrefsStorage userPrefsStorage \u003d","lastModifiedDate":"2023-06-13"},{"lineNumber":159,"author":{"gitId":"-"},"content":" new JsonUserPrefsStorage(temporaryFolder.resolve(\"ExceptionUserPrefs.json\"));","lastModifiedDate":"2023-06-13"},{"lineNumber":160,"author":{"gitId":"-"},"content":" StorageManager storage \u003d new StorageManager(addressBookStorage, userPrefsStorage);","lastModifiedDate":"2023-06-13"},{"lineNumber":161,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-06-13"},{"lineNumber":162,"author":{"gitId":"-"},"content":" logic \u003d new LogicManager(model, storage);","lastModifiedDate":"2023-06-13"},{"lineNumber":163,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-06-13"},{"lineNumber":164,"author":{"gitId":"-"},"content":" // Triggers the saveAddressBook method by executing an add command","lastModifiedDate":"2023-06-13"},{"lineNumber":165,"author":{"gitId":"yeoshuheng"},"content":" String addCommand \u003d AddCommand.COMMAND_WORD + CommandTestUtil.FUNDING_DESC_AMY","lastModifiedDate":"2024-02-25"},{"lineNumber":166,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INDUSTRY_DESC_AMY + CommandTestUtil.NAME_DESC_AMY + CommandTestUtil.PHONE_DESC_AMY","lastModifiedDate":"2024-02-25"},{"lineNumber":167,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.EMAIL_DESC_AMY + CommandTestUtil.ADDRESS_DESC_AMY;","lastModifiedDate":"2024-02-25"},{"lineNumber":168,"author":{"gitId":"-"},"content":" Person expectedPerson \u003d new PersonBuilder(AMY).withTags().build();","lastModifiedDate":"2023-06-13"},{"lineNumber":169,"author":{"gitId":"-"},"content":" ModelManager expectedModel \u003d new ModelManager();","lastModifiedDate":"2023-06-13"},{"lineNumber":170,"author":{"gitId":"-"},"content":" expectedModel.addPerson(expectedPerson);","lastModifiedDate":"2023-06-13"},{"lineNumber":171,"author":{"gitId":"-"},"content":" assertCommandFailure(addCommand, CommandException.class, expectedMessage, expectedModel);","lastModifiedDate":"2023-06-13"},{"lineNumber":172,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":173,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-09-21"}],"authorContributionMap":{"-":169,"yeoshuheng":4}},{"path":"src/test/java/seedu/address/logic/commands/CommandTestUtil.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.commands;","lastModifiedDate":"2017-06-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-03-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2019-03-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.ArrayList;","lastModifiedDate":"2017-06-05"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.Arrays;","lastModifiedDate":"2017-07-20"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2017-06-05"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2018-01-31"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.exceptions.CommandException;","lastModifiedDate":"2017-06-05"},{"lineNumber":13,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.logic.parser.CliSyntax;","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.model.AddressBook;","lastModifiedDate":"2017-06-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.model.Model;","lastModifiedDate":"2017-06-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.model.person.NameContainsKeywordsPredicate;","lastModifiedDate":"2017-07-20"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-01-10"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.testutil.EditPersonDescriptorBuilder;","lastModifiedDate":"2017-07-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-06-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":" * Contains helper methods for testing commands.","lastModifiedDate":"2017-06-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-06-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":"public class CommandTestUtil {","lastModifiedDate":"2017-06-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":" public static final String VALID_NAME_AMY \u003d \"Amy Bee\";","lastModifiedDate":"2017-07-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":" public static final String VALID_NAME_BOB \u003d \"Bob Choo\";","lastModifiedDate":"2017-07-05"},{"lineNumber":27,"author":{"gitId":"-"},"content":" public static final String VALID_PHONE_AMY \u003d \"11111111\";","lastModifiedDate":"2017-07-05"},{"lineNumber":28,"author":{"gitId":"-"},"content":" public static final String VALID_PHONE_BOB \u003d \"22222222\";","lastModifiedDate":"2017-07-05"},{"lineNumber":29,"author":{"gitId":"-"},"content":" public static final String VALID_EMAIL_AMY \u003d \"amy@example.com\";","lastModifiedDate":"2017-07-05"},{"lineNumber":30,"author":{"gitId":"-"},"content":" public static final String VALID_EMAIL_BOB \u003d \"bob@example.com\";","lastModifiedDate":"2017-07-05"},{"lineNumber":31,"author":{"gitId":"-"},"content":" public static final String VALID_ADDRESS_AMY \u003d \"Block 312, Amy Street 1\";","lastModifiedDate":"2017-07-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":" public static final String VALID_ADDRESS_BOB \u003d \"Block 123, Bobby Street 3\";","lastModifiedDate":"2017-07-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":" public static final String VALID_TAG_HUSBAND \u003d \"husband\";","lastModifiedDate":"2017-07-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":" public static final String VALID_TAG_FRIEND \u003d \"friend\";","lastModifiedDate":"2017-07-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-05"},{"lineNumber":36,"author":{"gitId":"yeoshuheng"},"content":" public static final String VALID_INDUSTRY_BOB \u003d \"Finance\";","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"yeoshuheng"},"content":" public static final String VALID_INDUSTRY_AMY \u003d \"Finance\";","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":39,"author":{"gitId":"yeoshuheng"},"content":" public static final String VALID_FUNDING_BOB \u003d \"A\";","lastModifiedDate":"2024-02-25"},{"lineNumber":40,"author":{"gitId":"yeoshuheng"},"content":" public static final String VALID_FUNDING_AMY \u003d \"A\";","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"yeoshuheng"},"content":" public static final String NAME_DESC_AMY \u003d \" \" + CliSyntax.PREFIX_NAME + VALID_NAME_AMY;","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"yeoshuheng"},"content":" public static final String NAME_DESC_BOB \u003d \" \" + CliSyntax.PREFIX_NAME + VALID_NAME_BOB;","lastModifiedDate":"2024-02-25"},{"lineNumber":44,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":45,"author":{"gitId":"yeoshuheng"},"content":" public static final String INDUSTRY_DESC_AMY \u003d \" \" + CliSyntax.PREFIX_INDUSTRY + VALID_INDUSTRY_AMY;","lastModifiedDate":"2024-02-25"},{"lineNumber":46,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":47,"author":{"gitId":"yeoshuheng"},"content":" public static final String INDUSTRY_DESC_BOB \u003d \" \" + CliSyntax.PREFIX_INDUSTRY + VALID_INDUSTRY_BOB;","lastModifiedDate":"2024-02-25"},{"lineNumber":48,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":49,"author":{"gitId":"yeoshuheng"},"content":" public static final String FUNDING_DESC_AMY \u003d \" \" + CliSyntax.PREFIX_FUNDING_STAGE + VALID_FUNDING_AMY;","lastModifiedDate":"2024-02-25"},{"lineNumber":50,"author":{"gitId":"yeoshuheng"},"content":" public static final String FUNDING_DESC_BOB \u003d \" \" + CliSyntax.PREFIX_FUNDING_STAGE + VALID_FUNDING_BOB;","lastModifiedDate":"2024-02-25"},{"lineNumber":51,"author":{"gitId":"yeoshuheng"},"content":" public static final String PHONE_DESC_AMY \u003d \" \" + CliSyntax.PREFIX_PHONE + VALID_PHONE_AMY;","lastModifiedDate":"2024-02-25"},{"lineNumber":52,"author":{"gitId":"yeoshuheng"},"content":" public static final String PHONE_DESC_BOB \u003d \" \" + CliSyntax.PREFIX_PHONE + VALID_PHONE_BOB;","lastModifiedDate":"2024-02-25"},{"lineNumber":53,"author":{"gitId":"yeoshuheng"},"content":" public static final String EMAIL_DESC_AMY \u003d \" \" + CliSyntax.PREFIX_EMAIL + VALID_EMAIL_AMY;","lastModifiedDate":"2024-02-25"},{"lineNumber":54,"author":{"gitId":"yeoshuheng"},"content":" public static final String EMAIL_DESC_BOB \u003d \" \" + CliSyntax.PREFIX_EMAIL + VALID_EMAIL_BOB;","lastModifiedDate":"2024-02-25"},{"lineNumber":55,"author":{"gitId":"yeoshuheng"},"content":" public static final String ADDRESS_DESC_AMY \u003d \" \" + CliSyntax.PREFIX_ADDRESS + VALID_ADDRESS_AMY;","lastModifiedDate":"2024-02-25"},{"lineNumber":56,"author":{"gitId":"yeoshuheng"},"content":" public static final String ADDRESS_DESC_BOB \u003d \" \" + CliSyntax.PREFIX_ADDRESS + VALID_ADDRESS_BOB;","lastModifiedDate":"2024-02-25"},{"lineNumber":57,"author":{"gitId":"yeoshuheng"},"content":" public static final String TAG_DESC_FRIEND \u003d \" \" + CliSyntax.PREFIX_TAG + VALID_TAG_FRIEND;","lastModifiedDate":"2024-02-25"},{"lineNumber":58,"author":{"gitId":"yeoshuheng"},"content":" public static final String TAG_DESC_HUSBAND \u003d \" \" + CliSyntax.PREFIX_TAG + VALID_TAG_HUSBAND;","lastModifiedDate":"2024-02-25"},{"lineNumber":59,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":60,"author":{"gitId":"yeoshuheng"},"content":" public static final String INVALID_NAME_DESC \u003d \" \"","lastModifiedDate":"2024-02-25"},{"lineNumber":61,"author":{"gitId":"yeoshuheng"},"content":" + CliSyntax.PREFIX_NAME + \"James\u0026\"; // \u0027\u0026\u0027 not allowed in names","lastModifiedDate":"2024-02-25"},{"lineNumber":62,"author":{"gitId":"yeoshuheng"},"content":" public static final String INVALID_PHONE_DESC \u003d \" \"","lastModifiedDate":"2024-02-25"},{"lineNumber":63,"author":{"gitId":"yeoshuheng"},"content":" + CliSyntax.PREFIX_PHONE + \"911a\"; // \u0027a\u0027 not allowed in phones","lastModifiedDate":"2024-02-25"},{"lineNumber":64,"author":{"gitId":"yeoshuheng"},"content":" public static final String INVALID_EMAIL_DESC \u003d \" \"","lastModifiedDate":"2024-02-25"},{"lineNumber":65,"author":{"gitId":"yeoshuheng"},"content":" + CliSyntax.PREFIX_EMAIL + \"bob!yahoo\"; // missing \u0027@\u0027 symbol","lastModifiedDate":"2024-02-25"},{"lineNumber":66,"author":{"gitId":"yeoshuheng"},"content":" public static final String INVALID_ADDRESS_DESC \u003d \" \"","lastModifiedDate":"2024-02-25"},{"lineNumber":67,"author":{"gitId":"yeoshuheng"},"content":" + CliSyntax.PREFIX_ADDRESS; // empty string not allowed for addresses","lastModifiedDate":"2024-02-25"},{"lineNumber":68,"author":{"gitId":"yeoshuheng"},"content":" public static final String INVALID_TAG_DESC \u003d \" \"","lastModifiedDate":"2024-02-25"},{"lineNumber":69,"author":{"gitId":"yeoshuheng"},"content":" + CliSyntax.PREFIX_TAG + \"hubby*\"; // \u0027*\u0027 not allowed in tags","lastModifiedDate":"2024-02-25"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-05"},{"lineNumber":71,"author":{"gitId":"yeoshuheng"},"content":" public static final String INVALID_INDUSTRY_DESC \u003d \" \" + CliSyntax.PREFIX_INDUSTRY + \"\";","lastModifiedDate":"2024-03-05"},{"lineNumber":72,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":73,"author":{"gitId":"yeoshuheng"},"content":" public static final String INVALID_FUNDING_DESC \u003d \" \" + CliSyntax.PREFIX_FUNDING_STAGE + \"D\";","lastModifiedDate":"2024-03-05"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":75,"author":{"gitId":"-"},"content":" public static final String PREAMBLE_WHITESPACE \u003d \"\\t \\r \\n\";","lastModifiedDate":"2017-12-23"},{"lineNumber":76,"author":{"gitId":"-"},"content":" public static final String PREAMBLE_NON_EMPTY \u003d \"NonEmptyPreamble\";","lastModifiedDate":"2017-12-23"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-23"},{"lineNumber":78,"author":{"gitId":"-"},"content":" public static final EditCommand.EditPersonDescriptor DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":79,"author":{"gitId":"-"},"content":" public static final EditCommand.EditPersonDescriptor DESC_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-05"},{"lineNumber":81,"author":{"gitId":"-"},"content":" static {","lastModifiedDate":"2017-07-05"},{"lineNumber":82,"author":{"gitId":"-"},"content":" DESC_AMY \u003d new EditPersonDescriptorBuilder().withName(VALID_NAME_AMY)","lastModifiedDate":"2017-07-05"},{"lineNumber":83,"author":{"gitId":"-"},"content":" .withPhone(VALID_PHONE_AMY).withEmail(VALID_EMAIL_AMY).withAddress(VALID_ADDRESS_AMY)","lastModifiedDate":"2017-07-05"},{"lineNumber":84,"author":{"gitId":"yeoshuheng"},"content":" .withTags(VALID_TAG_FRIEND).withIndustry(VALID_INDUSTRY_AMY)","lastModifiedDate":"2024-02-25"},{"lineNumber":85,"author":{"gitId":"yeoshuheng"},"content":" .withFundingStage(VALID_FUNDING_AMY).build();","lastModifiedDate":"2024-02-25"},{"lineNumber":86,"author":{"gitId":"-"},"content":" DESC_BOB \u003d new EditPersonDescriptorBuilder().withName(VALID_NAME_BOB)","lastModifiedDate":"2017-07-05"},{"lineNumber":87,"author":{"gitId":"-"},"content":" .withPhone(VALID_PHONE_BOB).withEmail(VALID_EMAIL_BOB).withAddress(VALID_ADDRESS_BOB)","lastModifiedDate":"2017-07-05"},{"lineNumber":88,"author":{"gitId":"yeoshuheng"},"content":" .withFundingStage(VALID_FUNDING_BOB).withIndustry(VALID_INDUSTRY_BOB)","lastModifiedDate":"2024-02-25"},{"lineNumber":89,"author":{"gitId":"-"},"content":" .withTags(VALID_TAG_HUSBAND, VALID_TAG_FRIEND).build();","lastModifiedDate":"2017-07-05"},{"lineNumber":90,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-07-05"},{"lineNumber":91,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-05"},{"lineNumber":92,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-06-05"},{"lineNumber":93,"author":{"gitId":"-"},"content":" * Executes the given {@code command}, confirms that \u003cbr\u003e","lastModifiedDate":"2017-06-05"},{"lineNumber":94,"author":{"gitId":"-"},"content":" * - the returned {@link CommandResult} matches {@code expectedCommandResult} \u003cbr\u003e","lastModifiedDate":"2018-12-09"},{"lineNumber":95,"author":{"gitId":"-"},"content":" * - the {@code actualModel} matches {@code expectedModel}","lastModifiedDate":"2019-01-25"},{"lineNumber":96,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-06-05"},{"lineNumber":97,"author":{"gitId":"-"},"content":" public static void assertCommandSuccess(Command command, Model actualModel, CommandResult expectedCommandResult,","lastModifiedDate":"2019-01-25"},{"lineNumber":98,"author":{"gitId":"-"},"content":" Model expectedModel) {","lastModifiedDate":"2019-01-25"},{"lineNumber":99,"author":{"gitId":"-"},"content":" try {","lastModifiedDate":"2017-08-15"},{"lineNumber":100,"author":{"gitId":"-"},"content":" CommandResult result \u003d command.execute(actualModel);","lastModifiedDate":"2019-01-25"},{"lineNumber":101,"author":{"gitId":"-"},"content":" assertEquals(expectedCommandResult, result);","lastModifiedDate":"2018-12-09"},{"lineNumber":102,"author":{"gitId":"-"},"content":" assertEquals(expectedModel, actualModel);","lastModifiedDate":"2017-06-05"},{"lineNumber":103,"author":{"gitId":"-"},"content":" } catch (CommandException ce) {","lastModifiedDate":"2017-08-15"},{"lineNumber":104,"author":{"gitId":"-"},"content":" throw new AssertionError(\"Execution of command should not fail.\", ce);","lastModifiedDate":"2017-08-15"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-08-15"},{"lineNumber":106,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-05"},{"lineNumber":107,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":108,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-12-09"},{"lineNumber":109,"author":{"gitId":"-"},"content":" * Convenience wrapper to {@link #assertCommandSuccess(Command, Model, CommandResult, Model)}","lastModifiedDate":"2019-01-25"},{"lineNumber":110,"author":{"gitId":"-"},"content":" * that takes a string {@code expectedMessage}.","lastModifiedDate":"2018-12-09"},{"lineNumber":111,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-12-09"},{"lineNumber":112,"author":{"gitId":"-"},"content":" public static void assertCommandSuccess(Command command, Model actualModel, String expectedMessage,","lastModifiedDate":"2019-01-25"},{"lineNumber":113,"author":{"gitId":"-"},"content":" Model expectedModel) {","lastModifiedDate":"2019-01-25"},{"lineNumber":114,"author":{"gitId":"-"},"content":" CommandResult expectedCommandResult \u003d new CommandResult(expectedMessage);","lastModifiedDate":"2018-12-09"},{"lineNumber":115,"author":{"gitId":"-"},"content":" assertCommandSuccess(command, actualModel, expectedCommandResult, expectedModel);","lastModifiedDate":"2019-01-25"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":117,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":118,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-06-05"},{"lineNumber":119,"author":{"gitId":"-"},"content":" * Executes the given {@code command}, confirms that \u003cbr\u003e","lastModifiedDate":"2017-06-05"},{"lineNumber":120,"author":{"gitId":"-"},"content":" * - a {@code CommandException} is thrown \u003cbr\u003e","lastModifiedDate":"2017-06-05"},{"lineNumber":121,"author":{"gitId":"-"},"content":" * - the CommandException message matches {@code expectedMessage} \u003cbr\u003e","lastModifiedDate":"2017-06-05"},{"lineNumber":122,"author":{"gitId":"-"},"content":" * - the address book, filtered person list and selected person in {@code actualModel} remain unchanged","lastModifiedDate":"2019-01-25"},{"lineNumber":123,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-06-05"},{"lineNumber":124,"author":{"gitId":"-"},"content":" public static void assertCommandFailure(Command command, Model actualModel, String expectedMessage) {","lastModifiedDate":"2019-01-25"},{"lineNumber":125,"author":{"gitId":"-"},"content":" // we are unable to defensively copy the model for comparison later, so we can","lastModifiedDate":"2017-06-05"},{"lineNumber":126,"author":{"gitId":"-"},"content":" // only do so by copying its components.","lastModifiedDate":"2017-06-05"},{"lineNumber":127,"author":{"gitId":"-"},"content":" AddressBook expectedAddressBook \u003d new AddressBook(actualModel.getAddressBook());","lastModifiedDate":"2017-06-05"},{"lineNumber":128,"author":{"gitId":"-"},"content":" List\u003cPerson\u003e expectedFilteredList \u003d new ArrayList\u003c\u003e(actualModel.getFilteredPersonList());","lastModifiedDate":"2018-01-10"},{"lineNumber":129,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":130,"author":{"gitId":"-"},"content":" assertThrows(CommandException.class, expectedMessage, () -\u003e command.execute(actualModel));","lastModifiedDate":"2019-05-03"},{"lineNumber":131,"author":{"gitId":"-"},"content":" assertEquals(expectedAddressBook, actualModel.getAddressBook());","lastModifiedDate":"2017-06-05"},{"lineNumber":132,"author":{"gitId":"-"},"content":" assertEquals(expectedFilteredList, actualModel.getFilteredPersonList());","lastModifiedDate":"2017-06-05"},{"lineNumber":133,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-05"},{"lineNumber":134,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-20"},{"lineNumber":135,"author":{"gitId":"-"},"content":" * Updates {@code model}\u0027s filtered list to show only the person at the given {@code targetIndex} in the","lastModifiedDate":"2018-01-31"},{"lineNumber":136,"author":{"gitId":"-"},"content":" * {@code model}\u0027s address book.","lastModifiedDate":"2018-01-31"},{"lineNumber":137,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-20"},{"lineNumber":138,"author":{"gitId":"-"},"content":" public static void showPersonAtIndex(Model model, Index targetIndex) {","lastModifiedDate":"2018-01-31"},{"lineNumber":139,"author":{"gitId":"-"},"content":" assertTrue(targetIndex.getZeroBased() \u003c model.getFilteredPersonList().size());","lastModifiedDate":"2018-01-31"},{"lineNumber":140,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-01-31"},{"lineNumber":141,"author":{"gitId":"-"},"content":" Person person \u003d model.getFilteredPersonList().get(targetIndex.getZeroBased());","lastModifiedDate":"2018-01-31"},{"lineNumber":142,"author":{"gitId":"-"},"content":" final String[] splitName \u003d person.getName().fullName.split(\"\\\\s+\");","lastModifiedDate":"2017-07-20"},{"lineNumber":143,"author":{"gitId":"-"},"content":" model.updateFilteredPersonList(new NameContainsKeywordsPredicate(Arrays.asList(splitName[0])));","lastModifiedDate":"2017-07-20"},{"lineNumber":144,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-20"},{"lineNumber":145,"author":{"gitId":"-"},"content":" assertEquals(1, model.getFilteredPersonList().size());","lastModifiedDate":"2018-02-08"},{"lineNumber":146,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-07-20"},{"lineNumber":147,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":148,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-06-05"}],"authorContributionMap":{"-":107,"yeoshuheng":41}},{"path":"src/test/java/seedu/address/logic/commands/EditPersonDescriptorTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.commands;","lastModifiedDate":"2017-05-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-02-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2019-03-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2019-03-15"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.DESC_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND;","lastModifiedDate":"2017-07-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand.EditPersonDescriptor;","lastModifiedDate":"2017-05-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.testutil.EditPersonDescriptorBuilder;","lastModifiedDate":"2017-05-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"public class EditPersonDescriptorTest {","lastModifiedDate":"2017-05-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":" public void equals() {","lastModifiedDate":"2017-08-15"},{"lineNumber":23,"author":{"gitId":"-"},"content":" // same values -\u003e returns true","lastModifiedDate":"2017-05-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":" EditPersonDescriptor descriptorWithSameValues \u003d new EditPersonDescriptor(DESC_AMY);","lastModifiedDate":"2017-05-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":" assertTrue(DESC_AMY.equals(descriptorWithSameValues));","lastModifiedDate":"2017-05-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":27,"author":{"gitId":"-"},"content":" // same object -\u003e returns true","lastModifiedDate":"2017-05-05"},{"lineNumber":28,"author":{"gitId":"-"},"content":" assertTrue(DESC_AMY.equals(DESC_AMY));","lastModifiedDate":"2017-05-05"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":30,"author":{"gitId":"-"},"content":" // null -\u003e returns false","lastModifiedDate":"2017-05-05"},{"lineNumber":31,"author":{"gitId":"-"},"content":" assertFalse(DESC_AMY.equals(null));","lastModifiedDate":"2017-05-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":" // different types -\u003e returns false","lastModifiedDate":"2017-05-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":" assertFalse(DESC_AMY.equals(5));","lastModifiedDate":"2017-05-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":36,"author":{"gitId":"-"},"content":" // different values -\u003e returns false","lastModifiedDate":"2017-05-05"},{"lineNumber":37,"author":{"gitId":"-"},"content":" assertFalse(DESC_AMY.equals(DESC_BOB));","lastModifiedDate":"2017-05-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":" // different name -\u003e returns false","lastModifiedDate":"2017-05-05"},{"lineNumber":40,"author":{"gitId":"-"},"content":" EditPersonDescriptor editedAmy \u003d new EditPersonDescriptorBuilder(DESC_AMY).withName(VALID_NAME_BOB).build();","lastModifiedDate":"2017-05-05"},{"lineNumber":41,"author":{"gitId":"-"},"content":" assertFalse(DESC_AMY.equals(editedAmy));","lastModifiedDate":"2017-05-05"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":" // different phone -\u003e returns false","lastModifiedDate":"2017-05-05"},{"lineNumber":44,"author":{"gitId":"-"},"content":" editedAmy \u003d new EditPersonDescriptorBuilder(DESC_AMY).withPhone(VALID_PHONE_BOB).build();","lastModifiedDate":"2017-05-05"},{"lineNumber":45,"author":{"gitId":"-"},"content":" assertFalse(DESC_AMY.equals(editedAmy));","lastModifiedDate":"2017-05-05"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":47,"author":{"gitId":"-"},"content":" // different email -\u003e returns false","lastModifiedDate":"2017-05-05"},{"lineNumber":48,"author":{"gitId":"-"},"content":" editedAmy \u003d new EditPersonDescriptorBuilder(DESC_AMY).withEmail(VALID_EMAIL_BOB).build();","lastModifiedDate":"2017-05-05"},{"lineNumber":49,"author":{"gitId":"-"},"content":" assertFalse(DESC_AMY.equals(editedAmy));","lastModifiedDate":"2017-05-05"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":51,"author":{"gitId":"-"},"content":" // different address -\u003e returns false","lastModifiedDate":"2017-05-05"},{"lineNumber":52,"author":{"gitId":"-"},"content":" editedAmy \u003d new EditPersonDescriptorBuilder(DESC_AMY).withAddress(VALID_ADDRESS_BOB).build();","lastModifiedDate":"2017-05-05"},{"lineNumber":53,"author":{"gitId":"-"},"content":" assertFalse(DESC_AMY.equals(editedAmy));","lastModifiedDate":"2017-05-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":55,"author":{"gitId":"-"},"content":" // different tags -\u003e returns false","lastModifiedDate":"2017-05-05"},{"lineNumber":56,"author":{"gitId":"-"},"content":" editedAmy \u003d new EditPersonDescriptorBuilder(DESC_AMY).withTags(VALID_TAG_HUSBAND).build();","lastModifiedDate":"2017-05-05"},{"lineNumber":57,"author":{"gitId":"-"},"content":" assertFalse(DESC_AMY.equals(editedAmy));","lastModifiedDate":"2017-05-05"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":60,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2019-02-23"},{"lineNumber":61,"author":{"gitId":"-"},"content":" public void toStringMethod() {","lastModifiedDate":"2019-02-23"},{"lineNumber":62,"author":{"gitId":"-"},"content":" EditPersonDescriptor editPersonDescriptor \u003d new EditPersonDescriptor();","lastModifiedDate":"2019-02-23"},{"lineNumber":63,"author":{"gitId":"-"},"content":" String expected \u003d EditPersonDescriptor.class.getCanonicalName() + \"{name\u003d\"","lastModifiedDate":"2019-02-23"},{"lineNumber":64,"author":{"gitId":"yeoshuheng"},"content":" + editPersonDescriptor.getName().orElse(null) + \", industry\u003d\"","lastModifiedDate":"2024-02-25"},{"lineNumber":65,"author":{"gitId":"yeoshuheng"},"content":" + editPersonDescriptor.getIndustry().orElse(null) + \", funding stage\u003d\"","lastModifiedDate":"2024-02-25"},{"lineNumber":66,"author":{"gitId":"yeoshuheng"},"content":" + editPersonDescriptor.getFundingStage().orElse(null) + \", phone\u003d\"","lastModifiedDate":"2024-02-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":" + editPersonDescriptor.getPhone().orElse(null) + \", email\u003d\"","lastModifiedDate":"2019-02-23"},{"lineNumber":68,"author":{"gitId":"-"},"content":" + editPersonDescriptor.getEmail().orElse(null) + \", address\u003d\"","lastModifiedDate":"2019-02-23"},{"lineNumber":69,"author":{"gitId":"-"},"content":" + editPersonDescriptor.getAddress().orElse(null) + \", tags\u003d\"","lastModifiedDate":"2019-02-23"},{"lineNumber":70,"author":{"gitId":"-"},"content":" + editPersonDescriptor.getTags().orElse(null) + \"}\";","lastModifiedDate":"2019-02-23"},{"lineNumber":71,"author":{"gitId":"-"},"content":" assertEquals(expected, editPersonDescriptor.toString());","lastModifiedDate":"2019-02-23"},{"lineNumber":72,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":73,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-05-05"}],"authorContributionMap":{"-":70,"yeoshuheng":3}},{"path":"src/test/java/seedu/address/logic/parser/AddCommandParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-06-15"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-07-13"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CommandParserTestUtil.assertParseFailure;","lastModifiedDate":"2017-07-06"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CommandParserTestUtil.assertParseSuccess;","lastModifiedDate":"2017-07-06"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.AMY;","lastModifiedDate":"2018-07-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.BOB;","lastModifiedDate":"2018-07-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.logic.Messages;","lastModifiedDate":"2023-07-14"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.AddCommand;","lastModifiedDate":"2017-06-15"},{"lineNumber":13,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.logic.commands.CommandTestUtil;","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2017-06-15"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2017-06-15"},{"lineNumber":16,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.model.person.FundingStage;","lastModifiedDate":"2024-03-05"},{"lineNumber":17,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.model.person.Industry;","lastModifiedDate":"2024-03-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2017-06-15"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2017-06-15"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2017-06-15"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-06-15"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import seedu.address.testutil.PersonBuilder;","lastModifiedDate":"2017-06-15"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":24,"author":{"gitId":"-"},"content":"public class AddCommandParserTest {","lastModifiedDate":"2017-06-15"},{"lineNumber":25,"author":{"gitId":"-"},"content":" private AddCommandParser parser \u003d new AddCommandParser();","lastModifiedDate":"2017-06-15"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":27,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-15"},{"lineNumber":28,"author":{"gitId":"-"},"content":" public void parse_allFieldsPresent_success() {","lastModifiedDate":"2017-08-15"},{"lineNumber":29,"author":{"gitId":"yeoshuheng"},"content":" Person expectedPerson \u003d new PersonBuilder(BOB).withTags(CommandTestUtil.VALID_TAG_FRIEND).build();","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":31,"author":{"gitId":"-"},"content":" // whitespace only preamble","lastModifiedDate":"2017-12-23"},{"lineNumber":32,"author":{"gitId":"yeoshuheng"},"content":" assertParseSuccess(parser, CommandTestUtil.PREAMBLE_WHITESPACE","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.NAME_DESC_BOB + CommandTestUtil.PHONE_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.EMAIL_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":35,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INDUSTRY_DESC_BOB + CommandTestUtil.FUNDING_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":36,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.ADDRESS_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_FRIEND, new AddCommand(expectedPerson));","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-23"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":40,"author":{"gitId":"-"},"content":" // multiple tags - all accepted","lastModifiedDate":"2017-06-15"},{"lineNumber":41,"author":{"gitId":"yeoshuheng"},"content":" Person expectedPersonMultipleTags \u003d new PersonBuilder(BOB).withTags(","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"yeoshuheng"},"content":" CommandTestUtil.VALID_TAG_FRIEND, CommandTestUtil.VALID_TAG_HUSBAND)","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" .build();","lastModifiedDate":"2018-07-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" assertParseSuccess(parser,","lastModifiedDate":"2023-07-14"},{"lineNumber":45,"author":{"gitId":"yeoshuheng"},"content":" CommandTestUtil.NAME_DESC_BOB + CommandTestUtil.PHONE_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":46,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.EMAIL_DESC_BOB + CommandTestUtil.ADDRESS_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":47,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INDUSTRY_DESC_BOB + CommandTestUtil.FUNDING_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":48,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_HUSBAND + CommandTestUtil.TAG_DESC_FRIEND,","lastModifiedDate":"2024-02-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" new AddCommand(expectedPersonMultipleTags));","lastModifiedDate":"2023-07-14"},{"lineNumber":50,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-14"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":52,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-07-14"},{"lineNumber":53,"author":{"gitId":"-"},"content":" public void parse_repeatedNonTagValue_failure() {","lastModifiedDate":"2023-07-14"},{"lineNumber":54,"author":{"gitId":"yeoshuheng"},"content":" String validExpectedPersonString \u003d CommandTestUtil.NAME_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":55,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INDUSTRY_DESC_BOB + CommandTestUtil.FUNDING_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":56,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.PHONE_DESC_BOB + CommandTestUtil.EMAIL_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":57,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.ADDRESS_DESC_BOB + CommandTestUtil.TAG_DESC_FRIEND;","lastModifiedDate":"2024-02-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":59,"author":{"gitId":"-"},"content":" // multiple names","lastModifiedDate":"2023-07-14"},{"lineNumber":60,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.NAME_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2024-02-25"},{"lineNumber":61,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_NAME));","lastModifiedDate":"2024-03-05"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":63,"author":{"gitId":"-"},"content":" // multiple phones","lastModifiedDate":"2023-07-14"},{"lineNumber":64,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.PHONE_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2024-02-25"},{"lineNumber":65,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_PHONE));","lastModifiedDate":"2024-03-05"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":67,"author":{"gitId":"-"},"content":" // multiple emails","lastModifiedDate":"2023-07-14"},{"lineNumber":68,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.EMAIL_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2024-02-25"},{"lineNumber":69,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_EMAIL));","lastModifiedDate":"2024-03-05"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":71,"author":{"gitId":"-"},"content":" // multiple addresses","lastModifiedDate":"2023-07-14"},{"lineNumber":72,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.ADDRESS_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2024-02-25"},{"lineNumber":73,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_ADDRESS));","lastModifiedDate":"2024-03-05"},{"lineNumber":74,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":75,"author":{"gitId":"yeoshuheng"},"content":" // multiple funding stage","lastModifiedDate":"2024-03-05"},{"lineNumber":76,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.FUNDING_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2024-03-05"},{"lineNumber":77,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_FUNDING_STAGE));","lastModifiedDate":"2024-03-05"},{"lineNumber":78,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":79,"author":{"gitId":"yeoshuheng"},"content":" // multiple industry","lastModifiedDate":"2024-03-05"},{"lineNumber":80,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.INDUSTRY_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2024-03-05"},{"lineNumber":81,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_INDUSTRY));","lastModifiedDate":"2024-03-05"},{"lineNumber":82,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":83,"author":{"gitId":"-"},"content":" // multiple fields repeated","lastModifiedDate":"2023-07-14"},{"lineNumber":84,"author":{"gitId":"-"},"content":" assertParseFailure(parser,","lastModifiedDate":"2023-07-14"},{"lineNumber":85,"author":{"gitId":"yeoshuheng"},"content":" validExpectedPersonString + CommandTestUtil.PHONE_DESC_AMY","lastModifiedDate":"2024-02-25"},{"lineNumber":86,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.EMAIL_DESC_AMY + CommandTestUtil.NAME_DESC_AMY","lastModifiedDate":"2024-02-25"},{"lineNumber":87,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.ADDRESS_DESC_AMY,","lastModifiedDate":"2024-03-05"},{"lineNumber":88,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_NAME,","lastModifiedDate":"2024-03-05"},{"lineNumber":89,"author":{"gitId":"yeoshuheng"},"content":" CliSyntax.PREFIX_ADDRESS, CliSyntax.PREFIX_EMAIL, CliSyntax.PREFIX_PHONE));","lastModifiedDate":"2024-03-05"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":91,"author":{"gitId":"-"},"content":" // invalid value followed by valid value","lastModifiedDate":"2023-07-14"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":93,"author":{"gitId":"-"},"content":" // invalid name","lastModifiedDate":"2023-07-14"},{"lineNumber":94,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.INVALID_NAME_DESC + validExpectedPersonString,","lastModifiedDate":"2024-02-25"},{"lineNumber":95,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_NAME));","lastModifiedDate":"2024-03-05"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":97,"author":{"gitId":"-"},"content":" // invalid email","lastModifiedDate":"2023-07-14"},{"lineNumber":98,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.INVALID_EMAIL_DESC + validExpectedPersonString,","lastModifiedDate":"2024-02-25"},{"lineNumber":99,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_EMAIL));","lastModifiedDate":"2024-03-05"},{"lineNumber":100,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":101,"author":{"gitId":"-"},"content":" // invalid phone","lastModifiedDate":"2023-07-14"},{"lineNumber":102,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.INVALID_PHONE_DESC + validExpectedPersonString,","lastModifiedDate":"2024-02-25"},{"lineNumber":103,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_PHONE));","lastModifiedDate":"2024-03-05"},{"lineNumber":104,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":105,"author":{"gitId":"-"},"content":" // invalid address","lastModifiedDate":"2023-07-14"},{"lineNumber":106,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.INVALID_ADDRESS_DESC + validExpectedPersonString,","lastModifiedDate":"2024-02-25"},{"lineNumber":107,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_ADDRESS));","lastModifiedDate":"2024-03-05"},{"lineNumber":108,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":109,"author":{"gitId":"yeoshuheng"},"content":" // invalid industry","lastModifiedDate":"2024-03-05"},{"lineNumber":110,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.INVALID_INDUSTRY_DESC + validExpectedPersonString,","lastModifiedDate":"2024-03-05"},{"lineNumber":111,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_INDUSTRY));","lastModifiedDate":"2024-03-05"},{"lineNumber":112,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":113,"author":{"gitId":"yeoshuheng"},"content":" // invalid funding stage","lastModifiedDate":"2024-03-05"},{"lineNumber":114,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.INVALID_FUNDING_DESC + validExpectedPersonString,","lastModifiedDate":"2024-03-05"},{"lineNumber":115,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_FUNDING_STAGE));","lastModifiedDate":"2024-03-05"},{"lineNumber":116,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":117,"author":{"gitId":"-"},"content":" // valid value followed by invalid value","lastModifiedDate":"2023-07-14"},{"lineNumber":118,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":119,"author":{"gitId":"-"},"content":" // invalid name","lastModifiedDate":"2023-07-14"},{"lineNumber":120,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, validExpectedPersonString + CommandTestUtil.INVALID_NAME_DESC,","lastModifiedDate":"2024-02-25"},{"lineNumber":121,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_NAME));","lastModifiedDate":"2024-03-05"},{"lineNumber":122,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":123,"author":{"gitId":"-"},"content":" // invalid email","lastModifiedDate":"2023-07-14"},{"lineNumber":124,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, validExpectedPersonString + CommandTestUtil.INVALID_EMAIL_DESC,","lastModifiedDate":"2024-02-25"},{"lineNumber":125,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_EMAIL));","lastModifiedDate":"2024-03-05"},{"lineNumber":126,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":127,"author":{"gitId":"-"},"content":" // invalid phone","lastModifiedDate":"2023-07-14"},{"lineNumber":128,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, validExpectedPersonString + CommandTestUtil.INVALID_PHONE_DESC,","lastModifiedDate":"2024-02-25"},{"lineNumber":129,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_PHONE));","lastModifiedDate":"2024-03-05"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":131,"author":{"gitId":"-"},"content":" // invalid address","lastModifiedDate":"2023-07-14"},{"lineNumber":132,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, validExpectedPersonString + CommandTestUtil.INVALID_ADDRESS_DESC,","lastModifiedDate":"2024-02-25"},{"lineNumber":133,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_ADDRESS));","lastModifiedDate":"2024-03-05"},{"lineNumber":134,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":135,"author":{"gitId":"yeoshuheng"},"content":" // invalid industry","lastModifiedDate":"2024-03-05"},{"lineNumber":136,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, validExpectedPersonString + CommandTestUtil.INVALID_INDUSTRY_DESC,","lastModifiedDate":"2024-03-05"},{"lineNumber":137,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_INDUSTRY));","lastModifiedDate":"2024-03-05"},{"lineNumber":138,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":139,"author":{"gitId":"yeoshuheng"},"content":" // invalid funding stage","lastModifiedDate":"2024-03-05"},{"lineNumber":140,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, validExpectedPersonString + CommandTestUtil.INVALID_FUNDING_DESC,","lastModifiedDate":"2024-03-05"},{"lineNumber":141,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_FUNDING_STAGE));","lastModifiedDate":"2024-03-05"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-15"},{"lineNumber":143,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":144,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-15"},{"lineNumber":145,"author":{"gitId":"-"},"content":" public void parse_optionalFieldsMissing_success() {","lastModifiedDate":"2017-08-15"},{"lineNumber":146,"author":{"gitId":"-"},"content":" // zero tags","lastModifiedDate":"2017-06-15"},{"lineNumber":147,"author":{"gitId":"-"},"content":" Person expectedPerson \u003d new PersonBuilder(AMY).withTags().build();","lastModifiedDate":"2018-07-25"},{"lineNumber":148,"author":{"gitId":"yeoshuheng"},"content":" assertParseSuccess(parser, CommandTestUtil.NAME_DESC_AMY","lastModifiedDate":"2024-02-25"},{"lineNumber":149,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INDUSTRY_DESC_AMY","lastModifiedDate":"2024-02-25"},{"lineNumber":150,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.FUNDING_DESC_AMY + CommandTestUtil.PHONE_DESC_AMY","lastModifiedDate":"2024-02-25"},{"lineNumber":151,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.EMAIL_DESC_AMY + CommandTestUtil.ADDRESS_DESC_AMY,","lastModifiedDate":"2024-02-25"},{"lineNumber":152,"author":{"gitId":"-"},"content":" new AddCommand(expectedPerson));","lastModifiedDate":"2017-12-23"},{"lineNumber":153,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-15"},{"lineNumber":154,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":155,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-15"},{"lineNumber":156,"author":{"gitId":"-"},"content":" public void parse_compulsoryFieldMissing_failure() {","lastModifiedDate":"2017-06-15"},{"lineNumber":157,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddCommand.MESSAGE_USAGE);","lastModifiedDate":"2017-06-15"},{"lineNumber":158,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":159,"author":{"gitId":"-"},"content":" // missing name prefix","lastModifiedDate":"2017-06-15"},{"lineNumber":160,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.VALID_NAME_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":161,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.FUNDING_DESC_BOB + CommandTestUtil.INDUSTRY_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":162,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.PHONE_DESC_BOB + CommandTestUtil.EMAIL_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":163,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.ADDRESS_DESC_BOB,","lastModifiedDate":"2024-02-25"},{"lineNumber":164,"author":{"gitId":"-"},"content":" expectedMessage);","lastModifiedDate":"2017-12-23"},{"lineNumber":165,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":166,"author":{"gitId":"-"},"content":" // missing phone prefix","lastModifiedDate":"2017-06-15"},{"lineNumber":167,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.NAME_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":168,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.FUNDING_DESC_BOB + CommandTestUtil.INDUSTRY_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":169,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.VALID_PHONE_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":170,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.EMAIL_DESC_BOB + CommandTestUtil.ADDRESS_DESC_BOB,","lastModifiedDate":"2024-02-25"},{"lineNumber":171,"author":{"gitId":"-"},"content":" expectedMessage);","lastModifiedDate":"2017-12-23"},{"lineNumber":172,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":173,"author":{"gitId":"-"},"content":" // missing email prefix","lastModifiedDate":"2017-06-15"},{"lineNumber":174,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.NAME_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":175,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.FUNDING_DESC_BOB + CommandTestUtil.INDUSTRY_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":176,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.PHONE_DESC_BOB + CommandTestUtil.VALID_EMAIL_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":177,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.ADDRESS_DESC_BOB,","lastModifiedDate":"2024-02-25"},{"lineNumber":178,"author":{"gitId":"-"},"content":" expectedMessage);","lastModifiedDate":"2017-12-23"},{"lineNumber":179,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":180,"author":{"gitId":"-"},"content":" // missing address prefix","lastModifiedDate":"2017-06-15"},{"lineNumber":181,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.NAME_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":182,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.FUNDING_DESC_BOB + CommandTestUtil.INDUSTRY_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":183,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.PHONE_DESC_BOB + CommandTestUtil.EMAIL_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":184,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.VALID_ADDRESS_BOB,","lastModifiedDate":"2024-02-25"},{"lineNumber":185,"author":{"gitId":"-"},"content":" expectedMessage);","lastModifiedDate":"2017-12-23"},{"lineNumber":186,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":187,"author":{"gitId":"yeoshuheng"},"content":" // missing industry prefix","lastModifiedDate":"2024-03-05"},{"lineNumber":188,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.NAME_DESC_BOB","lastModifiedDate":"2024-03-05"},{"lineNumber":189,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.FUNDING_DESC_BOB + CommandTestUtil.ADDRESS_DESC_BOB","lastModifiedDate":"2024-03-05"},{"lineNumber":190,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.PHONE_DESC_BOB + CommandTestUtil.EMAIL_DESC_BOB","lastModifiedDate":"2024-03-05"},{"lineNumber":191,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.VALID_ADDRESS_BOB,","lastModifiedDate":"2024-03-05"},{"lineNumber":192,"author":{"gitId":"yeoshuheng"},"content":" expectedMessage);","lastModifiedDate":"2024-03-05"},{"lineNumber":193,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":194,"author":{"gitId":"yeoshuheng"},"content":" // missing funding stage prefix","lastModifiedDate":"2024-03-05"},{"lineNumber":195,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.NAME_DESC_BOB","lastModifiedDate":"2024-03-05"},{"lineNumber":196,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.ADDRESS_DESC_BOB + CommandTestUtil.INDUSTRY_DESC_BOB","lastModifiedDate":"2024-03-05"},{"lineNumber":197,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.PHONE_DESC_BOB + CommandTestUtil.EMAIL_DESC_BOB","lastModifiedDate":"2024-03-05"},{"lineNumber":198,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.VALID_ADDRESS_BOB,","lastModifiedDate":"2024-03-05"},{"lineNumber":199,"author":{"gitId":"yeoshuheng"},"content":" expectedMessage);","lastModifiedDate":"2024-03-05"},{"lineNumber":200,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":201,"author":{"gitId":"-"},"content":" // all prefixes missing","lastModifiedDate":"2017-06-15"},{"lineNumber":202,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.VALID_NAME_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":203,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.FUNDING_DESC_BOB + CommandTestUtil.INDUSTRY_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":204,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.VALID_PHONE_BOB + CommandTestUtil.VALID_EMAIL_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":205,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.VALID_ADDRESS_BOB,","lastModifiedDate":"2024-02-25"},{"lineNumber":206,"author":{"gitId":"-"},"content":" expectedMessage);","lastModifiedDate":"2017-12-23"},{"lineNumber":207,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-15"},{"lineNumber":208,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":209,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-15"},{"lineNumber":210,"author":{"gitId":"-"},"content":" public void parse_invalidValue_failure() {","lastModifiedDate":"2017-06-15"},{"lineNumber":211,"author":{"gitId":"-"},"content":" // invalid name","lastModifiedDate":"2017-06-15"},{"lineNumber":212,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.INVALID_NAME_DESC","lastModifiedDate":"2024-02-25"},{"lineNumber":213,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.PHONE_DESC_BOB + CommandTestUtil.EMAIL_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":214,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.ADDRESS_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":215,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.FUNDING_DESC_BOB + CommandTestUtil.INDUSTRY_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":216,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_HUSBAND","lastModifiedDate":"2024-02-25"},{"lineNumber":217,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_FRIEND, Name.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":218,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":219,"author":{"gitId":"-"},"content":" // invalid phone","lastModifiedDate":"2017-06-15"},{"lineNumber":220,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.NAME_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":221,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INVALID_PHONE_DESC + CommandTestUtil.EMAIL_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":222,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.ADDRESS_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":223,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.FUNDING_DESC_BOB + CommandTestUtil.INDUSTRY_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":224,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_HUSBAND","lastModifiedDate":"2024-02-25"},{"lineNumber":225,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_FRIEND, Phone.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":226,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":227,"author":{"gitId":"-"},"content":" // invalid email","lastModifiedDate":"2017-06-15"},{"lineNumber":228,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.NAME_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":229,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.PHONE_DESC_BOB + CommandTestUtil.INVALID_EMAIL_DESC","lastModifiedDate":"2024-02-25"},{"lineNumber":230,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.ADDRESS_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":231,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.FUNDING_DESC_BOB + CommandTestUtil.INDUSTRY_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":232,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_HUSBAND","lastModifiedDate":"2024-02-25"},{"lineNumber":233,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_FRIEND, Email.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":234,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":235,"author":{"gitId":"-"},"content":" // invalid address","lastModifiedDate":"2017-06-15"},{"lineNumber":236,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.NAME_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":237,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.PHONE_DESC_BOB + CommandTestUtil.EMAIL_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":238,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INVALID_ADDRESS_DESC","lastModifiedDate":"2024-02-25"},{"lineNumber":239,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.FUNDING_DESC_BOB + CommandTestUtil.INDUSTRY_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":240,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_HUSBAND","lastModifiedDate":"2024-02-25"},{"lineNumber":241,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_FRIEND, Address.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":242,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":243,"author":{"gitId":"yeoshuheng"},"content":" // invalid funding stage","lastModifiedDate":"2024-03-05"},{"lineNumber":244,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.NAME_DESC_BOB","lastModifiedDate":"2024-03-05"},{"lineNumber":245,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.PHONE_DESC_BOB + CommandTestUtil.EMAIL_DESC_BOB","lastModifiedDate":"2024-03-05"},{"lineNumber":246,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.ADDRESS_DESC_BOB + CommandTestUtil.INVALID_FUNDING_DESC","lastModifiedDate":"2024-03-05"},{"lineNumber":247,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INDUSTRY_DESC_BOB","lastModifiedDate":"2024-03-05"},{"lineNumber":248,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_HUSBAND","lastModifiedDate":"2024-03-05"},{"lineNumber":249,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_FRIEND, FundingStage.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-03-05"},{"lineNumber":250,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":251,"author":{"gitId":"yeoshuheng"},"content":" // invalid industry","lastModifiedDate":"2024-03-05"},{"lineNumber":252,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.NAME_DESC_BOB","lastModifiedDate":"2024-03-05"},{"lineNumber":253,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.PHONE_DESC_BOB + CommandTestUtil.EMAIL_DESC_BOB","lastModifiedDate":"2024-03-05"},{"lineNumber":254,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.ADDRESS_DESC_BOB","lastModifiedDate":"2024-03-05"},{"lineNumber":255,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.FUNDING_DESC_BOB + CommandTestUtil.INVALID_INDUSTRY_DESC","lastModifiedDate":"2024-03-05"},{"lineNumber":256,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_HUSBAND","lastModifiedDate":"2024-03-05"},{"lineNumber":257,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_FRIEND, Industry.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-03-05"},{"lineNumber":258,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":259,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":260,"author":{"gitId":"-"},"content":" // invalid tag","lastModifiedDate":"2017-06-15"},{"lineNumber":261,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.NAME_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":262,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.PHONE_DESC_BOB + CommandTestUtil.EMAIL_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":263,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.ADDRESS_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":264,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.FUNDING_DESC_BOB + CommandTestUtil.INDUSTRY_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":265,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INVALID_TAG_DESC","lastModifiedDate":"2024-02-25"},{"lineNumber":266,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.VALID_TAG_FRIEND, Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":267,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":268,"author":{"gitId":"-"},"content":" // two invalid values, only first invalid value reported","lastModifiedDate":"2017-06-15"},{"lineNumber":269,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.INVALID_NAME_DESC","lastModifiedDate":"2024-02-25"},{"lineNumber":270,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.PHONE_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":271,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.FUNDING_DESC_BOB + CommandTestUtil.INDUSTRY_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":272,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.EMAIL_DESC_BOB + CommandTestUtil.INVALID_ADDRESS_DESC,","lastModifiedDate":"2024-02-25"},{"lineNumber":273,"author":{"gitId":"-"},"content":" Name.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":274,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-23"},{"lineNumber":275,"author":{"gitId":"-"},"content":" // non-empty preamble","lastModifiedDate":"2017-12-23"},{"lineNumber":276,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.PREAMBLE_NON_EMPTY","lastModifiedDate":"2024-02-25"},{"lineNumber":277,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.NAME_DESC_BOB + CommandTestUtil.PHONE_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":278,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.EMAIL_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":279,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.FUNDING_DESC_BOB + CommandTestUtil.INDUSTRY_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":280,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.ADDRESS_DESC_BOB + CommandTestUtil.TAG_DESC_HUSBAND + CommandTestUtil.TAG_DESC_FRIEND,","lastModifiedDate":"2024-02-25"},{"lineNumber":281,"author":{"gitId":"-"},"content":" String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddCommand.MESSAGE_USAGE));","lastModifiedDate":"2017-12-23"},{"lineNumber":282,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-15"},{"lineNumber":283,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-06-15"}],"authorContributionMap":{"-":117,"yeoshuheng":166}},{"path":"src/test/java/seedu/address/logic/parser/EditCommandParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-05-04"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-07-13"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2023-07-14"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2023-07-14"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2023-07-14"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2017-05-04"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CommandParserTestUtil.assertParseFailure;","lastModifiedDate":"2017-07-06"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CommandParserTestUtil.assertParseSuccess;","lastModifiedDate":"2017-07-06"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON;","lastModifiedDate":"2017-08-05"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalIndexes.INDEX_SECOND_PERSON;","lastModifiedDate":"2017-08-05"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalIndexes.INDEX_THIRD_PERSON;","lastModifiedDate":"2017-08-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2017-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.logic.Messages;","lastModifiedDate":"2023-07-14"},{"lineNumber":18,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.logic.commands.CommandTestUtil;","lastModifiedDate":"2024-03-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand;","lastModifiedDate":"2017-05-04"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand.EditPersonDescriptor;","lastModifiedDate":"2017-05-04"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2017-05-04"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2017-05-04"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2017-05-04"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2017-05-04"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-05-04"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import seedu.address.testutil.EditPersonDescriptorBuilder;","lastModifiedDate":"2017-05-04"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":28,"author":{"gitId":"-"},"content":"public class EditCommandParserTest {","lastModifiedDate":"2017-05-04"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":30,"author":{"gitId":"-"},"content":" private static final String TAG_EMPTY \u003d \" \" + PREFIX_TAG;","lastModifiedDate":"2017-05-04"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":32,"author":{"gitId":"-"},"content":" private static final String MESSAGE_INVALID_FORMAT \u003d","lastModifiedDate":"2017-05-04"},{"lineNumber":33,"author":{"gitId":"-"},"content":" String.format(MESSAGE_INVALID_COMMAND_FORMAT, EditCommand.MESSAGE_USAGE);","lastModifiedDate":"2017-05-04"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":35,"author":{"gitId":"-"},"content":" private EditCommandParser parser \u003d new EditCommandParser();","lastModifiedDate":"2017-05-04"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":37,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":38,"author":{"gitId":"-"},"content":" public void parse_missingParts_failure() {","lastModifiedDate":"2017-05-04"},{"lineNumber":39,"author":{"gitId":"-"},"content":" // no index specified","lastModifiedDate":"2017-05-04"},{"lineNumber":40,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.VALID_NAME_AMY, MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2024-03-05"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":42,"author":{"gitId":"-"},"content":" // no field specified","lastModifiedDate":"2017-05-04"},{"lineNumber":43,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"1\", EditCommand.MESSAGE_NOT_EDITED);","lastModifiedDate":"2017-07-06"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":45,"author":{"gitId":"-"},"content":" // no index and no field specified","lastModifiedDate":"2017-05-04"},{"lineNumber":46,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"\", MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2017-07-06"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":49,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":50,"author":{"gitId":"-"},"content":" public void parse_invalidPreamble_failure() {","lastModifiedDate":"2017-06-06"},{"lineNumber":51,"author":{"gitId":"-"},"content":" // negative index","lastModifiedDate":"2017-05-04"},{"lineNumber":52,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, \"-5\" + CommandTestUtil.NAME_DESC_AMY, MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2024-03-05"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":54,"author":{"gitId":"-"},"content":" // zero index","lastModifiedDate":"2017-06-06"},{"lineNumber":55,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, \"0\" + CommandTestUtil.NAME_DESC_AMY, MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2024-03-05"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-06"},{"lineNumber":57,"author":{"gitId":"-"},"content":" // invalid arguments being parsed as preamble","lastModifiedDate":"2017-06-06"},{"lineNumber":58,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"1 some random string\", MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2017-07-06"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-06"},{"lineNumber":60,"author":{"gitId":"-"},"content":" // invalid prefix being parsed as preamble","lastModifiedDate":"2017-06-06"},{"lineNumber":61,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, \"1 x/ string\", MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2024-02-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":64,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":65,"author":{"gitId":"-"},"content":" public void parse_invalidValue_failure() {","lastModifiedDate":"2017-05-04"},{"lineNumber":66,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, \"1\"","lastModifiedDate":"2024-03-05"},{"lineNumber":67,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INVALID_NAME_DESC, Name.MESSAGE_CONSTRAINTS); // invalid name","lastModifiedDate":"2024-03-05"},{"lineNumber":68,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, \"1\"","lastModifiedDate":"2024-03-05"},{"lineNumber":69,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INVALID_PHONE_DESC, Phone.MESSAGE_CONSTRAINTS); // invalid phone","lastModifiedDate":"2024-03-05"},{"lineNumber":70,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, \"1\"","lastModifiedDate":"2024-03-05"},{"lineNumber":71,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INVALID_EMAIL_DESC, Email.MESSAGE_CONSTRAINTS); // invalid email","lastModifiedDate":"2024-03-05"},{"lineNumber":72,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, \"1\"","lastModifiedDate":"2024-03-05"},{"lineNumber":73,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INVALID_ADDRESS_DESC, Address.MESSAGE_CONSTRAINTS); // invalid address","lastModifiedDate":"2024-03-05"},{"lineNumber":74,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, \"1\"","lastModifiedDate":"2024-03-05"},{"lineNumber":75,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INVALID_TAG_DESC, Tag.MESSAGE_CONSTRAINTS); // invalid tag","lastModifiedDate":"2024-03-05"},{"lineNumber":76,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":77,"author":{"gitId":"-"},"content":" // invalid phone followed by valid email","lastModifiedDate":"2017-05-04"},{"lineNumber":78,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, \"1\"","lastModifiedDate":"2024-03-05"},{"lineNumber":79,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INVALID_PHONE_DESC","lastModifiedDate":"2024-03-05"},{"lineNumber":80,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.EMAIL_DESC_AMY, Phone.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-03-05"},{"lineNumber":81,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":82,"author":{"gitId":"-"},"content":" // while parsing {@code PREFIX_TAG} alone will reset the tags of the {@code Person} being edited,","lastModifiedDate":"2017-05-04"},{"lineNumber":83,"author":{"gitId":"-"},"content":" // parsing it together with a valid tag results in error","lastModifiedDate":"2017-05-04"},{"lineNumber":84,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, \"1\"","lastModifiedDate":"2024-03-05"},{"lineNumber":85,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_FRIEND + CommandTestUtil.TAG_DESC_HUSBAND","lastModifiedDate":"2024-03-05"},{"lineNumber":86,"author":{"gitId":"yeoshuheng"},"content":" + TAG_EMPTY, Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-03-05"},{"lineNumber":87,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, \"1\" + CommandTestUtil.TAG_DESC_FRIEND","lastModifiedDate":"2024-03-05"},{"lineNumber":88,"author":{"gitId":"yeoshuheng"},"content":" + TAG_EMPTY + CommandTestUtil.TAG_DESC_HUSBAND, Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-03-05"},{"lineNumber":89,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, \"1\" + TAG_EMPTY","lastModifiedDate":"2024-03-05"},{"lineNumber":90,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_FRIEND","lastModifiedDate":"2024-03-05"},{"lineNumber":91,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_HUSBAND, Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-03-05"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":93,"author":{"gitId":"-"},"content":" // multiple invalid values, but only the first invalid value is captured","lastModifiedDate":"2017-05-04"},{"lineNumber":94,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, \"1\"","lastModifiedDate":"2024-03-05"},{"lineNumber":95,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INVALID_NAME_DESC + CommandTestUtil.INVALID_EMAIL_DESC","lastModifiedDate":"2024-03-05"},{"lineNumber":96,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.VALID_ADDRESS_AMY + CommandTestUtil.VALID_PHONE_AMY,","lastModifiedDate":"2024-03-05"},{"lineNumber":97,"author":{"gitId":"-"},"content":" Name.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":99,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":100,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":101,"author":{"gitId":"-"},"content":" public void parse_allFieldsSpecified_success() {","lastModifiedDate":"2017-08-15"},{"lineNumber":102,"author":{"gitId":"-"},"content":" Index targetIndex \u003d INDEX_SECOND_PERSON;","lastModifiedDate":"2017-05-25"},{"lineNumber":103,"author":{"gitId":"yeoshuheng"},"content":" String userInput \u003d targetIndex.getOneBased() + CommandTestUtil.PHONE_DESC_BOB","lastModifiedDate":"2024-03-05"},{"lineNumber":104,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_HUSBAND","lastModifiedDate":"2024-03-05"},{"lineNumber":105,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.EMAIL_DESC_AMY + CommandTestUtil.ADDRESS_DESC_AMY","lastModifiedDate":"2024-03-05"},{"lineNumber":106,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.NAME_DESC_AMY + CommandTestUtil.TAG_DESC_FRIEND;","lastModifiedDate":"2024-03-05"},{"lineNumber":107,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":108,"author":{"gitId":"yeoshuheng"},"content":" EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder().withName(CommandTestUtil.VALID_NAME_AMY)","lastModifiedDate":"2024-03-05"},{"lineNumber":109,"author":{"gitId":"yeoshuheng"},"content":" .withPhone(CommandTestUtil.VALID_PHONE_BOB).withEmail(","lastModifiedDate":"2024-03-05"},{"lineNumber":110,"author":{"gitId":"yeoshuheng"},"content":" CommandTestUtil.VALID_EMAIL_AMY).withAddress(CommandTestUtil.VALID_ADDRESS_AMY)","lastModifiedDate":"2024-03-05"},{"lineNumber":111,"author":{"gitId":"yeoshuheng"},"content":" .withTags(CommandTestUtil.VALID_TAG_HUSBAND, CommandTestUtil.VALID_TAG_FRIEND).build();","lastModifiedDate":"2024-03-05"},{"lineNumber":112,"author":{"gitId":"-"},"content":" EditCommand expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2017-05-04"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":114,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2017-07-06"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":116,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":117,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":118,"author":{"gitId":"-"},"content":" public void parse_someFieldsSpecified_success() {","lastModifiedDate":"2017-08-15"},{"lineNumber":119,"author":{"gitId":"-"},"content":" Index targetIndex \u003d INDEX_FIRST_PERSON;","lastModifiedDate":"2017-05-25"},{"lineNumber":120,"author":{"gitId":"yeoshuheng"},"content":" String userInput \u003d targetIndex.getOneBased() + CommandTestUtil.PHONE_DESC_BOB + CommandTestUtil.EMAIL_DESC_AMY;","lastModifiedDate":"2024-03-05"},{"lineNumber":121,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":122,"author":{"gitId":"yeoshuheng"},"content":" EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder().withPhone(CommandTestUtil.VALID_PHONE_BOB)","lastModifiedDate":"2024-03-05"},{"lineNumber":123,"author":{"gitId":"yeoshuheng"},"content":" .withEmail(CommandTestUtil.VALID_EMAIL_AMY).build();","lastModifiedDate":"2024-03-05"},{"lineNumber":124,"author":{"gitId":"-"},"content":" EditCommand expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2017-05-04"},{"lineNumber":125,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":126,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2017-07-06"},{"lineNumber":127,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":128,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":129,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":130,"author":{"gitId":"-"},"content":" public void parse_oneFieldSpecified_success() {","lastModifiedDate":"2017-08-15"},{"lineNumber":131,"author":{"gitId":"-"},"content":" // name","lastModifiedDate":"2017-05-04"},{"lineNumber":132,"author":{"gitId":"-"},"content":" Index targetIndex \u003d INDEX_THIRD_PERSON;","lastModifiedDate":"2017-05-25"},{"lineNumber":133,"author":{"gitId":"yeoshuheng"},"content":" String userInput \u003d targetIndex.getOneBased() + CommandTestUtil.NAME_DESC_AMY;","lastModifiedDate":"2024-03-05"},{"lineNumber":134,"author":{"gitId":"yeoshuheng"},"content":" EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder().withName(","lastModifiedDate":"2024-03-05"},{"lineNumber":135,"author":{"gitId":"yeoshuheng"},"content":" CommandTestUtil.VALID_NAME_AMY).build();","lastModifiedDate":"2024-03-05"},{"lineNumber":136,"author":{"gitId":"-"},"content":" EditCommand expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2017-05-04"},{"lineNumber":137,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2017-07-06"},{"lineNumber":138,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":139,"author":{"gitId":"-"},"content":" // phone","lastModifiedDate":"2017-05-04"},{"lineNumber":140,"author":{"gitId":"yeoshuheng"},"content":" userInput \u003d targetIndex.getOneBased() + CommandTestUtil.PHONE_DESC_AMY;","lastModifiedDate":"2024-03-05"},{"lineNumber":141,"author":{"gitId":"yeoshuheng"},"content":" descriptor \u003d new EditPersonDescriptorBuilder().withPhone(","lastModifiedDate":"2024-03-05"},{"lineNumber":142,"author":{"gitId":"yeoshuheng"},"content":" CommandTestUtil.VALID_PHONE_AMY).build();","lastModifiedDate":"2024-03-05"},{"lineNumber":143,"author":{"gitId":"-"},"content":" expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2017-05-04"},{"lineNumber":144,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2017-07-06"},{"lineNumber":145,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":146,"author":{"gitId":"-"},"content":" // email","lastModifiedDate":"2017-05-04"},{"lineNumber":147,"author":{"gitId":"yeoshuheng"},"content":" userInput \u003d targetIndex.getOneBased() + CommandTestUtil.EMAIL_DESC_AMY;","lastModifiedDate":"2024-03-05"},{"lineNumber":148,"author":{"gitId":"yeoshuheng"},"content":" descriptor \u003d new EditPersonDescriptorBuilder().withEmail(","lastModifiedDate":"2024-03-05"},{"lineNumber":149,"author":{"gitId":"yeoshuheng"},"content":" CommandTestUtil.VALID_EMAIL_AMY).build();","lastModifiedDate":"2024-03-05"},{"lineNumber":150,"author":{"gitId":"-"},"content":" expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2017-05-04"},{"lineNumber":151,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2017-07-06"},{"lineNumber":152,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":153,"author":{"gitId":"-"},"content":" // address","lastModifiedDate":"2017-05-04"},{"lineNumber":154,"author":{"gitId":"yeoshuheng"},"content":" userInput \u003d targetIndex.getOneBased() + CommandTestUtil.ADDRESS_DESC_AMY;","lastModifiedDate":"2024-03-05"},{"lineNumber":155,"author":{"gitId":"yeoshuheng"},"content":" descriptor \u003d new EditPersonDescriptorBuilder().withAddress(","lastModifiedDate":"2024-03-05"},{"lineNumber":156,"author":{"gitId":"yeoshuheng"},"content":" CommandTestUtil.VALID_ADDRESS_AMY).build();","lastModifiedDate":"2024-03-05"},{"lineNumber":157,"author":{"gitId":"yeoshuheng"},"content":" expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2024-03-05"},{"lineNumber":158,"author":{"gitId":"yeoshuheng"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2024-03-05"},{"lineNumber":159,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":160,"author":{"gitId":"yeoshuheng"},"content":" // industry","lastModifiedDate":"2024-03-05"},{"lineNumber":161,"author":{"gitId":"yeoshuheng"},"content":" userInput \u003d targetIndex.getOneBased() + CommandTestUtil.INDUSTRY_DESC_AMY;","lastModifiedDate":"2024-03-05"},{"lineNumber":162,"author":{"gitId":"yeoshuheng"},"content":" descriptor \u003d new EditPersonDescriptorBuilder().withIndustry(","lastModifiedDate":"2024-03-05"},{"lineNumber":163,"author":{"gitId":"yeoshuheng"},"content":" CommandTestUtil.VALID_INDUSTRY_AMY).build();","lastModifiedDate":"2024-03-05"},{"lineNumber":164,"author":{"gitId":"yeoshuheng"},"content":" expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2024-03-05"},{"lineNumber":165,"author":{"gitId":"yeoshuheng"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2024-03-05"},{"lineNumber":166,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":167,"author":{"gitId":"yeoshuheng"},"content":" // funding stage","lastModifiedDate":"2024-03-05"},{"lineNumber":168,"author":{"gitId":"yeoshuheng"},"content":" userInput \u003d targetIndex.getOneBased() + CommandTestUtil.FUNDING_DESC_AMY;","lastModifiedDate":"2024-03-05"},{"lineNumber":169,"author":{"gitId":"yeoshuheng"},"content":" descriptor \u003d new EditPersonDescriptorBuilder().withFundingStage(","lastModifiedDate":"2024-03-05"},{"lineNumber":170,"author":{"gitId":"yeoshuheng"},"content":" CommandTestUtil.VALID_FUNDING_AMY).build();","lastModifiedDate":"2024-03-05"},{"lineNumber":171,"author":{"gitId":"-"},"content":" expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2017-05-04"},{"lineNumber":172,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2017-07-06"},{"lineNumber":173,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":174,"author":{"gitId":"-"},"content":" // tags","lastModifiedDate":"2017-05-04"},{"lineNumber":175,"author":{"gitId":"yeoshuheng"},"content":" userInput \u003d targetIndex.getOneBased() + CommandTestUtil.TAG_DESC_FRIEND;","lastModifiedDate":"2024-03-05"},{"lineNumber":176,"author":{"gitId":"yeoshuheng"},"content":" descriptor \u003d new EditPersonDescriptorBuilder().withTags(","lastModifiedDate":"2024-03-05"},{"lineNumber":177,"author":{"gitId":"yeoshuheng"},"content":" CommandTestUtil.VALID_TAG_FRIEND).build();","lastModifiedDate":"2024-03-05"},{"lineNumber":178,"author":{"gitId":"-"},"content":" expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2017-05-04"},{"lineNumber":179,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2017-07-06"},{"lineNumber":180,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":181,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":182,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":183,"author":{"gitId":"-"},"content":" public void parse_multipleRepeatedFields_failure() {","lastModifiedDate":"2023-07-14"},{"lineNumber":184,"author":{"gitId":"-"},"content":" // More extensive testing of duplicate parameter detections is done in","lastModifiedDate":"2023-07-14"},{"lineNumber":185,"author":{"gitId":"-"},"content":" // AddCommandParserTest#parse_repeatedNonTagValue_failure()","lastModifiedDate":"2023-07-14"},{"lineNumber":186,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":187,"author":{"gitId":"-"},"content":" // valid followed by invalid","lastModifiedDate":"2023-07-14"},{"lineNumber":188,"author":{"gitId":"-"},"content":" Index targetIndex \u003d INDEX_FIRST_PERSON;","lastModifiedDate":"2017-05-25"},{"lineNumber":189,"author":{"gitId":"yeoshuheng"},"content":" String userInput \u003d targetIndex.getOneBased()","lastModifiedDate":"2024-03-05"},{"lineNumber":190,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INVALID_PHONE_DESC","lastModifiedDate":"2024-03-05"},{"lineNumber":191,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.PHONE_DESC_BOB;","lastModifiedDate":"2024-03-05"},{"lineNumber":192,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":193,"author":{"gitId":"-"},"content":" assertParseFailure(parser, userInput, Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE));","lastModifiedDate":"2023-07-14"},{"lineNumber":194,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":195,"author":{"gitId":"-"},"content":" // invalid followed by valid","lastModifiedDate":"2023-07-14"},{"lineNumber":196,"author":{"gitId":"yeoshuheng"},"content":" userInput \u003d targetIndex.getOneBased() + CommandTestUtil.PHONE_DESC_BOB","lastModifiedDate":"2024-03-05"},{"lineNumber":197,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INVALID_PHONE_DESC;","lastModifiedDate":"2024-03-05"},{"lineNumber":198,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":199,"author":{"gitId":"-"},"content":" assertParseFailure(parser, userInput, Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE));","lastModifiedDate":"2023-07-14"},{"lineNumber":200,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":201,"author":{"gitId":"-"},"content":" // mulltiple valid fields repeated","lastModifiedDate":"2023-07-14"},{"lineNumber":202,"author":{"gitId":"yeoshuheng"},"content":" userInput \u003d targetIndex.getOneBased() + CommandTestUtil.PHONE_DESC_AMY","lastModifiedDate":"2024-03-05"},{"lineNumber":203,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.ADDRESS_DESC_AMY + CommandTestUtil.EMAIL_DESC_AMY","lastModifiedDate":"2024-03-05"},{"lineNumber":204,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_FRIEND + CommandTestUtil.PHONE_DESC_AMY","lastModifiedDate":"2024-03-05"},{"lineNumber":205,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.ADDRESS_DESC_AMY + CommandTestUtil.EMAIL_DESC_AMY","lastModifiedDate":"2024-03-05"},{"lineNumber":206,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_FRIEND","lastModifiedDate":"2024-03-05"},{"lineNumber":207,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.PHONE_DESC_BOB + CommandTestUtil.ADDRESS_DESC_BOB","lastModifiedDate":"2024-03-05"},{"lineNumber":208,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.EMAIL_DESC_BOB + CommandTestUtil.TAG_DESC_HUSBAND;","lastModifiedDate":"2024-03-05"},{"lineNumber":209,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":210,"author":{"gitId":"-"},"content":" assertParseFailure(parser, userInput,","lastModifiedDate":"2023-07-14"},{"lineNumber":211,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS));","lastModifiedDate":"2023-07-14"},{"lineNumber":212,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":213,"author":{"gitId":"-"},"content":" // multiple invalid values","lastModifiedDate":"2023-07-14"},{"lineNumber":214,"author":{"gitId":"yeoshuheng"},"content":" userInput \u003d targetIndex.getOneBased() + CommandTestUtil.INVALID_PHONE_DESC","lastModifiedDate":"2024-03-05"},{"lineNumber":215,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INVALID_ADDRESS_DESC + CommandTestUtil.INVALID_EMAIL_DESC","lastModifiedDate":"2024-03-05"},{"lineNumber":216,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INVALID_PHONE_DESC + CommandTestUtil.INVALID_ADDRESS_DESC","lastModifiedDate":"2024-03-05"},{"lineNumber":217,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INVALID_EMAIL_DESC;","lastModifiedDate":"2024-03-05"},{"lineNumber":218,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":219,"author":{"gitId":"-"},"content":" assertParseFailure(parser, userInput,","lastModifiedDate":"2023-07-14"},{"lineNumber":220,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS));","lastModifiedDate":"2023-07-14"},{"lineNumber":221,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":222,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":223,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":224,"author":{"gitId":"-"},"content":" public void parse_resetTags_success() {","lastModifiedDate":"2017-08-15"},{"lineNumber":225,"author":{"gitId":"-"},"content":" Index targetIndex \u003d INDEX_THIRD_PERSON;","lastModifiedDate":"2017-05-25"},{"lineNumber":226,"author":{"gitId":"-"},"content":" String userInput \u003d targetIndex.getOneBased() + TAG_EMPTY;","lastModifiedDate":"2017-05-25"},{"lineNumber":227,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":228,"author":{"gitId":"-"},"content":" EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder().withTags().build();","lastModifiedDate":"2017-05-04"},{"lineNumber":229,"author":{"gitId":"-"},"content":" EditCommand expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2017-05-04"},{"lineNumber":230,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":231,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2017-07-06"},{"lineNumber":232,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":233,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-05-04"}],"authorContributionMap":{"-":147,"yeoshuheng":86}},{"path":"src/test/java/seedu/address/model/person/FundingStageTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"yeoshuheng"},"content":"package seedu.address.model.person;","lastModifiedDate":"2024-03-05"},{"lineNumber":2,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":3,"author":{"gitId":"yeoshuheng"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2024-03-05"},{"lineNumber":4,"author":{"gitId":"yeoshuheng"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2024-03-05"},{"lineNumber":5,"author":{"gitId":"yeoshuheng"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2024-03-05"},{"lineNumber":6,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":7,"author":{"gitId":"yeoshuheng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2024-03-05"},{"lineNumber":8,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":9,"author":{"gitId":"yeoshuheng"},"content":"public class FundingStageTest {","lastModifiedDate":"2024-03-05"},{"lineNumber":10,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":11,"author":{"gitId":"yeoshuheng"},"content":" @Test","lastModifiedDate":"2024-03-05"},{"lineNumber":12,"author":{"gitId":"yeoshuheng"},"content":" public void constructor_null_throwsNullPointerException() {","lastModifiedDate":"2024-03-05"},{"lineNumber":13,"author":{"gitId":"yeoshuheng"},"content":" assertThrows(NullPointerException.class, () -\u003e new FundingStage(null));","lastModifiedDate":"2024-03-05"},{"lineNumber":14,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-03-05"},{"lineNumber":15,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":16,"author":{"gitId":"yeoshuheng"},"content":" @Test","lastModifiedDate":"2024-03-05"},{"lineNumber":17,"author":{"gitId":"yeoshuheng"},"content":" public void constructor_invalidFundingStage_throwsIllegalArgumentException() {","lastModifiedDate":"2024-03-05"},{"lineNumber":18,"author":{"gitId":"yeoshuheng"},"content":" String invalidPhone \u003d \"\";","lastModifiedDate":"2024-03-05"},{"lineNumber":19,"author":{"gitId":"yeoshuheng"},"content":" assertThrows(IllegalArgumentException.class, () -\u003e new FundingStage(invalidPhone));","lastModifiedDate":"2024-03-05"},{"lineNumber":20,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-03-05"},{"lineNumber":21,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":22,"author":{"gitId":"yeoshuheng"},"content":" @Test","lastModifiedDate":"2024-03-05"},{"lineNumber":23,"author":{"gitId":"yeoshuheng"},"content":" public void isValidFundingStage() {","lastModifiedDate":"2024-03-05"},{"lineNumber":24,"author":{"gitId":"yeoshuheng"},"content":" // null funding","lastModifiedDate":"2024-03-05"},{"lineNumber":25,"author":{"gitId":"yeoshuheng"},"content":" assertThrows(NullPointerException.class, () -\u003e FundingStage.isValidFundingLevel(null));","lastModifiedDate":"2024-03-05"},{"lineNumber":26,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":27,"author":{"gitId":"yeoshuheng"},"content":" // invalid funding levels","lastModifiedDate":"2024-03-05"},{"lineNumber":28,"author":{"gitId":"yeoshuheng"},"content":" assertFalse(FundingStage.isValidFundingLevel(\"\")); // empty string","lastModifiedDate":"2024-03-05"},{"lineNumber":29,"author":{"gitId":"yeoshuheng"},"content":" assertFalse(FundingStage.isValidFundingLevel(\" \")); // spaces only","lastModifiedDate":"2024-03-05"},{"lineNumber":30,"author":{"gitId":"yeoshuheng"},"content":" assertFalse(FundingStage.isValidFundingLevel(\"AB\")); // invalid funding level","lastModifiedDate":"2024-03-05"},{"lineNumber":31,"author":{"gitId":"yeoshuheng"},"content":" assertFalse(FundingStage.isValidFundingLevel(\"1\")); // numbers","lastModifiedDate":"2024-03-05"},{"lineNumber":32,"author":{"gitId":"yeoshuheng"},"content":" assertFalse(FundingStage.isValidFundingLevel(\"D\")); // invalid funding level","lastModifiedDate":"2024-03-05"},{"lineNumber":33,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":34,"author":{"gitId":"yeoshuheng"},"content":" // valid funding levels","lastModifiedDate":"2024-03-05"},{"lineNumber":35,"author":{"gitId":"yeoshuheng"},"content":" assertTrue(FundingStage.isValidFundingLevel(\"A\"));","lastModifiedDate":"2024-03-05"},{"lineNumber":36,"author":{"gitId":"yeoshuheng"},"content":" assertTrue(FundingStage.isValidFundingLevel(\"B\"));","lastModifiedDate":"2024-03-05"},{"lineNumber":37,"author":{"gitId":"yeoshuheng"},"content":" assertTrue(FundingStage.isValidFundingLevel(\"C\"));","lastModifiedDate":"2024-03-05"},{"lineNumber":38,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-03-05"},{"lineNumber":39,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":40,"author":{"gitId":"yeoshuheng"},"content":" @Test","lastModifiedDate":"2024-03-05"},{"lineNumber":41,"author":{"gitId":"yeoshuheng"},"content":" public void equals() {","lastModifiedDate":"2024-03-05"},{"lineNumber":42,"author":{"gitId":"yeoshuheng"},"content":" FundingStage fundingStage \u003d new FundingStage(\"A\");","lastModifiedDate":"2024-03-05"},{"lineNumber":43,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":44,"author":{"gitId":"yeoshuheng"},"content":" // same values -\u003e returns true","lastModifiedDate":"2024-03-05"},{"lineNumber":45,"author":{"gitId":"yeoshuheng"},"content":" assertTrue(fundingStage.equals(new FundingStage(\"A\")));","lastModifiedDate":"2024-03-05"},{"lineNumber":46,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":47,"author":{"gitId":"yeoshuheng"},"content":" // same object -\u003e returns true","lastModifiedDate":"2024-03-05"},{"lineNumber":48,"author":{"gitId":"yeoshuheng"},"content":" assertTrue(fundingStage.equals(fundingStage));","lastModifiedDate":"2024-03-05"},{"lineNumber":49,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":50,"author":{"gitId":"yeoshuheng"},"content":" // null -\u003e returns false","lastModifiedDate":"2024-03-05"},{"lineNumber":51,"author":{"gitId":"yeoshuheng"},"content":" assertFalse(fundingStage.equals(null));","lastModifiedDate":"2024-03-05"},{"lineNumber":52,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":53,"author":{"gitId":"yeoshuheng"},"content":" // different types -\u003e returns false","lastModifiedDate":"2024-03-05"},{"lineNumber":54,"author":{"gitId":"yeoshuheng"},"content":" assertFalse(fundingStage.equals(5.0f));","lastModifiedDate":"2024-03-05"},{"lineNumber":55,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":56,"author":{"gitId":"yeoshuheng"},"content":" // different values -\u003e returns false","lastModifiedDate":"2024-03-05"},{"lineNumber":57,"author":{"gitId":"yeoshuheng"},"content":" assertFalse(fundingStage.equals(new FundingStage(\"B\")));","lastModifiedDate":"2024-03-05"},{"lineNumber":58,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-03-05"},{"lineNumber":59,"author":{"gitId":"yeoshuheng"},"content":"}","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"yeoshuheng":59}},{"path":"src/test/java/seedu/address/model/person/IndustryTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"yeoshuheng"},"content":"package seedu.address.model.person;","lastModifiedDate":"2024-03-05"},{"lineNumber":2,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":3,"author":{"gitId":"yeoshuheng"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2024-03-05"},{"lineNumber":4,"author":{"gitId":"yeoshuheng"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2024-03-05"},{"lineNumber":5,"author":{"gitId":"yeoshuheng"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2024-03-05"},{"lineNumber":6,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":7,"author":{"gitId":"yeoshuheng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2024-03-05"},{"lineNumber":8,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":9,"author":{"gitId":"yeoshuheng"},"content":"public class IndustryTest {","lastModifiedDate":"2024-03-05"},{"lineNumber":10,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":11,"author":{"gitId":"yeoshuheng"},"content":" @Test","lastModifiedDate":"2024-03-05"},{"lineNumber":12,"author":{"gitId":"yeoshuheng"},"content":" public void constructor_null_throwsNullPointerException() {","lastModifiedDate":"2024-03-05"},{"lineNumber":13,"author":{"gitId":"yeoshuheng"},"content":" assertThrows(NullPointerException.class, () -\u003e new Industry(null));","lastModifiedDate":"2024-03-05"},{"lineNumber":14,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-03-05"},{"lineNumber":15,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":16,"author":{"gitId":"yeoshuheng"},"content":" @Test","lastModifiedDate":"2024-03-05"},{"lineNumber":17,"author":{"gitId":"yeoshuheng"},"content":" public void constructor_invalidIndustry_throwsIllegalArgumentException() {","lastModifiedDate":"2024-03-05"},{"lineNumber":18,"author":{"gitId":"yeoshuheng"},"content":" String invalidName \u003d \"\";","lastModifiedDate":"2024-03-05"},{"lineNumber":19,"author":{"gitId":"yeoshuheng"},"content":" assertThrows(IllegalArgumentException.class, () -\u003e new Industry(invalidName));","lastModifiedDate":"2024-03-05"},{"lineNumber":20,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-03-05"},{"lineNumber":21,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":22,"author":{"gitId":"yeoshuheng"},"content":" @Test","lastModifiedDate":"2024-03-05"},{"lineNumber":23,"author":{"gitId":"yeoshuheng"},"content":" public void isValidIndustry() {","lastModifiedDate":"2024-03-05"},{"lineNumber":24,"author":{"gitId":"yeoshuheng"},"content":" assertThrows(NullPointerException.class, () -\u003e Industry.isValidIndustry(null));","lastModifiedDate":"2024-03-05"},{"lineNumber":25,"author":{"gitId":"yeoshuheng"},"content":" assertFalse(Industry.isValidIndustry(\"\")); // empty string","lastModifiedDate":"2024-03-05"},{"lineNumber":26,"author":{"gitId":"yeoshuheng"},"content":" assertFalse(Industry.isValidIndustry(\" \")); // spaces only","lastModifiedDate":"2024-03-05"},{"lineNumber":27,"author":{"gitId":"yeoshuheng"},"content":" assertFalse(Industry.isValidIndustry(\"^\")); // only non-alphanumeric characters","lastModifiedDate":"2024-03-05"},{"lineNumber":28,"author":{"gitId":"yeoshuheng"},"content":" assertFalse(Industry.isValidIndustry(\"finance*\")); // contains non-alphanumeric characters","lastModifiedDate":"2024-03-05"},{"lineNumber":29,"author":{"gitId":"yeoshuheng"},"content":" assertTrue(Industry.isValidIndustry(\"Finance\")); // alphabets only","lastModifiedDate":"2024-03-05"},{"lineNumber":30,"author":{"gitId":"yeoshuheng"},"content":" assertTrue(Industry.isValidIndustry(\"MANUFACTURING\")); // all capital","lastModifiedDate":"2024-03-05"},{"lineNumber":31,"author":{"gitId":"yeoshuheng"},"content":" assertTrue(Industry.isValidIndustry(\"web 3\")); // with numbers","lastModifiedDate":"2024-03-05"},{"lineNumber":32,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-03-05"},{"lineNumber":33,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":34,"author":{"gitId":"yeoshuheng"},"content":" @Test","lastModifiedDate":"2024-03-05"},{"lineNumber":35,"author":{"gitId":"yeoshuheng"},"content":" public void equals() {","lastModifiedDate":"2024-03-05"},{"lineNumber":36,"author":{"gitId":"yeoshuheng"},"content":" Industry industry \u003d new Industry(\"Valid Industry\");","lastModifiedDate":"2024-03-05"},{"lineNumber":37,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":38,"author":{"gitId":"yeoshuheng"},"content":" // same values -\u003e returns true","lastModifiedDate":"2024-03-05"},{"lineNumber":39,"author":{"gitId":"yeoshuheng"},"content":" assertTrue(industry.equals(new Industry(\"Valid Industry\")));","lastModifiedDate":"2024-03-05"},{"lineNumber":40,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":41,"author":{"gitId":"yeoshuheng"},"content":" // same object -\u003e returns true","lastModifiedDate":"2024-03-05"},{"lineNumber":42,"author":{"gitId":"yeoshuheng"},"content":" assertTrue(industry.equals(industry));","lastModifiedDate":"2024-03-05"},{"lineNumber":43,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":44,"author":{"gitId":"yeoshuheng"},"content":" // null -\u003e returns false","lastModifiedDate":"2024-03-05"},{"lineNumber":45,"author":{"gitId":"yeoshuheng"},"content":" assertFalse(industry.equals(null));","lastModifiedDate":"2024-03-05"},{"lineNumber":46,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":47,"author":{"gitId":"yeoshuheng"},"content":" // different types -\u003e returns false","lastModifiedDate":"2024-03-05"},{"lineNumber":48,"author":{"gitId":"yeoshuheng"},"content":" assertFalse(industry.equals(5.0f));","lastModifiedDate":"2024-03-05"},{"lineNumber":49,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":50,"author":{"gitId":"yeoshuheng"},"content":" // different values -\u003e returns false","lastModifiedDate":"2024-03-05"},{"lineNumber":51,"author":{"gitId":"yeoshuheng"},"content":" assertFalse(industry.equals(new Industry(\"Other Valid Industry\")));","lastModifiedDate":"2024-03-05"},{"lineNumber":52,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-03-05"},{"lineNumber":53,"author":{"gitId":"yeoshuheng"},"content":"}","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"yeoshuheng":53}},{"path":"src/test/java/seedu/address/model/person/PersonTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model.person;","lastModifiedDate":"2018-03-26"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-02-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2019-03-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2019-03-15"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB;","lastModifiedDate":"2018-04-19"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_BOB;","lastModifiedDate":"2018-04-19"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB;","lastModifiedDate":"2018-04-19"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB;","lastModifiedDate":"2018-04-19"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND;","lastModifiedDate":"2018-04-19"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-23"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.ALICE;","lastModifiedDate":"2018-04-19"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.BOB;","lastModifiedDate":"2018-04-19"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.testutil.PersonBuilder;","lastModifiedDate":"2018-03-26"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":19,"author":{"gitId":"-"},"content":"public class PersonTest {","lastModifiedDate":"2018-03-26"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":21,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-09-01"},{"lineNumber":22,"author":{"gitId":"-"},"content":" public void asObservableList_modifyList_throwsUnsupportedOperationException() {","lastModifiedDate":"2017-09-01"},{"lineNumber":23,"author":{"gitId":"-"},"content":" Person person \u003d new PersonBuilder().build();","lastModifiedDate":"2018-03-26"},{"lineNumber":24,"author":{"gitId":"-"},"content":" assertThrows(UnsupportedOperationException.class, () -\u003e person.getTags().remove(0));","lastModifiedDate":"2019-03-23"},{"lineNumber":25,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-09-01"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":27,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-04-19"},{"lineNumber":28,"author":{"gitId":"-"},"content":" public void isSamePerson() {","lastModifiedDate":"2018-04-19"},{"lineNumber":29,"author":{"gitId":"-"},"content":" // same object -\u003e returns true","lastModifiedDate":"2018-04-19"},{"lineNumber":30,"author":{"gitId":"-"},"content":" assertTrue(ALICE.isSamePerson(ALICE));","lastModifiedDate":"2018-04-19"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":32,"author":{"gitId":"-"},"content":" // null -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":33,"author":{"gitId":"-"},"content":" assertFalse(ALICE.isSamePerson(null));","lastModifiedDate":"2018-04-19"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":35,"author":{"gitId":"-"},"content":" // same name, all other attributes different -\u003e returns true","lastModifiedDate":"2020-12-18"},{"lineNumber":36,"author":{"gitId":"-"},"content":" Person editedAlice \u003d new PersonBuilder(ALICE).withPhone(VALID_PHONE_BOB).withEmail(VALID_EMAIL_BOB)","lastModifiedDate":"2020-12-18"},{"lineNumber":37,"author":{"gitId":"-"},"content":" .withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_HUSBAND).build();","lastModifiedDate":"2020-12-18"},{"lineNumber":38,"author":{"gitId":"-"},"content":" assertTrue(ALICE.isSamePerson(editedAlice));","lastModifiedDate":"2020-12-18"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":40,"author":{"gitId":"-"},"content":" // different name, all other attributes same -\u003e returns false","lastModifiedDate":"2020-12-18"},{"lineNumber":41,"author":{"gitId":"-"},"content":" editedAlice \u003d new PersonBuilder(ALICE).withName(VALID_NAME_BOB).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":42,"author":{"gitId":"-"},"content":" assertFalse(ALICE.isSamePerson(editedAlice));","lastModifiedDate":"2018-04-19"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":44,"author":{"gitId":"-"},"content":" // name differs in case, all other attributes same -\u003e returns false","lastModifiedDate":"2020-12-18"},{"lineNumber":45,"author":{"gitId":"-"},"content":" Person editedBob \u003d new PersonBuilder(BOB).withName(VALID_NAME_BOB.toLowerCase()).build();","lastModifiedDate":"2020-12-18"},{"lineNumber":46,"author":{"gitId":"-"},"content":" assertFalse(BOB.isSamePerson(editedBob));","lastModifiedDate":"2020-12-18"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":48,"author":{"gitId":"-"},"content":" // name has trailing spaces, all other attributes same -\u003e returns false","lastModifiedDate":"2020-12-18"},{"lineNumber":49,"author":{"gitId":"-"},"content":" String nameWithTrailingSpaces \u003d VALID_NAME_BOB + \" \";","lastModifiedDate":"2020-12-18"},{"lineNumber":50,"author":{"gitId":"-"},"content":" editedBob \u003d new PersonBuilder(BOB).withName(nameWithTrailingSpaces).build();","lastModifiedDate":"2020-12-18"},{"lineNumber":51,"author":{"gitId":"-"},"content":" assertFalse(BOB.isSamePerson(editedBob));","lastModifiedDate":"2020-12-18"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-04-19"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":54,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-04-19"},{"lineNumber":55,"author":{"gitId":"-"},"content":" public void equals() {","lastModifiedDate":"2018-04-19"},{"lineNumber":56,"author":{"gitId":"-"},"content":" // same values -\u003e returns true","lastModifiedDate":"2018-04-19"},{"lineNumber":57,"author":{"gitId":"-"},"content":" Person aliceCopy \u003d new PersonBuilder(ALICE).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":58,"author":{"gitId":"-"},"content":" assertTrue(ALICE.equals(aliceCopy));","lastModifiedDate":"2018-04-19"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":60,"author":{"gitId":"-"},"content":" // same object -\u003e returns true","lastModifiedDate":"2018-04-19"},{"lineNumber":61,"author":{"gitId":"-"},"content":" assertTrue(ALICE.equals(ALICE));","lastModifiedDate":"2018-04-19"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":63,"author":{"gitId":"-"},"content":" // null -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":64,"author":{"gitId":"-"},"content":" assertFalse(ALICE.equals(null));","lastModifiedDate":"2018-04-19"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":66,"author":{"gitId":"-"},"content":" // different type -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":67,"author":{"gitId":"-"},"content":" assertFalse(ALICE.equals(5));","lastModifiedDate":"2018-04-19"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":69,"author":{"gitId":"-"},"content":" // different person -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":70,"author":{"gitId":"-"},"content":" assertFalse(ALICE.equals(BOB));","lastModifiedDate":"2018-04-19"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":72,"author":{"gitId":"-"},"content":" // different name -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":73,"author":{"gitId":"-"},"content":" Person editedAlice \u003d new PersonBuilder(ALICE).withName(VALID_NAME_BOB).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":74,"author":{"gitId":"-"},"content":" assertFalse(ALICE.equals(editedAlice));","lastModifiedDate":"2018-04-19"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":76,"author":{"gitId":"-"},"content":" // different phone -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":77,"author":{"gitId":"-"},"content":" editedAlice \u003d new PersonBuilder(ALICE).withPhone(VALID_PHONE_BOB).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":78,"author":{"gitId":"-"},"content":" assertFalse(ALICE.equals(editedAlice));","lastModifiedDate":"2018-04-19"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":80,"author":{"gitId":"-"},"content":" // different email -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":81,"author":{"gitId":"-"},"content":" editedAlice \u003d new PersonBuilder(ALICE).withEmail(VALID_EMAIL_BOB).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":82,"author":{"gitId":"-"},"content":" assertFalse(ALICE.equals(editedAlice));","lastModifiedDate":"2018-04-19"},{"lineNumber":83,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":84,"author":{"gitId":"-"},"content":" // different address -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":85,"author":{"gitId":"-"},"content":" editedAlice \u003d new PersonBuilder(ALICE).withAddress(VALID_ADDRESS_BOB).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":86,"author":{"gitId":"-"},"content":" assertFalse(ALICE.equals(editedAlice));","lastModifiedDate":"2018-04-19"},{"lineNumber":87,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-18"},{"lineNumber":88,"author":{"gitId":"-"},"content":" // different tags -\u003e returns false","lastModifiedDate":"2018-04-18"},{"lineNumber":89,"author":{"gitId":"-"},"content":" editedAlice \u003d new PersonBuilder(ALICE).withTags(VALID_TAG_HUSBAND).build();","lastModifiedDate":"2018-04-18"},{"lineNumber":90,"author":{"gitId":"-"},"content":" assertFalse(ALICE.equals(editedAlice));","lastModifiedDate":"2018-04-18"},{"lineNumber":91,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-04-19"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":93,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2019-02-23"},{"lineNumber":94,"author":{"gitId":"-"},"content":" public void toStringMethod() {","lastModifiedDate":"2019-02-23"},{"lineNumber":95,"author":{"gitId":"yeoshuheng"},"content":" String expected \u003d Person.class.getCanonicalName() + \"{name\u003d\" + ALICE.getName()","lastModifiedDate":"2024-02-25"},{"lineNumber":96,"author":{"gitId":"yeoshuheng"},"content":" + \", industry\u003d\" + ALICE.getIndustry() + \", funding stage\u003d\" + ALICE.getFundingStage()","lastModifiedDate":"2024-02-25"},{"lineNumber":97,"author":{"gitId":"yeoshuheng"},"content":" + \", phone\u003d\" + ALICE.getPhone()","lastModifiedDate":"2024-02-25"},{"lineNumber":98,"author":{"gitId":"yeoshuheng"},"content":" + \", email\u003d\" + ALICE.getEmail() + \", address\u003d\" + ALICE.getAddress() + \", tags\u003d\"","lastModifiedDate":"2024-02-25"},{"lineNumber":99,"author":{"gitId":"yeoshuheng"},"content":" + ALICE.getTags() + \"}\";","lastModifiedDate":"2024-02-25"},{"lineNumber":100,"author":{"gitId":"-"},"content":" assertEquals(expected, ALICE.toString());","lastModifiedDate":"2019-02-23"},{"lineNumber":101,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":102,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-09-01"}],"authorContributionMap":{"-":97,"yeoshuheng":5}},{"path":"src/test/java/seedu/address/storage/JsonAdaptedPersonTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.storage;","lastModifiedDate":"2018-08-13"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-03-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.storage.JsonAdaptedPerson.MISSING_FIELD_MESSAGE_FORMAT;","lastModifiedDate":"2018-08-13"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-14"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.BENSON;","lastModifiedDate":"2018-08-13"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.ArrayList;","lastModifiedDate":"2018-08-13"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2018-08-13"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2018-08-13"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.commons.exceptions.IllegalValueException;","lastModifiedDate":"2018-08-13"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2018-08-13"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2018-08-13"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2018-08-13"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2018-08-13"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":20,"author":{"gitId":"-"},"content":"public class JsonAdaptedPersonTest {","lastModifiedDate":"2018-08-13"},{"lineNumber":21,"author":{"gitId":"-"},"content":" private static final String INVALID_NAME \u003d \"R@chel\";","lastModifiedDate":"2018-08-13"},{"lineNumber":22,"author":{"gitId":"-"},"content":" private static final String INVALID_PHONE \u003d \"+651234\";","lastModifiedDate":"2018-08-13"},{"lineNumber":23,"author":{"gitId":"-"},"content":" private static final String INVALID_ADDRESS \u003d \" \";","lastModifiedDate":"2018-08-13"},{"lineNumber":24,"author":{"gitId":"-"},"content":" private static final String INVALID_EMAIL \u003d \"example.com\";","lastModifiedDate":"2018-08-13"},{"lineNumber":25,"author":{"gitId":"-"},"content":" private static final String INVALID_TAG \u003d \"#friend\";","lastModifiedDate":"2018-08-13"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":27,"author":{"gitId":"yeoshuheng"},"content":" private static final String INVALID_FUNDING \u003d \"D\";","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"yeoshuheng"},"content":" private static final String INVALID_INDUSTRY \u003d \" \";","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" private static final String VALID_NAME \u003d BENSON.getName().toString();","lastModifiedDate":"2018-08-13"},{"lineNumber":32,"author":{"gitId":"-"},"content":" private static final String VALID_PHONE \u003d BENSON.getPhone().toString();","lastModifiedDate":"2018-08-13"},{"lineNumber":33,"author":{"gitId":"-"},"content":" private static final String VALID_EMAIL \u003d BENSON.getEmail().toString();","lastModifiedDate":"2018-08-13"},{"lineNumber":34,"author":{"gitId":"-"},"content":" private static final String VALID_ADDRESS \u003d BENSON.getAddress().toString();","lastModifiedDate":"2018-08-13"},{"lineNumber":35,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":36,"author":{"gitId":"yeoshuheng"},"content":" private static final String VALID_FUNDING \u003d BENSON.getFundingStage().toString();","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"yeoshuheng"},"content":" private static final String VALID_INDUSTRY \u003d BENSON.getIndustry().toString();","lastModifiedDate":"2024-02-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" private static final List\u003cJsonAdaptedTag\u003e VALID_TAGS \u003d BENSON.getTags().stream()","lastModifiedDate":"2018-08-13"},{"lineNumber":40,"author":{"gitId":"-"},"content":" .map(JsonAdaptedTag::new)","lastModifiedDate":"2018-08-13"},{"lineNumber":41,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2018-08-13"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":43,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":44,"author":{"gitId":"-"},"content":" public void toModelType_validPersonDetails_returnsPerson() throws Exception {","lastModifiedDate":"2018-08-13"},{"lineNumber":45,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d new JsonAdaptedPerson(BENSON);","lastModifiedDate":"2018-08-13"},{"lineNumber":46,"author":{"gitId":"-"},"content":" assertEquals(BENSON, person.toModelType());","lastModifiedDate":"2018-08-13"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":49,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":50,"author":{"gitId":"-"},"content":" public void toModelType_invalidName_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":51,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2018-08-13"},{"lineNumber":52,"author":{"gitId":"yeoshuheng"},"content":" new JsonAdaptedPerson(INVALID_NAME, VALID_INDUSTRY, VALID_FUNDING,","lastModifiedDate":"2024-02-25"},{"lineNumber":53,"author":{"gitId":"yeoshuheng"},"content":" VALID_PHONE, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS);","lastModifiedDate":"2024-02-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" String expectedMessage \u003d Name.MESSAGE_CONSTRAINTS;","lastModifiedDate":"2018-08-13"},{"lineNumber":55,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":56,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":58,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":59,"author":{"gitId":"-"},"content":" public void toModelType_nullName_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":60,"author":{"gitId":"yeoshuheng"},"content":" JsonAdaptedPerson person \u003d new JsonAdaptedPerson(null, VALID_INDUSTRY, VALID_FUNDING,","lastModifiedDate":"2024-02-25"},{"lineNumber":61,"author":{"gitId":"yeoshuheng"},"content":" VALID_PHONE, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS);","lastModifiedDate":"2024-02-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(MISSING_FIELD_MESSAGE_FORMAT, Name.class.getSimpleName());","lastModifiedDate":"2018-08-13"},{"lineNumber":63,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":64,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":66,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":67,"author":{"gitId":"-"},"content":" public void toModelType_invalidPhone_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":68,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2018-08-13"},{"lineNumber":69,"author":{"gitId":"yeoshuheng"},"content":" new JsonAdaptedPerson(VALID_NAME, VALID_INDUSTRY, VALID_FUNDING,","lastModifiedDate":"2024-02-25"},{"lineNumber":70,"author":{"gitId":"yeoshuheng"},"content":" INVALID_PHONE, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS);","lastModifiedDate":"2024-02-25"},{"lineNumber":71,"author":{"gitId":"-"},"content":" String expectedMessage \u003d Phone.MESSAGE_CONSTRAINTS;","lastModifiedDate":"2018-08-13"},{"lineNumber":72,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":75,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":76,"author":{"gitId":"-"},"content":" public void toModelType_nullPhone_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":77,"author":{"gitId":"yeoshuheng"},"content":" JsonAdaptedPerson person \u003d new JsonAdaptedPerson(VALID_NAME, VALID_INDUSTRY, VALID_FUNDING,","lastModifiedDate":"2024-02-25"},{"lineNumber":78,"author":{"gitId":"yeoshuheng"},"content":" null, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS);","lastModifiedDate":"2024-02-25"},{"lineNumber":79,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(MISSING_FIELD_MESSAGE_FORMAT, Phone.class.getSimpleName());","lastModifiedDate":"2018-08-13"},{"lineNumber":80,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":82,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":83,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":84,"author":{"gitId":"-"},"content":" public void toModelType_invalidEmail_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":85,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2018-08-13"},{"lineNumber":86,"author":{"gitId":"yeoshuheng"},"content":" new JsonAdaptedPerson(VALID_NAME, VALID_INDUSTRY, VALID_FUNDING,","lastModifiedDate":"2024-02-25"},{"lineNumber":87,"author":{"gitId":"yeoshuheng"},"content":" VALID_PHONE, INVALID_EMAIL, VALID_ADDRESS, VALID_TAGS);","lastModifiedDate":"2024-02-25"},{"lineNumber":88,"author":{"gitId":"-"},"content":" String expectedMessage \u003d Email.MESSAGE_CONSTRAINTS;","lastModifiedDate":"2018-08-13"},{"lineNumber":89,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":90,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":91,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":92,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":93,"author":{"gitId":"-"},"content":" public void toModelType_nullEmail_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":94,"author":{"gitId":"yeoshuheng"},"content":" JsonAdaptedPerson person \u003d new JsonAdaptedPerson(VALID_NAME, VALID_INDUSTRY, VALID_FUNDING,","lastModifiedDate":"2024-02-25"},{"lineNumber":95,"author":{"gitId":"yeoshuheng"},"content":" VALID_PHONE, null, VALID_ADDRESS, VALID_TAGS);","lastModifiedDate":"2024-02-25"},{"lineNumber":96,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(MISSING_FIELD_MESSAGE_FORMAT, Email.class.getSimpleName());","lastModifiedDate":"2018-08-13"},{"lineNumber":97,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":99,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":100,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":101,"author":{"gitId":"-"},"content":" public void toModelType_invalidAddress_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":102,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2018-08-13"},{"lineNumber":103,"author":{"gitId":"yeoshuheng"},"content":" new JsonAdaptedPerson(VALID_NAME, VALID_INDUSTRY, VALID_FUNDING,","lastModifiedDate":"2024-02-25"},{"lineNumber":104,"author":{"gitId":"yeoshuheng"},"content":" VALID_PHONE, VALID_EMAIL, INVALID_ADDRESS, VALID_TAGS);","lastModifiedDate":"2024-02-25"},{"lineNumber":105,"author":{"gitId":"-"},"content":" String expectedMessage \u003d Address.MESSAGE_CONSTRAINTS;","lastModifiedDate":"2018-08-13"},{"lineNumber":106,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":108,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":109,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":110,"author":{"gitId":"-"},"content":" public void toModelType_nullAddress_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":111,"author":{"gitId":"yeoshuheng"},"content":" JsonAdaptedPerson person \u003d new JsonAdaptedPerson(VALID_NAME, VALID_INDUSTRY, VALID_FUNDING,","lastModifiedDate":"2024-02-25"},{"lineNumber":112,"author":{"gitId":"yeoshuheng"},"content":" VALID_PHONE, VALID_EMAIL, null, VALID_TAGS);","lastModifiedDate":"2024-02-25"},{"lineNumber":113,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(MISSING_FIELD_MESSAGE_FORMAT, Address.class.getSimpleName());","lastModifiedDate":"2018-08-13"},{"lineNumber":114,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":116,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":117,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":118,"author":{"gitId":"-"},"content":" public void toModelType_invalidTags_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":119,"author":{"gitId":"-"},"content":" List\u003cJsonAdaptedTag\u003e invalidTags \u003d new ArrayList\u003c\u003e(VALID_TAGS);","lastModifiedDate":"2018-08-13"},{"lineNumber":120,"author":{"gitId":"-"},"content":" invalidTags.add(new JsonAdaptedTag(INVALID_TAG));","lastModifiedDate":"2018-08-13"},{"lineNumber":121,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2018-08-13"},{"lineNumber":122,"author":{"gitId":"yeoshuheng"},"content":" new JsonAdaptedPerson(VALID_NAME, VALID_INDUSTRY, VALID_FUNDING,","lastModifiedDate":"2024-02-25"},{"lineNumber":123,"author":{"gitId":"yeoshuheng"},"content":" VALID_PHONE, VALID_EMAIL, VALID_ADDRESS, invalidTags);","lastModifiedDate":"2024-02-25"},{"lineNumber":124,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":125,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":126,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":127,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2018-08-13"}],"authorContributionMap":{"-":101,"yeoshuheng":26}},{"path":"src/test/java/seedu/address/testutil/EditPersonDescriptorBuilder.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.testutil;","lastModifiedDate":"2017-05-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-12-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2017-12-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.stream.Stream;","lastModifiedDate":"2017-12-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand.EditPersonDescriptor;","lastModifiedDate":"2017-05-05"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.model.person.FundingStage;","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.model.person.Industry;","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-12-23"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-05-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * A utility class to help with building EditPersonDescriptor objects.","lastModifiedDate":"2017-05-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":"public class EditPersonDescriptorBuilder {","lastModifiedDate":"2017-05-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":" private EditPersonDescriptor descriptor;","lastModifiedDate":"2017-05-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":" public EditPersonDescriptorBuilder() {","lastModifiedDate":"2017-05-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":" descriptor \u003d new EditPersonDescriptor();","lastModifiedDate":"2017-05-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":28,"author":{"gitId":"-"},"content":" public EditPersonDescriptorBuilder(EditPersonDescriptor descriptor) {","lastModifiedDate":"2017-05-05"},{"lineNumber":29,"author":{"gitId":"-"},"content":" this.descriptor \u003d new EditPersonDescriptor(descriptor);","lastModifiedDate":"2017-05-05"},{"lineNumber":30,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-06-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * Returns an {@code EditPersonDescriptor} with fields containing {@code person}\u0027s details","lastModifiedDate":"2017-06-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-06-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":" public EditPersonDescriptorBuilder(Person person) {","lastModifiedDate":"2018-01-10"},{"lineNumber":36,"author":{"gitId":"-"},"content":" descriptor \u003d new EditPersonDescriptor();","lastModifiedDate":"2017-06-05"},{"lineNumber":37,"author":{"gitId":"-"},"content":" descriptor.setName(person.getName());","lastModifiedDate":"2017-06-21"},{"lineNumber":38,"author":{"gitId":"yeoshuheng"},"content":" descriptor.setIndustry(person.getIndustry());","lastModifiedDate":"2024-02-25"},{"lineNumber":39,"author":{"gitId":"yeoshuheng"},"content":" descriptor.setFundingStage(person.getFundingStage());","lastModifiedDate":"2024-02-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" descriptor.setPhone(person.getPhone());","lastModifiedDate":"2017-06-21"},{"lineNumber":41,"author":{"gitId":"-"},"content":" descriptor.setEmail(person.getEmail());","lastModifiedDate":"2017-06-21"},{"lineNumber":42,"author":{"gitId":"-"},"content":" descriptor.setAddress(person.getAddress());","lastModifiedDate":"2017-06-21"},{"lineNumber":43,"author":{"gitId":"-"},"content":" descriptor.setTags(person.getTags());","lastModifiedDate":"2017-06-21"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-05"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":46,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":47,"author":{"gitId":"-"},"content":" * Sets the {@code Name} of the {@code EditPersonDescriptor} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":48,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":49,"author":{"gitId":"-"},"content":" public EditPersonDescriptorBuilder withName(String name) {","lastModifiedDate":"2017-08-15"},{"lineNumber":50,"author":{"gitId":"-"},"content":" descriptor.setName(new Name(name));","lastModifiedDate":"2017-12-23"},{"lineNumber":51,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2017-05-05"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":54,"author":{"gitId":"yeoshuheng"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":55,"author":{"gitId":"yeoshuheng"},"content":" * Sets the {@code FundingStage} of the {@code EditPersonDescriptor} that we are building.","lastModifiedDate":"2024-02-25"},{"lineNumber":56,"author":{"gitId":"yeoshuheng"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":57,"author":{"gitId":"yeoshuheng"},"content":" public EditPersonDescriptorBuilder withFundingStage(String fundingLevel) {","lastModifiedDate":"2024-02-25"},{"lineNumber":58,"author":{"gitId":"yeoshuheng"},"content":" descriptor.setFundingStage(new FundingStage(fundingLevel));","lastModifiedDate":"2024-02-25"},{"lineNumber":59,"author":{"gitId":"yeoshuheng"},"content":" return this;","lastModifiedDate":"2024-02-25"},{"lineNumber":60,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":61,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":62,"author":{"gitId":"yeoshuheng"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":63,"author":{"gitId":"yeoshuheng"},"content":" * Sets the {@code Industry} of the {@code EditPersonDescriptor} that we are building.","lastModifiedDate":"2024-02-25"},{"lineNumber":64,"author":{"gitId":"yeoshuheng"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":65,"author":{"gitId":"yeoshuheng"},"content":" public EditPersonDescriptorBuilder withIndustry(String industry) {","lastModifiedDate":"2024-02-25"},{"lineNumber":66,"author":{"gitId":"yeoshuheng"},"content":" descriptor.setIndustry(new Industry(industry));","lastModifiedDate":"2024-02-25"},{"lineNumber":67,"author":{"gitId":"yeoshuheng"},"content":" return this;","lastModifiedDate":"2024-02-25"},{"lineNumber":68,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":69,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":70,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":71,"author":{"gitId":"-"},"content":" * Sets the {@code Phone} of the {@code EditPersonDescriptor} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":72,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":73,"author":{"gitId":"-"},"content":" public EditPersonDescriptorBuilder withPhone(String phone) {","lastModifiedDate":"2017-08-15"},{"lineNumber":74,"author":{"gitId":"-"},"content":" descriptor.setPhone(new Phone(phone));","lastModifiedDate":"2017-12-23"},{"lineNumber":75,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2017-05-05"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":78,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":79,"author":{"gitId":"-"},"content":" * Sets the {@code Email} of the {@code EditPersonDescriptor} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":80,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":81,"author":{"gitId":"-"},"content":" public EditPersonDescriptorBuilder withEmail(String email) {","lastModifiedDate":"2017-08-15"},{"lineNumber":82,"author":{"gitId":"-"},"content":" descriptor.setEmail(new Email(email));","lastModifiedDate":"2017-12-23"},{"lineNumber":83,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2017-05-05"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":85,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":86,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":87,"author":{"gitId":"-"},"content":" * Sets the {@code Address} of the {@code EditPersonDescriptor} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":88,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":89,"author":{"gitId":"-"},"content":" public EditPersonDescriptorBuilder withAddress(String address) {","lastModifiedDate":"2017-08-15"},{"lineNumber":90,"author":{"gitId":"-"},"content":" descriptor.setAddress(new Address(address));","lastModifiedDate":"2017-12-23"},{"lineNumber":91,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2017-05-05"},{"lineNumber":92,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":93,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":94,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":95,"author":{"gitId":"-"},"content":" * Parses the {@code tags} into a {@code Set\u003cTag\u003e} and set it to the {@code EditPersonDescriptor}","lastModifiedDate":"2017-07-26"},{"lineNumber":96,"author":{"gitId":"-"},"content":" * that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":97,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":98,"author":{"gitId":"-"},"content":" public EditPersonDescriptorBuilder withTags(String... tags) {","lastModifiedDate":"2017-08-15"},{"lineNumber":99,"author":{"gitId":"-"},"content":" Set\u003cTag\u003e tagSet \u003d Stream.of(tags).map(Tag::new).collect(Collectors.toSet());","lastModifiedDate":"2017-12-23"},{"lineNumber":100,"author":{"gitId":"-"},"content":" descriptor.setTags(tagSet);","lastModifiedDate":"2017-12-23"},{"lineNumber":101,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2017-05-05"},{"lineNumber":102,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":104,"author":{"gitId":"-"},"content":" public EditPersonDescriptor build() {","lastModifiedDate":"2017-05-05"},{"lineNumber":105,"author":{"gitId":"-"},"content":" return descriptor;","lastModifiedDate":"2017-05-05"},{"lineNumber":106,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":107,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-05-05"}],"authorContributionMap":{"-":87,"yeoshuheng":20}},{"path":"src/test/java/seedu/address/testutil/PersonBuilder.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.testutil;","lastModifiedDate":"2016-09-03"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.HashSet;","lastModifiedDate":"2017-12-20"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-04-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2024-02-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.model.person.FundingStage;","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.model.person.Industry;","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-04-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.model.util.SampleDataUtil;","lastModifiedDate":"2017-04-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":16,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-09-03"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * A utility class to help with building Person objects.","lastModifiedDate":"2017-04-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-09-03"},{"lineNumber":19,"author":{"gitId":"-"},"content":"public class PersonBuilder {","lastModifiedDate":"2016-09-03"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":21,"author":{"gitId":"-"},"content":" public static final String DEFAULT_NAME \u003d \"Amy Bee\";","lastModifiedDate":"2020-12-18"},{"lineNumber":22,"author":{"gitId":"-"},"content":" public static final String DEFAULT_PHONE \u003d \"85355255\";","lastModifiedDate":"2017-04-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":" public static final String DEFAULT_EMAIL \u003d \"amy@gmail.com\";","lastModifiedDate":"2020-12-18"},{"lineNumber":24,"author":{"gitId":"-"},"content":" public static final String DEFAULT_ADDRESS \u003d \"123, Jurong West Ave 6, #08-111\";","lastModifiedDate":"2017-04-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-05"},{"lineNumber":26,"author":{"gitId":"yeoshuheng"},"content":" public static final String DEFAULT_INDUSTRY \u003d \"finance\";","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"yeoshuheng"},"content":" public static final String DEFAULT_FUNDING \u003d \"A\";","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" private Name name;","lastModifiedDate":"2017-12-20"},{"lineNumber":31,"author":{"gitId":"-"},"content":" private Phone phone;","lastModifiedDate":"2017-12-20"},{"lineNumber":32,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"yeoshuheng"},"content":" private Industry industry;","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":35,"author":{"gitId":"yeoshuheng"},"content":" private FundingStage fundingStage;","lastModifiedDate":"2024-02-25"},{"lineNumber":36,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" private Email email;","lastModifiedDate":"2017-12-20"},{"lineNumber":38,"author":{"gitId":"-"},"content":" private Address address;","lastModifiedDate":"2017-12-20"},{"lineNumber":39,"author":{"gitId":"-"},"content":" private Set\u003cTag\u003e tags;","lastModifiedDate":"2017-12-20"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":41,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2020-05-27"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * Creates a {@code PersonBuilder} with the default details.","lastModifiedDate":"2020-05-27"},{"lineNumber":43,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2020-05-27"},{"lineNumber":44,"author":{"gitId":"-"},"content":" public PersonBuilder() {","lastModifiedDate":"2017-08-15"},{"lineNumber":45,"author":{"gitId":"-"},"content":" name \u003d new Name(DEFAULT_NAME);","lastModifiedDate":"2017-12-20"},{"lineNumber":46,"author":{"gitId":"yeoshuheng"},"content":" industry \u003d new Industry(DEFAULT_INDUSTRY);","lastModifiedDate":"2024-02-25"},{"lineNumber":47,"author":{"gitId":"yeoshuheng"},"content":" fundingStage \u003d new FundingStage(DEFAULT_FUNDING);","lastModifiedDate":"2024-02-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" phone \u003d new Phone(DEFAULT_PHONE);","lastModifiedDate":"2017-12-20"},{"lineNumber":49,"author":{"gitId":"-"},"content":" email \u003d new Email(DEFAULT_EMAIL);","lastModifiedDate":"2017-12-20"},{"lineNumber":50,"author":{"gitId":"-"},"content":" address \u003d new Address(DEFAULT_ADDRESS);","lastModifiedDate":"2017-12-20"},{"lineNumber":51,"author":{"gitId":"-"},"content":" tags \u003d new HashSet\u003c\u003e();","lastModifiedDate":"2018-03-26"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":54,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-12-11"},{"lineNumber":55,"author":{"gitId":"-"},"content":" * Initializes the PersonBuilder with the data of {@code personToCopy}.","lastModifiedDate":"2016-12-11"},{"lineNumber":56,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-11"},{"lineNumber":57,"author":{"gitId":"-"},"content":" public PersonBuilder(Person personToCopy) {","lastModifiedDate":"2018-01-10"},{"lineNumber":58,"author":{"gitId":"-"},"content":" name \u003d personToCopy.getName();","lastModifiedDate":"2017-12-20"},{"lineNumber":59,"author":{"gitId":"yeoshuheng"},"content":" industry \u003d personToCopy.getIndustry();","lastModifiedDate":"2024-02-25"},{"lineNumber":60,"author":{"gitId":"yeoshuheng"},"content":" fundingStage \u003d personToCopy.getFundingStage();","lastModifiedDate":"2024-02-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" phone \u003d personToCopy.getPhone();","lastModifiedDate":"2017-12-20"},{"lineNumber":62,"author":{"gitId":"-"},"content":" email \u003d personToCopy.getEmail();","lastModifiedDate":"2017-12-20"},{"lineNumber":63,"author":{"gitId":"-"},"content":" address \u003d personToCopy.getAddress();","lastModifiedDate":"2017-12-20"},{"lineNumber":64,"author":{"gitId":"-"},"content":" tags \u003d new HashSet\u003c\u003e(personToCopy.getTags());","lastModifiedDate":"2017-12-20"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-11"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-11"},{"lineNumber":67,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":68,"author":{"gitId":"-"},"content":" * Sets the {@code Name} of the {@code Person} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":69,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":70,"author":{"gitId":"-"},"content":" public PersonBuilder withName(String name) {","lastModifiedDate":"2017-08-15"},{"lineNumber":71,"author":{"gitId":"-"},"content":" this.name \u003d new Name(name);","lastModifiedDate":"2017-12-20"},{"lineNumber":72,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2016-09-03"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":75,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":76,"author":{"gitId":"-"},"content":" * Parses the {@code tags} into a {@code Set\u003cTag\u003e} and set it to the {@code Person} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":77,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":78,"author":{"gitId":"-"},"content":" public PersonBuilder withTags(String ... tags) {","lastModifiedDate":"2017-08-15"},{"lineNumber":79,"author":{"gitId":"-"},"content":" this.tags \u003d SampleDataUtil.getTagSet(tags);","lastModifiedDate":"2017-12-20"},{"lineNumber":80,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2016-09-03"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":82,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":83,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":84,"author":{"gitId":"-"},"content":" * Sets the {@code Address} of the {@code Person} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":85,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":86,"author":{"gitId":"-"},"content":" public PersonBuilder withAddress(String address) {","lastModifiedDate":"2017-08-15"},{"lineNumber":87,"author":{"gitId":"-"},"content":" this.address \u003d new Address(address);","lastModifiedDate":"2017-12-20"},{"lineNumber":88,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2016-09-03"},{"lineNumber":89,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":91,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":92,"author":{"gitId":"-"},"content":" * Sets the {@code Phone} of the {@code Person} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":93,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":94,"author":{"gitId":"-"},"content":" public PersonBuilder withPhone(String phone) {","lastModifiedDate":"2017-08-15"},{"lineNumber":95,"author":{"gitId":"-"},"content":" this.phone \u003d new Phone(phone);","lastModifiedDate":"2017-12-20"},{"lineNumber":96,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2016-09-03"},{"lineNumber":97,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":98,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":99,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":100,"author":{"gitId":"-"},"content":" * Sets the {@code Email} of the {@code Person} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":101,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":102,"author":{"gitId":"-"},"content":" public PersonBuilder withEmail(String email) {","lastModifiedDate":"2017-08-15"},{"lineNumber":103,"author":{"gitId":"-"},"content":" this.email \u003d new Email(email);","lastModifiedDate":"2017-12-20"},{"lineNumber":104,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2016-09-03"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":106,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":107,"author":{"gitId":"yeoshuheng"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":108,"author":{"gitId":"yeoshuheng"},"content":" * Sets the {@code fundingStage} of the {@code Person} that we are building.","lastModifiedDate":"2024-02-25"},{"lineNumber":109,"author":{"gitId":"yeoshuheng"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":110,"author":{"gitId":"yeoshuheng"},"content":" public PersonBuilder withFundingStage(String fundingLevel) {","lastModifiedDate":"2024-02-25"},{"lineNumber":111,"author":{"gitId":"yeoshuheng"},"content":" this.fundingStage \u003d new FundingStage(fundingLevel);","lastModifiedDate":"2024-02-25"},{"lineNumber":112,"author":{"gitId":"yeoshuheng"},"content":" return this;","lastModifiedDate":"2024-02-25"},{"lineNumber":113,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":114,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":115,"author":{"gitId":"yeoshuheng"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":116,"author":{"gitId":"yeoshuheng"},"content":" * Sets the {@code industry} of the {@code Person} that we are building.","lastModifiedDate":"2024-02-25"},{"lineNumber":117,"author":{"gitId":"yeoshuheng"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":118,"author":{"gitId":"yeoshuheng"},"content":" public PersonBuilder withIndustry(String industry) {","lastModifiedDate":"2024-02-25"},{"lineNumber":119,"author":{"gitId":"yeoshuheng"},"content":" this.industry \u003d new Industry(industry);","lastModifiedDate":"2024-02-25"},{"lineNumber":120,"author":{"gitId":"yeoshuheng"},"content":" return this;","lastModifiedDate":"2024-02-25"},{"lineNumber":121,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":122,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":123,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":124,"author":{"gitId":"-"},"content":" public Person build() {","lastModifiedDate":"2017-04-05"},{"lineNumber":125,"author":{"gitId":"yeoshuheng"},"content":" return new Person(name, fundingStage, industry, phone, email, address, tags);","lastModifiedDate":"2024-02-25"},{"lineNumber":126,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":127,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":128,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-09-03"}],"authorContributionMap":{"-":95,"yeoshuheng":33}},{"path":"src/test/java/seedu/address/testutil/PersonUtil.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.testutil;","lastModifiedDate":"2017-04-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2024-02-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2024-02-25"},{"lineNumber":5,"author":{"gitId":"yeoshuheng"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_FUNDING_STAGE;","lastModifiedDate":"2024-02-25"},{"lineNumber":6,"author":{"gitId":"yeoshuheng"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INDUSTRY;","lastModifiedDate":"2024-02-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2018-03-26"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-03-26"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.AddCommand;","lastModifiedDate":"2017-03-29"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand.EditPersonDescriptor;","lastModifiedDate":"2018-03-26"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-01-10"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2018-03-26"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-04-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * A utility class for Person.","lastModifiedDate":"2017-04-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-04-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":"public class PersonUtil {","lastModifiedDate":"2017-04-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-04-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * Returns an add command string for adding the {@code person}.","lastModifiedDate":"2017-04-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-04-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":" public static String getAddCommand(Person person) {","lastModifiedDate":"2018-01-10"},{"lineNumber":27,"author":{"gitId":"-"},"content":" return AddCommand.COMMAND_WORD + \" \" + getPersonDetails(person);","lastModifiedDate":"2017-03-29"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-04-06"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-06"},{"lineNumber":30,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-04-06"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * Returns the part of command string for the given {@code person}\u0027s details.","lastModifiedDate":"2017-04-06"},{"lineNumber":32,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-04-06"},{"lineNumber":33,"author":{"gitId":"-"},"content":" public static String getPersonDetails(Person person) {","lastModifiedDate":"2018-01-10"},{"lineNumber":34,"author":{"gitId":"-"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2017-04-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":" sb.append(PREFIX_NAME + person.getName().fullName + \" \");","lastModifiedDate":"2017-06-06"},{"lineNumber":36,"author":{"gitId":"yeoshuheng"},"content":" sb.append(PREFIX_FUNDING_STAGE + person.getFundingStage().value + \" \");","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"yeoshuheng"},"content":" sb.append(PREFIX_INDUSTRY + person.getIndustry().value + \" \");","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" sb.append(PREFIX_PHONE + person.getPhone().value + \" \");","lastModifiedDate":"2017-05-09"},{"lineNumber":39,"author":{"gitId":"-"},"content":" sb.append(PREFIX_EMAIL + person.getEmail().value + \" \");","lastModifiedDate":"2017-05-09"},{"lineNumber":40,"author":{"gitId":"-"},"content":" sb.append(PREFIX_ADDRESS + person.getAddress().value + \" \");","lastModifiedDate":"2017-05-09"},{"lineNumber":41,"author":{"gitId":"-"},"content":" person.getTags().stream().forEach(","lastModifiedDate":"2017-05-09"},{"lineNumber":42,"author":{"gitId":"-"},"content":" s -\u003e sb.append(PREFIX_TAG + s.tagName + \" \")","lastModifiedDate":"2017-05-09"},{"lineNumber":43,"author":{"gitId":"-"},"content":" );","lastModifiedDate":"2017-05-09"},{"lineNumber":44,"author":{"gitId":"-"},"content":" return sb.toString();","lastModifiedDate":"2017-04-05"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-04-05"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-03-26"},{"lineNumber":47,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-03-26"},{"lineNumber":48,"author":{"gitId":"-"},"content":" * Returns the part of command string for the given {@code EditPersonDescriptor}\u0027s details.","lastModifiedDate":"2018-03-26"},{"lineNumber":49,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-03-26"},{"lineNumber":50,"author":{"gitId":"-"},"content":" public static String getEditPersonDescriptorDetails(EditPersonDescriptor descriptor) {","lastModifiedDate":"2018-03-26"},{"lineNumber":51,"author":{"gitId":"-"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2018-03-26"},{"lineNumber":52,"author":{"gitId":"-"},"content":" descriptor.getName().ifPresent(name -\u003e sb.append(PREFIX_NAME).append(name.fullName).append(\" \"));","lastModifiedDate":"2018-03-26"},{"lineNumber":53,"author":{"gitId":"yeoshuheng"},"content":" descriptor.getIndustry().ifPresent(industry -\u003e sb.append(PREFIX_INDUSTRY).append(industry.value).append(\" \"));","lastModifiedDate":"2024-02-25"},{"lineNumber":54,"author":{"gitId":"yeoshuheng"},"content":" descriptor.getFundingStage().ifPresent(fundingStage -\u003e","lastModifiedDate":"2024-02-25"},{"lineNumber":55,"author":{"gitId":"yeoshuheng"},"content":" sb.append(PREFIX_FUNDING_STAGE).append(fundingStage.value).append(\" \"));","lastModifiedDate":"2024-02-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" descriptor.getPhone().ifPresent(phone -\u003e sb.append(PREFIX_PHONE).append(phone.value).append(\" \"));","lastModifiedDate":"2018-03-26"},{"lineNumber":57,"author":{"gitId":"-"},"content":" descriptor.getEmail().ifPresent(email -\u003e sb.append(PREFIX_EMAIL).append(email.value).append(\" \"));","lastModifiedDate":"2018-03-26"},{"lineNumber":58,"author":{"gitId":"-"},"content":" descriptor.getAddress().ifPresent(address -\u003e sb.append(PREFIX_ADDRESS).append(address.value).append(\" \"));","lastModifiedDate":"2018-03-26"},{"lineNumber":59,"author":{"gitId":"-"},"content":" if (descriptor.getTags().isPresent()) {","lastModifiedDate":"2018-03-26"},{"lineNumber":60,"author":{"gitId":"-"},"content":" Set\u003cTag\u003e tags \u003d descriptor.getTags().get();","lastModifiedDate":"2018-03-26"},{"lineNumber":61,"author":{"gitId":"-"},"content":" if (tags.isEmpty()) {","lastModifiedDate":"2018-03-26"},{"lineNumber":62,"author":{"gitId":"-"},"content":" sb.append(PREFIX_TAG);","lastModifiedDate":"2018-03-26"},{"lineNumber":63,"author":{"gitId":"-"},"content":" } else {","lastModifiedDate":"2018-03-26"},{"lineNumber":64,"author":{"gitId":"-"},"content":" tags.forEach(s -\u003e sb.append(PREFIX_TAG).append(s.tagName).append(\" \"));","lastModifiedDate":"2018-03-26"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-03-26"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-03-26"},{"lineNumber":67,"author":{"gitId":"-"},"content":" return sb.toString();","lastModifiedDate":"2018-03-26"},{"lineNumber":68,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-03-26"},{"lineNumber":69,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-04-05"}],"authorContributionMap":{"-":62,"yeoshuheng":7}},{"path":"src/test/java/seedu/address/testutil/TypicalPersons.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.testutil;","lastModifiedDate":"2016-09-13"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-13"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_AMY;","lastModifiedDate":"2017-08-22"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB;","lastModifiedDate":"2017-08-22"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_AMY;","lastModifiedDate":"2017-08-22"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_BOB;","lastModifiedDate":"2017-08-22"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_AMY;","lastModifiedDate":"2017-08-22"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB;","lastModifiedDate":"2017-08-22"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_AMY;","lastModifiedDate":"2017-08-22"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB;","lastModifiedDate":"2017-08-22"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_FRIEND;","lastModifiedDate":"2017-08-22"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND;","lastModifiedDate":"2017-08-22"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-08-22"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import java.util.ArrayList;","lastModifiedDate":"2017-08-07"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import java.util.Arrays;","lastModifiedDate":"2017-08-07"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2017-08-07"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-08-07"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.model.AddressBook;","lastModifiedDate":"2016-09-21"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-01-10"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-13"},{"lineNumber":21,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-09-13"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * A utility class containing a list of {@code Person} objects to be used in tests.","lastModifiedDate":"2017-08-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-09-13"},{"lineNumber":24,"author":{"gitId":"-"},"content":"public class TypicalPersons {","lastModifiedDate":"2017-04-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-13"},{"lineNumber":26,"author":{"gitId":"-"},"content":" public static final Person ALICE \u003d new PersonBuilder().withName(\"Alice Pauline\")","lastModifiedDate":"2018-01-10"},{"lineNumber":27,"author":{"gitId":"-"},"content":" .withAddress(\"123, Jurong West Ave 6, #08-111\").withEmail(\"alice@example.com\")","lastModifiedDate":"2017-04-05"},{"lineNumber":28,"author":{"gitId":"yeoshuheng"},"content":" .withPhone(\"94351253\").withIndustry(\"finance\").withFundingStage(\"A\")","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" .withTags(\"friends\").build();","lastModifiedDate":"2016-09-13"},{"lineNumber":30,"author":{"gitId":"-"},"content":" public static final Person BENSON \u003d new PersonBuilder().withName(\"Benson Meier\")","lastModifiedDate":"2018-01-10"},{"lineNumber":31,"author":{"gitId":"yeoshuheng"},"content":" .withAddress(\"311, Clementi Ave 2, #02-25\").withIndustry(\"finance\").withFundingStage(\"A\")","lastModifiedDate":"2024-02-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" .withEmail(\"johnd@example.com\").withPhone(\"98765432\")","lastModifiedDate":"2017-04-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":" .withTags(\"owesMoney\", \"friends\").build();","lastModifiedDate":"2016-09-13"},{"lineNumber":34,"author":{"gitId":"-"},"content":" public static final Person CARL \u003d new PersonBuilder().withName(\"Carl Kurz\").withPhone(\"95352563\")","lastModifiedDate":"2018-01-10"},{"lineNumber":35,"author":{"gitId":"yeoshuheng"},"content":" .withEmail(\"heinz@example.com\").withIndustry(\"finance\").withFundingStage(\"A\")","lastModifiedDate":"2024-02-25"},{"lineNumber":36,"author":{"gitId":"yeoshuheng"},"content":" .withAddress(\"wall street\").build();","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" public static final Person DANIEL \u003d new PersonBuilder().withName(\"Daniel Meier\").withPhone(\"87652533\")","lastModifiedDate":"2018-01-10"},{"lineNumber":38,"author":{"gitId":"yeoshuheng"},"content":" .withEmail(\"cornelia@example.com\").withIndustry(\"finance\").withFundingStage(\"A\")","lastModifiedDate":"2024-02-25"},{"lineNumber":39,"author":{"gitId":"yeoshuheng"},"content":" .withAddress(\"10th street\").withTags(\"friends\").build();","lastModifiedDate":"2024-02-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" public static final Person ELLE \u003d new PersonBuilder().withName(\"Elle Meyer\").withPhone(\"9482224\")","lastModifiedDate":"2018-01-10"},{"lineNumber":41,"author":{"gitId":"yeoshuheng"},"content":" .withEmail(\"werner@example.com\").withIndustry(\"finance\").withFundingStage(\"A\")","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"yeoshuheng"},"content":" .withAddress(\"michegan ave\").build();","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" public static final Person FIONA \u003d new PersonBuilder().withName(\"Fiona Kunz\").withPhone(\"9482427\")","lastModifiedDate":"2018-01-10"},{"lineNumber":44,"author":{"gitId":"yeoshuheng"},"content":" .withEmail(\"lydia@example.com\").withIndustry(\"finance\").withFundingStage(\"A\")","lastModifiedDate":"2024-02-25"},{"lineNumber":45,"author":{"gitId":"yeoshuheng"},"content":" .withAddress(\"little tokyo\").build();","lastModifiedDate":"2024-02-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" public static final Person GEORGE \u003d new PersonBuilder().withName(\"George Best\").withPhone(\"9482442\")","lastModifiedDate":"2018-01-10"},{"lineNumber":47,"author":{"gitId":"yeoshuheng"},"content":" .withEmail(\"anna@example.com\").withIndustry(\"finance\").withFundingStage(\"A\")","lastModifiedDate":"2024-02-25"},{"lineNumber":48,"author":{"gitId":"yeoshuheng"},"content":" .withAddress(\"4th street\").build();","lastModifiedDate":"2024-02-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-13"},{"lineNumber":50,"author":{"gitId":"-"},"content":" // Manually added","lastModifiedDate":"2016-09-13"},{"lineNumber":51,"author":{"gitId":"-"},"content":" public static final Person HOON \u003d new PersonBuilder().withName(\"Hoon Meier\").withPhone(\"8482424\")","lastModifiedDate":"2018-01-10"},{"lineNumber":52,"author":{"gitId":"yeoshuheng"},"content":" .withEmail(\"stefan@example.com\").withIndustry(\"finance\").withFundingStage(\"A\")","lastModifiedDate":"2024-02-25"},{"lineNumber":53,"author":{"gitId":"yeoshuheng"},"content":" .withAddress(\"little india\").build();","lastModifiedDate":"2024-02-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" public static final Person IDA \u003d new PersonBuilder().withName(\"Ida Mueller\").withPhone(\"8482131\")","lastModifiedDate":"2018-01-10"},{"lineNumber":55,"author":{"gitId":"yeoshuheng"},"content":" .withEmail(\"hans@example.com\").withIndustry(\"finance\").withFundingStage(\"A\")","lastModifiedDate":"2024-02-25"},{"lineNumber":56,"author":{"gitId":"yeoshuheng"},"content":" .withAddress(\"chicago ave\").build();","lastModifiedDate":"2024-02-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-08-22"},{"lineNumber":58,"author":{"gitId":"-"},"content":" // Manually added - Person\u0027s details found in {@code CommandTestUtil}","lastModifiedDate":"2017-08-22"},{"lineNumber":59,"author":{"gitId":"-"},"content":" public static final Person AMY \u003d new PersonBuilder().withName(VALID_NAME_AMY).withPhone(VALID_PHONE_AMY)","lastModifiedDate":"2018-01-10"},{"lineNumber":60,"author":{"gitId":"-"},"content":" .withEmail(VALID_EMAIL_AMY).withAddress(VALID_ADDRESS_AMY).withTags(VALID_TAG_FRIEND).build();","lastModifiedDate":"2017-09-21"},{"lineNumber":61,"author":{"gitId":"-"},"content":" public static final Person BOB \u003d new PersonBuilder().withName(VALID_NAME_BOB).withPhone(VALID_PHONE_BOB)","lastModifiedDate":"2018-01-10"},{"lineNumber":62,"author":{"gitId":"-"},"content":" .withEmail(VALID_EMAIL_BOB).withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_HUSBAND, VALID_TAG_FRIEND)","lastModifiedDate":"2017-09-21"},{"lineNumber":63,"author":{"gitId":"-"},"content":" .build();","lastModifiedDate":"2017-09-21"},{"lineNumber":64,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-21"},{"lineNumber":65,"author":{"gitId":"-"},"content":" public static final String KEYWORD_MATCHING_MEIER \u003d \"Meier\"; // A keyword that matches MEIER","lastModifiedDate":"2017-09-21"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-13"},{"lineNumber":67,"author":{"gitId":"-"},"content":" private TypicalPersons() {} // prevents instantiation","lastModifiedDate":"2017-07-20"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-20"},{"lineNumber":69,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":70,"author":{"gitId":"-"},"content":" * Returns an {@code AddressBook} with all the typical persons.","lastModifiedDate":"2017-08-05"},{"lineNumber":71,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":72,"author":{"gitId":"-"},"content":" public static AddressBook getTypicalAddressBook() {","lastModifiedDate":"2017-08-05"},{"lineNumber":73,"author":{"gitId":"-"},"content":" AddressBook ab \u003d new AddressBook();","lastModifiedDate":"2017-08-05"},{"lineNumber":74,"author":{"gitId":"-"},"content":" for (Person person : getTypicalPersons()) {","lastModifiedDate":"2018-01-10"},{"lineNumber":75,"author":{"gitId":"-"},"content":" ab.addPerson(person);","lastModifiedDate":"2017-08-05"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-13"},{"lineNumber":77,"author":{"gitId":"-"},"content":" return ab;","lastModifiedDate":"2016-09-24"},{"lineNumber":78,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-24"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-08-04"},{"lineNumber":80,"author":{"gitId":"-"},"content":" public static List\u003cPerson\u003e getTypicalPersons() {","lastModifiedDate":"2018-01-10"},{"lineNumber":81,"author":{"gitId":"-"},"content":" return new ArrayList\u003c\u003e(Arrays.asList(ALICE, BENSON, CARL, DANIEL, ELLE, FIONA, GEORGE));","lastModifiedDate":"2017-08-07"},{"lineNumber":82,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-08-04"},{"lineNumber":83,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-09-13"}],"authorContributionMap":{"-":67,"yeoshuheng":16}}] +[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"menatahari"},"content":"[![CI Status](https://github.com/AY2324S2-CS2103T-W09-2/tp/workflows/Java%20CI/badge.svg)](https://github.com/AY2324S2-CS2103T-W09-2/tp/actions)","lastModifiedDate":"2024-03-07"},{"lineNumber":2,"author":{"gitId":"menatahari"},"content":"# Capital Connect #","lastModifiedDate":"2024-03-07"},{"lineNumber":3,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"![Ui](docs/images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"menatahari"},"content":"## Description ##","lastModifiedDate":"2024-03-07"},{"lineNumber":7,"author":{"gitId":"menatahari"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":8,"author":{"gitId":"menatahari"},"content":"---","lastModifiedDate":"2024-03-07"},{"lineNumber":9,"author":{"gitId":"menatahari"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":10,"author":{"gitId":"menatahari"},"content":"Capital Connect is an app that is designed to streamline the management of startup investments, enabling VC firms to easily add, categorize, and track a diverse portfolio of investments in various industries and funding stages.","lastModifiedDate":"2024-03-07"},{"lineNumber":11,"author":{"gitId":"menatahari"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":12,"author":{"gitId":"menatahari"},"content":"## Documentation ##","lastModifiedDate":"2024-03-07"},{"lineNumber":13,"author":{"gitId":"menatahari"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":14,"author":{"gitId":"menatahari"},"content":"---","lastModifiedDate":"2024-03-07"},{"lineNumber":15,"author":{"gitId":"menatahari"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":16,"author":{"gitId":"menatahari"},"content":"For the detailed documentation of this project, see the **[Capital Connect Product Website](https://ay2324s2-cs2103t-w09-2.github.io/tp/)**.","lastModifiedDate":"2024-03-07"},{"lineNumber":17,"author":{"gitId":"menatahari"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":18,"author":{"gitId":"menatahari"},"content":"## Credits and Acknowledgements ##","lastModifiedDate":"2024-03-07"},{"lineNumber":19,"author":{"gitId":"menatahari"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":20,"author":{"gitId":"menatahari"},"content":"---","lastModifiedDate":"2024-03-07"},{"lineNumber":21,"author":{"gitId":"menatahari"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":22,"author":{"gitId":"menatahari"},"content":"* This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-03-07"}],"authorContributionMap":{"menatahari":19,"-":3}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"About Us\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"# About Us","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"-"},"content":"We are a team based in the [School of Computing, National University of Singapore](http://www.comp.nus.edu.sg).","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":10,"author":{"gitId":"-"},"content":"You can reach us at the email `seer[at]comp.nus.edu.sg`","lastModifiedDate":"2020-06-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-06-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":"## Project team","lastModifiedDate":"2020-06-07"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":14,"author":{"gitId":"yeoshuheng"},"content":"### Yeo Shu Heng","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"yeoshuheng"},"content":"\u003cimg src\u003d\"images/yeoshuheng.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"yeoshuheng"},"content":"[[homepage](https://www.linkedin.com/in/yeoshuheng/)]","lastModifiedDate":"2024-02-25"},{"lineNumber":19,"author":{"gitId":"yeoshuheng"},"content":"[[github](https://github.com/yeoshuheng)]","lastModifiedDate":"2024-02-25"},{"lineNumber":20,"author":{"gitId":"yeoshuheng"},"content":"[[portfolio](team/shuheng.md)]","lastModifiedDate":"2024-02-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"yeoshuheng"},"content":"* Role: Developer","lastModifiedDate":"2024-02-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"dwangwk"},"content":"### Daniel Wang","lastModifiedDate":"2024-03-07"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"dwangwk"},"content":"\u003cimg src\u003d\"images/dwangwk.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-07"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"dwangwk"},"content":"[[github](http://github.com/dwangwk)]","lastModifiedDate":"2024-03-07"},{"lineNumber":29,"author":{"gitId":"dwangwk"},"content":"[[portfolio](team/danielwang.md)]","lastModifiedDate":"2024-03-07"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2024-03-07"},{"lineNumber":32,"author":{"gitId":"-"},"content":"* Responsibilities: Data","lastModifiedDate":"2024-03-07"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"dwangwk"},"content":"### Ye Si Fan","lastModifiedDate":"2024-03-07"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"dwangwk"},"content":"\u003cimg src\u003d\"images/yespiggy.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-07"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"dwangwk"},"content":"[[github](http://github.com/yespiggy)] [[portfolio](team/sifan.md)]","lastModifiedDate":"2024-03-07"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":40,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":41,"author":{"gitId":"dwangwk"},"content":"* Responsibilities: UI","lastModifiedDate":"2024-03-07"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"dwangwk"},"content":"### Natasya Hadiatullah Buhari","lastModifiedDate":"2024-03-07"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"dwangwk"},"content":"\u003cimg src\u003d\"images/menatahari.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-07"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"dwangwk"},"content":"[[github](http://github.com/menatahari)]","lastModifiedDate":"2024-03-07"},{"lineNumber":48,"author":{"gitId":"dwangwk"},"content":"[[portfolio](team/natasya.md)]","lastModifiedDate":"2024-03-07"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":50,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"dwangwk"},"content":"* Responsibilities: Dev Ops","lastModifiedDate":"2024-03-07"}],"authorContributionMap":{"dwangwk":13,"-":32,"yeoshuheng":6}},{"path":"docs/DeveloperGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"Developer Guide\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":" pageNav: 3","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"yespiggy"},"content":"# CapitalConnect Developer Guide","lastModifiedDate":"2024-03-07"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c!-- * Table of Contents --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003cpage-nav-print /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":14,"author":{"gitId":"-"},"content":"## **Acknowledgements**","lastModifiedDate":"2021-07-30"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":16,"author":{"gitId":"-"},"content":"_{ list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the original source as well }_","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":18,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2021-07-30"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"-"},"content":"## **Setting up, getting started**","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"Refer to the guide [_Setting up and getting started_](SettingUp.md).","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"-"},"content":"## **Design**","lastModifiedDate":"2020-05-23"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":"### Architecture","lastModifiedDate":"2021-07-31"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ArchitectureDiagram.puml\" width\u003d\"280\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"-"},"content":"The ***Architecture Diagram*** given above explains the high-level design of the App.","lastModifiedDate":"2021-07-31"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"-"},"content":"Given below is a quick overview of main components and how they interact with each other.","lastModifiedDate":"2021-07-31"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":36,"author":{"gitId":"-"},"content":"**Main components of the architecture**","lastModifiedDate":"2021-07-31"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":"**`Main`** (consisting of classes [`Main`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/Main.java) and [`MainApp`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/MainApp.java)) is in charge of the app launch and shut down.","lastModifiedDate":"2023-09-03"},{"lineNumber":39,"author":{"gitId":"-"},"content":"* At app launch, it initializes the other components in the correct sequence, and connects them up with each other.","lastModifiedDate":"2023-09-03"},{"lineNumber":40,"author":{"gitId":"-"},"content":"* At shut down, it shuts down the other components and invokes cleanup methods where necessary.","lastModifiedDate":"2023-09-03"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":"The bulk of the app\u0027s work is done by the following four components:","lastModifiedDate":"2023-09-03"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"-"},"content":"* [**`UI`**](#ui-component): The UI of the App.","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":"* [**`Logic`**](#logic-component): The command executor.","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":"* [**`Model`**](#model-component): Holds the data of the App in memory.","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* [**`Storage`**](#storage-component): Reads data from, and writes data to, the hard disk.","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"-"},"content":"[**`Commons`**](#common-classes) represents a collection of classes used by multiple other components.","lastModifiedDate":"2023-09-03"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"-"},"content":"**How the architecture components interact with each other**","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":"The *Sequence Diagram* below shows how the components interact with each other for the scenario where the user issues the command `delete 1`.","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ArchitectureSequenceDiagram.puml\" width\u003d\"574\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":57,"author":{"gitId":"-"},"content":"Each of the four main components (also shown in the diagram above),","lastModifiedDate":"2021-07-31"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":59,"author":{"gitId":"-"},"content":"* defines its *API* in an `interface` with the same name as the Component.","lastModifiedDate":"2021-07-31"},{"lineNumber":60,"author":{"gitId":"-"},"content":"* implements its functionality using a concrete `{Component Name}Manager` class (which follows the corresponding API `interface` mentioned in the previous point.","lastModifiedDate":"2021-07-31"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":62,"author":{"gitId":"-"},"content":"For example, the `Logic` component defines its API in the `Logic.java` interface and implements its functionality using the `LogicManager.java` class which follows the `Logic` interface. Other components interact with a given component through its interface rather than the concrete class (reason: to prevent outside component\u0027s being coupled to the implementation of a component), as illustrated in the (partial) class diagram below.","lastModifiedDate":"2021-07-31"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":64,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ComponentManagers.puml\" width\u003d\"300\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":66,"author":{"gitId":"-"},"content":"The sections below give more details of each component.","lastModifiedDate":"2020-05-23"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":68,"author":{"gitId":"-"},"content":"### UI component","lastModifiedDate":"2020-05-23"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":70,"author":{"gitId":"-"},"content":"The **API** of this component is specified in [`Ui.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/Ui.java)","lastModifiedDate":"2021-07-31"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":72,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UiClassDiagram.puml\" alt\u003d\"Structure of the UI Component\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":73,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":74,"author":{"gitId":"-"},"content":"The UI consists of a `MainWindow` that is made up of parts e.g.`CommandBox`, `ResultDisplay`, `PersonListPanel`, `StatusBarFooter` etc. All these, including the `MainWindow`, inherit from the abstract `UiPart` class which captures the commonalities between classes that represent parts of the visible GUI.","lastModifiedDate":"2021-07-31"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":76,"author":{"gitId":"-"},"content":"The `UI` component uses the JavaFx UI framework. The layout of these UI parts are defined in matching `.fxml` files that are in the `src/main/resources/view` folder. For example, the layout of the [`MainWindow`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/ui/MainWindow.java) is specified in [`MainWindow.fxml`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/resources/view/MainWindow.fxml)","lastModifiedDate":"2021-07-31"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":78,"author":{"gitId":"-"},"content":"The `UI` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":80,"author":{"gitId":"-"},"content":"* executes user commands using the `Logic` component.","lastModifiedDate":"2021-07-31"},{"lineNumber":81,"author":{"gitId":"-"},"content":"* listens for changes to `Model` data so that the UI can be updated with the modified data.","lastModifiedDate":"2021-07-31"},{"lineNumber":82,"author":{"gitId":"-"},"content":"* keeps a reference to the `Logic` component, because the `UI` relies on the `Logic` to execute commands.","lastModifiedDate":"2021-07-31"},{"lineNumber":83,"author":{"gitId":"-"},"content":"* depends on some classes in the `Model` component, as it displays `Person` object residing in the `Model`.","lastModifiedDate":"2021-07-31"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":85,"author":{"gitId":"-"},"content":"### Logic component","lastModifiedDate":"2020-05-23"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":87,"author":{"gitId":"-"},"content":"**API** : [`Logic.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/logic/Logic.java)","lastModifiedDate":"2021-07-31"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":89,"author":{"gitId":"-"},"content":"Here\u0027s a (partial) class diagram of the `Logic` component:","lastModifiedDate":"2021-07-31"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":91,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/LogicClassDiagram.puml\" width\u003d\"550\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":93,"author":{"gitId":"-"},"content":"The sequence diagram below illustrates the interactions within the `Logic` component, taking `execute(\"delete 1\")` API call as an example.","lastModifiedDate":"2023-09-03"},{"lineNumber":94,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":95,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/DeleteSequenceDiagram.puml\" alt\u003d\"Interactions Inside the Logic Component for the `delete 1` Command\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":97,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":98,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":99,"author":{"gitId":"-"},"content":"**Note:** The lifeline for `DeleteCommandParser` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline continues till the end of diagram.","lastModifiedDate":"2023-09-12"},{"lineNumber":100,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":101,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":102,"author":{"gitId":"-"},"content":"How the `Logic` component works:","lastModifiedDate":"2023-09-03"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"-"},"content":"1. When `Logic` is called upon to execute a command, it is passed to an `AddressBookParser` object which in turn creates a parser that matches the command (e.g., `DeleteCommandParser`) and uses it to parse the command.","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"author":{"gitId":"-"},"content":"1. This results in a `Command` object (more precisely, an object of one of its subclasses e.g., `DeleteCommand`) which is executed by the `LogicManager`.","lastModifiedDate":"2023-09-03"},{"lineNumber":106,"author":{"gitId":"-"},"content":"1. The command can communicate with the `Model` when it is executed (e.g. to delete a person).\u003cbr\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":107,"author":{"gitId":"-"},"content":" Note that although this is shown as a single step in the diagram above (for simplicity), in the code it can take several interactions (between the command object and the `Model`) to achieve.","lastModifiedDate":"2024-02-09"},{"lineNumber":108,"author":{"gitId":"-"},"content":"1. The result of the command execution is encapsulated as a `CommandResult` object which is returned back from `Logic`.","lastModifiedDate":"2023-09-03"},{"lineNumber":109,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":110,"author":{"gitId":"-"},"content":"Here are the other classes in `Logic` (omitted from the class diagram above) that are used for parsing a user command:","lastModifiedDate":"2021-07-31"},{"lineNumber":111,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":112,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ParserClasses.puml\" width\u003d\"600\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":114,"author":{"gitId":"-"},"content":"How the parsing works:","lastModifiedDate":"2021-07-31"},{"lineNumber":115,"author":{"gitId":"-"},"content":"* When called upon to parse a user command, the `AddressBookParser` class creates an `XYZCommandParser` (`XYZ` is a placeholder for the specific command name e.g., `AddCommandParser`) which uses the other classes shown above to parse the user command and create a `XYZCommand` object (e.g., `AddCommand`) which the `AddressBookParser` returns back as a `Command` object.","lastModifiedDate":"2021-07-31"},{"lineNumber":116,"author":{"gitId":"-"},"content":"* All `XYZCommandParser` classes (e.g., `AddCommandParser`, `DeleteCommandParser`, ...) inherit from the `Parser` interface so that they can be treated similarly where possible e.g, during testing.","lastModifiedDate":"2021-07-31"},{"lineNumber":117,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":118,"author":{"gitId":"-"},"content":"### Model component","lastModifiedDate":"2021-07-31"},{"lineNumber":119,"author":{"gitId":"-"},"content":"**API** : [`Model.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/model/Model.java)","lastModifiedDate":"2020-05-23"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":121,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ModelClassDiagram.puml\" width\u003d\"450\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":122,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":123,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":124,"author":{"gitId":"-"},"content":"The `Model` component,","lastModifiedDate":"2021-07-31"},{"lineNumber":125,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":126,"author":{"gitId":"-"},"content":"* stores the address book data i.e., all `Person` objects (which are contained in a `UniquePersonList` object).","lastModifiedDate":"2021-07-31"},{"lineNumber":127,"author":{"gitId":"-"},"content":"* stores the currently \u0027selected\u0027 `Person` objects (e.g., results of a search query) as a separate _filtered_ list which is exposed to outsiders as an unmodifiable `ObservableList\u003cPerson\u003e` that can be \u0027observed\u0027 e.g. the UI can be bound to this list so that the UI automatically updates when the data in the list change.","lastModifiedDate":"2021-07-31"},{"lineNumber":128,"author":{"gitId":"-"},"content":"* stores a `UserPref` object that represents the user’s preferences. This is exposed to the outside as a `ReadOnlyUserPref` objects.","lastModifiedDate":"2021-07-31"},{"lineNumber":129,"author":{"gitId":"-"},"content":"* does not depend on any of the other three components (as the `Model` represents data entities of the domain, they should make sense on their own without depending on other components)","lastModifiedDate":"2021-07-31"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":131,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":132,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":133,"author":{"gitId":"-"},"content":"**Note:** An alternative (arguably, a more OOP) model is given below. It has a `Tag` list in the `AddressBook`, which `Person` references. This allows `AddressBook` to only require one `Tag` object per unique tag, instead of each `Person` needing their own `Tag` objects.\u003cbr\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":134,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":135,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/BetterModelClassDiagram.puml\" width\u003d\"450\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":137,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":138,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":139,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":140,"author":{"gitId":"-"},"content":"### Storage component","lastModifiedDate":"2020-05-23"},{"lineNumber":141,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":142,"author":{"gitId":"-"},"content":"**API** : [`Storage.java`](https://github.com/se-edu/addressbook-level3/tree/master/src/main/java/seedu/address/storage/Storage.java)","lastModifiedDate":"2020-05-23"},{"lineNumber":143,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":144,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/StorageClassDiagram.puml\" width\u003d\"550\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":145,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":146,"author":{"gitId":"-"},"content":"The `Storage` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":147,"author":{"gitId":"-"},"content":"* can save both address book data and user preference data in JSON format, and read them back into corresponding objects.","lastModifiedDate":"2023-09-03"},{"lineNumber":148,"author":{"gitId":"-"},"content":"* inherits from both `AddressBookStorage` and `UserPrefStorage`, which means it can be treated as either one (if only the functionality of only one is needed).","lastModifiedDate":"2021-07-31"},{"lineNumber":149,"author":{"gitId":"-"},"content":"* depends on some classes in the `Model` component (because the `Storage` component\u0027s job is to save/retrieve objects that belong to the `Model`)","lastModifiedDate":"2021-07-21"},{"lineNumber":150,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":151,"author":{"gitId":"-"},"content":"### Common classes","lastModifiedDate":"2020-05-23"},{"lineNumber":152,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":153,"author":{"gitId":"-"},"content":"Classes used by multiple components are in the `seedu.addressbook.commons` package.","lastModifiedDate":"2020-05-23"},{"lineNumber":154,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":155,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":156,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":157,"author":{"gitId":"-"},"content":"## **Implementation**","lastModifiedDate":"2020-05-23"},{"lineNumber":158,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":159,"author":{"gitId":"-"},"content":"This section describes some noteworthy details on how certain features are implemented.","lastModifiedDate":"2020-05-23"},{"lineNumber":160,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":161,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Undo/redo feature","lastModifiedDate":"2020-06-07"},{"lineNumber":162,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":163,"author":{"gitId":"-"},"content":"#### Proposed Implementation","lastModifiedDate":"2020-05-23"},{"lineNumber":164,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":165,"author":{"gitId":"-"},"content":"The proposed undo/redo mechanism is facilitated by `VersionedAddressBook`. It extends `AddressBook` with an undo/redo history, stored internally as an `addressBookStateList` and `currentStatePointer`. Additionally, it implements the following operations:","lastModifiedDate":"2020-05-23"},{"lineNumber":166,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":167,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#commit()` — Saves the current address book state in its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":168,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#undo()` — Restores the previous address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":169,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#redo()` — Restores a previously undone address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":170,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":171,"author":{"gitId":"-"},"content":"These operations are exposed in the `Model` interface as `Model#commitAddressBook()`, `Model#undoAddressBook()` and `Model#redoAddressBook()` respectively.","lastModifiedDate":"2020-05-23"},{"lineNumber":172,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":173,"author":{"gitId":"-"},"content":"Given below is an example usage scenario and how the undo/redo mechanism behaves at each step.","lastModifiedDate":"2020-05-23"},{"lineNumber":174,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":175,"author":{"gitId":"-"},"content":"Step 1. The user launches the application for the first time. The `VersionedAddressBook` will be initialized with the initial address book state, and the `currentStatePointer` pointing to that single address book state.","lastModifiedDate":"2020-05-23"},{"lineNumber":176,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":177,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState0.puml\" alt\u003d\"UndoRedoState0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":178,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":179,"author":{"gitId":"-"},"content":"Step 2. The user executes `delete 5` command to delete the 5th person in the address book. The `delete` command calls `Model#commitAddressBook()`, causing the modified state of the address book after the `delete 5` command executes to be saved in the `addressBookStateList`, and the `currentStatePointer` is shifted to the newly inserted address book state.","lastModifiedDate":"2020-05-23"},{"lineNumber":180,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":181,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState1.puml\" alt\u003d\"UndoRedoState1\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":182,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":183,"author":{"gitId":"-"},"content":"Step 3. The user executes `add n/David …​` to add a new person. The `add` command also calls `Model#commitAddressBook()`, causing another modified address book state to be saved into the `addressBookStateList`.","lastModifiedDate":"2020-05-23"},{"lineNumber":184,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":185,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState2.puml\" alt\u003d\"UndoRedoState2\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":186,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":187,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":188,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":189,"author":{"gitId":"-"},"content":"**Note:** If a command fails its execution, it will not call `Model#commitAddressBook()`, so the address book state will not be saved into the `addressBookStateList`.","lastModifiedDate":"2023-09-12"},{"lineNumber":190,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":191,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":192,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":193,"author":{"gitId":"-"},"content":"Step 4. The user now decides that adding the person was a mistake, and decides to undo that action by executing the `undo` command. The `undo` command will call `Model#undoAddressBook()`, which will shift the `currentStatePointer` once to the left, pointing it to the previous address book state, and restores the address book to that state.","lastModifiedDate":"2020-05-23"},{"lineNumber":194,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":195,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState3.puml\" alt\u003d\"UndoRedoState3\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":196,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":197,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":198,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":199,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":200,"author":{"gitId":"-"},"content":"**Note:** If the `currentStatePointer` is at index 0, pointing to the initial AddressBook state, then there are no previous AddressBook states to restore. The `undo` command uses `Model#canUndoAddressBook()` to check if this is the case. If so, it will return an error to the user rather","lastModifiedDate":"2023-09-12"},{"lineNumber":201,"author":{"gitId":"-"},"content":"than attempting to perform the undo.","lastModifiedDate":"2020-05-23"},{"lineNumber":202,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":203,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":204,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":205,"author":{"gitId":"-"},"content":"The following sequence diagram shows how an undo operation goes through the `Logic` component:","lastModifiedDate":"2024-02-09"},{"lineNumber":206,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":207,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoSequenceDiagram-Logic.puml\" alt\u003d\"UndoSequenceDiagram-Logic\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":208,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":209,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":210,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":211,"author":{"gitId":"-"},"content":"**Note:** The lifeline for `UndoCommand` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram.","lastModifiedDate":"2023-09-12"},{"lineNumber":212,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":213,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":214,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":215,"author":{"gitId":"-"},"content":"Similarly, how an undo operation goes through the `Model` component is shown below:","lastModifiedDate":"2024-02-09"},{"lineNumber":216,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":217,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoSequenceDiagram-Model.puml\" alt\u003d\"UndoSequenceDiagram-Model\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":218,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":219,"author":{"gitId":"-"},"content":"The `redo` command does the opposite — it calls `Model#redoAddressBook()`, which shifts the `currentStatePointer` once to the right, pointing to the previously undone state, and restores the address book to that state.","lastModifiedDate":"2020-05-23"},{"lineNumber":220,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":221,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":222,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":223,"author":{"gitId":"-"},"content":"**Note:** If the `currentStatePointer` is at index `addressBookStateList.size() - 1`, pointing to the latest address book state, then there are no undone AddressBook states to restore. The `redo` command uses `Model#canRedoAddressBook()` to check if this is the case. If so, it will return an error to the user rather than attempting to perform the redo.","lastModifiedDate":"2023-09-12"},{"lineNumber":224,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":225,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":226,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":227,"author":{"gitId":"-"},"content":"Step 5. The user then decides to execute the command `list`. Commands that do not modify the address book, such as `list`, will usually not call `Model#commitAddressBook()`, `Model#undoAddressBook()` or `Model#redoAddressBook()`. Thus, the `addressBookStateList` remains unchanged.","lastModifiedDate":"2020-05-23"},{"lineNumber":228,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":229,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState4.puml\" alt\u003d\"UndoRedoState4\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":230,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":231,"author":{"gitId":"-"},"content":"Step 6. The user executes `clear`, which calls `Model#commitAddressBook()`. Since the `currentStatePointer` is not pointing at the end of the `addressBookStateList`, all address book states after the `currentStatePointer` will be purged. Reason: It no longer makes sense to redo the `add n/David …​` command. This is the behavior that most modern desktop applications follow.","lastModifiedDate":"2020-05-23"},{"lineNumber":232,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":233,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState5.puml\" alt\u003d\"UndoRedoState5\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":234,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":235,"author":{"gitId":"-"},"content":"The following activity diagram summarizes what happens when a user executes a new command:","lastModifiedDate":"2020-05-23"},{"lineNumber":236,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":237,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/CommitActivityDiagram.puml\" width\u003d\"250\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":238,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":239,"author":{"gitId":"-"},"content":"#### Design considerations:","lastModifiedDate":"2021-07-31"},{"lineNumber":240,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":241,"author":{"gitId":"-"},"content":"**Aspect: How undo \u0026 redo executes:**","lastModifiedDate":"2021-07-31"},{"lineNumber":242,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":243,"author":{"gitId":"-"},"content":"* **Alternative 1 (current choice):** Saves the entire address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":244,"author":{"gitId":"-"},"content":" * Pros: Easy to implement.","lastModifiedDate":"2020-05-23"},{"lineNumber":245,"author":{"gitId":"-"},"content":" * Cons: May have performance issues in terms of memory usage.","lastModifiedDate":"2020-05-23"},{"lineNumber":246,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":247,"author":{"gitId":"-"},"content":"* **Alternative 2:** Individual command knows how to undo/redo by","lastModifiedDate":"2020-05-23"},{"lineNumber":248,"author":{"gitId":"-"},"content":" itself.","lastModifiedDate":"2020-05-23"},{"lineNumber":249,"author":{"gitId":"-"},"content":" * Pros: Will use less memory (e.g. for `delete`, just save the person being deleted).","lastModifiedDate":"2020-05-23"},{"lineNumber":250,"author":{"gitId":"-"},"content":" * Cons: We must ensure that the implementation of each individual command are correct.","lastModifiedDate":"2020-05-23"},{"lineNumber":251,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":252,"author":{"gitId":"-"},"content":"_{more aspects and alternatives to be added}_","lastModifiedDate":"2020-05-23"},{"lineNumber":253,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":254,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Data archiving","lastModifiedDate":"2020-05-23"},{"lineNumber":255,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":256,"author":{"gitId":"-"},"content":"_{Explain here how the data archiving feature will be implemented}_","lastModifiedDate":"2020-05-23"},{"lineNumber":257,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":258,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":259,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":260,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":261,"author":{"gitId":"-"},"content":"## **Documentation, logging, testing, configuration, dev-ops**","lastModifiedDate":"2020-06-07"},{"lineNumber":262,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":263,"author":{"gitId":"-"},"content":"* [Documentation guide](Documentation.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":264,"author":{"gitId":"-"},"content":"* [Testing guide](Testing.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":265,"author":{"gitId":"-"},"content":"* [Logging guide](Logging.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":266,"author":{"gitId":"-"},"content":"* [Configuration guide](Configuration.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":267,"author":{"gitId":"-"},"content":"* [DevOps guide](DevOps.md)","lastModifiedDate":"2020-06-07"},{"lineNumber":268,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":269,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":270,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":271,"author":{"gitId":"-"},"content":"## **Appendix: Requirements**","lastModifiedDate":"2020-05-23"},{"lineNumber":272,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":273,"author":{"gitId":"-"},"content":"### Product scope","lastModifiedDate":"2020-05-23"},{"lineNumber":274,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":275,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":276,"author":{"gitId":"yespiggy"},"content":"**Target user profile**: A venture capital portfolio manager who","lastModifiedDate":"2024-03-07"},{"lineNumber":277,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":278,"author":{"gitId":"yespiggy"},"content":"* has a need to keep a significant amount of startup investments","lastModifiedDate":"2024-03-07"},{"lineNumber":279,"author":{"gitId":"-"},"content":"* prefer desktop apps over other types","lastModifiedDate":"2020-05-23"},{"lineNumber":280,"author":{"gitId":"-"},"content":"* can type fast","lastModifiedDate":"2020-05-23"},{"lineNumber":281,"author":{"gitId":"-"},"content":"* prefers typing to mouse interactions","lastModifiedDate":"2020-05-26"},{"lineNumber":282,"author":{"gitId":"-"},"content":"* is reasonably comfortable using CLI apps","lastModifiedDate":"2020-05-23"},{"lineNumber":283,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":284,"author":{"gitId":"yespiggy"},"content":"**Value proposition**: Venture capital firms manage diverse portfolios of startup ","lastModifiedDate":"2024-03-07"},{"lineNumber":285,"author":{"gitId":"yespiggy"},"content":"investments across various industries. The app streamlines the management of startup","lastModifiedDate":"2024-03-07"},{"lineNumber":286,"author":{"gitId":"yespiggy"},"content":"investments, enabling VC firms to easily add, categorize, and track a diverse ","lastModifiedDate":"2024-03-07"},{"lineNumber":287,"author":{"gitId":"yespiggy"},"content":"portfolio of investments in various industries and funding stages.","lastModifiedDate":"2024-03-07"},{"lineNumber":288,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":289,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":290,"author":{"gitId":"-"},"content":"### User stories","lastModifiedDate":"2020-06-07"},{"lineNumber":291,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":292,"author":{"gitId":"-"},"content":"Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unlikely to have) - `*`","lastModifiedDate":"2020-05-23"},{"lineNumber":293,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":294,"author":{"gitId":"-"},"content":"| Priority | As a …​ | I want to …​ | So that I can…​ |","lastModifiedDate":"2020-05-23"},{"lineNumber":295,"author":{"gitId":"yespiggy"},"content":"|-----------|-------------------|-------------------------------------------------------|--------------------------------------------------------------------------|","lastModifiedDate":"2024-03-07"},{"lineNumber":296,"author":{"gitId":"-"},"content":"| `* * *` | new user | see usage instructions | refer to instructions when I forget how to use the App |","lastModifiedDate":"2020-05-23"},{"lineNumber":297,"author":{"gitId":"yespiggy"},"content":"| `* * *` | user | view the startup investments in my portfolio | see the list of startup investments that I\u0027m interested in |","lastModifiedDate":"2024-03-07"},{"lineNumber":298,"author":{"gitId":"yespiggy"},"content":"| `* * *` | user | add a new startup investment to my portfolio | save the details of the new startup investment |","lastModifiedDate":"2024-03-07"},{"lineNumber":299,"author":{"gitId":"yespiggy"},"content":"| `* * *` | user | delete a startup investment to my portfolio | remove the startup investment that I am no longer interested in |","lastModifiedDate":"2024-03-07"},{"lineNumber":300,"author":{"gitId":"yespiggy"},"content":"| `* *` | user | find a startup investment by name | locate a startup investment without having to go through the entire list |","lastModifiedDate":"2024-03-07"},{"lineNumber":301,"author":{"gitId":"yespiggy"},"content":"| `* *` | intermediate user | assign funding stages to startup investments | know more about the startup investment when checking it through the app |","lastModifiedDate":"2024-03-07"},{"lineNumber":302,"author":{"gitId":"yespiggy"},"content":"| `* *` | intermediate user | find a startup investment by industry \u0026 funding stage | locate a startup investment without having to go through the entire list |","lastModifiedDate":"2024-03-07"},{"lineNumber":303,"author":{"gitId":"yespiggy"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":304,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":305,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":306,"author":{"gitId":"-"},"content":"### Use cases","lastModifiedDate":"2020-06-07"},{"lineNumber":307,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":308,"author":{"gitId":"-"},"content":"(For all use cases below, the **System** is the `AddressBook` and the **Actor** is the `user`, unless specified otherwise)","lastModifiedDate":"2020-05-23"},{"lineNumber":309,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":310,"author":{"gitId":"dwangwk"},"content":"**Use case: Add a startup investment**","lastModifiedDate":"2024-03-07"},{"lineNumber":311,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":312,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2020-05-23"},{"lineNumber":313,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":314,"author":{"gitId":"dwangwk"},"content":"1. User requests to add a new startup investment to their portfolio.","lastModifiedDate":"2024-03-07"},{"lineNumber":315,"author":{"gitId":"dwangwk"},"content":"2. CapitalConnect dashboard prompts the user to provide details including:","lastModifiedDate":"2024-03-07"},{"lineNumber":316,"author":{"gitId":"dwangwk"},"content":" * Startup name","lastModifiedDate":"2024-03-07"},{"lineNumber":317,"author":{"gitId":"dwangwk"},"content":" * Industry","lastModifiedDate":"2024-03-07"},{"lineNumber":318,"author":{"gitId":"dwangwk"},"content":" * Funding stage","lastModifiedDate":"2024-03-07"},{"lineNumber":319,"author":{"gitId":"dwangwk"},"content":" * Address","lastModifiedDate":"2024-03-07"},{"lineNumber":320,"author":{"gitId":"dwangwk"},"content":" * Contact information","lastModifiedDate":"2024-03-07"},{"lineNumber":321,"author":{"gitId":"dwangwk"},"content":"3. User provides the necessary details.","lastModifiedDate":"2024-03-07"},{"lineNumber":322,"author":{"gitId":"dwangwk"},"content":"4. CapitalConnect verifies the input for validity.","lastModifiedDate":"2024-03-07"},{"lineNumber":323,"author":{"gitId":"dwangwk"},"content":"5. CapitalConnect adds the new startup investment to the user\u0027s portfolio in the dashboard.","lastModifiedDate":"2024-03-07"},{"lineNumber":324,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":325,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":326,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":327,"author":{"gitId":"-"},"content":"**Extensions**","lastModifiedDate":"2020-05-23"},{"lineNumber":328,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":329,"author":{"gitId":"dwangwk"},"content":"* 4a. Invalid input or missing parameters.","lastModifiedDate":"2024-03-07"},{"lineNumber":330,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":331,"author":{"gitId":"dwangwk"},"content":" * 4a1. CapitalConnect shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":332,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":333,"author":{"gitId":"dwangwk"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-03-07"},{"lineNumber":334,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":335,"author":{"gitId":"dwangwk"},"content":"* 4b. Startup name already exists in the portfolio.","lastModifiedDate":"2024-03-07"},{"lineNumber":336,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":337,"author":{"gitId":"dwangwk"},"content":" * 4b1. CapitalConnect notifies the user about the duplicate entry.","lastModifiedDate":"2024-03-07"},{"lineNumber":338,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":339,"author":{"gitId":"dwangwk"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-03-07"},{"lineNumber":340,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":341,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":342,"author":{"gitId":"dwangwk"},"content":"**Use case: Search for startup investments by industry \u0026 funding stage**","lastModifiedDate":"2024-03-07"},{"lineNumber":343,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":344,"author":{"gitId":"dwangwk"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":345,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":346,"author":{"gitId":"dwangwk"},"content":"1. User requests to search for startup investments by industry and funding stage.","lastModifiedDate":"2024-03-07"},{"lineNumber":347,"author":{"gitId":"dwangwk"},"content":"2. CapitalConnect dashboard prompts the user to input the industry and funding stage.","lastModifiedDate":"2024-03-07"},{"lineNumber":348,"author":{"gitId":"dwangwk"},"content":"3. User provides the industry and funding stage.","lastModifiedDate":"2024-03-07"},{"lineNumber":349,"author":{"gitId":"dwangwk"},"content":"4. CapitalConnect verifies the input for validity.","lastModifiedDate":"2024-03-07"},{"lineNumber":350,"author":{"gitId":"dwangwk"},"content":"5. CapitalConnect searches for startup investments matching the specified industry and funding stage in the user\u0027s portfolio.","lastModifiedDate":"2024-03-07"},{"lineNumber":351,"author":{"gitId":"dwangwk"},"content":"6. CapitalConnect displays the startup investments matching the search criteria.","lastModifiedDate":"2024-03-07"},{"lineNumber":352,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":353,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":354,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":355,"author":{"gitId":"dwangwk"},"content":"**Extensions**","lastModifiedDate":"2024-03-07"},{"lineNumber":356,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":357,"author":{"gitId":"dwangwk"},"content":"* 4a. Invalid input or missing parameters.","lastModifiedDate":"2024-03-07"},{"lineNumber":358,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":359,"author":{"gitId":"dwangwk"},"content":" * 4a1. CapitalConnect shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":360,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":361,"author":{"gitId":"-"},"content":" Use case resumes at step 2.","lastModifiedDate":"2020-05-23"},{"lineNumber":362,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":363,"author":{"gitId":"dwangwk"},"content":"* 6a. No startup investments match the search criteria.","lastModifiedDate":"2024-03-07"},{"lineNumber":364,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":365,"author":{"gitId":"dwangwk"},"content":" * 6a1. CapitalConnect shows an error message indicating no matches found.","lastModifiedDate":"2024-03-07"},{"lineNumber":366,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":367,"author":{"gitId":"dwangwk"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":368,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":369,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":370,"author":{"gitId":"dwangwk"},"content":"**Use case: Search for startup investments by name**","lastModifiedDate":"2024-03-07"},{"lineNumber":371,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":372,"author":{"gitId":"dwangwk"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":373,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":374,"author":{"gitId":"dwangwk"},"content":"1. User requests to search for startup investments by name.","lastModifiedDate":"2024-03-07"},{"lineNumber":375,"author":{"gitId":"dwangwk"},"content":"2. CapitalConnect dashboard prompts the user to input the name of the startup.","lastModifiedDate":"2024-03-07"},{"lineNumber":376,"author":{"gitId":"dwangwk"},"content":"3. User provides the name of the startup.","lastModifiedDate":"2024-03-07"},{"lineNumber":377,"author":{"gitId":"dwangwk"},"content":"4. CapitalConnect verifies the input for validity.","lastModifiedDate":"2024-03-07"},{"lineNumber":378,"author":{"gitId":"dwangwk"},"content":"5. CapitalConnect searches for startup investments matching the specified name in the user\u0027s portfolio.","lastModifiedDate":"2024-03-07"},{"lineNumber":379,"author":{"gitId":"dwangwk"},"content":"6. CapitalConnect displays the startup investments matching the search criteria.","lastModifiedDate":"2024-03-07"},{"lineNumber":380,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":381,"author":{"gitId":"dwangwk"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":382,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":383,"author":{"gitId":"dwangwk"},"content":"**Extensions**","lastModifiedDate":"2024-03-07"},{"lineNumber":384,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":385,"author":{"gitId":"dwangwk"},"content":"* 4a. Invalid input or missing parameters.","lastModifiedDate":"2024-03-07"},{"lineNumber":386,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":387,"author":{"gitId":"dwangwk"},"content":" * 4a1. CapitalConnect shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":388,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":389,"author":{"gitId":"dwangwk"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-03-07"},{"lineNumber":390,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":391,"author":{"gitId":"dwangwk"},"content":"* 6a. No startup investments match the provided name.","lastModifiedDate":"2024-03-07"},{"lineNumber":392,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":393,"author":{"gitId":"dwangwk"},"content":" * 6a1. CapitalConnect shows an error message indicating no matches found.","lastModifiedDate":"2024-03-07"},{"lineNumber":394,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":395,"author":{"gitId":"dwangwk"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":396,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":397,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":398,"author":{"gitId":"dwangwk"},"content":"**Use case: Save the current state of CapitalConnect dashboard**","lastModifiedDate":"2024-03-07"},{"lineNumber":399,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":400,"author":{"gitId":"dwangwk"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":401,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":402,"author":{"gitId":"dwangwk"},"content":"1. CapitalConnect automatically saves the state of the dashboard after every add and delete operation.","lastModifiedDate":"2024-03-07"},{"lineNumber":403,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":404,"author":{"gitId":"dwangwk"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":405,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":406,"author":{"gitId":"dwangwk"},"content":"**Extensions**","lastModifiedDate":"2024-03-07"},{"lineNumber":407,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":408,"author":{"gitId":"dwangwk"},"content":"* 1a. Issue with saving the dashboard state.","lastModifiedDate":"2024-03-07"},{"lineNumber":409,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":410,"author":{"gitId":"dwangwk"},"content":" * 1a1. CapitalConnect shows an error message indicating the issue with saving the dashboard state.","lastModifiedDate":"2024-03-07"},{"lineNumber":411,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":412,"author":{"gitId":"dwangwk"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":413,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":414,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":415,"author":{"gitId":"dwangwk"},"content":"**Use case: Delete a startup investment from the portfolio**","lastModifiedDate":"2024-03-07"},{"lineNumber":416,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":417,"author":{"gitId":"dwangwk"},"content":"**MSS**","lastModifiedDate":"2024-03-07"},{"lineNumber":418,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":419,"author":{"gitId":"dwangwk"},"content":"1. User requests to delete a specific startup investment from their portfolio.","lastModifiedDate":"2024-03-07"},{"lineNumber":420,"author":{"gitId":"dwangwk"},"content":"2. CapitalConnect dashboard prompts the user to input the index of the startup investment to be deleted.","lastModifiedDate":"2024-03-07"},{"lineNumber":421,"author":{"gitId":"dwangwk"},"content":"3. User provides the index of the startup investment.","lastModifiedDate":"2024-03-07"},{"lineNumber":422,"author":{"gitId":"dwangwk"},"content":"4. CapitalConnect verifies the input for validity.","lastModifiedDate":"2024-03-07"},{"lineNumber":423,"author":{"gitId":"dwangwk"},"content":"5. CapitalConnect deletes the startup investment at the specified index from the user\u0027s portfolio.","lastModifiedDate":"2024-03-07"},{"lineNumber":424,"author":{"gitId":"dwangwk"},"content":"6. CapitalConnect displays a confirmation message indicating successful deletion of the startup investment.","lastModifiedDate":"2024-03-07"},{"lineNumber":425,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":426,"author":{"gitId":"dwangwk"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":427,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":428,"author":{"gitId":"dwangwk"},"content":"**Extensions**","lastModifiedDate":"2024-03-07"},{"lineNumber":429,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":430,"author":{"gitId":"dwangwk"},"content":"* 4a. Invalid input or missing parameters.","lastModifiedDate":"2024-03-07"},{"lineNumber":431,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":432,"author":{"gitId":"dwangwk"},"content":" * 4a1. CapitalConnect shows an error message.","lastModifiedDate":"2024-03-07"},{"lineNumber":433,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":434,"author":{"gitId":"dwangwk"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-03-07"},{"lineNumber":435,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":436,"author":{"gitId":"dwangwk"},"content":"* 5a. Specified index is out of range or no startup investments at the specified index.","lastModifiedDate":"2024-03-07"},{"lineNumber":437,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":438,"author":{"gitId":"dwangwk"},"content":" * 5a1. CapitalConnect shows an error message indicating the issue.","lastModifiedDate":"2024-03-07"},{"lineNumber":439,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":440,"author":{"gitId":"dwangwk"},"content":" Use case ends.","lastModifiedDate":"2024-03-07"},{"lineNumber":441,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":442,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":443,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":444,"author":{"gitId":"-"},"content":"1. Should work on any _mainstream OS_ as long as it has Java `11` or above installed.","lastModifiedDate":"2020-05-23"},{"lineNumber":445,"author":{"gitId":"dwangwk"},"content":"2. Should be able to hold up to 1000 startups without a noticeable sluggishness in performance for typical usage.","lastModifiedDate":"2024-03-07"},{"lineNumber":446,"author":{"gitId":"-"},"content":"3. A user with above average typing speed for regular English text (i.e. not code, not system admin commands) should be able to accomplish most of the tasks faster using commands than using the mouse.","lastModifiedDate":"2020-05-23"},{"lineNumber":447,"author":{"gitId":"dwangwk"},"content":"4. The system should have a response time of less than 1 second for common operations, such as adding or deleting a startup investment, to provide a smooth user experience.","lastModifiedDate":"2024-03-07"},{"lineNumber":448,"author":{"gitId":"dwangwk"},"content":"5. The application should provide clear and user-friendly error messages in case of invalid input or system errors to assist users in troubleshooting issues efficiently.","lastModifiedDate":"2024-03-07"},{"lineNumber":449,"author":{"gitId":"dwangwk"},"content":"6. The dashboard interface should be responsive and adapt to different screen sizes, ensuring a seamless user experience across devices such as desktops, laptops, tablets, and smartphones.","lastModifiedDate":"2024-03-07"},{"lineNumber":450,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":451,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":452,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":453,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":454,"author":{"gitId":"-"},"content":"* **Mainstream OS**: Windows, Linux, Unix, MacOS","lastModifiedDate":"2024-02-09"},{"lineNumber":455,"author":{"gitId":"-"},"content":"* **Private contact detail**: A contact detail that is not meant to be shared with others","lastModifiedDate":"2020-05-23"},{"lineNumber":456,"author":{"gitId":"dwangwk"},"content":"* **CapitalConnect dashboard**: The user interface of the CapitalConnect application where users can manage their startup investments, perform searches, and view their portfolio.","lastModifiedDate":"2024-03-07"},{"lineNumber":457,"author":{"gitId":"dwangwk"},"content":"* **Startup investment**: An investment made by a user in a startup company, typically including details such as the startup name, industry, funding stage, address, and contact information.","lastModifiedDate":"2024-03-07"},{"lineNumber":458,"author":{"gitId":"dwangwk"},"content":"* **Industry**: The sector or field in which a startup operates, such as Tech, Biotech, or Finance.","lastModifiedDate":"2024-03-07"},{"lineNumber":459,"author":{"gitId":"dwangwk"},"content":"* **Funding stage**: The development stage of a startup at which it has received a certain level of investment, such as Seed, Series A, or Series B.","lastModifiedDate":"2024-03-07"},{"lineNumber":460,"author":{"gitId":"dwangwk"},"content":"* **Dashboard state**: The current configuration and data displayed in the CapitalConnect dashboard, including startup investments and any applied filters or search results.","lastModifiedDate":"2024-03-07"},{"lineNumber":461,"author":{"gitId":"dwangwk"},"content":"* **Index**: A numeric value representing the position of an item within a list, used in commands to reference specific startup investments in the portfolio.","lastModifiedDate":"2024-03-07"},{"lineNumber":462,"author":{"gitId":"dwangwk"},"content":"* **Confirmation message**: A notification displayed to the user indicating the successful completion of an action, such as adding or deleting a startup investment.","lastModifiedDate":"2024-03-07"},{"lineNumber":463,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":464,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":465,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":466,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":467,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":468,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":469,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":470,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":471,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":472,"author":{"gitId":"-"},"content":"**Note:** These instructions only provide a starting point for testers to work on;","lastModifiedDate":"2023-09-12"},{"lineNumber":473,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":474,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":475,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":476,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":477,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":478,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":479,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":480,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":481,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":482,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":483,"author":{"gitId":"-"},"content":" 1. Double-click the jar file Expected: Shows the GUI with a set of sample contacts. The window size may not be optimum.","lastModifiedDate":"2020-05-23"},{"lineNumber":484,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":485,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":486,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":487,"author":{"gitId":"-"},"content":" 1. Resize the window to an optimum size. Move the window to a different location. Close the window.","lastModifiedDate":"2020-05-23"},{"lineNumber":488,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":489,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":490,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","lastModifiedDate":"2020-05-23"},{"lineNumber":491,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":492,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":493,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":494,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":495,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":496,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":497,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":498,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":499,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":500,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":501,"author":{"gitId":"-"},"content":" Expected: First contact is deleted from the list. Details of the deleted contact shown in the status message. Timestamp in the status bar is updated.","lastModifiedDate":"2020-05-23"},{"lineNumber":502,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":503,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":504,"author":{"gitId":"-"},"content":" Expected: No person is deleted. Error details shown in the status message. Status bar remains the same.","lastModifiedDate":"2020-05-23"},{"lineNumber":505,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":506,"author":{"gitId":"-"},"content":" 1. Other incorrect delete commands to try: `delete`, `delete x`, `...` (where x is larger than the list size)\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":507,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":508,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":509,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":510,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":511,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":512,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":513,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":514,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":515,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":516,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":517,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"dwangwk":126,"yespiggy":15,"-":376}},{"path":"docs/team/danielwang.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"dwangwk"},"content":"---","lastModifiedDate":"2024-03-07"},{"lineNumber":2,"author":{"gitId":"dwangwk"},"content":" layout: default.md","lastModifiedDate":"2024-03-07"},{"lineNumber":3,"author":{"gitId":"dwangwk"},"content":" title: \"Daniel Wang\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-07"},{"lineNumber":4,"author":{"gitId":"dwangwk"},"content":"---","lastModifiedDate":"2024-03-07"},{"lineNumber":5,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":6,"author":{"gitId":"dwangwk"},"content":"### Project: AddressBook Level 3","lastModifiedDate":"2024-03-07"},{"lineNumber":7,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":8,"author":{"gitId":"dwangwk"},"content":"AddressBook - Level 3 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.","lastModifiedDate":"2024-03-07"},{"lineNumber":9,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":10,"author":{"gitId":"dwangwk"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-03-07"},{"lineNumber":11,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":12,"author":{"gitId":"dwangwk"},"content":"* **New Feature**: Added the ability to delete startups from the project.","lastModifiedDate":"2024-03-07"},{"lineNumber":13,"author":{"gitId":"dwangwk"},"content":" * What it does: This allows users to delete startups from the Capital Connect data.","lastModifiedDate":"2024-03-07"},{"lineNumber":14,"author":{"gitId":"dwangwk"},"content":" * Justification: This is imperative for our users to upkeep the data with the latest information.","lastModifiedDate":"2024-03-07"},{"lineNumber":15,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":16,"author":{"gitId":"dwangwk"},"content":"* **Code contributed**: [RepoSense link]()","lastModifiedDate":"2024-03-07"},{"lineNumber":17,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":18,"author":{"gitId":"dwangwk"},"content":"* **Project management**:","lastModifiedDate":"2024-03-07"},{"lineNumber":19,"author":{"gitId":"dwangwk"},"content":" * Managed releases `v1.3` - `v1.5rc` (3 releases) on GitHub","lastModifiedDate":"2024-03-07"},{"lineNumber":20,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":21,"author":{"gitId":"dwangwk"},"content":"* **Enhancements to existing features**:","lastModifiedDate":"2024-03-07"},{"lineNumber":22,"author":{"gitId":"dwangwk"},"content":" * Updated the GUI color scheme (Pull requests [\\#33](), [\\#34]())","lastModifiedDate":"2024-03-07"},{"lineNumber":23,"author":{"gitId":"dwangwk"},"content":" * Wrote additional tests for existing features to increase coverage from 88% to 92% (Pull requests [\\#36](), [\\#38]())","lastModifiedDate":"2024-03-07"},{"lineNumber":24,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":25,"author":{"gitId":"dwangwk"},"content":"* **Documentation**:","lastModifiedDate":"2024-03-07"},{"lineNumber":26,"author":{"gitId":"dwangwk"},"content":" * User Guide:","lastModifiedDate":"2024-03-07"},{"lineNumber":27,"author":{"gitId":"dwangwk"},"content":" * Added documentation for the features `delete` and `find` [\\#72]()","lastModifiedDate":"2024-03-07"},{"lineNumber":28,"author":{"gitId":"dwangwk"},"content":" * Did cosmetic tweaks to existing documentation of features `clear`, `exit`: [\\#74]()","lastModifiedDate":"2024-03-07"},{"lineNumber":29,"author":{"gitId":"dwangwk"},"content":" * Developer Guide:","lastModifiedDate":"2024-03-07"},{"lineNumber":30,"author":{"gitId":"dwangwk"},"content":" * Added implementation details of the `delete` feature.","lastModifiedDate":"2024-03-07"},{"lineNumber":31,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":32,"author":{"gitId":"dwangwk"},"content":"* **Community**:","lastModifiedDate":"2024-03-07"},{"lineNumber":33,"author":{"gitId":"dwangwk"},"content":" * PRs reviewed (with non-trivial review comments): [\\#12](), [\\#32](), [\\#19](), [\\#42]()","lastModifiedDate":"2024-03-07"},{"lineNumber":34,"author":{"gitId":"dwangwk"},"content":" * Contributed to forum discussions (examples: [1](), [2](), [3](), [4]())","lastModifiedDate":"2024-03-07"},{"lineNumber":35,"author":{"gitId":"dwangwk"},"content":" * Reported bugs and suggestions for other teams in the class (examples: [1](), [2](), [3]())","lastModifiedDate":"2024-03-07"},{"lineNumber":36,"author":{"gitId":"dwangwk"},"content":" * Some parts of the history feature I added was adopted by several other class mates ([1](), [2]())","lastModifiedDate":"2024-03-07"},{"lineNumber":37,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":38,"author":{"gitId":"dwangwk"},"content":"* **Tools**:","lastModifiedDate":"2024-03-07"},{"lineNumber":39,"author":{"gitId":"dwangwk"},"content":" * Integrated a third party library (Natty) to the project ([\\#42]())","lastModifiedDate":"2024-03-07"},{"lineNumber":40,"author":{"gitId":"dwangwk"},"content":" * Integrated a new Github plugin (CircleCI) to the team repo","lastModifiedDate":"2024-03-07"},{"lineNumber":41,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":42,"author":{"gitId":"dwangwk"},"content":"* _{you can add/remove categories in the list above}_","lastModifiedDate":"2024-03-07"}],"authorContributionMap":{"dwangwk":42}},{"path":"docs/team/natasya.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"dwangwk"},"content":"---","lastModifiedDate":"2024-03-07"},{"lineNumber":2,"author":{"gitId":"dwangwk"},"content":" layout: default.md","lastModifiedDate":"2024-03-07"},{"lineNumber":3,"author":{"gitId":"dwangwk"},"content":" title: \"Natasya\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-07"},{"lineNumber":4,"author":{"gitId":"dwangwk"},"content":"---","lastModifiedDate":"2024-03-07"},{"lineNumber":5,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":6,"author":{"gitId":"dwangwk"},"content":"### Project: AddressBook Level 3","lastModifiedDate":"2024-03-07"},{"lineNumber":7,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":8,"author":{"gitId":"dwangwk"},"content":"AddressBook - Level 3 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.","lastModifiedDate":"2024-03-07"},{"lineNumber":9,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":10,"author":{"gitId":"dwangwk"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-03-07"},{"lineNumber":11,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":12,"author":{"gitId":"dwangwk"},"content":"* **New Feature**: Added the ability to delete startups from the project.","lastModifiedDate":"2024-03-07"},{"lineNumber":13,"author":{"gitId":"dwangwk"},"content":" * What it does: This allows users to delete startups from the Capital Connect data.","lastModifiedDate":"2024-03-07"},{"lineNumber":14,"author":{"gitId":"dwangwk"},"content":" * Justification: This is imperative for our users to upkeep the data with the latest information.","lastModifiedDate":"2024-03-07"},{"lineNumber":15,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":16,"author":{"gitId":"dwangwk"},"content":"* **Code contributed**: [RepoSense link]()","lastModifiedDate":"2024-03-07"},{"lineNumber":17,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":18,"author":{"gitId":"dwangwk"},"content":"* **Project management**:","lastModifiedDate":"2024-03-07"},{"lineNumber":19,"author":{"gitId":"dwangwk"},"content":" * Managed releases `v1.3` - `v1.5rc` (3 releases) on GitHub","lastModifiedDate":"2024-03-07"},{"lineNumber":20,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":21,"author":{"gitId":"dwangwk"},"content":"* **Enhancements to existing features**:","lastModifiedDate":"2024-03-07"},{"lineNumber":22,"author":{"gitId":"dwangwk"},"content":" * Updated the GUI color scheme (Pull requests [\\#33](), [\\#34]())","lastModifiedDate":"2024-03-07"},{"lineNumber":23,"author":{"gitId":"dwangwk"},"content":" * Wrote additional tests for existing features to increase coverage from 88% to 92% (Pull requests [\\#36](), [\\#38]())","lastModifiedDate":"2024-03-07"},{"lineNumber":24,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":25,"author":{"gitId":"dwangwk"},"content":"* **Documentation**:","lastModifiedDate":"2024-03-07"},{"lineNumber":26,"author":{"gitId":"dwangwk"},"content":" * User Guide:","lastModifiedDate":"2024-03-07"},{"lineNumber":27,"author":{"gitId":"dwangwk"},"content":" * Added documentation for the features `delete` and `find` [\\#72]()","lastModifiedDate":"2024-03-07"},{"lineNumber":28,"author":{"gitId":"dwangwk"},"content":" * Did cosmetic tweaks to existing documentation of features `clear`, `exit`: [\\#74]()","lastModifiedDate":"2024-03-07"},{"lineNumber":29,"author":{"gitId":"dwangwk"},"content":" * Developer Guide:","lastModifiedDate":"2024-03-07"},{"lineNumber":30,"author":{"gitId":"dwangwk"},"content":" * Added implementation details of the `delete` feature.","lastModifiedDate":"2024-03-07"},{"lineNumber":31,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":32,"author":{"gitId":"dwangwk"},"content":"* **Community**:","lastModifiedDate":"2024-03-07"},{"lineNumber":33,"author":{"gitId":"dwangwk"},"content":" * PRs reviewed (with non-trivial review comments): [\\#12](), [\\#32](), [\\#19](), [\\#42]()","lastModifiedDate":"2024-03-07"},{"lineNumber":34,"author":{"gitId":"dwangwk"},"content":" * Contributed to forum discussions (examples: [1](), [2](), [3](), [4]())","lastModifiedDate":"2024-03-07"},{"lineNumber":35,"author":{"gitId":"dwangwk"},"content":" * Reported bugs and suggestions for other teams in the class (examples: [1](), [2](), [3]())","lastModifiedDate":"2024-03-07"},{"lineNumber":36,"author":{"gitId":"dwangwk"},"content":" * Some parts of the history feature I added was adopted by several other class mates ([1](), [2]())","lastModifiedDate":"2024-03-07"},{"lineNumber":37,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":38,"author":{"gitId":"dwangwk"},"content":"* **Tools**:","lastModifiedDate":"2024-03-07"},{"lineNumber":39,"author":{"gitId":"dwangwk"},"content":" * Integrated a third party library (Natty) to the project ([\\#42]())","lastModifiedDate":"2024-03-07"},{"lineNumber":40,"author":{"gitId":"dwangwk"},"content":" * Integrated a new Github plugin (CircleCI) to the team repo","lastModifiedDate":"2024-03-07"},{"lineNumber":41,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":42,"author":{"gitId":"dwangwk"},"content":"* _{you can add/remove categories in the list above}_","lastModifiedDate":"2024-03-07"}],"authorContributionMap":{"dwangwk":42}},{"path":"docs/team/shuheng.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"John Doe\u0027s Project Portfolio Page\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"### Project: AddressBook Level 3","lastModifiedDate":"2021-07-30"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":8,"author":{"gitId":"-"},"content":"AddressBook - Level 3 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":10,"author":{"gitId":"-"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2020-05-23"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"yeoshuheng"},"content":"* **New Feature**: Added the ability to add startups to the project.","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"yeoshuheng"},"content":" * What it does: This allows users to add startups to Capital Connect alongside information such as funding stage.","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"yeoshuheng"},"content":" * Justification: This is imperative for our users as they consist of key information they have to track.","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"-"},"content":"* **New Feature**: Added a history command that allows the user to navigate to previous commands using up/down keys.","lastModifiedDate":"2020-05-23"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"* **Code contributed**: [RepoSense link]()","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"-"},"content":"* **Project management**:","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":" * Managed releases `v1.3` - `v1.5rc` (3 releases) on GitHub","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"-"},"content":"* **Enhancements to existing features**:","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * Updated the GUI color scheme (Pull requests [\\#33](), [\\#34]())","lastModifiedDate":"2020-05-23"},{"lineNumber":25,"author":{"gitId":"-"},"content":" * Wrote additional tests for existing features to increase coverage from 88% to 92% (Pull requests [\\#36](), [\\#38]())","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":27,"author":{"gitId":"-"},"content":"* **Documentation**:","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":" * User Guide:","lastModifiedDate":"2020-05-23"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * Added documentation for the features `delete` and `find` [\\#72]()","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":" * Did cosmetic tweaks to existing documentation of features `clear`, `exit`: [\\#74]()","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * Developer Guide:","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"-"},"content":" * Added implementation details of the `delete` feature.","lastModifiedDate":"2020-05-23"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"-"},"content":"* **Community**:","lastModifiedDate":"2020-05-23"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * PRs reviewed (with non-trivial review comments): [\\#12](), [\\#32](), [\\#19](), [\\#42]()","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * Contributed to forum discussions (examples: [1](), [2](), [3](), [4]())","lastModifiedDate":"2020-05-23"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * Reported bugs and suggestions for other teams in the class (examples: [1](), [2](), [3]())","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":" * Some parts of the history feature I added was adopted by several other class mates ([1](), [2]())","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":40,"author":{"gitId":"-"},"content":"* **Tools**:","lastModifiedDate":"2020-05-23"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * Integrated a third party library (Natty) to the project ([\\#42]())","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * Integrated a new Github plugin (CircleCI) to the team repo","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"-"},"content":"* _{you can add/remove categories in the list above}_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"-":41,"yeoshuheng":3}},{"path":"docs/team/sifan.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"dwangwk"},"content":"---","lastModifiedDate":"2024-03-07"},{"lineNumber":2,"author":{"gitId":"dwangwk"},"content":" layout: default.md","lastModifiedDate":"2024-03-07"},{"lineNumber":3,"author":{"gitId":"dwangwk"},"content":" title: \"Si Fan\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-07"},{"lineNumber":4,"author":{"gitId":"dwangwk"},"content":"---","lastModifiedDate":"2024-03-07"},{"lineNumber":5,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":6,"author":{"gitId":"dwangwk"},"content":"### Project: AddressBook Level 3","lastModifiedDate":"2024-03-07"},{"lineNumber":7,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":8,"author":{"gitId":"dwangwk"},"content":"AddressBook - Level 3 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.","lastModifiedDate":"2024-03-07"},{"lineNumber":9,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":10,"author":{"gitId":"dwangwk"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-03-07"},{"lineNumber":11,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":12,"author":{"gitId":"dwangwk"},"content":"* **New Feature**: Added the ability to delete startups from the project.","lastModifiedDate":"2024-03-07"},{"lineNumber":13,"author":{"gitId":"dwangwk"},"content":" * What it does: This allows users to delete startups from the Capital Connect data.","lastModifiedDate":"2024-03-07"},{"lineNumber":14,"author":{"gitId":"dwangwk"},"content":" * Justification: This is imperative for our users to upkeep the data with the latest information.","lastModifiedDate":"2024-03-07"},{"lineNumber":15,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":16,"author":{"gitId":"dwangwk"},"content":"* **Code contributed**: [RepoSense link]()","lastModifiedDate":"2024-03-07"},{"lineNumber":17,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":18,"author":{"gitId":"dwangwk"},"content":"* **Project management**:","lastModifiedDate":"2024-03-07"},{"lineNumber":19,"author":{"gitId":"dwangwk"},"content":" * Managed releases `v1.3` - `v1.5rc` (3 releases) on GitHub","lastModifiedDate":"2024-03-07"},{"lineNumber":20,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":21,"author":{"gitId":"dwangwk"},"content":"* **Enhancements to existing features**:","lastModifiedDate":"2024-03-07"},{"lineNumber":22,"author":{"gitId":"dwangwk"},"content":" * Updated the GUI color scheme (Pull requests [\\#33](), [\\#34]())","lastModifiedDate":"2024-03-07"},{"lineNumber":23,"author":{"gitId":"dwangwk"},"content":" * Wrote additional tests for existing features to increase coverage from 88% to 92% (Pull requests [\\#36](), [\\#38]())","lastModifiedDate":"2024-03-07"},{"lineNumber":24,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":25,"author":{"gitId":"dwangwk"},"content":"* **Documentation**:","lastModifiedDate":"2024-03-07"},{"lineNumber":26,"author":{"gitId":"dwangwk"},"content":" * User Guide:","lastModifiedDate":"2024-03-07"},{"lineNumber":27,"author":{"gitId":"dwangwk"},"content":" * Added documentation for the features `delete` and `find` [\\#72]()","lastModifiedDate":"2024-03-07"},{"lineNumber":28,"author":{"gitId":"dwangwk"},"content":" * Did cosmetic tweaks to existing documentation of features `clear`, `exit`: [\\#74]()","lastModifiedDate":"2024-03-07"},{"lineNumber":29,"author":{"gitId":"dwangwk"},"content":" * Developer Guide:","lastModifiedDate":"2024-03-07"},{"lineNumber":30,"author":{"gitId":"dwangwk"},"content":" * Added implementation details of the `delete` feature.","lastModifiedDate":"2024-03-07"},{"lineNumber":31,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":32,"author":{"gitId":"dwangwk"},"content":"* **Community**:","lastModifiedDate":"2024-03-07"},{"lineNumber":33,"author":{"gitId":"dwangwk"},"content":" * PRs reviewed (with non-trivial review comments): [\\#12](), [\\#32](), [\\#19](), [\\#42]()","lastModifiedDate":"2024-03-07"},{"lineNumber":34,"author":{"gitId":"dwangwk"},"content":" * Contributed to forum discussions (examples: [1](), [2](), [3](), [4]())","lastModifiedDate":"2024-03-07"},{"lineNumber":35,"author":{"gitId":"dwangwk"},"content":" * Reported bugs and suggestions for other teams in the class (examples: [1](), [2](), [3]())","lastModifiedDate":"2024-03-07"},{"lineNumber":36,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":37,"author":{"gitId":"dwangwk"},"content":"* **Tools**:","lastModifiedDate":"2024-03-07"},{"lineNumber":38,"author":{"gitId":"dwangwk"},"content":" * Integrated a third party library (Natty) to the project ([\\#42]())","lastModifiedDate":"2024-03-07"},{"lineNumber":39,"author":{"gitId":"dwangwk"},"content":" * Integrated a new Github plugin (CircleCI) to the team repo","lastModifiedDate":"2024-03-07"},{"lineNumber":40,"author":{"gitId":"dwangwk"},"content":"","lastModifiedDate":"2024-03-07"},{"lineNumber":41,"author":{"gitId":"dwangwk"},"content":"* _{you can add/remove categories in the list above}_","lastModifiedDate":"2024-03-07"}],"authorContributionMap":{"dwangwk":41}},{"path":"src/main/java/seedu/address/logic/Messages.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic;","lastModifiedDate":"2023-07-13"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2023-07-14"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-07-14"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.stream.Stream;","lastModifiedDate":"2023-07-14"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.Prefix;","lastModifiedDate":"2023-07-14"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2019-02-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":10,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":" * Container for user visible messages.","lastModifiedDate":"2016-08-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":"public class Messages {","lastModifiedDate":"2016-08-24"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":" public static final String MESSAGE_UNKNOWN_COMMAND \u003d \"Unknown command\";","lastModifiedDate":"2016-09-21"},{"lineNumber":16,"author":{"gitId":"-"},"content":" public static final String MESSAGE_INVALID_COMMAND_FORMAT \u003d \"Invalid command format! \\n%1$s\";","lastModifiedDate":"2016-08-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":" public static final String MESSAGE_INVALID_PERSON_DISPLAYED_INDEX \u003d \"The person index provided is invalid\";","lastModifiedDate":"2016-08-24"},{"lineNumber":18,"author":{"gitId":"-"},"content":" public static final String MESSAGE_PERSONS_LISTED_OVERVIEW \u003d \"%1$d persons listed!\";","lastModifiedDate":"2016-08-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":" public static final String MESSAGE_DUPLICATE_FIELDS \u003d","lastModifiedDate":"2023-07-14"},{"lineNumber":20,"author":{"gitId":"-"},"content":" \"Multiple values specified for the following single-valued field(s): \";","lastModifiedDate":"2023-07-14"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":22,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2023-07-14"},{"lineNumber":23,"author":{"gitId":"-"},"content":" * Returns an error message indicating the duplicate prefixes.","lastModifiedDate":"2023-07-14"},{"lineNumber":24,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2023-07-14"},{"lineNumber":25,"author":{"gitId":"-"},"content":" public static String getErrorMessageForDuplicatePrefixes(Prefix... duplicatePrefixes) {","lastModifiedDate":"2023-07-14"},{"lineNumber":26,"author":{"gitId":"-"},"content":" assert duplicatePrefixes.length \u003e 0;","lastModifiedDate":"2023-07-14"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":28,"author":{"gitId":"-"},"content":" Set\u003cString\u003e duplicateFields \u003d","lastModifiedDate":"2023-07-14"},{"lineNumber":29,"author":{"gitId":"-"},"content":" Stream.of(duplicatePrefixes).map(Prefix::toString).collect(Collectors.toSet());","lastModifiedDate":"2023-07-14"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":31,"author":{"gitId":"-"},"content":" return MESSAGE_DUPLICATE_FIELDS + String.join(\" \", duplicateFields);","lastModifiedDate":"2023-07-14"},{"lineNumber":32,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-14"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-28"},{"lineNumber":34,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2019-02-23"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * Formats the {@code person} for display to the user.","lastModifiedDate":"2019-02-23"},{"lineNumber":36,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2019-02-23"},{"lineNumber":37,"author":{"gitId":"-"},"content":" public static String format(Person person) {","lastModifiedDate":"2019-02-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":" final StringBuilder builder \u003d new StringBuilder();","lastModifiedDate":"2019-02-23"},{"lineNumber":39,"author":{"gitId":"-"},"content":" builder.append(person.getName())","lastModifiedDate":"2019-02-23"},{"lineNumber":40,"author":{"gitId":"yeoshuheng"},"content":" .append(\"; Industry: \")","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"yeoshuheng"},"content":" .append(person.getIndustry())","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"yeoshuheng"},"content":" .append(\"; Funding Stage: \")","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"yeoshuheng"},"content":" .append(person.getFundingStage())","lastModifiedDate":"2024-02-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" .append(\"; Phone: \")","lastModifiedDate":"2019-02-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":" .append(person.getPhone())","lastModifiedDate":"2019-02-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":" .append(\"; Email: \")","lastModifiedDate":"2019-02-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":" .append(person.getEmail())","lastModifiedDate":"2019-02-23"},{"lineNumber":48,"author":{"gitId":"-"},"content":" .append(\"; Address: \")","lastModifiedDate":"2019-02-23"},{"lineNumber":49,"author":{"gitId":"-"},"content":" .append(person.getAddress())","lastModifiedDate":"2019-02-23"},{"lineNumber":50,"author":{"gitId":"-"},"content":" .append(\"; Tags: \");","lastModifiedDate":"2019-02-23"},{"lineNumber":51,"author":{"gitId":"-"},"content":" person.getTags().forEach(builder::append);","lastModifiedDate":"2019-02-23"},{"lineNumber":52,"author":{"gitId":"-"},"content":" return builder.toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-24"}],"authorContributionMap":{"-":51,"yeoshuheng":4}},{"path":"src/main/java/seedu/address/logic/commands/AddCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.commands;","lastModifiedDate":"2016-09-22"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2017-05-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2024-02-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2024-02-25"},{"lineNumber":6,"author":{"gitId":"yeoshuheng"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_FUNDING_STAGE;","lastModifiedDate":"2024-02-25"},{"lineNumber":7,"author":{"gitId":"yeoshuheng"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INDUSTRY;","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-09"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.ToStringBuilder;","lastModifiedDate":"2019-02-23"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.logic.Messages;","lastModifiedDate":"2023-07-13"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.exceptions.CommandException;","lastModifiedDate":"2017-02-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.model.Model;","lastModifiedDate":"2018-08-08"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2017-01-18"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":18,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * Adds a person to the address book.","lastModifiedDate":"2016-08-24"},{"lineNumber":20,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":21,"author":{"gitId":"-"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2018-04-19"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":23,"author":{"gitId":"-"},"content":" public static final String COMMAND_WORD \u003d \"add\";","lastModifiedDate":"2016-08-24"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":25,"author":{"gitId":"-"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Adds a person to the address book. \"","lastModifiedDate":"2016-08-24"},{"lineNumber":26,"author":{"gitId":"-"},"content":" + \"Parameters: \"","lastModifiedDate":"2017-06-06"},{"lineNumber":27,"author":{"gitId":"-"},"content":" + PREFIX_NAME + \"NAME \"","lastModifiedDate":"2017-06-06"},{"lineNumber":28,"author":{"gitId":"yeoshuheng"},"content":" + PREFIX_INDUSTRY + \"INDUSTRY \"","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"yeoshuheng"},"content":" + PREFIX_FUNDING_STAGE + \"FUNDING STAGE \"","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" + PREFIX_PHONE + \"PHONE \"","lastModifiedDate":"2017-05-09"},{"lineNumber":31,"author":{"gitId":"-"},"content":" + PREFIX_EMAIL + \"EMAIL \"","lastModifiedDate":"2017-05-09"},{"lineNumber":32,"author":{"gitId":"-"},"content":" + PREFIX_ADDRESS + \"ADDRESS \"","lastModifiedDate":"2017-05-09"},{"lineNumber":33,"author":{"gitId":"-"},"content":" + \"[\" + PREFIX_TAG + \"TAG]...\\n\"","lastModifiedDate":"2017-05-09"},{"lineNumber":34,"author":{"gitId":"-"},"content":" + \"Example: \" + COMMAND_WORD + \" \"","lastModifiedDate":"2017-06-06"},{"lineNumber":35,"author":{"gitId":"-"},"content":" + PREFIX_NAME + \"John Doe \"","lastModifiedDate":"2017-06-06"},{"lineNumber":36,"author":{"gitId":"-"},"content":" + PREFIX_PHONE + \"98765432 \"","lastModifiedDate":"2017-05-09"},{"lineNumber":37,"author":{"gitId":"-"},"content":" + PREFIX_EMAIL + \"johnd@example.com \"","lastModifiedDate":"2017-05-09"},{"lineNumber":38,"author":{"gitId":"-"},"content":" + PREFIX_ADDRESS + \"311, Clementi Ave 2, #02-25 \"","lastModifiedDate":"2017-05-09"},{"lineNumber":39,"author":{"gitId":"-"},"content":" + PREFIX_TAG + \"friends \"","lastModifiedDate":"2017-05-09"},{"lineNumber":40,"author":{"gitId":"-"},"content":" + PREFIX_TAG + \"owesMoney\";","lastModifiedDate":"2017-05-09"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":42,"author":{"gitId":"-"},"content":" public static final String MESSAGE_SUCCESS \u003d \"New person added: %1$s\";","lastModifiedDate":"2016-08-24"},{"lineNumber":43,"author":{"gitId":"-"},"content":" public static final String MESSAGE_DUPLICATE_PERSON \u003d \"This person already exists in the address book\";","lastModifiedDate":"2016-08-24"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":45,"author":{"gitId":"-"},"content":" private final Person toAdd;","lastModifiedDate":"2016-08-24"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":47,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-09-21"},{"lineNumber":48,"author":{"gitId":"-"},"content":" * Creates an AddCommand to add the specified {@code Person}","lastModifiedDate":"2018-01-10"},{"lineNumber":49,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-09-21"},{"lineNumber":50,"author":{"gitId":"-"},"content":" public AddCommand(Person person) {","lastModifiedDate":"2018-01-10"},{"lineNumber":51,"author":{"gitId":"-"},"content":" requireNonNull(person);","lastModifiedDate":"2018-01-10"},{"lineNumber":52,"author":{"gitId":"-"},"content":" toAdd \u003d person;","lastModifiedDate":"2018-01-10"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-21"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":55,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":56,"author":{"gitId":"-"},"content":" public CommandResult execute(Model model) throws CommandException {","lastModifiedDate":"2019-01-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" requireNonNull(model);","lastModifiedDate":"2017-05-15"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-07"},{"lineNumber":59,"author":{"gitId":"-"},"content":" if (model.hasPerson(toAdd)) {","lastModifiedDate":"2018-08-07"},{"lineNumber":60,"author":{"gitId":"-"},"content":" throw new CommandException(MESSAGE_DUPLICATE_PERSON);","lastModifiedDate":"2018-08-07"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-07"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-07"},{"lineNumber":63,"author":{"gitId":"-"},"content":" model.addPerson(toAdd);","lastModifiedDate":"2016-09-25"},{"lineNumber":64,"author":{"gitId":"-"},"content":" return new CommandResult(String.format(MESSAGE_SUCCESS, Messages.format(toAdd)));","lastModifiedDate":"2019-02-23"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":67,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-06-22"},{"lineNumber":68,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2017-06-22"},{"lineNumber":69,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2023-07-13"},{"lineNumber":70,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2023-07-13"},{"lineNumber":71,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-13"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-13"},{"lineNumber":73,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2023-07-13"},{"lineNumber":74,"author":{"gitId":"-"},"content":" if (!(other instanceof AddCommand)) {","lastModifiedDate":"2023-07-13"},{"lineNumber":75,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2023-07-13"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-13"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-13"},{"lineNumber":78,"author":{"gitId":"-"},"content":" AddCommand otherAddCommand \u003d (AddCommand) other;","lastModifiedDate":"2023-07-13"},{"lineNumber":79,"author":{"gitId":"-"},"content":" return toAdd.equals(otherAddCommand.toAdd);","lastModifiedDate":"2023-07-13"},{"lineNumber":80,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-22"},{"lineNumber":81,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":82,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2019-02-23"},{"lineNumber":83,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2019-02-23"},{"lineNumber":84,"author":{"gitId":"-"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2019-02-23"},{"lineNumber":85,"author":{"gitId":"-"},"content":" .add(\"toAdd\", toAdd)","lastModifiedDate":"2019-02-23"},{"lineNumber":86,"author":{"gitId":"-"},"content":" .toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":87,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":88,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-24"}],"authorContributionMap":{"-":84,"yeoshuheng":4}},{"path":"src/main/java/seedu/address/logic/commands/EditCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.commands;","lastModifiedDate":"2016-12-26"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2017-05-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2024-02-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2024-02-25"},{"lineNumber":6,"author":{"gitId":"yeoshuheng"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_FUNDING_STAGE;","lastModifiedDate":"2024-02-25"},{"lineNumber":7,"author":{"gitId":"yeoshuheng"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INDUSTRY;","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import static seedu.address.model.Model.PREDICATE_SHOW_ALL_PERSONS;","lastModifiedDate":"2017-08-05"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-09"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import java.util.Collections;","lastModifiedDate":"2018-01-11"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import java.util.HashSet;","lastModifiedDate":"2018-01-11"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2016-12-26"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import java.util.Objects;","lastModifiedDate":"2023-07-13"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import java.util.Optional;","lastModifiedDate":"2016-12-26"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-03-07"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2017-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.CollectionUtil;","lastModifiedDate":"2016-12-26"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.ToStringBuilder;","lastModifiedDate":"2019-02-23"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import seedu.address.logic.Messages;","lastModifiedDate":"2023-07-13"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.exceptions.CommandException;","lastModifiedDate":"2017-02-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import seedu.address.model.Model;","lastModifiedDate":"2018-08-08"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.model.person.FundingStage;","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.model.person.Industry;","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2024-02-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-03-07"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":35,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-12-26"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * Edits the details of an existing person in the address book.","lastModifiedDate":"2016-12-26"},{"lineNumber":37,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-26"},{"lineNumber":38,"author":{"gitId":"-"},"content":"public class EditCommand extends Command {","lastModifiedDate":"2018-04-19"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":40,"author":{"gitId":"-"},"content":" public static final String COMMAND_WORD \u003d \"edit\";","lastModifiedDate":"2016-12-26"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":42,"author":{"gitId":"-"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Edits the details of the person identified \"","lastModifiedDate":"2016-12-26"},{"lineNumber":43,"author":{"gitId":"-"},"content":" + \"by the index number used in the displayed person list. \"","lastModifiedDate":"2018-04-01"},{"lineNumber":44,"author":{"gitId":"-"},"content":" + \"Existing values will be overwritten by the input values.\\n\"","lastModifiedDate":"2016-12-26"},{"lineNumber":45,"author":{"gitId":"-"},"content":" + \"Parameters: INDEX (must be a positive integer) \"","lastModifiedDate":"2017-06-06"},{"lineNumber":46,"author":{"gitId":"-"},"content":" + \"[\" + PREFIX_NAME + \"NAME] \"","lastModifiedDate":"2017-06-06"},{"lineNumber":47,"author":{"gitId":"yeoshuheng"},"content":" + \"[\" + PREFIX_INDUSTRY + \"INDUSTRY\" + \"] \"","lastModifiedDate":"2024-02-25"},{"lineNumber":48,"author":{"gitId":"yeoshuheng"},"content":" + \"[\" + PREFIX_FUNDING_STAGE + \"FUNDING STAGE] \"","lastModifiedDate":"2024-02-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" + \"[\" + PREFIX_PHONE + \"PHONE] \"","lastModifiedDate":"2017-05-09"},{"lineNumber":50,"author":{"gitId":"-"},"content":" + \"[\" + PREFIX_EMAIL + \"EMAIL] \"","lastModifiedDate":"2017-05-09"},{"lineNumber":51,"author":{"gitId":"-"},"content":" + \"[\" + PREFIX_ADDRESS + \"ADDRESS] \"","lastModifiedDate":"2017-05-09"},{"lineNumber":52,"author":{"gitId":"-"},"content":" + \"[\" + PREFIX_TAG + \"TAG]...\\n\"","lastModifiedDate":"2017-05-09"},{"lineNumber":53,"author":{"gitId":"-"},"content":" + \"Example: \" + COMMAND_WORD + \" 1 \"","lastModifiedDate":"2017-05-09"},{"lineNumber":54,"author":{"gitId":"-"},"content":" + PREFIX_PHONE + \"91234567 \"","lastModifiedDate":"2017-05-09"},{"lineNumber":55,"author":{"gitId":"-"},"content":" + PREFIX_EMAIL + \"johndoe@example.com\";","lastModifiedDate":"2017-05-09"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":57,"author":{"gitId":"-"},"content":" public static final String MESSAGE_EDIT_PERSON_SUCCESS \u003d \"Edited Person: %1$s\";","lastModifiedDate":"2016-12-26"},{"lineNumber":58,"author":{"gitId":"-"},"content":" public static final String MESSAGE_NOT_EDITED \u003d \"At least one field to edit must be provided.\";","lastModifiedDate":"2016-12-26"},{"lineNumber":59,"author":{"gitId":"-"},"content":" public static final String MESSAGE_DUPLICATE_PERSON \u003d \"This person already exists in the address book.\";","lastModifiedDate":"2016-12-26"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":61,"author":{"gitId":"-"},"content":" private final Index index;","lastModifiedDate":"2017-05-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" private final EditPersonDescriptor editPersonDescriptor;","lastModifiedDate":"2016-12-26"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":64,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-12-26"},{"lineNumber":65,"author":{"gitId":"-"},"content":" * @param index of the person in the filtered person list to edit","lastModifiedDate":"2017-05-25"},{"lineNumber":66,"author":{"gitId":"-"},"content":" * @param editPersonDescriptor details to edit the person with","lastModifiedDate":"2016-12-26"},{"lineNumber":67,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-26"},{"lineNumber":68,"author":{"gitId":"-"},"content":" public EditCommand(Index index, EditPersonDescriptor editPersonDescriptor) {","lastModifiedDate":"2017-05-25"},{"lineNumber":69,"author":{"gitId":"-"},"content":" requireNonNull(index);","lastModifiedDate":"2017-05-25"},{"lineNumber":70,"author":{"gitId":"-"},"content":" requireNonNull(editPersonDescriptor);","lastModifiedDate":"2017-05-15"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":72,"author":{"gitId":"-"},"content":" this.index \u003d index;","lastModifiedDate":"2017-05-25"},{"lineNumber":73,"author":{"gitId":"-"},"content":" this.editPersonDescriptor \u003d new EditPersonDescriptor(editPersonDescriptor);","lastModifiedDate":"2016-12-26"},{"lineNumber":74,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":76,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-12-26"},{"lineNumber":77,"author":{"gitId":"-"},"content":" public CommandResult execute(Model model) throws CommandException {","lastModifiedDate":"2019-01-25"},{"lineNumber":78,"author":{"gitId":"-"},"content":" requireNonNull(model);","lastModifiedDate":"2018-08-08"},{"lineNumber":79,"author":{"gitId":"-"},"content":" List\u003cPerson\u003e lastShownList \u003d model.getFilteredPersonList();","lastModifiedDate":"2018-04-19"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":81,"author":{"gitId":"-"},"content":" if (index.getZeroBased() \u003e\u003d lastShownList.size()) {","lastModifiedDate":"2018-04-19"},{"lineNumber":82,"author":{"gitId":"-"},"content":" throw new CommandException(Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX);","lastModifiedDate":"2018-04-19"},{"lineNumber":83,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-04-19"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":85,"author":{"gitId":"-"},"content":" Person personToEdit \u003d lastShownList.get(index.getZeroBased());","lastModifiedDate":"2018-04-19"},{"lineNumber":86,"author":{"gitId":"-"},"content":" Person editedPerson \u003d createEditedPerson(personToEdit, editPersonDescriptor);","lastModifiedDate":"2018-04-19"},{"lineNumber":87,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":88,"author":{"gitId":"-"},"content":" if (!personToEdit.isSamePerson(editedPerson) \u0026\u0026 model.hasPerson(editedPerson)) {","lastModifiedDate":"2018-08-07"},{"lineNumber":89,"author":{"gitId":"-"},"content":" throw new CommandException(MESSAGE_DUPLICATE_PERSON);","lastModifiedDate":"2018-08-07"},{"lineNumber":90,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-07"},{"lineNumber":91,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-07"},{"lineNumber":92,"author":{"gitId":"-"},"content":" model.setPerson(personToEdit, editedPerson);","lastModifiedDate":"2018-08-17"},{"lineNumber":93,"author":{"gitId":"-"},"content":" model.updateFilteredPersonList(PREDICATE_SHOW_ALL_PERSONS);","lastModifiedDate":"2017-08-05"},{"lineNumber":94,"author":{"gitId":"-"},"content":" return new CommandResult(String.format(MESSAGE_EDIT_PERSON_SUCCESS, Messages.format(editedPerson)));","lastModifiedDate":"2019-02-23"},{"lineNumber":95,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":97,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-12-26"},{"lineNumber":98,"author":{"gitId":"-"},"content":" * Creates and returns a {@code Person} with the details of {@code personToEdit}","lastModifiedDate":"2016-12-26"},{"lineNumber":99,"author":{"gitId":"-"},"content":" * edited with {@code editPersonDescriptor}.","lastModifiedDate":"2016-12-26"},{"lineNumber":100,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-26"},{"lineNumber":101,"author":{"gitId":"-"},"content":" private static Person createEditedPerson(Person personToEdit, EditPersonDescriptor editPersonDescriptor) {","lastModifiedDate":"2018-01-10"},{"lineNumber":102,"author":{"gitId":"-"},"content":" assert personToEdit !\u003d null;","lastModifiedDate":"2016-12-26"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":104,"author":{"gitId":"-"},"content":" Name updatedName \u003d editPersonDescriptor.getName().orElse(personToEdit.getName());","lastModifiedDate":"2017-06-21"},{"lineNumber":105,"author":{"gitId":"-"},"content":" Phone updatedPhone \u003d editPersonDescriptor.getPhone().orElse(personToEdit.getPhone());","lastModifiedDate":"2017-06-21"},{"lineNumber":106,"author":{"gitId":"yeoshuheng"},"content":" FundingStage updatedFundingStage \u003d editPersonDescriptor.getFundingStage().orElse(","lastModifiedDate":"2024-02-25"},{"lineNumber":107,"author":{"gitId":"yeoshuheng"},"content":" personToEdit.getFundingStage());","lastModifiedDate":"2024-02-25"},{"lineNumber":108,"author":{"gitId":"yeoshuheng"},"content":" Industry updatedIndustry \u003d editPersonDescriptor.getIndustry().orElse(personToEdit.getIndustry());","lastModifiedDate":"2024-02-25"},{"lineNumber":109,"author":{"gitId":"-"},"content":" Email updatedEmail \u003d editPersonDescriptor.getEmail().orElse(personToEdit.getEmail());","lastModifiedDate":"2017-06-21"},{"lineNumber":110,"author":{"gitId":"-"},"content":" Address updatedAddress \u003d editPersonDescriptor.getAddress().orElse(personToEdit.getAddress());","lastModifiedDate":"2017-06-21"},{"lineNumber":111,"author":{"gitId":"-"},"content":" Set\u003cTag\u003e updatedTags \u003d editPersonDescriptor.getTags().orElse(personToEdit.getTags());","lastModifiedDate":"2017-06-21"},{"lineNumber":112,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":113,"author":{"gitId":"yeoshuheng"},"content":" return new Person(updatedName, updatedFundingStage, updatedIndustry,","lastModifiedDate":"2024-02-25"},{"lineNumber":114,"author":{"gitId":"yeoshuheng"},"content":" updatedPhone, updatedEmail, updatedAddress, updatedTags);","lastModifiedDate":"2024-02-25"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":116,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":117,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-05-08"},{"lineNumber":118,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2017-05-08"},{"lineNumber":119,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2017-05-08"},{"lineNumber":120,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2017-05-08"},{"lineNumber":121,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-08"},{"lineNumber":122,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":123,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2017-05-08"},{"lineNumber":124,"author":{"gitId":"-"},"content":" if (!(other instanceof EditCommand)) {","lastModifiedDate":"2017-05-08"},{"lineNumber":125,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2017-05-08"},{"lineNumber":126,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-08"},{"lineNumber":127,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":128,"author":{"gitId":"-"},"content":" EditCommand otherEditCommand \u003d (EditCommand) other;","lastModifiedDate":"2023-07-13"},{"lineNumber":129,"author":{"gitId":"-"},"content":" return index.equals(otherEditCommand.index)","lastModifiedDate":"2023-07-13"},{"lineNumber":130,"author":{"gitId":"-"},"content":" \u0026\u0026 editPersonDescriptor.equals(otherEditCommand.editPersonDescriptor);","lastModifiedDate":"2023-07-13"},{"lineNumber":131,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-08"},{"lineNumber":132,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-08"},{"lineNumber":133,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2019-02-23"},{"lineNumber":134,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2019-02-23"},{"lineNumber":135,"author":{"gitId":"-"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2019-02-23"},{"lineNumber":136,"author":{"gitId":"-"},"content":" .add(\"index\", index)","lastModifiedDate":"2019-02-23"},{"lineNumber":137,"author":{"gitId":"-"},"content":" .add(\"editPersonDescriptor\", editPersonDescriptor)","lastModifiedDate":"2019-02-23"},{"lineNumber":138,"author":{"gitId":"-"},"content":" .toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":139,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":140,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":141,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-12-26"},{"lineNumber":142,"author":{"gitId":"-"},"content":" * Stores the details to edit the person with. Each non-empty field value will replace the","lastModifiedDate":"2016-12-26"},{"lineNumber":143,"author":{"gitId":"-"},"content":" * corresponding field value of the person.","lastModifiedDate":"2016-12-26"},{"lineNumber":144,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-26"},{"lineNumber":145,"author":{"gitId":"-"},"content":" public static class EditPersonDescriptor {","lastModifiedDate":"2016-12-26"},{"lineNumber":146,"author":{"gitId":"-"},"content":" private Name name;","lastModifiedDate":"2017-06-21"},{"lineNumber":147,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":148,"author":{"gitId":"yeoshuheng"},"content":" private Industry industry;","lastModifiedDate":"2024-02-25"},{"lineNumber":149,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":150,"author":{"gitId":"yeoshuheng"},"content":" private FundingStage fundingStage;","lastModifiedDate":"2024-02-25"},{"lineNumber":151,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":152,"author":{"gitId":"-"},"content":" private Phone phone;","lastModifiedDate":"2017-06-21"},{"lineNumber":153,"author":{"gitId":"-"},"content":" private Email email;","lastModifiedDate":"2017-06-21"},{"lineNumber":154,"author":{"gitId":"-"},"content":" private Address address;","lastModifiedDate":"2017-06-21"},{"lineNumber":155,"author":{"gitId":"-"},"content":" private Set\u003cTag\u003e tags;","lastModifiedDate":"2017-06-21"},{"lineNumber":156,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":157,"author":{"gitId":"-"},"content":" public EditPersonDescriptor() {}","lastModifiedDate":"2016-12-26"},{"lineNumber":158,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":159,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-01-11"},{"lineNumber":160,"author":{"gitId":"-"},"content":" * Copy constructor.","lastModifiedDate":"2018-01-11"},{"lineNumber":161,"author":{"gitId":"-"},"content":" * A defensive copy of {@code tags} is used internally.","lastModifiedDate":"2018-01-11"},{"lineNumber":162,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-01-11"},{"lineNumber":163,"author":{"gitId":"-"},"content":" public EditPersonDescriptor(EditPersonDescriptor toCopy) {","lastModifiedDate":"2016-12-26"},{"lineNumber":164,"author":{"gitId":"-"},"content":" setName(toCopy.name);","lastModifiedDate":"2018-01-15"},{"lineNumber":165,"author":{"gitId":"yeoshuheng"},"content":" setFundingStage(toCopy.fundingStage);","lastModifiedDate":"2024-02-25"},{"lineNumber":166,"author":{"gitId":"yeoshuheng"},"content":" setIndustry(toCopy.industry);","lastModifiedDate":"2024-02-25"},{"lineNumber":167,"author":{"gitId":"-"},"content":" setPhone(toCopy.phone);","lastModifiedDate":"2018-01-15"},{"lineNumber":168,"author":{"gitId":"-"},"content":" setEmail(toCopy.email);","lastModifiedDate":"2018-01-15"},{"lineNumber":169,"author":{"gitId":"-"},"content":" setAddress(toCopy.address);","lastModifiedDate":"2018-01-15"},{"lineNumber":170,"author":{"gitId":"-"},"content":" setTags(toCopy.tags);","lastModifiedDate":"2018-01-11"},{"lineNumber":171,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":172,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":173,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-12-26"},{"lineNumber":174,"author":{"gitId":"-"},"content":" * Returns true if at least one field is edited.","lastModifiedDate":"2016-12-26"},{"lineNumber":175,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-26"},{"lineNumber":176,"author":{"gitId":"-"},"content":" public boolean isAnyFieldEdited() {","lastModifiedDate":"2016-12-26"},{"lineNumber":177,"author":{"gitId":"yeoshuheng"},"content":" return CollectionUtil.isAnyNonNull(name, industry, fundingStage, phone, email, address, tags);","lastModifiedDate":"2024-02-25"},{"lineNumber":178,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":179,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":180,"author":{"gitId":"yeoshuheng"},"content":" public void setIndustry(Industry industry) {","lastModifiedDate":"2024-02-25"},{"lineNumber":181,"author":{"gitId":"yeoshuheng"},"content":" this.industry \u003d industry;","lastModifiedDate":"2024-02-25"},{"lineNumber":182,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":183,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":184,"author":{"gitId":"yeoshuheng"},"content":" public void setFundingStage(FundingStage fundingStage) {","lastModifiedDate":"2024-02-25"},{"lineNumber":185,"author":{"gitId":"yeoshuheng"},"content":" this.fundingStage \u003d fundingStage;","lastModifiedDate":"2024-02-25"},{"lineNumber":186,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":187,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":188,"author":{"gitId":"-"},"content":" public void setName(Name name) {","lastModifiedDate":"2017-06-21"},{"lineNumber":189,"author":{"gitId":"-"},"content":" this.name \u003d name;","lastModifiedDate":"2017-06-21"},{"lineNumber":190,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":191,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":192,"author":{"gitId":"-"},"content":" public Optional\u003cName\u003e getName() {","lastModifiedDate":"2016-12-26"},{"lineNumber":193,"author":{"gitId":"-"},"content":" return Optional.ofNullable(name);","lastModifiedDate":"2017-06-21"},{"lineNumber":194,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":195,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":196,"author":{"gitId":"yeoshuheng"},"content":" public Optional\u003cIndustry\u003e getIndustry() {","lastModifiedDate":"2024-02-25"},{"lineNumber":197,"author":{"gitId":"yeoshuheng"},"content":" return Optional.ofNullable(industry);","lastModifiedDate":"2024-02-25"},{"lineNumber":198,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":199,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":200,"author":{"gitId":"yeoshuheng"},"content":" public Optional\u003cFundingStage\u003e getFundingStage() {","lastModifiedDate":"2024-02-25"},{"lineNumber":201,"author":{"gitId":"yeoshuheng"},"content":" return Optional.ofNullable(fundingStage);","lastModifiedDate":"2024-02-25"},{"lineNumber":202,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":203,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":204,"author":{"gitId":"-"},"content":" public void setPhone(Phone phone) {","lastModifiedDate":"2017-06-21"},{"lineNumber":205,"author":{"gitId":"-"},"content":" this.phone \u003d phone;","lastModifiedDate":"2017-06-21"},{"lineNumber":206,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":207,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":208,"author":{"gitId":"-"},"content":" public Optional\u003cPhone\u003e getPhone() {","lastModifiedDate":"2016-12-26"},{"lineNumber":209,"author":{"gitId":"-"},"content":" return Optional.ofNullable(phone);","lastModifiedDate":"2017-06-21"},{"lineNumber":210,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":211,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":212,"author":{"gitId":"-"},"content":" public void setEmail(Email email) {","lastModifiedDate":"2017-06-21"},{"lineNumber":213,"author":{"gitId":"-"},"content":" this.email \u003d email;","lastModifiedDate":"2017-06-21"},{"lineNumber":214,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":215,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":216,"author":{"gitId":"-"},"content":" public Optional\u003cEmail\u003e getEmail() {","lastModifiedDate":"2016-12-26"},{"lineNumber":217,"author":{"gitId":"-"},"content":" return Optional.ofNullable(email);","lastModifiedDate":"2017-06-21"},{"lineNumber":218,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":219,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":220,"author":{"gitId":"-"},"content":" public void setAddress(Address address) {","lastModifiedDate":"2017-06-21"},{"lineNumber":221,"author":{"gitId":"-"},"content":" this.address \u003d address;","lastModifiedDate":"2017-06-21"},{"lineNumber":222,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":223,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":224,"author":{"gitId":"-"},"content":" public Optional\u003cAddress\u003e getAddress() {","lastModifiedDate":"2016-12-26"},{"lineNumber":225,"author":{"gitId":"-"},"content":" return Optional.ofNullable(address);","lastModifiedDate":"2017-06-21"},{"lineNumber":226,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":227,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":228,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-01-11"},{"lineNumber":229,"author":{"gitId":"-"},"content":" * Sets {@code tags} to this object\u0027s {@code tags}.","lastModifiedDate":"2018-01-11"},{"lineNumber":230,"author":{"gitId":"-"},"content":" * A defensive copy of {@code tags} is used internally.","lastModifiedDate":"2018-01-11"},{"lineNumber":231,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-01-11"},{"lineNumber":232,"author":{"gitId":"-"},"content":" public void setTags(Set\u003cTag\u003e tags) {","lastModifiedDate":"2017-06-21"},{"lineNumber":233,"author":{"gitId":"-"},"content":" this.tags \u003d (tags !\u003d null) ? new HashSet\u003c\u003e(tags) : null;","lastModifiedDate":"2018-01-11"},{"lineNumber":234,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":235,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-26"},{"lineNumber":236,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-01-11"},{"lineNumber":237,"author":{"gitId":"-"},"content":" * Returns an unmodifiable tag set, which throws {@code UnsupportedOperationException}","lastModifiedDate":"2018-01-11"},{"lineNumber":238,"author":{"gitId":"-"},"content":" * if modification is attempted.","lastModifiedDate":"2018-01-11"},{"lineNumber":239,"author":{"gitId":"-"},"content":" * Returns {@code Optional#empty()} if {@code tags} is null.","lastModifiedDate":"2018-01-11"},{"lineNumber":240,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-01-11"},{"lineNumber":241,"author":{"gitId":"-"},"content":" public Optional\u003cSet\u003cTag\u003e\u003e getTags() {","lastModifiedDate":"2017-03-07"},{"lineNumber":242,"author":{"gitId":"-"},"content":" return (tags !\u003d null) ? Optional.of(Collections.unmodifiableSet(tags)) : Optional.empty();","lastModifiedDate":"2018-01-11"},{"lineNumber":243,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":244,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":245,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2017-05-05"},{"lineNumber":246,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2017-05-05"},{"lineNumber":247,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2017-05-05"},{"lineNumber":248,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2017-05-05"},{"lineNumber":249,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":250,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":251,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2017-05-05"},{"lineNumber":252,"author":{"gitId":"-"},"content":" if (!(other instanceof EditPersonDescriptor)) {","lastModifiedDate":"2017-05-05"},{"lineNumber":253,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2017-05-05"},{"lineNumber":254,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":255,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":256,"author":{"gitId":"-"},"content":" EditPersonDescriptor otherEditPersonDescriptor \u003d (EditPersonDescriptor) other;","lastModifiedDate":"2023-07-13"},{"lineNumber":257,"author":{"gitId":"-"},"content":" return Objects.equals(name, otherEditPersonDescriptor.name)","lastModifiedDate":"2023-07-13"},{"lineNumber":258,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(phone, otherEditPersonDescriptor.phone)","lastModifiedDate":"2023-07-13"},{"lineNumber":259,"author":{"gitId":"yeoshuheng"},"content":" \u0026\u0026 Objects.equals(fundingStage, otherEditPersonDescriptor.fundingStage)","lastModifiedDate":"2024-02-25"},{"lineNumber":260,"author":{"gitId":"yeoshuheng"},"content":" \u0026\u0026 Objects.equals(industry, otherEditPersonDescriptor.industry)","lastModifiedDate":"2024-02-25"},{"lineNumber":261,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(email, otherEditPersonDescriptor.email)","lastModifiedDate":"2023-07-13"},{"lineNumber":262,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(address, otherEditPersonDescriptor.address)","lastModifiedDate":"2023-07-13"},{"lineNumber":263,"author":{"gitId":"-"},"content":" \u0026\u0026 Objects.equals(tags, otherEditPersonDescriptor.tags);","lastModifiedDate":"2023-07-13"},{"lineNumber":264,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":265,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":266,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2019-02-23"},{"lineNumber":267,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2019-02-23"},{"lineNumber":268,"author":{"gitId":"-"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2019-02-23"},{"lineNumber":269,"author":{"gitId":"-"},"content":" .add(\"name\", name)","lastModifiedDate":"2019-02-23"},{"lineNumber":270,"author":{"gitId":"yeoshuheng"},"content":" .add(\"industry\", industry)","lastModifiedDate":"2024-02-25"},{"lineNumber":271,"author":{"gitId":"yeoshuheng"},"content":" .add(\"funding stage\", fundingStage)","lastModifiedDate":"2024-02-25"},{"lineNumber":272,"author":{"gitId":"-"},"content":" .add(\"phone\", phone)","lastModifiedDate":"2019-02-23"},{"lineNumber":273,"author":{"gitId":"-"},"content":" .add(\"email\", email)","lastModifiedDate":"2019-02-23"},{"lineNumber":274,"author":{"gitId":"-"},"content":" .add(\"address\", address)","lastModifiedDate":"2019-02-23"},{"lineNumber":275,"author":{"gitId":"-"},"content":" .add(\"tags\", tags)","lastModifiedDate":"2019-02-23"},{"lineNumber":276,"author":{"gitId":"-"},"content":" .toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":277,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":278,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-26"},{"lineNumber":279,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-12-26"}],"authorContributionMap":{"-":240,"yeoshuheng":39}},{"path":"src/main/java/seedu/address/logic/parser/AddCommandParser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-02-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-07-13"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2024-02-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2024-02-25"},{"lineNumber":6,"author":{"gitId":"yeoshuheng"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_FUNDING_STAGE;","lastModifiedDate":"2024-02-25"},{"lineNumber":7,"author":{"gitId":"yeoshuheng"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INDUSTRY;","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-03-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import java.util.stream.Stream;","lastModifiedDate":"2017-03-17"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.AddCommand;","lastModifiedDate":"2017-02-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2017-03-11"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2024-02-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2024-02-25"},{"lineNumber":19,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.model.person.FundingStage;","lastModifiedDate":"2024-02-25"},{"lineNumber":20,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.model.person.Industry;","lastModifiedDate":"2024-02-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2024-02-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2024-02-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2024-02-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-03-17"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-02-05"},{"lineNumber":27,"author":{"gitId":"-"},"content":" * Parses input arguments and creates a new AddCommand object","lastModifiedDate":"2017-02-05"},{"lineNumber":28,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-05"},{"lineNumber":29,"author":{"gitId":"-"},"content":"public class AddCommandParser implements Parser\u003cAddCommand\u003e {","lastModifiedDate":"2017-07-06"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":31,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-02-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":" * Parses the given {@code String} of arguments in the context of the AddCommand","lastModifiedDate":"2017-02-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * and returns an AddCommand object for execution.","lastModifiedDate":"2017-02-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * @throws ParseException if the user input does not conform the expected format","lastModifiedDate":"2017-03-11"},{"lineNumber":35,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-05"},{"lineNumber":36,"author":{"gitId":"-"},"content":" public AddCommand parse(String args) throws ParseException {","lastModifiedDate":"2017-03-11"},{"lineNumber":37,"author":{"gitId":"-"},"content":" ArgumentMultimap argMultimap \u003d","lastModifiedDate":"2017-03-20"},{"lineNumber":38,"author":{"gitId":"yeoshuheng"},"content":" ArgumentTokenizer.tokenize(args, PREFIX_NAME,","lastModifiedDate":"2024-02-25"},{"lineNumber":39,"author":{"gitId":"yeoshuheng"},"content":" PREFIX_INDUSTRY, PREFIX_FUNDING_STAGE, PREFIX_PHONE,","lastModifiedDate":"2024-02-25"},{"lineNumber":40,"author":{"gitId":"yeoshuheng"},"content":" PREFIX_EMAIL, PREFIX_ADDRESS, PREFIX_TAG);","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-17"},{"lineNumber":42,"author":{"gitId":"yeoshuheng"},"content":" if (!arePrefixesPresent(argMultimap, PREFIX_NAME, PREFIX_INDUSTRY,","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"yeoshuheng"},"content":" PREFIX_FUNDING_STAGE, PREFIX_ADDRESS,","lastModifiedDate":"2024-02-25"},{"lineNumber":44,"author":{"gitId":"yeoshuheng"},"content":" PREFIX_PHONE, PREFIX_EMAIL)","lastModifiedDate":"2024-02-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" || !argMultimap.getPreamble().isEmpty()) {","lastModifiedDate":"2017-12-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":" throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddCommand.MESSAGE_USAGE));","lastModifiedDate":"2017-03-11"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-03-17"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-17"},{"lineNumber":49,"author":{"gitId":"yeoshuheng"},"content":" argMultimap.verifyNoDuplicatePrefixesFor(PREFIX_NAME, PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS,","lastModifiedDate":"2024-03-05"},{"lineNumber":50,"author":{"gitId":"yeoshuheng"},"content":" PREFIX_FUNDING_STAGE, PREFIX_INDUSTRY);","lastModifiedDate":"2024-03-05"},{"lineNumber":51,"author":{"gitId":"-"},"content":" Name name \u003d ParserUtil.parseName(argMultimap.getValue(PREFIX_NAME).get());","lastModifiedDate":"2018-07-10"},{"lineNumber":52,"author":{"gitId":"yeoshuheng"},"content":" FundingStage fundingStage \u003d ParserUtil.parseFundingStage(argMultimap.getValue(PREFIX_FUNDING_STAGE).get());","lastModifiedDate":"2024-02-25"},{"lineNumber":53,"author":{"gitId":"yeoshuheng"},"content":" Industry industry \u003d ParserUtil.parseIndustry(argMultimap.getValue(PREFIX_INDUSTRY).get());","lastModifiedDate":"2024-02-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" Phone phone \u003d ParserUtil.parsePhone(argMultimap.getValue(PREFIX_PHONE).get());","lastModifiedDate":"2018-07-10"},{"lineNumber":55,"author":{"gitId":"-"},"content":" Email email \u003d ParserUtil.parseEmail(argMultimap.getValue(PREFIX_EMAIL).get());","lastModifiedDate":"2018-07-10"},{"lineNumber":56,"author":{"gitId":"-"},"content":" Address address \u003d ParserUtil.parseAddress(argMultimap.getValue(PREFIX_ADDRESS).get());","lastModifiedDate":"2018-07-10"},{"lineNumber":57,"author":{"gitId":"-"},"content":" Set\u003cTag\u003e tagList \u003d ParserUtil.parseTags(argMultimap.getAllValues(PREFIX_TAG));","lastModifiedDate":"2017-03-17"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-17"},{"lineNumber":59,"author":{"gitId":"yeoshuheng"},"content":" Person person \u003d new Person(name, fundingStage, industry, phone, email, address, tagList);","lastModifiedDate":"2024-02-25"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-17"},{"lineNumber":61,"author":{"gitId":"-"},"content":" return new AddCommand(person);","lastModifiedDate":"2017-03-17"},{"lineNumber":62,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-05"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":64,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-03-17"},{"lineNumber":65,"author":{"gitId":"-"},"content":" * Returns true if none of the prefixes contains empty {@code Optional} values in the given","lastModifiedDate":"2017-03-17"},{"lineNumber":66,"author":{"gitId":"-"},"content":" * {@code ArgumentMultimap}.","lastModifiedDate":"2017-03-17"},{"lineNumber":67,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-03-17"},{"lineNumber":68,"author":{"gitId":"-"},"content":" private static boolean arePrefixesPresent(ArgumentMultimap argumentMultimap, Prefix... prefixes) {","lastModifiedDate":"2017-03-17"},{"lineNumber":69,"author":{"gitId":"-"},"content":" return Stream.of(prefixes).allMatch(prefix -\u003e argumentMultimap.getValue(prefix).isPresent());","lastModifiedDate":"2017-03-17"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-03-17"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-17"},{"lineNumber":72,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-02-05"}],"authorContributionMap":{"-":57,"yeoshuheng":15}},{"path":"src/main/java/seedu/address/logic/parser/CliSyntax.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-02-11"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":3,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-02-11"},{"lineNumber":4,"author":{"gitId":"-"},"content":" * Contains Command Line Interface (CLI) syntax definitions common to multiple commands","lastModifiedDate":"2017-02-11"},{"lineNumber":5,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-11"},{"lineNumber":6,"author":{"gitId":"-"},"content":"public class CliSyntax {","lastModifiedDate":"2017-02-11"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":8,"author":{"gitId":"-"},"content":" /* Prefix definitions */","lastModifiedDate":"2017-02-11"},{"lineNumber":9,"author":{"gitId":"-"},"content":" public static final Prefix PREFIX_NAME \u003d new Prefix(\"n/\");","lastModifiedDate":"2017-06-06"},{"lineNumber":10,"author":{"gitId":"yeoshuheng"},"content":" public static final Prefix PREFIX_INDUSTRY \u003d new Prefix(\"i/\");","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"yeoshuheng"},"content":" public static final Prefix PREFIX_FUNDING_STAGE \u003d new Prefix(\"f/\");","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":" public static final Prefix PREFIX_PHONE \u003d new Prefix(\"p/\");","lastModifiedDate":"2017-02-11"},{"lineNumber":13,"author":{"gitId":"-"},"content":" public static final Prefix PREFIX_EMAIL \u003d new Prefix(\"e/\");","lastModifiedDate":"2017-02-11"},{"lineNumber":14,"author":{"gitId":"-"},"content":" public static final Prefix PREFIX_ADDRESS \u003d new Prefix(\"a/\");","lastModifiedDate":"2017-02-11"},{"lineNumber":15,"author":{"gitId":"-"},"content":" public static final Prefix PREFIX_TAG \u003d new Prefix(\"t/\");","lastModifiedDate":"2017-02-11"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":17,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-02-11"}],"authorContributionMap":{"-":15,"yeoshuheng":2}},{"path":"src/main/java/seedu/address/logic/parser/EditCommandParser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-01-26"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2017-05-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-07-13"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.Collection;","lastModifiedDate":"2017-01-26"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.Collections;","lastModifiedDate":"2017-01-26"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.Optional;","lastModifiedDate":"2017-01-26"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-03-07"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2017-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand;","lastModifiedDate":"2017-01-26"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand.EditPersonDescriptor;","lastModifiedDate":"2017-01-26"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2017-03-11"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-03-07"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":17,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-01-26"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * Parses input arguments and creates a new EditCommand object","lastModifiedDate":"2017-01-26"},{"lineNumber":19,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-01-26"},{"lineNumber":20,"author":{"gitId":"-"},"content":"public class EditCommandParser implements Parser\u003cEditCommand\u003e {","lastModifiedDate":"2017-07-06"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":22,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-01-26"},{"lineNumber":23,"author":{"gitId":"-"},"content":" * Parses the given {@code String} of arguments in the context of the EditCommand","lastModifiedDate":"2017-01-26"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * and returns an EditCommand object for execution.","lastModifiedDate":"2017-01-26"},{"lineNumber":25,"author":{"gitId":"-"},"content":" * @throws ParseException if the user input does not conform the expected format","lastModifiedDate":"2017-03-11"},{"lineNumber":26,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-01-26"},{"lineNumber":27,"author":{"gitId":"-"},"content":" public EditCommand parse(String args) throws ParseException {","lastModifiedDate":"2017-03-11"},{"lineNumber":28,"author":{"gitId":"-"},"content":" requireNonNull(args);","lastModifiedDate":"2017-05-15"},{"lineNumber":29,"author":{"gitId":"-"},"content":" ArgumentMultimap argMultimap \u003d","lastModifiedDate":"2017-03-20"},{"lineNumber":30,"author":{"gitId":"yeoshuheng"},"content":" ArgumentTokenizer.tokenize(args, CliSyntax.PREFIX_NAME,","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"yeoshuheng"},"content":" CliSyntax.PREFIX_INDUSTRY, CliSyntax.PREFIX_FUNDING_STAGE, CliSyntax.PREFIX_PHONE,","lastModifiedDate":"2024-02-25"},{"lineNumber":32,"author":{"gitId":"yeoshuheng"},"content":" CliSyntax.PREFIX_EMAIL, CliSyntax.PREFIX_ADDRESS, CliSyntax.PREFIX_TAG);","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-15"},{"lineNumber":34,"author":{"gitId":"-"},"content":" Index index;","lastModifiedDate":"2017-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-15"},{"lineNumber":36,"author":{"gitId":"-"},"content":" try {","lastModifiedDate":"2017-05-15"},{"lineNumber":37,"author":{"gitId":"-"},"content":" index \u003d ParserUtil.parseIndex(argMultimap.getPreamble());","lastModifiedDate":"2017-06-06"},{"lineNumber":38,"author":{"gitId":"-"},"content":" } catch (ParseException pe) {","lastModifiedDate":"2018-07-10"},{"lineNumber":39,"author":{"gitId":"-"},"content":" throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, EditCommand.MESSAGE_USAGE), pe);","lastModifiedDate":"2018-08-06"},{"lineNumber":40,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-01-26"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":42,"author":{"gitId":"yeoshuheng"},"content":" argMultimap.verifyNoDuplicatePrefixesFor(CliSyntax.PREFIX_NAME, CliSyntax.PREFIX_PHONE,","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"yeoshuheng"},"content":" CliSyntax.PREFIX_EMAIL, CliSyntax.PREFIX_ADDRESS);","lastModifiedDate":"2024-02-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":45,"author":{"gitId":"-"},"content":" EditPersonDescriptor editPersonDescriptor \u003d new EditPersonDescriptor();","lastModifiedDate":"2017-01-26"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":47,"author":{"gitId":"yeoshuheng"},"content":" if (argMultimap.getValue(CliSyntax.PREFIX_NAME).isPresent()) {","lastModifiedDate":"2024-02-25"},{"lineNumber":48,"author":{"gitId":"yeoshuheng"},"content":" editPersonDescriptor.setName(ParserUtil.parseName(argMultimap.getValue(CliSyntax.PREFIX_NAME).get()));","lastModifiedDate":"2024-02-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-07-10"},{"lineNumber":50,"author":{"gitId":"yeoshuheng"},"content":" if (argMultimap.getValue(CliSyntax.PREFIX_FUNDING_STAGE).isPresent()) {","lastModifiedDate":"2024-02-25"},{"lineNumber":51,"author":{"gitId":"yeoshuheng"},"content":" editPersonDescriptor.setFundingStage(","lastModifiedDate":"2024-02-25"},{"lineNumber":52,"author":{"gitId":"yeoshuheng"},"content":" ParserUtil.parseFundingStage(argMultimap.getValue(CliSyntax.PREFIX_FUNDING_STAGE).get()));","lastModifiedDate":"2024-02-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-07-10"},{"lineNumber":54,"author":{"gitId":"yeoshuheng"},"content":" if (argMultimap.getValue(CliSyntax.PREFIX_INDUSTRY).isPresent()) {","lastModifiedDate":"2024-02-25"},{"lineNumber":55,"author":{"gitId":"yeoshuheng"},"content":" editPersonDescriptor.setIndustry(","lastModifiedDate":"2024-02-25"},{"lineNumber":56,"author":{"gitId":"yeoshuheng"},"content":" ParserUtil.parseIndustry(argMultimap.getValue(CliSyntax.PREFIX_INDUSTRY).get()));","lastModifiedDate":"2024-02-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-07-10"},{"lineNumber":58,"author":{"gitId":"yeoshuheng"},"content":" if (argMultimap.getValue(CliSyntax.PREFIX_PHONE).isPresent()) {","lastModifiedDate":"2024-02-25"},{"lineNumber":59,"author":{"gitId":"yeoshuheng"},"content":" editPersonDescriptor.setPhone(","lastModifiedDate":"2024-02-25"},{"lineNumber":60,"author":{"gitId":"yeoshuheng"},"content":" ParserUtil.parsePhone(argMultimap.getValue(CliSyntax.PREFIX_PHONE).get()));","lastModifiedDate":"2024-02-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-07-10"},{"lineNumber":62,"author":{"gitId":"yeoshuheng"},"content":" if (argMultimap.getValue(CliSyntax.PREFIX_EMAIL).isPresent()) {","lastModifiedDate":"2024-02-25"},{"lineNumber":63,"author":{"gitId":"yeoshuheng"},"content":" editPersonDescriptor.setEmail(ParserUtil.parseEmail(argMultimap.getValue(CliSyntax.PREFIX_EMAIL).get()));","lastModifiedDate":"2024-02-25"},{"lineNumber":64,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":65,"author":{"gitId":"yeoshuheng"},"content":" if (argMultimap.getValue(CliSyntax.PREFIX_ADDRESS).isPresent()) {","lastModifiedDate":"2024-02-25"},{"lineNumber":66,"author":{"gitId":"yeoshuheng"},"content":" editPersonDescriptor.setAddress(ParserUtil.parseAddress(","lastModifiedDate":"2024-02-25"},{"lineNumber":67,"author":{"gitId":"yeoshuheng"},"content":" argMultimap.getValue(CliSyntax.PREFIX_ADDRESS).get()));","lastModifiedDate":"2024-02-25"},{"lineNumber":68,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":69,"author":{"gitId":"yeoshuheng"},"content":" parseTagsForEdit(argMultimap.getAllValues(CliSyntax.PREFIX_TAG)).ifPresent(editPersonDescriptor::setTags);","lastModifiedDate":"2024-02-25"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":71,"author":{"gitId":"-"},"content":" if (!editPersonDescriptor.isAnyFieldEdited()) {","lastModifiedDate":"2017-01-26"},{"lineNumber":72,"author":{"gitId":"-"},"content":" throw new ParseException(EditCommand.MESSAGE_NOT_EDITED);","lastModifiedDate":"2017-03-11"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-01-26"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":75,"author":{"gitId":"-"},"content":" return new EditCommand(index, editPersonDescriptor);","lastModifiedDate":"2017-05-15"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-01-26"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":78,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-01-26"},{"lineNumber":79,"author":{"gitId":"-"},"content":" * Parses {@code Collection\u003cString\u003e tags} into a {@code Set\u003cTag\u003e} if {@code tags} is non-empty.","lastModifiedDate":"2017-03-07"},{"lineNumber":80,"author":{"gitId":"-"},"content":" * If {@code tags} contain only one element which is an empty string, it will be parsed into a","lastModifiedDate":"2017-01-26"},{"lineNumber":81,"author":{"gitId":"-"},"content":" * {@code Set\u003cTag\u003e} containing zero tags.","lastModifiedDate":"2017-03-07"},{"lineNumber":82,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-01-26"},{"lineNumber":83,"author":{"gitId":"-"},"content":" private Optional\u003cSet\u003cTag\u003e\u003e parseTagsForEdit(Collection\u003cString\u003e tags) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":84,"author":{"gitId":"-"},"content":" assert tags !\u003d null;","lastModifiedDate":"2017-01-26"},{"lineNumber":85,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":86,"author":{"gitId":"-"},"content":" if (tags.isEmpty()) {","lastModifiedDate":"2017-01-26"},{"lineNumber":87,"author":{"gitId":"-"},"content":" return Optional.empty();","lastModifiedDate":"2017-01-26"},{"lineNumber":88,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-01-26"},{"lineNumber":89,"author":{"gitId":"-"},"content":" Collection\u003cString\u003e tagSet \u003d tags.size() \u003d\u003d 1 \u0026\u0026 tags.contains(\"\") ? Collections.emptySet() : tags;","lastModifiedDate":"2017-01-26"},{"lineNumber":90,"author":{"gitId":"-"},"content":" return Optional.of(ParserUtil.parseTags(tagSet));","lastModifiedDate":"2017-01-26"},{"lineNumber":91,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-01-26"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-26"},{"lineNumber":93,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-01-26"}],"authorContributionMap":{"-":69,"yeoshuheng":24}},{"path":"src/main/java/seedu/address/logic/parser/ParserUtil.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-02-11"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2017-05-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.Collection;","lastModifiedDate":"2017-02-11"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.HashSet;","lastModifiedDate":"2017-02-11"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-02-11"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2017-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.StringUtil;","lastModifiedDate":"2017-02-11"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2018-07-10"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.model.person.FundingStage;","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.model.person.Industry;","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2024-02-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-02-11"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":20,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-02-11"},{"lineNumber":21,"author":{"gitId":"-"},"content":" * Contains utility methods used for parsing strings in the various *Parser classes.","lastModifiedDate":"2017-07-18"},{"lineNumber":22,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-11"},{"lineNumber":23,"author":{"gitId":"-"},"content":"public class ParserUtil {","lastModifiedDate":"2017-02-11"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":25,"author":{"gitId":"-"},"content":" public static final String MESSAGE_INVALID_INDEX \u003d \"Index is not a non-zero unsigned integer.\";","lastModifiedDate":"2017-06-02"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-02"},{"lineNumber":27,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-02-11"},{"lineNumber":28,"author":{"gitId":"-"},"content":" * Parses {@code oneBasedIndex} into an {@code Index} and returns it. Leading and trailing whitespaces will be","lastModifiedDate":"2017-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * trimmed.","lastModifiedDate":"2017-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" * @throws ParseException if the specified index is invalid (not non-zero unsigned integer).","lastModifiedDate":"2018-07-10"},{"lineNumber":31,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-11"},{"lineNumber":32,"author":{"gitId":"-"},"content":" public static Index parseIndex(String oneBasedIndex) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":33,"author":{"gitId":"-"},"content":" String trimmedIndex \u003d oneBasedIndex.trim();","lastModifiedDate":"2017-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" if (!StringUtil.isNonZeroUnsignedInteger(trimmedIndex)) {","lastModifiedDate":"2017-06-02"},{"lineNumber":35,"author":{"gitId":"-"},"content":" throw new ParseException(MESSAGE_INVALID_INDEX);","lastModifiedDate":"2018-07-10"},{"lineNumber":36,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-11"},{"lineNumber":37,"author":{"gitId":"-"},"content":" return Index.fromOneBased(Integer.parseInt(trimmedIndex));","lastModifiedDate":"2017-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-11"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-11"},{"lineNumber":40,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-29"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * Parses a {@code String name} into a {@code Name}.","lastModifiedDate":"2017-05-29"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2017-05-29"},{"lineNumber":43,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2017-05-29"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * @throws ParseException if the given {@code name} is invalid.","lastModifiedDate":"2018-07-10"},{"lineNumber":45,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-29"},{"lineNumber":46,"author":{"gitId":"-"},"content":" public static Name parseName(String name) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":47,"author":{"gitId":"-"},"content":" requireNonNull(name);","lastModifiedDate":"2017-05-29"},{"lineNumber":48,"author":{"gitId":"-"},"content":" String trimmedName \u003d name.trim();","lastModifiedDate":"2017-05-29"},{"lineNumber":49,"author":{"gitId":"-"},"content":" if (!Name.isValidName(trimmedName)) {","lastModifiedDate":"2017-05-30"},{"lineNumber":50,"author":{"gitId":"-"},"content":" throw new ParseException(Name.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":51,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":52,"author":{"gitId":"-"},"content":" return new Name(trimmedName);","lastModifiedDate":"2017-05-29"},{"lineNumber":53,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-29"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-29"},{"lineNumber":55,"author":{"gitId":"yeoshuheng"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":56,"author":{"gitId":"yeoshuheng"},"content":" * Parses a {@code String industry} into a {@code Industry}.","lastModifiedDate":"2024-02-25"},{"lineNumber":57,"author":{"gitId":"yeoshuheng"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2024-02-25"},{"lineNumber":58,"author":{"gitId":"yeoshuheng"},"content":" *","lastModifiedDate":"2024-02-25"},{"lineNumber":59,"author":{"gitId":"yeoshuheng"},"content":" * @throws ParseException if the given {@code industry} is invalid.","lastModifiedDate":"2024-02-25"},{"lineNumber":60,"author":{"gitId":"yeoshuheng"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":61,"author":{"gitId":"yeoshuheng"},"content":" public static Industry parseIndustry(String industry) throws ParseException {","lastModifiedDate":"2024-02-25"},{"lineNumber":62,"author":{"gitId":"yeoshuheng"},"content":" requireNonNull(industry);","lastModifiedDate":"2024-02-25"},{"lineNumber":63,"author":{"gitId":"yeoshuheng"},"content":" String trimmedIndustry \u003d industry.trim();","lastModifiedDate":"2024-02-25"},{"lineNumber":64,"author":{"gitId":"yeoshuheng"},"content":" if (!Industry.isValidIndustry(trimmedIndustry)) {","lastModifiedDate":"2024-02-25"},{"lineNumber":65,"author":{"gitId":"yeoshuheng"},"content":" throw new ParseException(Industry.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":66,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":67,"author":{"gitId":"yeoshuheng"},"content":" return new Industry(trimmedIndustry);","lastModifiedDate":"2024-02-25"},{"lineNumber":68,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":69,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":70,"author":{"gitId":"yeoshuheng"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":71,"author":{"gitId":"yeoshuheng"},"content":" * Parses a {@code String fundingLevel} into a {@code FundingStage}.","lastModifiedDate":"2024-02-25"},{"lineNumber":72,"author":{"gitId":"yeoshuheng"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2024-02-25"},{"lineNumber":73,"author":{"gitId":"yeoshuheng"},"content":" *","lastModifiedDate":"2024-02-25"},{"lineNumber":74,"author":{"gitId":"yeoshuheng"},"content":" * @throws ParseException if the given {@code fundingStage} is invalid.","lastModifiedDate":"2024-02-25"},{"lineNumber":75,"author":{"gitId":"yeoshuheng"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":76,"author":{"gitId":"yeoshuheng"},"content":" public static FundingStage parseFundingStage(String fundingLevel) throws ParseException {","lastModifiedDate":"2024-02-25"},{"lineNumber":77,"author":{"gitId":"yeoshuheng"},"content":" requireNonNull(fundingLevel);","lastModifiedDate":"2024-02-25"},{"lineNumber":78,"author":{"gitId":"yeoshuheng"},"content":" String trimmedFundingLevel \u003d fundingLevel.trim();","lastModifiedDate":"2024-02-25"},{"lineNumber":79,"author":{"gitId":"yeoshuheng"},"content":" if (!FundingStage.isValidFundingLevel(fundingLevel)) {","lastModifiedDate":"2024-02-25"},{"lineNumber":80,"author":{"gitId":"yeoshuheng"},"content":" throw new ParseException(FundingStage.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":81,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":82,"author":{"gitId":"yeoshuheng"},"content":" return new FundingStage(trimmedFundingLevel);","lastModifiedDate":"2024-02-25"},{"lineNumber":83,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":84,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":85,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":86,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-30"},{"lineNumber":87,"author":{"gitId":"-"},"content":" * Parses a {@code String phone} into a {@code Phone}.","lastModifiedDate":"2017-05-30"},{"lineNumber":88,"author":{"gitId":"-"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2017-05-30"},{"lineNumber":89,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2017-05-30"},{"lineNumber":90,"author":{"gitId":"-"},"content":" * @throws ParseException if the given {@code phone} is invalid.","lastModifiedDate":"2018-07-10"},{"lineNumber":91,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-30"},{"lineNumber":92,"author":{"gitId":"-"},"content":" public static Phone parsePhone(String phone) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":93,"author":{"gitId":"-"},"content":" requireNonNull(phone);","lastModifiedDate":"2017-05-30"},{"lineNumber":94,"author":{"gitId":"-"},"content":" String trimmedPhone \u003d phone.trim();","lastModifiedDate":"2017-05-30"},{"lineNumber":95,"author":{"gitId":"-"},"content":" if (!Phone.isValidPhone(trimmedPhone)) {","lastModifiedDate":"2017-05-30"},{"lineNumber":96,"author":{"gitId":"-"},"content":" throw new ParseException(Phone.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":97,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":98,"author":{"gitId":"-"},"content":" return new Phone(trimmedPhone);","lastModifiedDate":"2017-05-30"},{"lineNumber":99,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":100,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":101,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-30"},{"lineNumber":102,"author":{"gitId":"-"},"content":" * Parses a {@code String address} into an {@code Address}.","lastModifiedDate":"2017-05-30"},{"lineNumber":103,"author":{"gitId":"-"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2017-05-30"},{"lineNumber":104,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2017-05-30"},{"lineNumber":105,"author":{"gitId":"-"},"content":" * @throws ParseException if the given {@code address} is invalid.","lastModifiedDate":"2018-07-10"},{"lineNumber":106,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-30"},{"lineNumber":107,"author":{"gitId":"-"},"content":" public static Address parseAddress(String address) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":108,"author":{"gitId":"-"},"content":" requireNonNull(address);","lastModifiedDate":"2017-05-30"},{"lineNumber":109,"author":{"gitId":"-"},"content":" String trimmedAddress \u003d address.trim();","lastModifiedDate":"2017-05-30"},{"lineNumber":110,"author":{"gitId":"-"},"content":" if (!Address.isValidAddress(trimmedAddress)) {","lastModifiedDate":"2017-05-30"},{"lineNumber":111,"author":{"gitId":"-"},"content":" throw new ParseException(Address.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":112,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":113,"author":{"gitId":"-"},"content":" return new Address(trimmedAddress);","lastModifiedDate":"2017-05-30"},{"lineNumber":114,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":115,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":116,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-30"},{"lineNumber":117,"author":{"gitId":"-"},"content":" * Parses a {@code String email} into an {@code Email}.","lastModifiedDate":"2017-05-30"},{"lineNumber":118,"author":{"gitId":"-"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2017-05-30"},{"lineNumber":119,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2017-05-30"},{"lineNumber":120,"author":{"gitId":"-"},"content":" * @throws ParseException if the given {@code email} is invalid.","lastModifiedDate":"2018-07-10"},{"lineNumber":121,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-30"},{"lineNumber":122,"author":{"gitId":"-"},"content":" public static Email parseEmail(String email) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":123,"author":{"gitId":"-"},"content":" requireNonNull(email);","lastModifiedDate":"2017-05-30"},{"lineNumber":124,"author":{"gitId":"-"},"content":" String trimmedEmail \u003d email.trim();","lastModifiedDate":"2017-05-30"},{"lineNumber":125,"author":{"gitId":"-"},"content":" if (!Email.isValidEmail(trimmedEmail)) {","lastModifiedDate":"2017-05-30"},{"lineNumber":126,"author":{"gitId":"-"},"content":" throw new ParseException(Email.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":127,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":128,"author":{"gitId":"-"},"content":" return new Email(trimmedEmail);","lastModifiedDate":"2017-05-30"},{"lineNumber":129,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":131,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-05-30"},{"lineNumber":132,"author":{"gitId":"-"},"content":" * Parses a {@code String tag} into a {@code Tag}.","lastModifiedDate":"2017-05-30"},{"lineNumber":133,"author":{"gitId":"-"},"content":" * Leading and trailing whitespaces will be trimmed.","lastModifiedDate":"2017-05-30"},{"lineNumber":134,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2017-05-30"},{"lineNumber":135,"author":{"gitId":"-"},"content":" * @throws ParseException if the given {@code tag} is invalid.","lastModifiedDate":"2018-07-10"},{"lineNumber":136,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-30"},{"lineNumber":137,"author":{"gitId":"-"},"content":" public static Tag parseTag(String tag) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":138,"author":{"gitId":"-"},"content":" requireNonNull(tag);","lastModifiedDate":"2017-05-30"},{"lineNumber":139,"author":{"gitId":"-"},"content":" String trimmedTag \u003d tag.trim();","lastModifiedDate":"2017-05-30"},{"lineNumber":140,"author":{"gitId":"-"},"content":" if (!Tag.isValidTagName(trimmedTag)) {","lastModifiedDate":"2017-05-30"},{"lineNumber":141,"author":{"gitId":"-"},"content":" throw new ParseException(Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":143,"author":{"gitId":"-"},"content":" return new Tag(trimmedTag);","lastModifiedDate":"2017-05-30"},{"lineNumber":144,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-30"},{"lineNumber":145,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-30"},{"lineNumber":146,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-02-11"},{"lineNumber":147,"author":{"gitId":"-"},"content":" * Parses {@code Collection\u003cString\u003e tags} into a {@code Set\u003cTag\u003e}.","lastModifiedDate":"2017-03-07"},{"lineNumber":148,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-02-11"},{"lineNumber":149,"author":{"gitId":"-"},"content":" public static Set\u003cTag\u003e parseTags(Collection\u003cString\u003e tags) throws ParseException {","lastModifiedDate":"2018-07-10"},{"lineNumber":150,"author":{"gitId":"-"},"content":" requireNonNull(tags);","lastModifiedDate":"2017-05-15"},{"lineNumber":151,"author":{"gitId":"-"},"content":" final Set\u003cTag\u003e tagSet \u003d new HashSet\u003c\u003e();","lastModifiedDate":"2017-02-11"},{"lineNumber":152,"author":{"gitId":"-"},"content":" for (String tagName : tags) {","lastModifiedDate":"2017-02-11"},{"lineNumber":153,"author":{"gitId":"-"},"content":" tagSet.add(parseTag(tagName));","lastModifiedDate":"2017-05-30"},{"lineNumber":154,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-11"},{"lineNumber":155,"author":{"gitId":"-"},"content":" return tagSet;","lastModifiedDate":"2017-03-07"},{"lineNumber":156,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-11"},{"lineNumber":157,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-02-11"}],"authorContributionMap":{"-":124,"yeoshuheng":33}},{"path":"src/main/java/seedu/address/model/person/FundingStage.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"yeoshuheng"},"content":"package seedu.address.model.person;","lastModifiedDate":"2024-02-25"},{"lineNumber":2,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":3,"author":{"gitId":"yeoshuheng"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2024-02-25"},{"lineNumber":4,"author":{"gitId":"yeoshuheng"},"content":"import static seedu.address.commons.util.AppUtil.checkArgument;","lastModifiedDate":"2024-02-25"},{"lineNumber":5,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":6,"author":{"gitId":"yeoshuheng"},"content":"/**","lastModifiedDate":"2024-02-25"},{"lineNumber":7,"author":{"gitId":"yeoshuheng"},"content":" * Represents funding stage of current project.","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"yeoshuheng"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"yeoshuheng"},"content":"public class FundingStage {","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"yeoshuheng"},"content":" public static final String MESSAGE_CONSTRAINTS \u003d","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"yeoshuheng"},"content":" \"Funding stages should be either \u0027A\u0027, \u0027B\u0027 or \u0027C\u0027.\";","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"yeoshuheng"},"content":" public final String value;","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"yeoshuheng"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"yeoshuheng"},"content":" * Constructor for a funding stage.","lastModifiedDate":"2024-02-25"},{"lineNumber":18,"author":{"gitId":"yeoshuheng"},"content":" * @param fundingLevel The funding level (A, B, C) of the current stage.","lastModifiedDate":"2024-02-25"},{"lineNumber":19,"author":{"gitId":"yeoshuheng"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":20,"author":{"gitId":"yeoshuheng"},"content":" public FundingStage(String fundingLevel) {","lastModifiedDate":"2024-02-25"},{"lineNumber":21,"author":{"gitId":"yeoshuheng"},"content":" requireNonNull(fundingLevel);","lastModifiedDate":"2024-02-25"},{"lineNumber":22,"author":{"gitId":"yeoshuheng"},"content":" fundingLevel \u003d fundingLevel.toUpperCase();","lastModifiedDate":"2024-02-25"},{"lineNumber":23,"author":{"gitId":"yeoshuheng"},"content":" checkArgument(isValidFundingLevel(fundingLevel), MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":24,"author":{"gitId":"yeoshuheng"},"content":" value \u003d fundingLevel;","lastModifiedDate":"2024-02-25"},{"lineNumber":25,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":26,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"yeoshuheng"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"yeoshuheng"},"content":" * Returns true if a given industry is a valid industry.","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"yeoshuheng"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"yeoshuheng"},"content":" public static boolean isValidFundingLevel(String fundingLevel) {","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"yeoshuheng"},"content":" return fundingLevel.equals(\"A\") || fundingLevel.equals(\"B\") || fundingLevel.equals(\"C\");","lastModifiedDate":"2024-02-25"},{"lineNumber":32,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"yeoshuheng"},"content":" @Override","lastModifiedDate":"2024-02-25"},{"lineNumber":35,"author":{"gitId":"yeoshuheng"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2024-02-25"},{"lineNumber":36,"author":{"gitId":"yeoshuheng"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"yeoshuheng"},"content":" return true;","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":39,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":40,"author":{"gitId":"yeoshuheng"},"content":" // instanceof handles nulls","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"yeoshuheng"},"content":" if (!(other instanceof FundingStage)) {","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"yeoshuheng"},"content":" return false;","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":44,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":45,"author":{"gitId":"yeoshuheng"},"content":" FundingStage otherFundingStage \u003d (FundingStage) other;","lastModifiedDate":"2024-02-25"},{"lineNumber":46,"author":{"gitId":"yeoshuheng"},"content":" return value.equals(otherFundingStage.value);","lastModifiedDate":"2024-02-25"},{"lineNumber":47,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":48,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":49,"author":{"gitId":"yeoshuheng"},"content":" @Override","lastModifiedDate":"2024-02-25"},{"lineNumber":50,"author":{"gitId":"yeoshuheng"},"content":" public String toString() {","lastModifiedDate":"2024-02-25"},{"lineNumber":51,"author":{"gitId":"yeoshuheng"},"content":" return this.value;","lastModifiedDate":"2024-02-25"},{"lineNumber":52,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":53,"author":{"gitId":"yeoshuheng"},"content":"}","lastModifiedDate":"2024-02-25"}],"authorContributionMap":{"yeoshuheng":53}},{"path":"src/main/java/seedu/address/model/person/Industry.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"yeoshuheng"},"content":"package seedu.address.model.person;","lastModifiedDate":"2024-02-25"},{"lineNumber":2,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":3,"author":{"gitId":"yeoshuheng"},"content":"import static java.util.Objects.requireNonNull;","lastModifiedDate":"2024-02-25"},{"lineNumber":4,"author":{"gitId":"yeoshuheng"},"content":"import static seedu.address.commons.util.AppUtil.checkArgument;","lastModifiedDate":"2024-02-25"},{"lineNumber":5,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":6,"author":{"gitId":"yeoshuheng"},"content":"/**","lastModifiedDate":"2024-02-25"},{"lineNumber":7,"author":{"gitId":"yeoshuheng"},"content":" * Represents industry person is from.","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"yeoshuheng"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"yeoshuheng"},"content":"public class Industry {","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"yeoshuheng"},"content":" public static final String MESSAGE_CONSTRAINTS \u003d","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"yeoshuheng"},"content":" \"Industry names should only contain alphanumeric characters and spaces, and it should not be blank\";","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"yeoshuheng"},"content":" /*","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"yeoshuheng"},"content":" * The first character of the address must not be a whitespace,","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"yeoshuheng"},"content":" * otherwise \" \" (a blank string) becomes a valid input.","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"yeoshuheng"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":18,"author":{"gitId":"yeoshuheng"},"content":" public static final String VALIDATION_REGEX \u003d \"[\\\\p{Alnum}][\\\\p{Alnum} ]*\";","lastModifiedDate":"2024-02-25"},{"lineNumber":19,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":20,"author":{"gitId":"yeoshuheng"},"content":" public final String value;","lastModifiedDate":"2024-02-25"},{"lineNumber":21,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":22,"author":{"gitId":"yeoshuheng"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":23,"author":{"gitId":"yeoshuheng"},"content":" * Constructor for an industry.","lastModifiedDate":"2024-02-25"},{"lineNumber":24,"author":{"gitId":"yeoshuheng"},"content":" * @param industry Name of the industry.","lastModifiedDate":"2024-02-25"},{"lineNumber":25,"author":{"gitId":"yeoshuheng"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":26,"author":{"gitId":"yeoshuheng"},"content":" public Industry(String industry) {","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"yeoshuheng"},"content":" requireNonNull(industry);","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"yeoshuheng"},"content":" checkArgument(isValidIndustry(industry), MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"yeoshuheng"},"content":" value \u003d industry.toUpperCase();","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":32,"author":{"gitId":"yeoshuheng"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"yeoshuheng"},"content":" * Returns true if a given industry is a valid industry.","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"yeoshuheng"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":35,"author":{"gitId":"yeoshuheng"},"content":" public static boolean isValidIndustry(String test) {","lastModifiedDate":"2024-02-25"},{"lineNumber":36,"author":{"gitId":"yeoshuheng"},"content":" return test.matches(VALIDATION_REGEX);","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":39,"author":{"gitId":"yeoshuheng"},"content":" @Override","lastModifiedDate":"2024-02-25"},{"lineNumber":40,"author":{"gitId":"yeoshuheng"},"content":" public String toString() {","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"yeoshuheng"},"content":" return this.value;","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":44,"author":{"gitId":"yeoshuheng"},"content":" @Override","lastModifiedDate":"2024-02-25"},{"lineNumber":45,"author":{"gitId":"yeoshuheng"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2024-02-25"},{"lineNumber":46,"author":{"gitId":"yeoshuheng"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2024-02-25"},{"lineNumber":47,"author":{"gitId":"yeoshuheng"},"content":" return true;","lastModifiedDate":"2024-02-25"},{"lineNumber":48,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":49,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":50,"author":{"gitId":"yeoshuheng"},"content":" // instanceof handles nulls","lastModifiedDate":"2024-02-25"},{"lineNumber":51,"author":{"gitId":"yeoshuheng"},"content":" if (!(other instanceof Industry)) {","lastModifiedDate":"2024-02-25"},{"lineNumber":52,"author":{"gitId":"yeoshuheng"},"content":" return false;","lastModifiedDate":"2024-02-25"},{"lineNumber":53,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":54,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":55,"author":{"gitId":"yeoshuheng"},"content":" Industry otherIndustry \u003d (Industry) other;","lastModifiedDate":"2024-02-25"},{"lineNumber":56,"author":{"gitId":"yeoshuheng"},"content":" return value.equals(otherIndustry.value);","lastModifiedDate":"2024-02-25"},{"lineNumber":57,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":58,"author":{"gitId":"yeoshuheng"},"content":"}","lastModifiedDate":"2024-02-25"}],"authorContributionMap":{"yeoshuheng":58}},{"path":"src/main/java/seedu/address/model/person/Person.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model.person;","lastModifiedDate":"2016-08-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.commons.util.CollectionUtil.requireAllNonNull;","lastModifiedDate":"2017-05-19"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.Collections;","lastModifiedDate":"2017-03-07"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.HashSet;","lastModifiedDate":"2018-03-26"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.Objects;","lastModifiedDate":"2017-01-19"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-03-07"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-19"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import seedu.address.commons.util.ToStringBuilder;","lastModifiedDate":"2019-02-23"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-03-07"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-08-24"},{"lineNumber":14,"author":{"gitId":"-"},"content":" * Represents a Person in the address book.","lastModifiedDate":"2016-08-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":" * Guarantees: details are present and not null, field values are validated, immutable.","lastModifiedDate":"2017-12-20"},{"lineNumber":16,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":"public class Person {","lastModifiedDate":"2018-01-10"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":" // Identity fields","lastModifiedDate":"2018-04-19"},{"lineNumber":20,"author":{"gitId":"-"},"content":" private final Name name;","lastModifiedDate":"2017-12-20"},{"lineNumber":21,"author":{"gitId":"-"},"content":" private final Phone phone;","lastModifiedDate":"2017-12-20"},{"lineNumber":22,"author":{"gitId":"-"},"content":" private final Email email;","lastModifiedDate":"2017-12-20"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":24,"author":{"gitId":"-"},"content":" // Data fields","lastModifiedDate":"2018-04-19"},{"lineNumber":25,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":26,"author":{"gitId":"yeoshuheng"},"content":" private final FundingStage fundingStage;","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"yeoshuheng"},"content":" private final Industry industry;","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" private final Address address;","lastModifiedDate":"2018-04-19"},{"lineNumber":31,"author":{"gitId":"-"},"content":" private final Set\u003cTag\u003e tags \u003d new HashSet\u003c\u003e();","lastModifiedDate":"2018-03-26"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":33,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-08-24"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * Every field must be present and not null.","lastModifiedDate":"2016-08-24"},{"lineNumber":35,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-08-24"},{"lineNumber":36,"author":{"gitId":"yeoshuheng"},"content":" public Person(Name name, FundingStage fundingStage, Industry industry,","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"yeoshuheng"},"content":" Phone phone, Email email, Address address, Set\u003cTag\u003e tags) {","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"yeoshuheng"},"content":" requireAllNonNull(name, fundingStage, industry, phone, email, address, tags);","lastModifiedDate":"2024-02-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" this.name \u003d name;","lastModifiedDate":"2017-12-20"},{"lineNumber":40,"author":{"gitId":"yeoshuheng"},"content":" this.fundingStage \u003d fundingStage;","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"yeoshuheng"},"content":" this.industry \u003d industry;","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" this.phone \u003d phone;","lastModifiedDate":"2017-12-20"},{"lineNumber":43,"author":{"gitId":"-"},"content":" this.email \u003d email;","lastModifiedDate":"2017-12-20"},{"lineNumber":44,"author":{"gitId":"-"},"content":" this.address \u003d address;","lastModifiedDate":"2017-12-20"},{"lineNumber":45,"author":{"gitId":"-"},"content":" this.tags.addAll(tags);","lastModifiedDate":"2018-03-26"},{"lineNumber":46,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":48,"author":{"gitId":"yeoshuheng"},"content":" public FundingStage getFundingStage() {","lastModifiedDate":"2024-02-25"},{"lineNumber":49,"author":{"gitId":"yeoshuheng"},"content":" return this.fundingStage;","lastModifiedDate":"2024-02-25"},{"lineNumber":50,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":51,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":52,"author":{"gitId":"yeoshuheng"},"content":" public Industry getIndustry() {","lastModifiedDate":"2024-02-25"},{"lineNumber":53,"author":{"gitId":"yeoshuheng"},"content":" return this.industry;","lastModifiedDate":"2024-02-25"},{"lineNumber":54,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":55,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" public Name getName() {","lastModifiedDate":"2017-07-12"},{"lineNumber":57,"author":{"gitId":"-"},"content":" return name;","lastModifiedDate":"2017-12-20"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":60,"author":{"gitId":"-"},"content":" public Phone getPhone() {","lastModifiedDate":"2017-07-12"},{"lineNumber":61,"author":{"gitId":"-"},"content":" return phone;","lastModifiedDate":"2017-12-20"},{"lineNumber":62,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":64,"author":{"gitId":"-"},"content":" public Email getEmail() {","lastModifiedDate":"2017-07-12"},{"lineNumber":65,"author":{"gitId":"-"},"content":" return email;","lastModifiedDate":"2017-12-20"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":68,"author":{"gitId":"-"},"content":" public Address getAddress() {","lastModifiedDate":"2017-07-12"},{"lineNumber":69,"author":{"gitId":"-"},"content":" return address;","lastModifiedDate":"2017-12-20"},{"lineNumber":70,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-07-12"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-12"},{"lineNumber":72,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-03-07"},{"lineNumber":73,"author":{"gitId":"-"},"content":" * Returns an immutable tag set, which throws {@code UnsupportedOperationException}","lastModifiedDate":"2017-03-07"},{"lineNumber":74,"author":{"gitId":"-"},"content":" * if modification is attempted.","lastModifiedDate":"2017-03-07"},{"lineNumber":75,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-03-07"},{"lineNumber":76,"author":{"gitId":"-"},"content":" public Set\u003cTag\u003e getTags() {","lastModifiedDate":"2017-03-07"},{"lineNumber":77,"author":{"gitId":"-"},"content":" return Collections.unmodifiableSet(tags);","lastModifiedDate":"2018-03-26"},{"lineNumber":78,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-21"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":80,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-04-19"},{"lineNumber":81,"author":{"gitId":"-"},"content":" * Returns true if both persons have the same name.","lastModifiedDate":"2020-12-18"},{"lineNumber":82,"author":{"gitId":"-"},"content":" * This defines a weaker notion of equality between two persons.","lastModifiedDate":"2018-04-19"},{"lineNumber":83,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-04-19"},{"lineNumber":84,"author":{"gitId":"-"},"content":" public boolean isSamePerson(Person otherPerson) {","lastModifiedDate":"2018-04-19"},{"lineNumber":85,"author":{"gitId":"-"},"content":" if (otherPerson \u003d\u003d this) {","lastModifiedDate":"2018-04-19"},{"lineNumber":86,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2018-04-19"},{"lineNumber":87,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-04-19"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":89,"author":{"gitId":"-"},"content":" return otherPerson !\u003d null","lastModifiedDate":"2018-04-19"},{"lineNumber":90,"author":{"gitId":"-"},"content":" \u0026\u0026 otherPerson.getName().equals(getName());","lastModifiedDate":"2020-12-18"},{"lineNumber":91,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-04-19"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":93,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-04-19"},{"lineNumber":94,"author":{"gitId":"-"},"content":" * Returns true if both persons have the same identity and data fields.","lastModifiedDate":"2018-04-19"},{"lineNumber":95,"author":{"gitId":"-"},"content":" * This defines a stronger notion of equality between two persons.","lastModifiedDate":"2018-04-19"},{"lineNumber":96,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-04-19"},{"lineNumber":97,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":98,"author":{"gitId":"-"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2016-08-24"},{"lineNumber":99,"author":{"gitId":"-"},"content":" if (other \u003d\u003d this) {","lastModifiedDate":"2018-01-10"},{"lineNumber":100,"author":{"gitId":"-"},"content":" return true;","lastModifiedDate":"2018-01-10"},{"lineNumber":101,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-01-10"},{"lineNumber":102,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-01-10"},{"lineNumber":103,"author":{"gitId":"-"},"content":" // instanceof handles nulls","lastModifiedDate":"2023-07-13"},{"lineNumber":104,"author":{"gitId":"-"},"content":" if (!(other instanceof Person)) {","lastModifiedDate":"2018-01-10"},{"lineNumber":105,"author":{"gitId":"-"},"content":" return false;","lastModifiedDate":"2018-01-10"},{"lineNumber":106,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-01-10"},{"lineNumber":107,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-01-10"},{"lineNumber":108,"author":{"gitId":"-"},"content":" Person otherPerson \u003d (Person) other;","lastModifiedDate":"2018-01-10"},{"lineNumber":109,"author":{"gitId":"-"},"content":" return name.equals(otherPerson.name)","lastModifiedDate":"2023-07-13"},{"lineNumber":110,"author":{"gitId":"yeoshuheng"},"content":" \u0026\u0026 industry.equals(otherPerson.industry)","lastModifiedDate":"2024-02-25"},{"lineNumber":111,"author":{"gitId":"yeoshuheng"},"content":" \u0026\u0026 fundingStage.equals(otherPerson.fundingStage)","lastModifiedDate":"2024-02-25"},{"lineNumber":112,"author":{"gitId":"-"},"content":" \u0026\u0026 phone.equals(otherPerson.phone)","lastModifiedDate":"2023-07-13"},{"lineNumber":113,"author":{"gitId":"-"},"content":" \u0026\u0026 email.equals(otherPerson.email)","lastModifiedDate":"2023-07-13"},{"lineNumber":114,"author":{"gitId":"-"},"content":" \u0026\u0026 address.equals(otherPerson.address)","lastModifiedDate":"2023-07-13"},{"lineNumber":115,"author":{"gitId":"-"},"content":" \u0026\u0026 tags.equals(otherPerson.tags);","lastModifiedDate":"2023-07-13"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":117,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":118,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":119,"author":{"gitId":"-"},"content":" public int hashCode() {","lastModifiedDate":"2016-08-24"},{"lineNumber":120,"author":{"gitId":"-"},"content":" // use this method for custom fields hashing instead of implementing your own","lastModifiedDate":"2016-08-24"},{"lineNumber":121,"author":{"gitId":"-"},"content":" return Objects.hash(name, phone, email, address, tags);","lastModifiedDate":"2016-08-24"},{"lineNumber":122,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":123,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":124,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2016-08-24"},{"lineNumber":125,"author":{"gitId":"-"},"content":" public String toString() {","lastModifiedDate":"2016-08-24"},{"lineNumber":126,"author":{"gitId":"-"},"content":" return new ToStringBuilder(this)","lastModifiedDate":"2019-02-23"},{"lineNumber":127,"author":{"gitId":"-"},"content":" .add(\"name\", name)","lastModifiedDate":"2019-02-23"},{"lineNumber":128,"author":{"gitId":"yeoshuheng"},"content":" .add(\"industry\", industry)","lastModifiedDate":"2024-02-25"},{"lineNumber":129,"author":{"gitId":"yeoshuheng"},"content":" .add(\"funding stage\", fundingStage)","lastModifiedDate":"2024-02-25"},{"lineNumber":130,"author":{"gitId":"-"},"content":" .add(\"phone\", phone)","lastModifiedDate":"2019-02-23"},{"lineNumber":131,"author":{"gitId":"-"},"content":" .add(\"email\", email)","lastModifiedDate":"2019-02-23"},{"lineNumber":132,"author":{"gitId":"-"},"content":" .add(\"address\", address)","lastModifiedDate":"2019-02-23"},{"lineNumber":133,"author":{"gitId":"-"},"content":" .add(\"tags\", tags)","lastModifiedDate":"2019-02-23"},{"lineNumber":134,"author":{"gitId":"-"},"content":" .toString();","lastModifiedDate":"2019-02-23"},{"lineNumber":135,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-08-24"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-08-24"},{"lineNumber":137,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-08-24"}],"authorContributionMap":{"-":115,"yeoshuheng":22}},{"path":"src/main/java/seedu/address/model/util/SampleDataUtil.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model.util;","lastModifiedDate":"2016-12-20"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-20"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.Arrays;","lastModifiedDate":"2018-01-21"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-03-14"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2018-01-21"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-14"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import seedu.address.model.AddressBook;","lastModifiedDate":"2016-12-20"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import seedu.address.model.ReadOnlyAddressBook;","lastModifiedDate":"2016-12-20"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.model.person.FundingStage;","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.model.person.Industry;","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-03-14"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-20"},{"lineNumber":18,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-08-16"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * Contains utility methods for populating {@code AddressBook} with sample data.","lastModifiedDate":"2017-08-16"},{"lineNumber":20,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-08-16"},{"lineNumber":21,"author":{"gitId":"-"},"content":"public class SampleDataUtil {","lastModifiedDate":"2016-12-20"},{"lineNumber":22,"author":{"gitId":"-"},"content":" public static Person[] getSamplePersons() {","lastModifiedDate":"2016-12-20"},{"lineNumber":23,"author":{"gitId":"-"},"content":" return new Person[] {","lastModifiedDate":"2016-12-20"},{"lineNumber":24,"author":{"gitId":"yeoshuheng"},"content":" new Person(new Name(\"Alex Yeoh\"), new FundingStage(\"A\"), new Industry(\"Finance\"),","lastModifiedDate":"2024-02-25"},{"lineNumber":25,"author":{"gitId":"yeoshuheng"},"content":" new Phone(\"87438807\"), new Email(\"alexyeoh@example.com\"),","lastModifiedDate":"2024-02-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" new Address(\"Blk 30 Geylang Street 29, #06-40\"),","lastModifiedDate":"2016-12-20"},{"lineNumber":27,"author":{"gitId":"-"},"content":" getTagSet(\"friends\")),","lastModifiedDate":"2017-03-14"},{"lineNumber":28,"author":{"gitId":"yeoshuheng"},"content":" new Person(new Name(\"Bernice Yu\"), new FundingStage(\"B\"), new Industry(\"GreenTech\"),","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"yeoshuheng"},"content":" new Phone(\"99272758\"), new Email(\"berniceyu@example.com\"),","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" new Address(\"Blk 30 Lorong 3 Serangoon Gardens, #07-18\"),","lastModifiedDate":"2016-12-20"},{"lineNumber":31,"author":{"gitId":"-"},"content":" getTagSet(\"colleagues\", \"friends\")),","lastModifiedDate":"2017-03-14"},{"lineNumber":32,"author":{"gitId":"yeoshuheng"},"content":" new Person(new Name(\"Charlotte Oliveiro\"), new FundingStage(\"C\"), new Industry(\"Health\"),","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"yeoshuheng"},"content":" new Phone(\"93210283\"), new Email(\"charlotte@example.com\"),","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":" new Address(\"Blk 11 Ang Mo Kio Street 74, #11-04\"),","lastModifiedDate":"2016-12-20"},{"lineNumber":35,"author":{"gitId":"-"},"content":" getTagSet(\"neighbours\")),","lastModifiedDate":"2017-03-14"},{"lineNumber":36,"author":{"gitId":"yeoshuheng"},"content":" new Person(new Name(\"David Li\"), new FundingStage(\"A\"), new Industry(\"Manufacturing\"),","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"yeoshuheng"},"content":" new Phone(\"91031282\"), new Email(\"lidavid@example.com\"),","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" new Address(\"Blk 436 Serangoon Gardens Street 26, #16-43\"),","lastModifiedDate":"2016-12-20"},{"lineNumber":39,"author":{"gitId":"-"},"content":" getTagSet(\"family\")),","lastModifiedDate":"2017-03-14"},{"lineNumber":40,"author":{"gitId":"yeoshuheng"},"content":" new Person(new Name(\"Irfan Ibrahim\"), new FundingStage(\"C\"), new Industry(\"Tech\"),","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"yeoshuheng"},"content":" new Phone(\"92492021\"), new Email(\"irfan@example.com\"),","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":" new Address(\"Blk 47 Tampines Street 20, #17-35\"),","lastModifiedDate":"2016-12-20"},{"lineNumber":43,"author":{"gitId":"-"},"content":" getTagSet(\"classmates\")),","lastModifiedDate":"2017-03-14"},{"lineNumber":44,"author":{"gitId":"yeoshuheng"},"content":" new Person(new Name(\"Roy Balakrishnan\"), new FundingStage(\"A\"), new Industry(\"Food\"),","lastModifiedDate":"2024-02-25"},{"lineNumber":45,"author":{"gitId":"yeoshuheng"},"content":" new Phone(\"92624417\"), new Email(\"royb@example.com\"),","lastModifiedDate":"2024-02-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" new Address(\"Blk 45 Aljunied Street 85, #11-31\"),","lastModifiedDate":"2016-12-20"},{"lineNumber":47,"author":{"gitId":"-"},"content":" getTagSet(\"colleagues\"))","lastModifiedDate":"2017-03-14"},{"lineNumber":48,"author":{"gitId":"-"},"content":" };","lastModifiedDate":"2016-12-20"},{"lineNumber":49,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-20"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-20"},{"lineNumber":51,"author":{"gitId":"-"},"content":" public static ReadOnlyAddressBook getSampleAddressBook() {","lastModifiedDate":"2016-12-20"},{"lineNumber":52,"author":{"gitId":"-"},"content":" AddressBook sampleAb \u003d new AddressBook();","lastModifiedDate":"2017-04-07"},{"lineNumber":53,"author":{"gitId":"-"},"content":" for (Person samplePerson : getSamplePersons()) {","lastModifiedDate":"2016-12-20"},{"lineNumber":54,"author":{"gitId":"-"},"content":" sampleAb.addPerson(samplePerson);","lastModifiedDate":"2017-04-07"},{"lineNumber":55,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-20"},{"lineNumber":56,"author":{"gitId":"-"},"content":" return sampleAb;","lastModifiedDate":"2017-04-07"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-20"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-14"},{"lineNumber":59,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-03-14"},{"lineNumber":60,"author":{"gitId":"-"},"content":" * Returns a tag set containing the list of strings given.","lastModifiedDate":"2017-03-14"},{"lineNumber":61,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-03-14"},{"lineNumber":62,"author":{"gitId":"-"},"content":" public static Set\u003cTag\u003e getTagSet(String... strings) {","lastModifiedDate":"2017-05-30"},{"lineNumber":63,"author":{"gitId":"-"},"content":" return Arrays.stream(strings)","lastModifiedDate":"2018-01-21"},{"lineNumber":64,"author":{"gitId":"-"},"content":" .map(Tag::new)","lastModifiedDate":"2018-01-21"},{"lineNumber":65,"author":{"gitId":"-"},"content":" .collect(Collectors.toSet());","lastModifiedDate":"2018-01-21"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-03-14"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-14"},{"lineNumber":68,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-12-20"}],"authorContributionMap":{"-":54,"yeoshuheng":14}},{"path":"src/main/java/seedu/address/storage/JsonAdaptedPerson.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.storage;","lastModifiedDate":"2018-08-13"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.ArrayList;","lastModifiedDate":"2018-08-13"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.HashSet;","lastModifiedDate":"2018-08-13"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2018-08-13"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2018-08-13"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2018-08-13"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import com.fasterxml.jackson.annotation.JsonCreator;","lastModifiedDate":"2018-08-13"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import com.fasterxml.jackson.annotation.JsonProperty;","lastModifiedDate":"2018-08-13"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.commons.exceptions.IllegalValueException;","lastModifiedDate":"2018-08-13"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.model.person.FundingStage;","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.model.person.Industry;","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2024-02-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2024-02-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2024-02-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2018-08-13"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":22,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2018-08-13"},{"lineNumber":23,"author":{"gitId":"-"},"content":" * Jackson-friendly version of {@link Person}.","lastModifiedDate":"2018-08-13"},{"lineNumber":24,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-13"},{"lineNumber":25,"author":{"gitId":"-"},"content":"class JsonAdaptedPerson {","lastModifiedDate":"2018-12-03"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":27,"author":{"gitId":"-"},"content":" public static final String MISSING_FIELD_MESSAGE_FORMAT \u003d \"Person\u0027s %s field is missing!\";","lastModifiedDate":"2018-08-13"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":29,"author":{"gitId":"-"},"content":" private final String name;","lastModifiedDate":"2018-08-13"},{"lineNumber":30,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"yeoshuheng"},"content":" private final String industry;","lastModifiedDate":"2024-02-25"},{"lineNumber":32,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"yeoshuheng"},"content":" private final String fundingStage;","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":" private final String phone;","lastModifiedDate":"2018-08-13"},{"lineNumber":36,"author":{"gitId":"-"},"content":" private final String email;","lastModifiedDate":"2018-08-13"},{"lineNumber":37,"author":{"gitId":"-"},"content":" private final String address;","lastModifiedDate":"2018-08-13"},{"lineNumber":38,"author":{"gitId":"-"},"content":" private final List\u003cJsonAdaptedTag\u003e tags \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-01-09"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":40,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-13"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * Constructs a {@code JsonAdaptedPerson} with the given person details.","lastModifiedDate":"2018-08-13"},{"lineNumber":42,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-13"},{"lineNumber":43,"author":{"gitId":"-"},"content":" @JsonCreator","lastModifiedDate":"2018-08-13"},{"lineNumber":44,"author":{"gitId":"yeoshuheng"},"content":" public JsonAdaptedPerson(@JsonProperty(\"name\") String name, @JsonProperty(\"industry\") String industry,","lastModifiedDate":"2024-02-25"},{"lineNumber":45,"author":{"gitId":"yeoshuheng"},"content":" @JsonProperty(\"fundingStage\") String fundingStage, @JsonProperty(\"phone\") String phone,","lastModifiedDate":"2024-02-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" @JsonProperty(\"email\") String email, @JsonProperty(\"address\") String address,","lastModifiedDate":"2018-08-13"},{"lineNumber":47,"author":{"gitId":"-"},"content":" @JsonProperty(\"tags\") List\u003cJsonAdaptedTag\u003e tags) {","lastModifiedDate":"2023-05-12"},{"lineNumber":48,"author":{"gitId":"-"},"content":" this.name \u003d name;","lastModifiedDate":"2018-08-13"},{"lineNumber":49,"author":{"gitId":"yeoshuheng"},"content":" this.fundingStage \u003d fundingStage;","lastModifiedDate":"2024-02-25"},{"lineNumber":50,"author":{"gitId":"yeoshuheng"},"content":" this.industry \u003d industry;","lastModifiedDate":"2024-02-25"},{"lineNumber":51,"author":{"gitId":"-"},"content":" this.phone \u003d phone;","lastModifiedDate":"2018-08-13"},{"lineNumber":52,"author":{"gitId":"-"},"content":" this.email \u003d email;","lastModifiedDate":"2018-08-13"},{"lineNumber":53,"author":{"gitId":"-"},"content":" this.address \u003d address;","lastModifiedDate":"2018-08-13"},{"lineNumber":54,"author":{"gitId":"-"},"content":" if (tags !\u003d null) {","lastModifiedDate":"2023-01-09"},{"lineNumber":55,"author":{"gitId":"-"},"content":" this.tags.addAll(tags);","lastModifiedDate":"2023-01-09"},{"lineNumber":56,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":57,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":59,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-13"},{"lineNumber":60,"author":{"gitId":"-"},"content":" * Converts a given {@code Person} into this class for Jackson use.","lastModifiedDate":"2018-08-13"},{"lineNumber":61,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-13"},{"lineNumber":62,"author":{"gitId":"-"},"content":" public JsonAdaptedPerson(Person source) {","lastModifiedDate":"2018-08-13"},{"lineNumber":63,"author":{"gitId":"-"},"content":" name \u003d source.getName().fullName;","lastModifiedDate":"2018-08-13"},{"lineNumber":64,"author":{"gitId":"-"},"content":" phone \u003d source.getPhone().value;","lastModifiedDate":"2018-08-13"},{"lineNumber":65,"author":{"gitId":"-"},"content":" email \u003d source.getEmail().value;","lastModifiedDate":"2018-08-13"},{"lineNumber":66,"author":{"gitId":"-"},"content":" address \u003d source.getAddress().value;","lastModifiedDate":"2018-08-13"},{"lineNumber":67,"author":{"gitId":"yeoshuheng"},"content":" industry \u003d source.getIndustry().value;","lastModifiedDate":"2024-02-25"},{"lineNumber":68,"author":{"gitId":"yeoshuheng"},"content":" fundingStage \u003d source.getFundingStage().value;","lastModifiedDate":"2024-02-25"},{"lineNumber":69,"author":{"gitId":"-"},"content":" tags.addAll(source.getTags().stream()","lastModifiedDate":"2023-01-09"},{"lineNumber":70,"author":{"gitId":"-"},"content":" .map(JsonAdaptedTag::new)","lastModifiedDate":"2018-08-13"},{"lineNumber":71,"author":{"gitId":"-"},"content":" .collect(Collectors.toList()));","lastModifiedDate":"2018-08-13"},{"lineNumber":72,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":73,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":74,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-08-13"},{"lineNumber":75,"author":{"gitId":"-"},"content":" * Converts this Jackson-friendly adapted person object into the model\u0027s {@code Person} object.","lastModifiedDate":"2018-08-13"},{"lineNumber":76,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2018-08-13"},{"lineNumber":77,"author":{"gitId":"-"},"content":" * @throws IllegalValueException if there were any data constraints violated in the adapted person.","lastModifiedDate":"2018-08-13"},{"lineNumber":78,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-08-13"},{"lineNumber":79,"author":{"gitId":"-"},"content":" public Person toModelType() throws IllegalValueException {","lastModifiedDate":"2018-08-13"},{"lineNumber":80,"author":{"gitId":"-"},"content":" final List\u003cTag\u003e personTags \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2018-08-13"},{"lineNumber":81,"author":{"gitId":"-"},"content":" for (JsonAdaptedTag tag : tags) {","lastModifiedDate":"2023-01-09"},{"lineNumber":82,"author":{"gitId":"-"},"content":" personTags.add(tag.toModelType());","lastModifiedDate":"2018-08-13"},{"lineNumber":83,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":85,"author":{"gitId":"-"},"content":" if (name \u003d\u003d null) {","lastModifiedDate":"2018-08-13"},{"lineNumber":86,"author":{"gitId":"-"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Name.class.getSimpleName()));","lastModifiedDate":"2018-08-13"},{"lineNumber":87,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":88,"author":{"gitId":"-"},"content":" if (!Name.isValidName(name)) {","lastModifiedDate":"2018-08-13"},{"lineNumber":89,"author":{"gitId":"-"},"content":" throw new IllegalValueException(Name.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-08-13"},{"lineNumber":90,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":91,"author":{"gitId":"-"},"content":" final Name modelName \u003d new Name(name);","lastModifiedDate":"2018-08-13"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":93,"author":{"gitId":"yeoshuheng"},"content":" if (industry \u003d\u003d null) {","lastModifiedDate":"2024-02-25"},{"lineNumber":94,"author":{"gitId":"yeoshuheng"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT,","lastModifiedDate":"2024-02-25"},{"lineNumber":95,"author":{"gitId":"yeoshuheng"},"content":" Industry.class.getSimpleName()));","lastModifiedDate":"2024-02-25"},{"lineNumber":96,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":97,"author":{"gitId":"yeoshuheng"},"content":" if (!Industry.isValidIndustry(industry)) {","lastModifiedDate":"2024-02-25"},{"lineNumber":98,"author":{"gitId":"yeoshuheng"},"content":" throw new IllegalValueException(Industry.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":99,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":100,"author":{"gitId":"yeoshuheng"},"content":" final Industry modelIndustry \u003d new Industry(industry);","lastModifiedDate":"2024-02-25"},{"lineNumber":101,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":102,"author":{"gitId":"yeoshuheng"},"content":" if (fundingStage \u003d\u003d null) {","lastModifiedDate":"2024-02-25"},{"lineNumber":103,"author":{"gitId":"yeoshuheng"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT,","lastModifiedDate":"2024-02-25"},{"lineNumber":104,"author":{"gitId":"yeoshuheng"},"content":" FundingStage.class.getSimpleName()));","lastModifiedDate":"2024-02-25"},{"lineNumber":105,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":106,"author":{"gitId":"yeoshuheng"},"content":" if (!FundingStage.isValidFundingLevel(fundingStage)) {","lastModifiedDate":"2024-02-25"},{"lineNumber":107,"author":{"gitId":"yeoshuheng"},"content":" throw new IllegalValueException(FundingStage.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":108,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":109,"author":{"gitId":"yeoshuheng"},"content":" final FundingStage modelFundingStage \u003d new FundingStage(fundingStage);","lastModifiedDate":"2024-02-25"},{"lineNumber":110,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":111,"author":{"gitId":"-"},"content":" if (phone \u003d\u003d null) {","lastModifiedDate":"2018-08-13"},{"lineNumber":112,"author":{"gitId":"-"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Phone.class.getSimpleName()));","lastModifiedDate":"2018-08-13"},{"lineNumber":113,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":114,"author":{"gitId":"-"},"content":" if (!Phone.isValidPhone(phone)) {","lastModifiedDate":"2018-08-13"},{"lineNumber":115,"author":{"gitId":"-"},"content":" throw new IllegalValueException(Phone.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-08-13"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":117,"author":{"gitId":"-"},"content":" final Phone modelPhone \u003d new Phone(phone);","lastModifiedDate":"2018-08-13"},{"lineNumber":118,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":119,"author":{"gitId":"-"},"content":" if (email \u003d\u003d null) {","lastModifiedDate":"2018-08-13"},{"lineNumber":120,"author":{"gitId":"-"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Email.class.getSimpleName()));","lastModifiedDate":"2018-08-13"},{"lineNumber":121,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":122,"author":{"gitId":"-"},"content":" if (!Email.isValidEmail(email)) {","lastModifiedDate":"2018-08-13"},{"lineNumber":123,"author":{"gitId":"-"},"content":" throw new IllegalValueException(Email.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-08-13"},{"lineNumber":124,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":125,"author":{"gitId":"-"},"content":" final Email modelEmail \u003d new Email(email);","lastModifiedDate":"2018-08-13"},{"lineNumber":126,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":127,"author":{"gitId":"-"},"content":" if (address \u003d\u003d null) {","lastModifiedDate":"2018-08-13"},{"lineNumber":128,"author":{"gitId":"-"},"content":" throw new IllegalValueException(String.format(MISSING_FIELD_MESSAGE_FORMAT, Address.class.getSimpleName()));","lastModifiedDate":"2018-08-13"},{"lineNumber":129,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":130,"author":{"gitId":"-"},"content":" if (!Address.isValidAddress(address)) {","lastModifiedDate":"2018-08-13"},{"lineNumber":131,"author":{"gitId":"-"},"content":" throw new IllegalValueException(Address.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-08-13"},{"lineNumber":132,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":133,"author":{"gitId":"-"},"content":" final Address modelAddress \u003d new Address(address);","lastModifiedDate":"2018-08-13"},{"lineNumber":134,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":135,"author":{"gitId":"-"},"content":" final Set\u003cTag\u003e modelTags \u003d new HashSet\u003c\u003e(personTags);","lastModifiedDate":"2018-08-13"},{"lineNumber":136,"author":{"gitId":"yeoshuheng"},"content":" return new Person(modelName, modelFundingStage, modelIndustry, modelPhone, modelEmail, modelAddress, modelTags);","lastModifiedDate":"2024-02-25"},{"lineNumber":137,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":138,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":139,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2018-08-13"}],"authorContributionMap":{"-":107,"yeoshuheng":32}},{"path":"src/test/java/seedu/address/logic/LogicManagerTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic;","lastModifiedDate":"2016-09-21"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-03-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_INVALID_PERSON_DISPLAYED_INDEX;","lastModifiedDate":"2023-07-13"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_UNKNOWN_COMMAND;","lastModifiedDate":"2023-07-13"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-14"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.AMY;","lastModifiedDate":"2018-12-09"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-19"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.io.IOException;","lastModifiedDate":"2018-12-09"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import java.nio.file.AccessDeniedException;","lastModifiedDate":"2023-06-13"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import java.nio.file.Path;","lastModifiedDate":"2018-12-09"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2019-04-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2019-04-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-01-19"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.AddCommand;","lastModifiedDate":"2018-12-09"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.CommandResult;","lastModifiedDate":"2017-01-18"},{"lineNumber":19,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.logic.commands.CommandTestUtil;","lastModifiedDate":"2024-02-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.ListCommand;","lastModifiedDate":"2017-06-19"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.exceptions.CommandException;","lastModifiedDate":"2017-02-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import seedu.address.logic.parser.exceptions.ParseException;","lastModifiedDate":"2017-03-11"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import seedu.address.model.Model;","lastModifiedDate":"2016-09-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import seedu.address.model.ModelManager;","lastModifiedDate":"2016-09-21"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import seedu.address.model.ReadOnlyAddressBook;","lastModifiedDate":"2018-12-09"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import seedu.address.model.UserPrefs;","lastModifiedDate":"2017-05-31"},{"lineNumber":27,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-12-09"},{"lineNumber":28,"author":{"gitId":"-"},"content":"import seedu.address.storage.JsonAddressBookStorage;","lastModifiedDate":"2018-12-09"},{"lineNumber":29,"author":{"gitId":"-"},"content":"import seedu.address.storage.JsonUserPrefsStorage;","lastModifiedDate":"2018-12-09"},{"lineNumber":30,"author":{"gitId":"-"},"content":"import seedu.address.storage.StorageManager;","lastModifiedDate":"2018-12-09"},{"lineNumber":31,"author":{"gitId":"-"},"content":"import seedu.address.testutil.PersonBuilder;","lastModifiedDate":"2018-12-09"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":33,"author":{"gitId":"-"},"content":"public class LogicManagerTest {","lastModifiedDate":"2016-09-22"},{"lineNumber":34,"author":{"gitId":"-"},"content":" private static final IOException DUMMY_IO_EXCEPTION \u003d new IOException(\"dummy IO exception\");","lastModifiedDate":"2023-06-13"},{"lineNumber":35,"author":{"gitId":"-"},"content":" private static final IOException DUMMY_AD_EXCEPTION \u003d new AccessDeniedException(\"dummy access denied exception\");","lastModifiedDate":"2023-06-13"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":37,"author":{"gitId":"-"},"content":" @TempDir","lastModifiedDate":"2019-04-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" public Path temporaryFolder;","lastModifiedDate":"2019-04-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":40,"author":{"gitId":"-"},"content":" private Model model \u003d new ModelManager();","lastModifiedDate":"2017-06-20"},{"lineNumber":41,"author":{"gitId":"-"},"content":" private Logic logic;","lastModifiedDate":"2018-12-09"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":43,"author":{"gitId":"-"},"content":" @BeforeEach","lastModifiedDate":"2019-04-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" public void setUp() {","lastModifiedDate":"2019-04-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" JsonAddressBookStorage addressBookStorage \u003d","lastModifiedDate":"2019-04-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" new JsonAddressBookStorage(temporaryFolder.resolve(\"addressBook.json\"));","lastModifiedDate":"2019-04-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":" JsonUserPrefsStorage userPrefsStorage \u003d new JsonUserPrefsStorage(temporaryFolder.resolve(\"userPrefs.json\"));","lastModifiedDate":"2019-04-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" StorageManager storage \u003d new StorageManager(addressBookStorage, userPrefsStorage);","lastModifiedDate":"2018-12-09"},{"lineNumber":49,"author":{"gitId":"-"},"content":" logic \u003d new LogicManager(model, storage);","lastModifiedDate":"2018-12-09"},{"lineNumber":50,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":52,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-20"},{"lineNumber":53,"author":{"gitId":"-"},"content":" public void execute_invalidCommandFormat_throwsParseException() {","lastModifiedDate":"2017-08-15"},{"lineNumber":54,"author":{"gitId":"-"},"content":" String invalidCommand \u003d \"uicfhmowqewca\";","lastModifiedDate":"2017-06-20"},{"lineNumber":55,"author":{"gitId":"-"},"content":" assertParseException(invalidCommand, MESSAGE_UNKNOWN_COMMAND);","lastModifiedDate":"2017-06-20"},{"lineNumber":56,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-20"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-20"},{"lineNumber":58,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-14"},{"lineNumber":59,"author":{"gitId":"-"},"content":" public void execute_commandExecutionError_throwsCommandException() {","lastModifiedDate":"2017-08-15"},{"lineNumber":60,"author":{"gitId":"-"},"content":" String deleteCommand \u003d \"delete 9\";","lastModifiedDate":"2017-06-14"},{"lineNumber":61,"author":{"gitId":"-"},"content":" assertCommandException(deleteCommand, MESSAGE_INVALID_PERSON_DISPLAYED_INDEX);","lastModifiedDate":"2017-06-14"},{"lineNumber":62,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-14"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-14"},{"lineNumber":64,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-19"},{"lineNumber":65,"author":{"gitId":"-"},"content":" public void execute_validCommand_success() throws Exception {","lastModifiedDate":"2019-03-14"},{"lineNumber":66,"author":{"gitId":"-"},"content":" String listCommand \u003d ListCommand.COMMAND_WORD;","lastModifiedDate":"2017-06-19"},{"lineNumber":67,"author":{"gitId":"-"},"content":" assertCommandSuccess(listCommand, ListCommand.MESSAGE_SUCCESS, model);","lastModifiedDate":"2017-06-19"},{"lineNumber":68,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-20"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-20"},{"lineNumber":70,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-12-09"},{"lineNumber":71,"author":{"gitId":"-"},"content":" public void execute_storageThrowsIoException_throwsCommandException() {","lastModifiedDate":"2019-04-25"},{"lineNumber":72,"author":{"gitId":"-"},"content":" assertCommandFailureForExceptionFromStorage(DUMMY_IO_EXCEPTION, String.format(","lastModifiedDate":"2023-06-13"},{"lineNumber":73,"author":{"gitId":"-"},"content":" LogicManager.FILE_OPS_ERROR_FORMAT, DUMMY_IO_EXCEPTION.getMessage()));","lastModifiedDate":"2023-06-13"},{"lineNumber":74,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-06-13"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":76,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-06-13"},{"lineNumber":77,"author":{"gitId":"-"},"content":" public void execute_storageThrowsAdException_throwsCommandException() {","lastModifiedDate":"2023-06-13"},{"lineNumber":78,"author":{"gitId":"-"},"content":" assertCommandFailureForExceptionFromStorage(DUMMY_AD_EXCEPTION, String.format(","lastModifiedDate":"2023-06-13"},{"lineNumber":79,"author":{"gitId":"-"},"content":" LogicManager.FILE_OPS_PERMISSION_ERROR_FORMAT, DUMMY_AD_EXCEPTION.getMessage()));","lastModifiedDate":"2023-06-13"},{"lineNumber":80,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":81,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":82,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-09-01"},{"lineNumber":83,"author":{"gitId":"-"},"content":" public void getFilteredPersonList_modifyList_throwsUnsupportedOperationException() {","lastModifiedDate":"2017-09-01"},{"lineNumber":84,"author":{"gitId":"-"},"content":" assertThrows(UnsupportedOperationException.class, () -\u003e logic.getFilteredPersonList().remove(0));","lastModifiedDate":"2019-03-23"},{"lineNumber":85,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-09-01"},{"lineNumber":86,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":87,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-09-21"},{"lineNumber":88,"author":{"gitId":"-"},"content":" * Executes the command and confirms that","lastModifiedDate":"2019-03-14"},{"lineNumber":89,"author":{"gitId":"-"},"content":" * - no exceptions are thrown \u003cbr\u003e","lastModifiedDate":"2019-03-14"},{"lineNumber":90,"author":{"gitId":"-"},"content":" * - the feedback message is equal to {@code expectedMessage} \u003cbr\u003e","lastModifiedDate":"2019-03-14"},{"lineNumber":91,"author":{"gitId":"-"},"content":" * - the internal model manager state is the same as that in {@code expectedModel} \u003cbr\u003e","lastModifiedDate":"2019-03-14"},{"lineNumber":92,"author":{"gitId":"-"},"content":" * @see #assertCommandFailure(String, Class, String, Model)","lastModifiedDate":"2019-03-14"},{"lineNumber":93,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-09-21"},{"lineNumber":94,"author":{"gitId":"-"},"content":" private void assertCommandSuccess(String inputCommand, String expectedMessage,","lastModifiedDate":"2019-03-14"},{"lineNumber":95,"author":{"gitId":"-"},"content":" Model expectedModel) throws CommandException, ParseException {","lastModifiedDate":"2019-03-14"},{"lineNumber":96,"author":{"gitId":"-"},"content":" CommandResult result \u003d logic.execute(inputCommand);","lastModifiedDate":"2019-03-14"},{"lineNumber":97,"author":{"gitId":"-"},"content":" assertEquals(expectedMessage, result.getFeedbackToUser());","lastModifiedDate":"2019-03-14"},{"lineNumber":98,"author":{"gitId":"-"},"content":" assertEquals(expectedModel, model);","lastModifiedDate":"2019-03-14"},{"lineNumber":99,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-21"},{"lineNumber":100,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-21"},{"lineNumber":101,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-03-11"},{"lineNumber":102,"author":{"gitId":"-"},"content":" * Executes the command, confirms that a ParseException is thrown and that the result message is correct.","lastModifiedDate":"2017-03-11"},{"lineNumber":103,"author":{"gitId":"-"},"content":" * @see #assertCommandFailure(String, Class, String, Model)","lastModifiedDate":"2019-03-14"},{"lineNumber":104,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-03-11"},{"lineNumber":105,"author":{"gitId":"-"},"content":" private void assertParseException(String inputCommand, String expectedMessage) {","lastModifiedDate":"2017-03-11"},{"lineNumber":106,"author":{"gitId":"-"},"content":" assertCommandFailure(inputCommand, ParseException.class, expectedMessage);","lastModifiedDate":"2017-03-11"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-03-11"},{"lineNumber":108,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-03-11"},{"lineNumber":109,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-06-14"},{"lineNumber":110,"author":{"gitId":"-"},"content":" * Executes the command, confirms that a CommandException is thrown and that the result message is correct.","lastModifiedDate":"2017-06-14"},{"lineNumber":111,"author":{"gitId":"-"},"content":" * @see #assertCommandFailure(String, Class, String, Model)","lastModifiedDate":"2019-03-14"},{"lineNumber":112,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-06-14"},{"lineNumber":113,"author":{"gitId":"-"},"content":" private void assertCommandException(String inputCommand, String expectedMessage) {","lastModifiedDate":"2017-06-14"},{"lineNumber":114,"author":{"gitId":"-"},"content":" assertCommandFailure(inputCommand, CommandException.class, expectedMessage);","lastModifiedDate":"2017-06-14"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-14"},{"lineNumber":116,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-14"},{"lineNumber":117,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-03-11"},{"lineNumber":118,"author":{"gitId":"-"},"content":" * Executes the command, confirms that the exception is thrown and that the result message is correct.","lastModifiedDate":"2017-03-11"},{"lineNumber":119,"author":{"gitId":"-"},"content":" * @see #assertCommandFailure(String, Class, String, Model)","lastModifiedDate":"2019-03-14"},{"lineNumber":120,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-03-11"},{"lineNumber":121,"author":{"gitId":"-"},"content":" private void assertCommandFailure(String inputCommand, Class\u003c? extends Throwable\u003e expectedException,","lastModifiedDate":"2019-03-14"},{"lineNumber":122,"author":{"gitId":"-"},"content":" String expectedMessage) {","lastModifiedDate":"2019-03-14"},{"lineNumber":123,"author":{"gitId":"-"},"content":" Model expectedModel \u003d new ModelManager(model.getAddressBook(), new UserPrefs());","lastModifiedDate":"2017-05-31"},{"lineNumber":124,"author":{"gitId":"-"},"content":" assertCommandFailure(inputCommand, expectedException, expectedMessage, expectedModel);","lastModifiedDate":"2019-03-14"},{"lineNumber":125,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-02-05"},{"lineNumber":126,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-02-05"},{"lineNumber":127,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-02-05"},{"lineNumber":128,"author":{"gitId":"-"},"content":" * Executes the command and confirms that","lastModifiedDate":"2019-03-14"},{"lineNumber":129,"author":{"gitId":"-"},"content":" * - the {@code expectedException} is thrown \u003cbr\u003e","lastModifiedDate":"2019-03-14"},{"lineNumber":130,"author":{"gitId":"-"},"content":" * - the resulting error message is equal to {@code expectedMessage} \u003cbr\u003e","lastModifiedDate":"2019-03-14"},{"lineNumber":131,"author":{"gitId":"-"},"content":" * - the internal model manager state is the same as that in {@code expectedModel} \u003cbr\u003e","lastModifiedDate":"2019-03-14"},{"lineNumber":132,"author":{"gitId":"-"},"content":" * @see #assertCommandSuccess(String, String, Model)","lastModifiedDate":"2019-03-14"},{"lineNumber":133,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-09-21"},{"lineNumber":134,"author":{"gitId":"-"},"content":" private void assertCommandFailure(String inputCommand, Class\u003c? extends Throwable\u003e expectedException,","lastModifiedDate":"2019-03-14"},{"lineNumber":135,"author":{"gitId":"-"},"content":" String expectedMessage, Model expectedModel) {","lastModifiedDate":"2017-05-31"},{"lineNumber":136,"author":{"gitId":"-"},"content":" assertThrows(expectedException, expectedMessage, () -\u003e logic.execute(inputCommand));","lastModifiedDate":"2019-03-14"},{"lineNumber":137,"author":{"gitId":"-"},"content":" assertEquals(expectedModel, model);","lastModifiedDate":"2017-05-31"},{"lineNumber":138,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-21"},{"lineNumber":139,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-19"},{"lineNumber":140,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-12-09"},{"lineNumber":141,"author":{"gitId":"-"},"content":" * Tests the Logic component\u0027s handling of an {@code IOException} thrown by the Storage component.","lastModifiedDate":"2023-06-13"},{"lineNumber":142,"author":{"gitId":"-"},"content":" *","lastModifiedDate":"2023-06-13"},{"lineNumber":143,"author":{"gitId":"-"},"content":" * @param e the exception to be thrown by the Storage component","lastModifiedDate":"2023-06-13"},{"lineNumber":144,"author":{"gitId":"-"},"content":" * @param expectedMessage the message expected inside exception thrown by the Logic component","lastModifiedDate":"2023-06-13"},{"lineNumber":145,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-12-09"},{"lineNumber":146,"author":{"gitId":"-"},"content":" private void assertCommandFailureForExceptionFromStorage(IOException e, String expectedMessage) {","lastModifiedDate":"2023-06-13"},{"lineNumber":147,"author":{"gitId":"-"},"content":" Path prefPath \u003d temporaryFolder.resolve(\"ExceptionUserPrefs.json\");","lastModifiedDate":"2023-06-13"},{"lineNumber":148,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":149,"author":{"gitId":"-"},"content":" // Inject LogicManager with an AddressBookStorage that throws the IOException e when saving","lastModifiedDate":"2023-06-13"},{"lineNumber":150,"author":{"gitId":"-"},"content":" JsonAddressBookStorage addressBookStorage \u003d new JsonAddressBookStorage(prefPath) {","lastModifiedDate":"2023-06-13"},{"lineNumber":151,"author":{"gitId":"-"},"content":" @Override","lastModifiedDate":"2018-12-09"},{"lineNumber":152,"author":{"gitId":"-"},"content":" public void saveAddressBook(ReadOnlyAddressBook addressBook, Path filePath)","lastModifiedDate":"2023-06-13"},{"lineNumber":153,"author":{"gitId":"-"},"content":" throws IOException {","lastModifiedDate":"2023-06-13"},{"lineNumber":154,"author":{"gitId":"-"},"content":" throw e;","lastModifiedDate":"2023-06-13"},{"lineNumber":155,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":156,"author":{"gitId":"-"},"content":" };","lastModifiedDate":"2023-06-13"},{"lineNumber":157,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-06-13"},{"lineNumber":158,"author":{"gitId":"-"},"content":" JsonUserPrefsStorage userPrefsStorage \u003d","lastModifiedDate":"2023-06-13"},{"lineNumber":159,"author":{"gitId":"-"},"content":" new JsonUserPrefsStorage(temporaryFolder.resolve(\"ExceptionUserPrefs.json\"));","lastModifiedDate":"2023-06-13"},{"lineNumber":160,"author":{"gitId":"-"},"content":" StorageManager storage \u003d new StorageManager(addressBookStorage, userPrefsStorage);","lastModifiedDate":"2023-06-13"},{"lineNumber":161,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-06-13"},{"lineNumber":162,"author":{"gitId":"-"},"content":" logic \u003d new LogicManager(model, storage);","lastModifiedDate":"2023-06-13"},{"lineNumber":163,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-06-13"},{"lineNumber":164,"author":{"gitId":"-"},"content":" // Triggers the saveAddressBook method by executing an add command","lastModifiedDate":"2023-06-13"},{"lineNumber":165,"author":{"gitId":"yeoshuheng"},"content":" String addCommand \u003d AddCommand.COMMAND_WORD + CommandTestUtil.FUNDING_DESC_AMY","lastModifiedDate":"2024-02-25"},{"lineNumber":166,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INDUSTRY_DESC_AMY + CommandTestUtil.NAME_DESC_AMY + CommandTestUtil.PHONE_DESC_AMY","lastModifiedDate":"2024-02-25"},{"lineNumber":167,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.EMAIL_DESC_AMY + CommandTestUtil.ADDRESS_DESC_AMY;","lastModifiedDate":"2024-02-25"},{"lineNumber":168,"author":{"gitId":"-"},"content":" Person expectedPerson \u003d new PersonBuilder(AMY).withTags().build();","lastModifiedDate":"2023-06-13"},{"lineNumber":169,"author":{"gitId":"-"},"content":" ModelManager expectedModel \u003d new ModelManager();","lastModifiedDate":"2023-06-13"},{"lineNumber":170,"author":{"gitId":"-"},"content":" expectedModel.addPerson(expectedPerson);","lastModifiedDate":"2023-06-13"},{"lineNumber":171,"author":{"gitId":"-"},"content":" assertCommandFailure(addCommand, CommandException.class, expectedMessage, expectedModel);","lastModifiedDate":"2023-06-13"},{"lineNumber":172,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":173,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-09-21"}],"authorContributionMap":{"-":169,"yeoshuheng":4}},{"path":"src/test/java/seedu/address/logic/commands/CommandTestUtil.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.commands;","lastModifiedDate":"2017-06-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-03-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2019-03-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import java.util.ArrayList;","lastModifiedDate":"2017-06-05"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.Arrays;","lastModifiedDate":"2017-07-20"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2017-06-05"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2018-01-31"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.exceptions.CommandException;","lastModifiedDate":"2017-06-05"},{"lineNumber":13,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.logic.parser.CliSyntax;","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.model.AddressBook;","lastModifiedDate":"2017-06-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.model.Model;","lastModifiedDate":"2017-06-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.model.person.NameContainsKeywordsPredicate;","lastModifiedDate":"2017-07-20"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-01-10"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.testutil.EditPersonDescriptorBuilder;","lastModifiedDate":"2017-07-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-06-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":" * Contains helper methods for testing commands.","lastModifiedDate":"2017-06-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-06-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":"public class CommandTestUtil {","lastModifiedDate":"2017-06-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":" public static final String VALID_NAME_AMY \u003d \"Amy Bee\";","lastModifiedDate":"2017-07-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":" public static final String VALID_NAME_BOB \u003d \"Bob Choo\";","lastModifiedDate":"2017-07-05"},{"lineNumber":27,"author":{"gitId":"-"},"content":" public static final String VALID_PHONE_AMY \u003d \"11111111\";","lastModifiedDate":"2017-07-05"},{"lineNumber":28,"author":{"gitId":"-"},"content":" public static final String VALID_PHONE_BOB \u003d \"22222222\";","lastModifiedDate":"2017-07-05"},{"lineNumber":29,"author":{"gitId":"-"},"content":" public static final String VALID_EMAIL_AMY \u003d \"amy@example.com\";","lastModifiedDate":"2017-07-05"},{"lineNumber":30,"author":{"gitId":"-"},"content":" public static final String VALID_EMAIL_BOB \u003d \"bob@example.com\";","lastModifiedDate":"2017-07-05"},{"lineNumber":31,"author":{"gitId":"-"},"content":" public static final String VALID_ADDRESS_AMY \u003d \"Block 312, Amy Street 1\";","lastModifiedDate":"2017-07-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":" public static final String VALID_ADDRESS_BOB \u003d \"Block 123, Bobby Street 3\";","lastModifiedDate":"2017-07-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":" public static final String VALID_TAG_HUSBAND \u003d \"husband\";","lastModifiedDate":"2017-07-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":" public static final String VALID_TAG_FRIEND \u003d \"friend\";","lastModifiedDate":"2017-07-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-05"},{"lineNumber":36,"author":{"gitId":"yeoshuheng"},"content":" public static final String VALID_INDUSTRY_BOB \u003d \"Finance\";","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"yeoshuheng"},"content":" public static final String VALID_INDUSTRY_AMY \u003d \"Finance\";","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":39,"author":{"gitId":"yeoshuheng"},"content":" public static final String VALID_FUNDING_BOB \u003d \"A\";","lastModifiedDate":"2024-02-25"},{"lineNumber":40,"author":{"gitId":"yeoshuheng"},"content":" public static final String VALID_FUNDING_AMY \u003d \"A\";","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"yeoshuheng"},"content":" public static final String NAME_DESC_AMY \u003d \" \" + CliSyntax.PREFIX_NAME + VALID_NAME_AMY;","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"yeoshuheng"},"content":" public static final String NAME_DESC_BOB \u003d \" \" + CliSyntax.PREFIX_NAME + VALID_NAME_BOB;","lastModifiedDate":"2024-02-25"},{"lineNumber":44,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":45,"author":{"gitId":"yeoshuheng"},"content":" public static final String INDUSTRY_DESC_AMY \u003d \" \" + CliSyntax.PREFIX_INDUSTRY + VALID_INDUSTRY_AMY;","lastModifiedDate":"2024-02-25"},{"lineNumber":46,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":47,"author":{"gitId":"yeoshuheng"},"content":" public static final String INDUSTRY_DESC_BOB \u003d \" \" + CliSyntax.PREFIX_INDUSTRY + VALID_INDUSTRY_BOB;","lastModifiedDate":"2024-02-25"},{"lineNumber":48,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":49,"author":{"gitId":"yeoshuheng"},"content":" public static final String FUNDING_DESC_AMY \u003d \" \" + CliSyntax.PREFIX_FUNDING_STAGE + VALID_FUNDING_AMY;","lastModifiedDate":"2024-02-25"},{"lineNumber":50,"author":{"gitId":"yeoshuheng"},"content":" public static final String FUNDING_DESC_BOB \u003d \" \" + CliSyntax.PREFIX_FUNDING_STAGE + VALID_FUNDING_BOB;","lastModifiedDate":"2024-02-25"},{"lineNumber":51,"author":{"gitId":"yeoshuheng"},"content":" public static final String PHONE_DESC_AMY \u003d \" \" + CliSyntax.PREFIX_PHONE + VALID_PHONE_AMY;","lastModifiedDate":"2024-02-25"},{"lineNumber":52,"author":{"gitId":"yeoshuheng"},"content":" public static final String PHONE_DESC_BOB \u003d \" \" + CliSyntax.PREFIX_PHONE + VALID_PHONE_BOB;","lastModifiedDate":"2024-02-25"},{"lineNumber":53,"author":{"gitId":"yeoshuheng"},"content":" public static final String EMAIL_DESC_AMY \u003d \" \" + CliSyntax.PREFIX_EMAIL + VALID_EMAIL_AMY;","lastModifiedDate":"2024-02-25"},{"lineNumber":54,"author":{"gitId":"yeoshuheng"},"content":" public static final String EMAIL_DESC_BOB \u003d \" \" + CliSyntax.PREFIX_EMAIL + VALID_EMAIL_BOB;","lastModifiedDate":"2024-02-25"},{"lineNumber":55,"author":{"gitId":"yeoshuheng"},"content":" public static final String ADDRESS_DESC_AMY \u003d \" \" + CliSyntax.PREFIX_ADDRESS + VALID_ADDRESS_AMY;","lastModifiedDate":"2024-02-25"},{"lineNumber":56,"author":{"gitId":"yeoshuheng"},"content":" public static final String ADDRESS_DESC_BOB \u003d \" \" + CliSyntax.PREFIX_ADDRESS + VALID_ADDRESS_BOB;","lastModifiedDate":"2024-02-25"},{"lineNumber":57,"author":{"gitId":"yeoshuheng"},"content":" public static final String TAG_DESC_FRIEND \u003d \" \" + CliSyntax.PREFIX_TAG + VALID_TAG_FRIEND;","lastModifiedDate":"2024-02-25"},{"lineNumber":58,"author":{"gitId":"yeoshuheng"},"content":" public static final String TAG_DESC_HUSBAND \u003d \" \" + CliSyntax.PREFIX_TAG + VALID_TAG_HUSBAND;","lastModifiedDate":"2024-02-25"},{"lineNumber":59,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":60,"author":{"gitId":"yeoshuheng"},"content":" public static final String INVALID_NAME_DESC \u003d \" \"","lastModifiedDate":"2024-02-25"},{"lineNumber":61,"author":{"gitId":"yeoshuheng"},"content":" + CliSyntax.PREFIX_NAME + \"James\u0026\"; // \u0027\u0026\u0027 not allowed in names","lastModifiedDate":"2024-02-25"},{"lineNumber":62,"author":{"gitId":"yeoshuheng"},"content":" public static final String INVALID_PHONE_DESC \u003d \" \"","lastModifiedDate":"2024-02-25"},{"lineNumber":63,"author":{"gitId":"yeoshuheng"},"content":" + CliSyntax.PREFIX_PHONE + \"911a\"; // \u0027a\u0027 not allowed in phones","lastModifiedDate":"2024-02-25"},{"lineNumber":64,"author":{"gitId":"yeoshuheng"},"content":" public static final String INVALID_EMAIL_DESC \u003d \" \"","lastModifiedDate":"2024-02-25"},{"lineNumber":65,"author":{"gitId":"yeoshuheng"},"content":" + CliSyntax.PREFIX_EMAIL + \"bob!yahoo\"; // missing \u0027@\u0027 symbol","lastModifiedDate":"2024-02-25"},{"lineNumber":66,"author":{"gitId":"yeoshuheng"},"content":" public static final String INVALID_ADDRESS_DESC \u003d \" \"","lastModifiedDate":"2024-02-25"},{"lineNumber":67,"author":{"gitId":"yeoshuheng"},"content":" + CliSyntax.PREFIX_ADDRESS; // empty string not allowed for addresses","lastModifiedDate":"2024-02-25"},{"lineNumber":68,"author":{"gitId":"yeoshuheng"},"content":" public static final String INVALID_TAG_DESC \u003d \" \"","lastModifiedDate":"2024-02-25"},{"lineNumber":69,"author":{"gitId":"yeoshuheng"},"content":" + CliSyntax.PREFIX_TAG + \"hubby*\"; // \u0027*\u0027 not allowed in tags","lastModifiedDate":"2024-02-25"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-05"},{"lineNumber":71,"author":{"gitId":"yeoshuheng"},"content":" public static final String INVALID_INDUSTRY_DESC \u003d \" \" + CliSyntax.PREFIX_INDUSTRY + \"\";","lastModifiedDate":"2024-03-05"},{"lineNumber":72,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":73,"author":{"gitId":"yeoshuheng"},"content":" public static final String INVALID_FUNDING_DESC \u003d \" \" + CliSyntax.PREFIX_FUNDING_STAGE + \"D\";","lastModifiedDate":"2024-03-05"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":75,"author":{"gitId":"-"},"content":" public static final String PREAMBLE_WHITESPACE \u003d \"\\t \\r \\n\";","lastModifiedDate":"2017-12-23"},{"lineNumber":76,"author":{"gitId":"-"},"content":" public static final String PREAMBLE_NON_EMPTY \u003d \"NonEmptyPreamble\";","lastModifiedDate":"2017-12-23"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-23"},{"lineNumber":78,"author":{"gitId":"-"},"content":" public static final EditCommand.EditPersonDescriptor DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":79,"author":{"gitId":"-"},"content":" public static final EditCommand.EditPersonDescriptor DESC_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-05"},{"lineNumber":81,"author":{"gitId":"-"},"content":" static {","lastModifiedDate":"2017-07-05"},{"lineNumber":82,"author":{"gitId":"-"},"content":" DESC_AMY \u003d new EditPersonDescriptorBuilder().withName(VALID_NAME_AMY)","lastModifiedDate":"2017-07-05"},{"lineNumber":83,"author":{"gitId":"-"},"content":" .withPhone(VALID_PHONE_AMY).withEmail(VALID_EMAIL_AMY).withAddress(VALID_ADDRESS_AMY)","lastModifiedDate":"2017-07-05"},{"lineNumber":84,"author":{"gitId":"yeoshuheng"},"content":" .withTags(VALID_TAG_FRIEND).withIndustry(VALID_INDUSTRY_AMY)","lastModifiedDate":"2024-02-25"},{"lineNumber":85,"author":{"gitId":"yeoshuheng"},"content":" .withFundingStage(VALID_FUNDING_AMY).build();","lastModifiedDate":"2024-02-25"},{"lineNumber":86,"author":{"gitId":"-"},"content":" DESC_BOB \u003d new EditPersonDescriptorBuilder().withName(VALID_NAME_BOB)","lastModifiedDate":"2017-07-05"},{"lineNumber":87,"author":{"gitId":"-"},"content":" .withPhone(VALID_PHONE_BOB).withEmail(VALID_EMAIL_BOB).withAddress(VALID_ADDRESS_BOB)","lastModifiedDate":"2017-07-05"},{"lineNumber":88,"author":{"gitId":"yeoshuheng"},"content":" .withFundingStage(VALID_FUNDING_BOB).withIndustry(VALID_INDUSTRY_BOB)","lastModifiedDate":"2024-02-25"},{"lineNumber":89,"author":{"gitId":"-"},"content":" .withTags(VALID_TAG_HUSBAND, VALID_TAG_FRIEND).build();","lastModifiedDate":"2017-07-05"},{"lineNumber":90,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-07-05"},{"lineNumber":91,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-05"},{"lineNumber":92,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-06-05"},{"lineNumber":93,"author":{"gitId":"-"},"content":" * Executes the given {@code command}, confirms that \u003cbr\u003e","lastModifiedDate":"2017-06-05"},{"lineNumber":94,"author":{"gitId":"-"},"content":" * - the returned {@link CommandResult} matches {@code expectedCommandResult} \u003cbr\u003e","lastModifiedDate":"2018-12-09"},{"lineNumber":95,"author":{"gitId":"-"},"content":" * - the {@code actualModel} matches {@code expectedModel}","lastModifiedDate":"2019-01-25"},{"lineNumber":96,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-06-05"},{"lineNumber":97,"author":{"gitId":"-"},"content":" public static void assertCommandSuccess(Command command, Model actualModel, CommandResult expectedCommandResult,","lastModifiedDate":"2019-01-25"},{"lineNumber":98,"author":{"gitId":"-"},"content":" Model expectedModel) {","lastModifiedDate":"2019-01-25"},{"lineNumber":99,"author":{"gitId":"-"},"content":" try {","lastModifiedDate":"2017-08-15"},{"lineNumber":100,"author":{"gitId":"-"},"content":" CommandResult result \u003d command.execute(actualModel);","lastModifiedDate":"2019-01-25"},{"lineNumber":101,"author":{"gitId":"-"},"content":" assertEquals(expectedCommandResult, result);","lastModifiedDate":"2018-12-09"},{"lineNumber":102,"author":{"gitId":"-"},"content":" assertEquals(expectedModel, actualModel);","lastModifiedDate":"2017-06-05"},{"lineNumber":103,"author":{"gitId":"-"},"content":" } catch (CommandException ce) {","lastModifiedDate":"2017-08-15"},{"lineNumber":104,"author":{"gitId":"-"},"content":" throw new AssertionError(\"Execution of command should not fail.\", ce);","lastModifiedDate":"2017-08-15"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-08-15"},{"lineNumber":106,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-05"},{"lineNumber":107,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":108,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-12-09"},{"lineNumber":109,"author":{"gitId":"-"},"content":" * Convenience wrapper to {@link #assertCommandSuccess(Command, Model, CommandResult, Model)}","lastModifiedDate":"2019-01-25"},{"lineNumber":110,"author":{"gitId":"-"},"content":" * that takes a string {@code expectedMessage}.","lastModifiedDate":"2018-12-09"},{"lineNumber":111,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-12-09"},{"lineNumber":112,"author":{"gitId":"-"},"content":" public static void assertCommandSuccess(Command command, Model actualModel, String expectedMessage,","lastModifiedDate":"2019-01-25"},{"lineNumber":113,"author":{"gitId":"-"},"content":" Model expectedModel) {","lastModifiedDate":"2019-01-25"},{"lineNumber":114,"author":{"gitId":"-"},"content":" CommandResult expectedCommandResult \u003d new CommandResult(expectedMessage);","lastModifiedDate":"2018-12-09"},{"lineNumber":115,"author":{"gitId":"-"},"content":" assertCommandSuccess(command, actualModel, expectedCommandResult, expectedModel);","lastModifiedDate":"2019-01-25"},{"lineNumber":116,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-12-09"},{"lineNumber":117,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-12-09"},{"lineNumber":118,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-06-05"},{"lineNumber":119,"author":{"gitId":"-"},"content":" * Executes the given {@code command}, confirms that \u003cbr\u003e","lastModifiedDate":"2017-06-05"},{"lineNumber":120,"author":{"gitId":"-"},"content":" * - a {@code CommandException} is thrown \u003cbr\u003e","lastModifiedDate":"2017-06-05"},{"lineNumber":121,"author":{"gitId":"-"},"content":" * - the CommandException message matches {@code expectedMessage} \u003cbr\u003e","lastModifiedDate":"2017-06-05"},{"lineNumber":122,"author":{"gitId":"-"},"content":" * - the address book, filtered person list and selected person in {@code actualModel} remain unchanged","lastModifiedDate":"2019-01-25"},{"lineNumber":123,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-06-05"},{"lineNumber":124,"author":{"gitId":"-"},"content":" public static void assertCommandFailure(Command command, Model actualModel, String expectedMessage) {","lastModifiedDate":"2019-01-25"},{"lineNumber":125,"author":{"gitId":"-"},"content":" // we are unable to defensively copy the model for comparison later, so we can","lastModifiedDate":"2017-06-05"},{"lineNumber":126,"author":{"gitId":"-"},"content":" // only do so by copying its components.","lastModifiedDate":"2017-06-05"},{"lineNumber":127,"author":{"gitId":"-"},"content":" AddressBook expectedAddressBook \u003d new AddressBook(actualModel.getAddressBook());","lastModifiedDate":"2017-06-05"},{"lineNumber":128,"author":{"gitId":"-"},"content":" List\u003cPerson\u003e expectedFilteredList \u003d new ArrayList\u003c\u003e(actualModel.getFilteredPersonList());","lastModifiedDate":"2018-01-10"},{"lineNumber":129,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":130,"author":{"gitId":"-"},"content":" assertThrows(CommandException.class, expectedMessage, () -\u003e command.execute(actualModel));","lastModifiedDate":"2019-05-03"},{"lineNumber":131,"author":{"gitId":"-"},"content":" assertEquals(expectedAddressBook, actualModel.getAddressBook());","lastModifiedDate":"2017-06-05"},{"lineNumber":132,"author":{"gitId":"-"},"content":" assertEquals(expectedFilteredList, actualModel.getFilteredPersonList());","lastModifiedDate":"2017-06-05"},{"lineNumber":133,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-05"},{"lineNumber":134,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-20"},{"lineNumber":135,"author":{"gitId":"-"},"content":" * Updates {@code model}\u0027s filtered list to show only the person at the given {@code targetIndex} in the","lastModifiedDate":"2018-01-31"},{"lineNumber":136,"author":{"gitId":"-"},"content":" * {@code model}\u0027s address book.","lastModifiedDate":"2018-01-31"},{"lineNumber":137,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-20"},{"lineNumber":138,"author":{"gitId":"-"},"content":" public static void showPersonAtIndex(Model model, Index targetIndex) {","lastModifiedDate":"2018-01-31"},{"lineNumber":139,"author":{"gitId":"-"},"content":" assertTrue(targetIndex.getZeroBased() \u003c model.getFilteredPersonList().size());","lastModifiedDate":"2018-01-31"},{"lineNumber":140,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-01-31"},{"lineNumber":141,"author":{"gitId":"-"},"content":" Person person \u003d model.getFilteredPersonList().get(targetIndex.getZeroBased());","lastModifiedDate":"2018-01-31"},{"lineNumber":142,"author":{"gitId":"-"},"content":" final String[] splitName \u003d person.getName().fullName.split(\"\\\\s+\");","lastModifiedDate":"2017-07-20"},{"lineNumber":143,"author":{"gitId":"-"},"content":" model.updateFilteredPersonList(new NameContainsKeywordsPredicate(Arrays.asList(splitName[0])));","lastModifiedDate":"2017-07-20"},{"lineNumber":144,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-20"},{"lineNumber":145,"author":{"gitId":"-"},"content":" assertEquals(1, model.getFilteredPersonList().size());","lastModifiedDate":"2018-02-08"},{"lineNumber":146,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-07-20"},{"lineNumber":147,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":148,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-06-05"}],"authorContributionMap":{"-":107,"yeoshuheng":41}},{"path":"src/test/java/seedu/address/logic/commands/EditPersonDescriptorTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.commands;","lastModifiedDate":"2017-05-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-02-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2019-03-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2019-03-15"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.DESC_AMY;","lastModifiedDate":"2017-07-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.DESC_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB;","lastModifiedDate":"2017-07-05"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND;","lastModifiedDate":"2017-07-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand.EditPersonDescriptor;","lastModifiedDate":"2017-05-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.testutil.EditPersonDescriptorBuilder;","lastModifiedDate":"2017-05-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"public class EditPersonDescriptorTest {","lastModifiedDate":"2017-05-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":" public void equals() {","lastModifiedDate":"2017-08-15"},{"lineNumber":23,"author":{"gitId":"-"},"content":" // same values -\u003e returns true","lastModifiedDate":"2017-05-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":" EditPersonDescriptor descriptorWithSameValues \u003d new EditPersonDescriptor(DESC_AMY);","lastModifiedDate":"2017-05-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":" assertTrue(DESC_AMY.equals(descriptorWithSameValues));","lastModifiedDate":"2017-05-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":27,"author":{"gitId":"-"},"content":" // same object -\u003e returns true","lastModifiedDate":"2017-05-05"},{"lineNumber":28,"author":{"gitId":"-"},"content":" assertTrue(DESC_AMY.equals(DESC_AMY));","lastModifiedDate":"2017-05-05"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":30,"author":{"gitId":"-"},"content":" // null -\u003e returns false","lastModifiedDate":"2017-05-05"},{"lineNumber":31,"author":{"gitId":"-"},"content":" assertFalse(DESC_AMY.equals(null));","lastModifiedDate":"2017-05-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":" // different types -\u003e returns false","lastModifiedDate":"2017-05-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":" assertFalse(DESC_AMY.equals(5));","lastModifiedDate":"2017-05-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":36,"author":{"gitId":"-"},"content":" // different values -\u003e returns false","lastModifiedDate":"2017-05-05"},{"lineNumber":37,"author":{"gitId":"-"},"content":" assertFalse(DESC_AMY.equals(DESC_BOB));","lastModifiedDate":"2017-05-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":" // different name -\u003e returns false","lastModifiedDate":"2017-05-05"},{"lineNumber":40,"author":{"gitId":"-"},"content":" EditPersonDescriptor editedAmy \u003d new EditPersonDescriptorBuilder(DESC_AMY).withName(VALID_NAME_BOB).build();","lastModifiedDate":"2017-05-05"},{"lineNumber":41,"author":{"gitId":"-"},"content":" assertFalse(DESC_AMY.equals(editedAmy));","lastModifiedDate":"2017-05-05"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":" // different phone -\u003e returns false","lastModifiedDate":"2017-05-05"},{"lineNumber":44,"author":{"gitId":"-"},"content":" editedAmy \u003d new EditPersonDescriptorBuilder(DESC_AMY).withPhone(VALID_PHONE_BOB).build();","lastModifiedDate":"2017-05-05"},{"lineNumber":45,"author":{"gitId":"-"},"content":" assertFalse(DESC_AMY.equals(editedAmy));","lastModifiedDate":"2017-05-05"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":47,"author":{"gitId":"-"},"content":" // different email -\u003e returns false","lastModifiedDate":"2017-05-05"},{"lineNumber":48,"author":{"gitId":"-"},"content":" editedAmy \u003d new EditPersonDescriptorBuilder(DESC_AMY).withEmail(VALID_EMAIL_BOB).build();","lastModifiedDate":"2017-05-05"},{"lineNumber":49,"author":{"gitId":"-"},"content":" assertFalse(DESC_AMY.equals(editedAmy));","lastModifiedDate":"2017-05-05"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":51,"author":{"gitId":"-"},"content":" // different address -\u003e returns false","lastModifiedDate":"2017-05-05"},{"lineNumber":52,"author":{"gitId":"-"},"content":" editedAmy \u003d new EditPersonDescriptorBuilder(DESC_AMY).withAddress(VALID_ADDRESS_BOB).build();","lastModifiedDate":"2017-05-05"},{"lineNumber":53,"author":{"gitId":"-"},"content":" assertFalse(DESC_AMY.equals(editedAmy));","lastModifiedDate":"2017-05-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":55,"author":{"gitId":"-"},"content":" // different tags -\u003e returns false","lastModifiedDate":"2017-05-05"},{"lineNumber":56,"author":{"gitId":"-"},"content":" editedAmy \u003d new EditPersonDescriptorBuilder(DESC_AMY).withTags(VALID_TAG_HUSBAND).build();","lastModifiedDate":"2017-05-05"},{"lineNumber":57,"author":{"gitId":"-"},"content":" assertFalse(DESC_AMY.equals(editedAmy));","lastModifiedDate":"2017-05-05"},{"lineNumber":58,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":60,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2019-02-23"},{"lineNumber":61,"author":{"gitId":"-"},"content":" public void toStringMethod() {","lastModifiedDate":"2019-02-23"},{"lineNumber":62,"author":{"gitId":"-"},"content":" EditPersonDescriptor editPersonDescriptor \u003d new EditPersonDescriptor();","lastModifiedDate":"2019-02-23"},{"lineNumber":63,"author":{"gitId":"-"},"content":" String expected \u003d EditPersonDescriptor.class.getCanonicalName() + \"{name\u003d\"","lastModifiedDate":"2019-02-23"},{"lineNumber":64,"author":{"gitId":"yeoshuheng"},"content":" + editPersonDescriptor.getName().orElse(null) + \", industry\u003d\"","lastModifiedDate":"2024-02-25"},{"lineNumber":65,"author":{"gitId":"yeoshuheng"},"content":" + editPersonDescriptor.getIndustry().orElse(null) + \", funding stage\u003d\"","lastModifiedDate":"2024-02-25"},{"lineNumber":66,"author":{"gitId":"yeoshuheng"},"content":" + editPersonDescriptor.getFundingStage().orElse(null) + \", phone\u003d\"","lastModifiedDate":"2024-02-25"},{"lineNumber":67,"author":{"gitId":"-"},"content":" + editPersonDescriptor.getPhone().orElse(null) + \", email\u003d\"","lastModifiedDate":"2019-02-23"},{"lineNumber":68,"author":{"gitId":"-"},"content":" + editPersonDescriptor.getEmail().orElse(null) + \", address\u003d\"","lastModifiedDate":"2019-02-23"},{"lineNumber":69,"author":{"gitId":"-"},"content":" + editPersonDescriptor.getAddress().orElse(null) + \", tags\u003d\"","lastModifiedDate":"2019-02-23"},{"lineNumber":70,"author":{"gitId":"-"},"content":" + editPersonDescriptor.getTags().orElse(null) + \"}\";","lastModifiedDate":"2019-02-23"},{"lineNumber":71,"author":{"gitId":"-"},"content":" assertEquals(expected, editPersonDescriptor.toString());","lastModifiedDate":"2019-02-23"},{"lineNumber":72,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":73,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-05-05"}],"authorContributionMap":{"-":70,"yeoshuheng":3}},{"path":"src/test/java/seedu/address/logic/parser/AddCommandParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-06-15"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-07-13"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CommandParserTestUtil.assertParseFailure;","lastModifiedDate":"2017-07-06"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CommandParserTestUtil.assertParseSuccess;","lastModifiedDate":"2017-07-06"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.AMY;","lastModifiedDate":"2018-07-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.BOB;","lastModifiedDate":"2018-07-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.logic.Messages;","lastModifiedDate":"2023-07-14"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.AddCommand;","lastModifiedDate":"2017-06-15"},{"lineNumber":13,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.logic.commands.CommandTestUtil;","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2017-06-15"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2017-06-15"},{"lineNumber":16,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.model.person.FundingStage;","lastModifiedDate":"2024-03-05"},{"lineNumber":17,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.model.person.Industry;","lastModifiedDate":"2024-03-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2017-06-15"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2017-06-15"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2017-06-15"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-06-15"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import seedu.address.testutil.PersonBuilder;","lastModifiedDate":"2017-06-15"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":24,"author":{"gitId":"-"},"content":"public class AddCommandParserTest {","lastModifiedDate":"2017-06-15"},{"lineNumber":25,"author":{"gitId":"-"},"content":" private AddCommandParser parser \u003d new AddCommandParser();","lastModifiedDate":"2017-06-15"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":27,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-15"},{"lineNumber":28,"author":{"gitId":"-"},"content":" public void parse_allFieldsPresent_success() {","lastModifiedDate":"2017-08-15"},{"lineNumber":29,"author":{"gitId":"yeoshuheng"},"content":" Person expectedPerson \u003d new PersonBuilder(BOB).withTags(CommandTestUtil.VALID_TAG_FRIEND).build();","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":31,"author":{"gitId":"-"},"content":" // whitespace only preamble","lastModifiedDate":"2017-12-23"},{"lineNumber":32,"author":{"gitId":"yeoshuheng"},"content":" assertParseSuccess(parser, CommandTestUtil.PREAMBLE_WHITESPACE","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.NAME_DESC_BOB + CommandTestUtil.PHONE_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.EMAIL_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":35,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INDUSTRY_DESC_BOB + CommandTestUtil.FUNDING_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":36,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.ADDRESS_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_FRIEND, new AddCommand(expectedPerson));","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-23"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":40,"author":{"gitId":"-"},"content":" // multiple tags - all accepted","lastModifiedDate":"2017-06-15"},{"lineNumber":41,"author":{"gitId":"yeoshuheng"},"content":" Person expectedPersonMultipleTags \u003d new PersonBuilder(BOB).withTags(","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"yeoshuheng"},"content":" CommandTestUtil.VALID_TAG_FRIEND, CommandTestUtil.VALID_TAG_HUSBAND)","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" .build();","lastModifiedDate":"2018-07-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" assertParseSuccess(parser,","lastModifiedDate":"2023-07-14"},{"lineNumber":45,"author":{"gitId":"yeoshuheng"},"content":" CommandTestUtil.NAME_DESC_BOB + CommandTestUtil.PHONE_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":46,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.EMAIL_DESC_BOB + CommandTestUtil.ADDRESS_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":47,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INDUSTRY_DESC_BOB + CommandTestUtil.FUNDING_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":48,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_HUSBAND + CommandTestUtil.TAG_DESC_FRIEND,","lastModifiedDate":"2024-02-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":" new AddCommand(expectedPersonMultipleTags));","lastModifiedDate":"2023-07-14"},{"lineNumber":50,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-07-14"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":52,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2023-07-14"},{"lineNumber":53,"author":{"gitId":"-"},"content":" public void parse_repeatedNonTagValue_failure() {","lastModifiedDate":"2023-07-14"},{"lineNumber":54,"author":{"gitId":"yeoshuheng"},"content":" String validExpectedPersonString \u003d CommandTestUtil.NAME_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":55,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INDUSTRY_DESC_BOB + CommandTestUtil.FUNDING_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":56,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.PHONE_DESC_BOB + CommandTestUtil.EMAIL_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":57,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.ADDRESS_DESC_BOB + CommandTestUtil.TAG_DESC_FRIEND;","lastModifiedDate":"2024-02-25"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":59,"author":{"gitId":"-"},"content":" // multiple names","lastModifiedDate":"2023-07-14"},{"lineNumber":60,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.NAME_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2024-02-25"},{"lineNumber":61,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_NAME));","lastModifiedDate":"2024-03-05"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":63,"author":{"gitId":"-"},"content":" // multiple phones","lastModifiedDate":"2023-07-14"},{"lineNumber":64,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.PHONE_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2024-02-25"},{"lineNumber":65,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_PHONE));","lastModifiedDate":"2024-03-05"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":67,"author":{"gitId":"-"},"content":" // multiple emails","lastModifiedDate":"2023-07-14"},{"lineNumber":68,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.EMAIL_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2024-02-25"},{"lineNumber":69,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_EMAIL));","lastModifiedDate":"2024-03-05"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":71,"author":{"gitId":"-"},"content":" // multiple addresses","lastModifiedDate":"2023-07-14"},{"lineNumber":72,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.ADDRESS_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2024-02-25"},{"lineNumber":73,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_ADDRESS));","lastModifiedDate":"2024-03-05"},{"lineNumber":74,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":75,"author":{"gitId":"yeoshuheng"},"content":" // multiple funding stage","lastModifiedDate":"2024-03-05"},{"lineNumber":76,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.FUNDING_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2024-03-05"},{"lineNumber":77,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_FUNDING_STAGE));","lastModifiedDate":"2024-03-05"},{"lineNumber":78,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":79,"author":{"gitId":"yeoshuheng"},"content":" // multiple industry","lastModifiedDate":"2024-03-05"},{"lineNumber":80,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.INDUSTRY_DESC_AMY + validExpectedPersonString,","lastModifiedDate":"2024-03-05"},{"lineNumber":81,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_INDUSTRY));","lastModifiedDate":"2024-03-05"},{"lineNumber":82,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":83,"author":{"gitId":"-"},"content":" // multiple fields repeated","lastModifiedDate":"2023-07-14"},{"lineNumber":84,"author":{"gitId":"-"},"content":" assertParseFailure(parser,","lastModifiedDate":"2023-07-14"},{"lineNumber":85,"author":{"gitId":"yeoshuheng"},"content":" validExpectedPersonString + CommandTestUtil.PHONE_DESC_AMY","lastModifiedDate":"2024-02-25"},{"lineNumber":86,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.EMAIL_DESC_AMY + CommandTestUtil.NAME_DESC_AMY","lastModifiedDate":"2024-02-25"},{"lineNumber":87,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.ADDRESS_DESC_AMY,","lastModifiedDate":"2024-03-05"},{"lineNumber":88,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_NAME,","lastModifiedDate":"2024-03-05"},{"lineNumber":89,"author":{"gitId":"yeoshuheng"},"content":" CliSyntax.PREFIX_ADDRESS, CliSyntax.PREFIX_EMAIL, CliSyntax.PREFIX_PHONE));","lastModifiedDate":"2024-03-05"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":91,"author":{"gitId":"-"},"content":" // invalid value followed by valid value","lastModifiedDate":"2023-07-14"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":93,"author":{"gitId":"-"},"content":" // invalid name","lastModifiedDate":"2023-07-14"},{"lineNumber":94,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.INVALID_NAME_DESC + validExpectedPersonString,","lastModifiedDate":"2024-02-25"},{"lineNumber":95,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_NAME));","lastModifiedDate":"2024-03-05"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":97,"author":{"gitId":"-"},"content":" // invalid email","lastModifiedDate":"2023-07-14"},{"lineNumber":98,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.INVALID_EMAIL_DESC + validExpectedPersonString,","lastModifiedDate":"2024-02-25"},{"lineNumber":99,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_EMAIL));","lastModifiedDate":"2024-03-05"},{"lineNumber":100,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":101,"author":{"gitId":"-"},"content":" // invalid phone","lastModifiedDate":"2023-07-14"},{"lineNumber":102,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.INVALID_PHONE_DESC + validExpectedPersonString,","lastModifiedDate":"2024-02-25"},{"lineNumber":103,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_PHONE));","lastModifiedDate":"2024-03-05"},{"lineNumber":104,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":105,"author":{"gitId":"-"},"content":" // invalid address","lastModifiedDate":"2023-07-14"},{"lineNumber":106,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.INVALID_ADDRESS_DESC + validExpectedPersonString,","lastModifiedDate":"2024-02-25"},{"lineNumber":107,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_ADDRESS));","lastModifiedDate":"2024-03-05"},{"lineNumber":108,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":109,"author":{"gitId":"yeoshuheng"},"content":" // invalid industry","lastModifiedDate":"2024-03-05"},{"lineNumber":110,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.INVALID_INDUSTRY_DESC + validExpectedPersonString,","lastModifiedDate":"2024-03-05"},{"lineNumber":111,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_INDUSTRY));","lastModifiedDate":"2024-03-05"},{"lineNumber":112,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":113,"author":{"gitId":"yeoshuheng"},"content":" // invalid funding stage","lastModifiedDate":"2024-03-05"},{"lineNumber":114,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.INVALID_FUNDING_DESC + validExpectedPersonString,","lastModifiedDate":"2024-03-05"},{"lineNumber":115,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_FUNDING_STAGE));","lastModifiedDate":"2024-03-05"},{"lineNumber":116,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":117,"author":{"gitId":"-"},"content":" // valid value followed by invalid value","lastModifiedDate":"2023-07-14"},{"lineNumber":118,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":119,"author":{"gitId":"-"},"content":" // invalid name","lastModifiedDate":"2023-07-14"},{"lineNumber":120,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, validExpectedPersonString + CommandTestUtil.INVALID_NAME_DESC,","lastModifiedDate":"2024-02-25"},{"lineNumber":121,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_NAME));","lastModifiedDate":"2024-03-05"},{"lineNumber":122,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":123,"author":{"gitId":"-"},"content":" // invalid email","lastModifiedDate":"2023-07-14"},{"lineNumber":124,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, validExpectedPersonString + CommandTestUtil.INVALID_EMAIL_DESC,","lastModifiedDate":"2024-02-25"},{"lineNumber":125,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_EMAIL));","lastModifiedDate":"2024-03-05"},{"lineNumber":126,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":127,"author":{"gitId":"-"},"content":" // invalid phone","lastModifiedDate":"2023-07-14"},{"lineNumber":128,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, validExpectedPersonString + CommandTestUtil.INVALID_PHONE_DESC,","lastModifiedDate":"2024-02-25"},{"lineNumber":129,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_PHONE));","lastModifiedDate":"2024-03-05"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":131,"author":{"gitId":"-"},"content":" // invalid address","lastModifiedDate":"2023-07-14"},{"lineNumber":132,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, validExpectedPersonString + CommandTestUtil.INVALID_ADDRESS_DESC,","lastModifiedDate":"2024-02-25"},{"lineNumber":133,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_ADDRESS));","lastModifiedDate":"2024-03-05"},{"lineNumber":134,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":135,"author":{"gitId":"yeoshuheng"},"content":" // invalid industry","lastModifiedDate":"2024-03-05"},{"lineNumber":136,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, validExpectedPersonString + CommandTestUtil.INVALID_INDUSTRY_DESC,","lastModifiedDate":"2024-03-05"},{"lineNumber":137,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_INDUSTRY));","lastModifiedDate":"2024-03-05"},{"lineNumber":138,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":139,"author":{"gitId":"yeoshuheng"},"content":" // invalid funding stage","lastModifiedDate":"2024-03-05"},{"lineNumber":140,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, validExpectedPersonString + CommandTestUtil.INVALID_FUNDING_DESC,","lastModifiedDate":"2024-03-05"},{"lineNumber":141,"author":{"gitId":"yeoshuheng"},"content":" Messages.getErrorMessageForDuplicatePrefixes(CliSyntax.PREFIX_FUNDING_STAGE));","lastModifiedDate":"2024-03-05"},{"lineNumber":142,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-15"},{"lineNumber":143,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":144,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-15"},{"lineNumber":145,"author":{"gitId":"-"},"content":" public void parse_optionalFieldsMissing_success() {","lastModifiedDate":"2017-08-15"},{"lineNumber":146,"author":{"gitId":"-"},"content":" // zero tags","lastModifiedDate":"2017-06-15"},{"lineNumber":147,"author":{"gitId":"-"},"content":" Person expectedPerson \u003d new PersonBuilder(AMY).withTags().build();","lastModifiedDate":"2018-07-25"},{"lineNumber":148,"author":{"gitId":"yeoshuheng"},"content":" assertParseSuccess(parser, CommandTestUtil.NAME_DESC_AMY","lastModifiedDate":"2024-02-25"},{"lineNumber":149,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INDUSTRY_DESC_AMY","lastModifiedDate":"2024-02-25"},{"lineNumber":150,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.FUNDING_DESC_AMY + CommandTestUtil.PHONE_DESC_AMY","lastModifiedDate":"2024-02-25"},{"lineNumber":151,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.EMAIL_DESC_AMY + CommandTestUtil.ADDRESS_DESC_AMY,","lastModifiedDate":"2024-02-25"},{"lineNumber":152,"author":{"gitId":"-"},"content":" new AddCommand(expectedPerson));","lastModifiedDate":"2017-12-23"},{"lineNumber":153,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-15"},{"lineNumber":154,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":155,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-15"},{"lineNumber":156,"author":{"gitId":"-"},"content":" public void parse_compulsoryFieldMissing_failure() {","lastModifiedDate":"2017-06-15"},{"lineNumber":157,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddCommand.MESSAGE_USAGE);","lastModifiedDate":"2017-06-15"},{"lineNumber":158,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":159,"author":{"gitId":"-"},"content":" // missing name prefix","lastModifiedDate":"2017-06-15"},{"lineNumber":160,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.VALID_NAME_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":161,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.FUNDING_DESC_BOB + CommandTestUtil.INDUSTRY_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":162,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.PHONE_DESC_BOB + CommandTestUtil.EMAIL_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":163,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.ADDRESS_DESC_BOB,","lastModifiedDate":"2024-02-25"},{"lineNumber":164,"author":{"gitId":"-"},"content":" expectedMessage);","lastModifiedDate":"2017-12-23"},{"lineNumber":165,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":166,"author":{"gitId":"-"},"content":" // missing phone prefix","lastModifiedDate":"2017-06-15"},{"lineNumber":167,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.NAME_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":168,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.FUNDING_DESC_BOB + CommandTestUtil.INDUSTRY_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":169,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.VALID_PHONE_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":170,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.EMAIL_DESC_BOB + CommandTestUtil.ADDRESS_DESC_BOB,","lastModifiedDate":"2024-02-25"},{"lineNumber":171,"author":{"gitId":"-"},"content":" expectedMessage);","lastModifiedDate":"2017-12-23"},{"lineNumber":172,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":173,"author":{"gitId":"-"},"content":" // missing email prefix","lastModifiedDate":"2017-06-15"},{"lineNumber":174,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.NAME_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":175,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.FUNDING_DESC_BOB + CommandTestUtil.INDUSTRY_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":176,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.PHONE_DESC_BOB + CommandTestUtil.VALID_EMAIL_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":177,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.ADDRESS_DESC_BOB,","lastModifiedDate":"2024-02-25"},{"lineNumber":178,"author":{"gitId":"-"},"content":" expectedMessage);","lastModifiedDate":"2017-12-23"},{"lineNumber":179,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":180,"author":{"gitId":"-"},"content":" // missing address prefix","lastModifiedDate":"2017-06-15"},{"lineNumber":181,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.NAME_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":182,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.FUNDING_DESC_BOB + CommandTestUtil.INDUSTRY_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":183,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.PHONE_DESC_BOB + CommandTestUtil.EMAIL_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":184,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.VALID_ADDRESS_BOB,","lastModifiedDate":"2024-02-25"},{"lineNumber":185,"author":{"gitId":"-"},"content":" expectedMessage);","lastModifiedDate":"2017-12-23"},{"lineNumber":186,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":187,"author":{"gitId":"yeoshuheng"},"content":" // missing industry prefix","lastModifiedDate":"2024-03-05"},{"lineNumber":188,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.NAME_DESC_BOB","lastModifiedDate":"2024-03-05"},{"lineNumber":189,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.FUNDING_DESC_BOB + CommandTestUtil.ADDRESS_DESC_BOB","lastModifiedDate":"2024-03-05"},{"lineNumber":190,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.PHONE_DESC_BOB + CommandTestUtil.EMAIL_DESC_BOB","lastModifiedDate":"2024-03-05"},{"lineNumber":191,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.VALID_ADDRESS_BOB,","lastModifiedDate":"2024-03-05"},{"lineNumber":192,"author":{"gitId":"yeoshuheng"},"content":" expectedMessage);","lastModifiedDate":"2024-03-05"},{"lineNumber":193,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":194,"author":{"gitId":"yeoshuheng"},"content":" // missing funding stage prefix","lastModifiedDate":"2024-03-05"},{"lineNumber":195,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.NAME_DESC_BOB","lastModifiedDate":"2024-03-05"},{"lineNumber":196,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.ADDRESS_DESC_BOB + CommandTestUtil.INDUSTRY_DESC_BOB","lastModifiedDate":"2024-03-05"},{"lineNumber":197,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.PHONE_DESC_BOB + CommandTestUtil.EMAIL_DESC_BOB","lastModifiedDate":"2024-03-05"},{"lineNumber":198,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.VALID_ADDRESS_BOB,","lastModifiedDate":"2024-03-05"},{"lineNumber":199,"author":{"gitId":"yeoshuheng"},"content":" expectedMessage);","lastModifiedDate":"2024-03-05"},{"lineNumber":200,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":201,"author":{"gitId":"-"},"content":" // all prefixes missing","lastModifiedDate":"2017-06-15"},{"lineNumber":202,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.VALID_NAME_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":203,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.FUNDING_DESC_BOB + CommandTestUtil.INDUSTRY_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":204,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.VALID_PHONE_BOB + CommandTestUtil.VALID_EMAIL_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":205,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.VALID_ADDRESS_BOB,","lastModifiedDate":"2024-02-25"},{"lineNumber":206,"author":{"gitId":"-"},"content":" expectedMessage);","lastModifiedDate":"2017-12-23"},{"lineNumber":207,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-15"},{"lineNumber":208,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":209,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-06-15"},{"lineNumber":210,"author":{"gitId":"-"},"content":" public void parse_invalidValue_failure() {","lastModifiedDate":"2017-06-15"},{"lineNumber":211,"author":{"gitId":"-"},"content":" // invalid name","lastModifiedDate":"2017-06-15"},{"lineNumber":212,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.INVALID_NAME_DESC","lastModifiedDate":"2024-02-25"},{"lineNumber":213,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.PHONE_DESC_BOB + CommandTestUtil.EMAIL_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":214,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.ADDRESS_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":215,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.FUNDING_DESC_BOB + CommandTestUtil.INDUSTRY_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":216,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_HUSBAND","lastModifiedDate":"2024-02-25"},{"lineNumber":217,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_FRIEND, Name.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":218,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":219,"author":{"gitId":"-"},"content":" // invalid phone","lastModifiedDate":"2017-06-15"},{"lineNumber":220,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.NAME_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":221,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INVALID_PHONE_DESC + CommandTestUtil.EMAIL_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":222,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.ADDRESS_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":223,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.FUNDING_DESC_BOB + CommandTestUtil.INDUSTRY_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":224,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_HUSBAND","lastModifiedDate":"2024-02-25"},{"lineNumber":225,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_FRIEND, Phone.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":226,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":227,"author":{"gitId":"-"},"content":" // invalid email","lastModifiedDate":"2017-06-15"},{"lineNumber":228,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.NAME_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":229,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.PHONE_DESC_BOB + CommandTestUtil.INVALID_EMAIL_DESC","lastModifiedDate":"2024-02-25"},{"lineNumber":230,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.ADDRESS_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":231,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.FUNDING_DESC_BOB + CommandTestUtil.INDUSTRY_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":232,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_HUSBAND","lastModifiedDate":"2024-02-25"},{"lineNumber":233,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_FRIEND, Email.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":234,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":235,"author":{"gitId":"-"},"content":" // invalid address","lastModifiedDate":"2017-06-15"},{"lineNumber":236,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.NAME_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":237,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.PHONE_DESC_BOB + CommandTestUtil.EMAIL_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":238,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INVALID_ADDRESS_DESC","lastModifiedDate":"2024-02-25"},{"lineNumber":239,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.FUNDING_DESC_BOB + CommandTestUtil.INDUSTRY_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":240,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_HUSBAND","lastModifiedDate":"2024-02-25"},{"lineNumber":241,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_FRIEND, Address.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":242,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":243,"author":{"gitId":"yeoshuheng"},"content":" // invalid funding stage","lastModifiedDate":"2024-03-05"},{"lineNumber":244,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.NAME_DESC_BOB","lastModifiedDate":"2024-03-05"},{"lineNumber":245,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.PHONE_DESC_BOB + CommandTestUtil.EMAIL_DESC_BOB","lastModifiedDate":"2024-03-05"},{"lineNumber":246,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.ADDRESS_DESC_BOB + CommandTestUtil.INVALID_FUNDING_DESC","lastModifiedDate":"2024-03-05"},{"lineNumber":247,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INDUSTRY_DESC_BOB","lastModifiedDate":"2024-03-05"},{"lineNumber":248,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_HUSBAND","lastModifiedDate":"2024-03-05"},{"lineNumber":249,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_FRIEND, FundingStage.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-03-05"},{"lineNumber":250,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":251,"author":{"gitId":"yeoshuheng"},"content":" // invalid industry","lastModifiedDate":"2024-03-05"},{"lineNumber":252,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.NAME_DESC_BOB","lastModifiedDate":"2024-03-05"},{"lineNumber":253,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.PHONE_DESC_BOB + CommandTestUtil.EMAIL_DESC_BOB","lastModifiedDate":"2024-03-05"},{"lineNumber":254,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.ADDRESS_DESC_BOB","lastModifiedDate":"2024-03-05"},{"lineNumber":255,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.FUNDING_DESC_BOB + CommandTestUtil.INVALID_INDUSTRY_DESC","lastModifiedDate":"2024-03-05"},{"lineNumber":256,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_HUSBAND","lastModifiedDate":"2024-03-05"},{"lineNumber":257,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_FRIEND, Industry.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-03-05"},{"lineNumber":258,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":259,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":260,"author":{"gitId":"-"},"content":" // invalid tag","lastModifiedDate":"2017-06-15"},{"lineNumber":261,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.NAME_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":262,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.PHONE_DESC_BOB + CommandTestUtil.EMAIL_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":263,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.ADDRESS_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":264,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.FUNDING_DESC_BOB + CommandTestUtil.INDUSTRY_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":265,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INVALID_TAG_DESC","lastModifiedDate":"2024-02-25"},{"lineNumber":266,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.VALID_TAG_FRIEND, Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-02-25"},{"lineNumber":267,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-15"},{"lineNumber":268,"author":{"gitId":"-"},"content":" // two invalid values, only first invalid value reported","lastModifiedDate":"2017-06-15"},{"lineNumber":269,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.INVALID_NAME_DESC","lastModifiedDate":"2024-02-25"},{"lineNumber":270,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.PHONE_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":271,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.FUNDING_DESC_BOB + CommandTestUtil.INDUSTRY_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":272,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.EMAIL_DESC_BOB + CommandTestUtil.INVALID_ADDRESS_DESC,","lastModifiedDate":"2024-02-25"},{"lineNumber":273,"author":{"gitId":"-"},"content":" Name.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":274,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-12-23"},{"lineNumber":275,"author":{"gitId":"-"},"content":" // non-empty preamble","lastModifiedDate":"2017-12-23"},{"lineNumber":276,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.PREAMBLE_NON_EMPTY","lastModifiedDate":"2024-02-25"},{"lineNumber":277,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.NAME_DESC_BOB + CommandTestUtil.PHONE_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":278,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.EMAIL_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":279,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.FUNDING_DESC_BOB + CommandTestUtil.INDUSTRY_DESC_BOB","lastModifiedDate":"2024-02-25"},{"lineNumber":280,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.ADDRESS_DESC_BOB + CommandTestUtil.TAG_DESC_HUSBAND + CommandTestUtil.TAG_DESC_FRIEND,","lastModifiedDate":"2024-02-25"},{"lineNumber":281,"author":{"gitId":"-"},"content":" String.format(MESSAGE_INVALID_COMMAND_FORMAT, AddCommand.MESSAGE_USAGE));","lastModifiedDate":"2017-12-23"},{"lineNumber":282,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-15"},{"lineNumber":283,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-06-15"}],"authorContributionMap":{"-":117,"yeoshuheng":166}},{"path":"src/test/java/seedu/address/logic/parser/EditCommandParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.logic.parser;","lastModifiedDate":"2017-05-04"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-07-13"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2023-07-14"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2023-07-14"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2023-07-14"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2017-05-04"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CommandParserTestUtil.assertParseFailure;","lastModifiedDate":"2017-07-06"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CommandParserTestUtil.assertParseSuccess;","lastModifiedDate":"2017-07-06"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalIndexes.INDEX_FIRST_PERSON;","lastModifiedDate":"2017-08-05"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalIndexes.INDEX_SECOND_PERSON;","lastModifiedDate":"2017-08-05"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalIndexes.INDEX_THIRD_PERSON;","lastModifiedDate":"2017-08-05"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.commons.core.index.Index;","lastModifiedDate":"2017-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.logic.Messages;","lastModifiedDate":"2023-07-14"},{"lineNumber":18,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.logic.commands.CommandTestUtil;","lastModifiedDate":"2024-03-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand;","lastModifiedDate":"2017-05-04"},{"lineNumber":20,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand.EditPersonDescriptor;","lastModifiedDate":"2017-05-04"},{"lineNumber":21,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2017-05-04"},{"lineNumber":22,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2017-05-04"},{"lineNumber":23,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2017-05-04"},{"lineNumber":24,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2017-05-04"},{"lineNumber":25,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-05-04"},{"lineNumber":26,"author":{"gitId":"-"},"content":"import seedu.address.testutil.EditPersonDescriptorBuilder;","lastModifiedDate":"2017-05-04"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":28,"author":{"gitId":"-"},"content":"public class EditCommandParserTest {","lastModifiedDate":"2017-05-04"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":30,"author":{"gitId":"-"},"content":" private static final String TAG_EMPTY \u003d \" \" + PREFIX_TAG;","lastModifiedDate":"2017-05-04"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":32,"author":{"gitId":"-"},"content":" private static final String MESSAGE_INVALID_FORMAT \u003d","lastModifiedDate":"2017-05-04"},{"lineNumber":33,"author":{"gitId":"-"},"content":" String.format(MESSAGE_INVALID_COMMAND_FORMAT, EditCommand.MESSAGE_USAGE);","lastModifiedDate":"2017-05-04"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":35,"author":{"gitId":"-"},"content":" private EditCommandParser parser \u003d new EditCommandParser();","lastModifiedDate":"2017-05-04"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":37,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":38,"author":{"gitId":"-"},"content":" public void parse_missingParts_failure() {","lastModifiedDate":"2017-05-04"},{"lineNumber":39,"author":{"gitId":"-"},"content":" // no index specified","lastModifiedDate":"2017-05-04"},{"lineNumber":40,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, CommandTestUtil.VALID_NAME_AMY, MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2024-03-05"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":42,"author":{"gitId":"-"},"content":" // no field specified","lastModifiedDate":"2017-05-04"},{"lineNumber":43,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"1\", EditCommand.MESSAGE_NOT_EDITED);","lastModifiedDate":"2017-07-06"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":45,"author":{"gitId":"-"},"content":" // no index and no field specified","lastModifiedDate":"2017-05-04"},{"lineNumber":46,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"\", MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2017-07-06"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":49,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":50,"author":{"gitId":"-"},"content":" public void parse_invalidPreamble_failure() {","lastModifiedDate":"2017-06-06"},{"lineNumber":51,"author":{"gitId":"-"},"content":" // negative index","lastModifiedDate":"2017-05-04"},{"lineNumber":52,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, \"-5\" + CommandTestUtil.NAME_DESC_AMY, MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2024-03-05"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":54,"author":{"gitId":"-"},"content":" // zero index","lastModifiedDate":"2017-06-06"},{"lineNumber":55,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, \"0\" + CommandTestUtil.NAME_DESC_AMY, MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2024-03-05"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-06"},{"lineNumber":57,"author":{"gitId":"-"},"content":" // invalid arguments being parsed as preamble","lastModifiedDate":"2017-06-06"},{"lineNumber":58,"author":{"gitId":"-"},"content":" assertParseFailure(parser, \"1 some random string\", MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2017-07-06"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-06"},{"lineNumber":60,"author":{"gitId":"-"},"content":" // invalid prefix being parsed as preamble","lastModifiedDate":"2017-06-06"},{"lineNumber":61,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, \"1 x/ string\", MESSAGE_INVALID_FORMAT);","lastModifiedDate":"2024-02-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":63,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":64,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":65,"author":{"gitId":"-"},"content":" public void parse_invalidValue_failure() {","lastModifiedDate":"2017-05-04"},{"lineNumber":66,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, \"1\"","lastModifiedDate":"2024-03-05"},{"lineNumber":67,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INVALID_NAME_DESC, Name.MESSAGE_CONSTRAINTS); // invalid name","lastModifiedDate":"2024-03-05"},{"lineNumber":68,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, \"1\"","lastModifiedDate":"2024-03-05"},{"lineNumber":69,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INVALID_PHONE_DESC, Phone.MESSAGE_CONSTRAINTS); // invalid phone","lastModifiedDate":"2024-03-05"},{"lineNumber":70,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, \"1\"","lastModifiedDate":"2024-03-05"},{"lineNumber":71,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INVALID_EMAIL_DESC, Email.MESSAGE_CONSTRAINTS); // invalid email","lastModifiedDate":"2024-03-05"},{"lineNumber":72,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, \"1\"","lastModifiedDate":"2024-03-05"},{"lineNumber":73,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INVALID_ADDRESS_DESC, Address.MESSAGE_CONSTRAINTS); // invalid address","lastModifiedDate":"2024-03-05"},{"lineNumber":74,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, \"1\"","lastModifiedDate":"2024-03-05"},{"lineNumber":75,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INVALID_TAG_DESC, Tag.MESSAGE_CONSTRAINTS); // invalid tag","lastModifiedDate":"2024-03-05"},{"lineNumber":76,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":77,"author":{"gitId":"-"},"content":" // invalid phone followed by valid email","lastModifiedDate":"2017-05-04"},{"lineNumber":78,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, \"1\"","lastModifiedDate":"2024-03-05"},{"lineNumber":79,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INVALID_PHONE_DESC","lastModifiedDate":"2024-03-05"},{"lineNumber":80,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.EMAIL_DESC_AMY, Phone.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-03-05"},{"lineNumber":81,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":82,"author":{"gitId":"-"},"content":" // while parsing {@code PREFIX_TAG} alone will reset the tags of the {@code Person} being edited,","lastModifiedDate":"2017-05-04"},{"lineNumber":83,"author":{"gitId":"-"},"content":" // parsing it together with a valid tag results in error","lastModifiedDate":"2017-05-04"},{"lineNumber":84,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, \"1\"","lastModifiedDate":"2024-03-05"},{"lineNumber":85,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_FRIEND + CommandTestUtil.TAG_DESC_HUSBAND","lastModifiedDate":"2024-03-05"},{"lineNumber":86,"author":{"gitId":"yeoshuheng"},"content":" + TAG_EMPTY, Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-03-05"},{"lineNumber":87,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, \"1\" + CommandTestUtil.TAG_DESC_FRIEND","lastModifiedDate":"2024-03-05"},{"lineNumber":88,"author":{"gitId":"yeoshuheng"},"content":" + TAG_EMPTY + CommandTestUtil.TAG_DESC_HUSBAND, Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-03-05"},{"lineNumber":89,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, \"1\" + TAG_EMPTY","lastModifiedDate":"2024-03-05"},{"lineNumber":90,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_FRIEND","lastModifiedDate":"2024-03-05"},{"lineNumber":91,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_HUSBAND, Tag.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2024-03-05"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":93,"author":{"gitId":"-"},"content":" // multiple invalid values, but only the first invalid value is captured","lastModifiedDate":"2017-05-04"},{"lineNumber":94,"author":{"gitId":"yeoshuheng"},"content":" assertParseFailure(parser, \"1\"","lastModifiedDate":"2024-03-05"},{"lineNumber":95,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INVALID_NAME_DESC + CommandTestUtil.INVALID_EMAIL_DESC","lastModifiedDate":"2024-03-05"},{"lineNumber":96,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.VALID_ADDRESS_AMY + CommandTestUtil.VALID_PHONE_AMY,","lastModifiedDate":"2024-03-05"},{"lineNumber":97,"author":{"gitId":"-"},"content":" Name.MESSAGE_CONSTRAINTS);","lastModifiedDate":"2018-09-22"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":99,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":100,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":101,"author":{"gitId":"-"},"content":" public void parse_allFieldsSpecified_success() {","lastModifiedDate":"2017-08-15"},{"lineNumber":102,"author":{"gitId":"-"},"content":" Index targetIndex \u003d INDEX_SECOND_PERSON;","lastModifiedDate":"2017-05-25"},{"lineNumber":103,"author":{"gitId":"yeoshuheng"},"content":" String userInput \u003d targetIndex.getOneBased() + CommandTestUtil.PHONE_DESC_BOB","lastModifiedDate":"2024-03-05"},{"lineNumber":104,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_HUSBAND","lastModifiedDate":"2024-03-05"},{"lineNumber":105,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.EMAIL_DESC_AMY + CommandTestUtil.ADDRESS_DESC_AMY","lastModifiedDate":"2024-03-05"},{"lineNumber":106,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.NAME_DESC_AMY + CommandTestUtil.TAG_DESC_FRIEND;","lastModifiedDate":"2024-03-05"},{"lineNumber":107,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":108,"author":{"gitId":"yeoshuheng"},"content":" EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder().withName(CommandTestUtil.VALID_NAME_AMY)","lastModifiedDate":"2024-03-05"},{"lineNumber":109,"author":{"gitId":"yeoshuheng"},"content":" .withPhone(CommandTestUtil.VALID_PHONE_BOB).withEmail(","lastModifiedDate":"2024-03-05"},{"lineNumber":110,"author":{"gitId":"yeoshuheng"},"content":" CommandTestUtil.VALID_EMAIL_AMY).withAddress(CommandTestUtil.VALID_ADDRESS_AMY)","lastModifiedDate":"2024-03-05"},{"lineNumber":111,"author":{"gitId":"yeoshuheng"},"content":" .withTags(CommandTestUtil.VALID_TAG_HUSBAND, CommandTestUtil.VALID_TAG_FRIEND).build();","lastModifiedDate":"2024-03-05"},{"lineNumber":112,"author":{"gitId":"-"},"content":" EditCommand expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2017-05-04"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":114,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2017-07-06"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":116,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":117,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":118,"author":{"gitId":"-"},"content":" public void parse_someFieldsSpecified_success() {","lastModifiedDate":"2017-08-15"},{"lineNumber":119,"author":{"gitId":"-"},"content":" Index targetIndex \u003d INDEX_FIRST_PERSON;","lastModifiedDate":"2017-05-25"},{"lineNumber":120,"author":{"gitId":"yeoshuheng"},"content":" String userInput \u003d targetIndex.getOneBased() + CommandTestUtil.PHONE_DESC_BOB + CommandTestUtil.EMAIL_DESC_AMY;","lastModifiedDate":"2024-03-05"},{"lineNumber":121,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":122,"author":{"gitId":"yeoshuheng"},"content":" EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder().withPhone(CommandTestUtil.VALID_PHONE_BOB)","lastModifiedDate":"2024-03-05"},{"lineNumber":123,"author":{"gitId":"yeoshuheng"},"content":" .withEmail(CommandTestUtil.VALID_EMAIL_AMY).build();","lastModifiedDate":"2024-03-05"},{"lineNumber":124,"author":{"gitId":"-"},"content":" EditCommand expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2017-05-04"},{"lineNumber":125,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":126,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2017-07-06"},{"lineNumber":127,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":128,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":129,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":130,"author":{"gitId":"-"},"content":" public void parse_oneFieldSpecified_success() {","lastModifiedDate":"2017-08-15"},{"lineNumber":131,"author":{"gitId":"-"},"content":" // name","lastModifiedDate":"2017-05-04"},{"lineNumber":132,"author":{"gitId":"-"},"content":" Index targetIndex \u003d INDEX_THIRD_PERSON;","lastModifiedDate":"2017-05-25"},{"lineNumber":133,"author":{"gitId":"yeoshuheng"},"content":" String userInput \u003d targetIndex.getOneBased() + CommandTestUtil.NAME_DESC_AMY;","lastModifiedDate":"2024-03-05"},{"lineNumber":134,"author":{"gitId":"yeoshuheng"},"content":" EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder().withName(","lastModifiedDate":"2024-03-05"},{"lineNumber":135,"author":{"gitId":"yeoshuheng"},"content":" CommandTestUtil.VALID_NAME_AMY).build();","lastModifiedDate":"2024-03-05"},{"lineNumber":136,"author":{"gitId":"-"},"content":" EditCommand expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2017-05-04"},{"lineNumber":137,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2017-07-06"},{"lineNumber":138,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":139,"author":{"gitId":"-"},"content":" // phone","lastModifiedDate":"2017-05-04"},{"lineNumber":140,"author":{"gitId":"yeoshuheng"},"content":" userInput \u003d targetIndex.getOneBased() + CommandTestUtil.PHONE_DESC_AMY;","lastModifiedDate":"2024-03-05"},{"lineNumber":141,"author":{"gitId":"yeoshuheng"},"content":" descriptor \u003d new EditPersonDescriptorBuilder().withPhone(","lastModifiedDate":"2024-03-05"},{"lineNumber":142,"author":{"gitId":"yeoshuheng"},"content":" CommandTestUtil.VALID_PHONE_AMY).build();","lastModifiedDate":"2024-03-05"},{"lineNumber":143,"author":{"gitId":"-"},"content":" expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2017-05-04"},{"lineNumber":144,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2017-07-06"},{"lineNumber":145,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":146,"author":{"gitId":"-"},"content":" // email","lastModifiedDate":"2017-05-04"},{"lineNumber":147,"author":{"gitId":"yeoshuheng"},"content":" userInput \u003d targetIndex.getOneBased() + CommandTestUtil.EMAIL_DESC_AMY;","lastModifiedDate":"2024-03-05"},{"lineNumber":148,"author":{"gitId":"yeoshuheng"},"content":" descriptor \u003d new EditPersonDescriptorBuilder().withEmail(","lastModifiedDate":"2024-03-05"},{"lineNumber":149,"author":{"gitId":"yeoshuheng"},"content":" CommandTestUtil.VALID_EMAIL_AMY).build();","lastModifiedDate":"2024-03-05"},{"lineNumber":150,"author":{"gitId":"-"},"content":" expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2017-05-04"},{"lineNumber":151,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2017-07-06"},{"lineNumber":152,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":153,"author":{"gitId":"-"},"content":" // address","lastModifiedDate":"2017-05-04"},{"lineNumber":154,"author":{"gitId":"yeoshuheng"},"content":" userInput \u003d targetIndex.getOneBased() + CommandTestUtil.ADDRESS_DESC_AMY;","lastModifiedDate":"2024-03-05"},{"lineNumber":155,"author":{"gitId":"yeoshuheng"},"content":" descriptor \u003d new EditPersonDescriptorBuilder().withAddress(","lastModifiedDate":"2024-03-05"},{"lineNumber":156,"author":{"gitId":"yeoshuheng"},"content":" CommandTestUtil.VALID_ADDRESS_AMY).build();","lastModifiedDate":"2024-03-05"},{"lineNumber":157,"author":{"gitId":"yeoshuheng"},"content":" expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2024-03-05"},{"lineNumber":158,"author":{"gitId":"yeoshuheng"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2024-03-05"},{"lineNumber":159,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":160,"author":{"gitId":"yeoshuheng"},"content":" // industry","lastModifiedDate":"2024-03-05"},{"lineNumber":161,"author":{"gitId":"yeoshuheng"},"content":" userInput \u003d targetIndex.getOneBased() + CommandTestUtil.INDUSTRY_DESC_AMY;","lastModifiedDate":"2024-03-05"},{"lineNumber":162,"author":{"gitId":"yeoshuheng"},"content":" descriptor \u003d new EditPersonDescriptorBuilder().withIndustry(","lastModifiedDate":"2024-03-05"},{"lineNumber":163,"author":{"gitId":"yeoshuheng"},"content":" CommandTestUtil.VALID_INDUSTRY_AMY).build();","lastModifiedDate":"2024-03-05"},{"lineNumber":164,"author":{"gitId":"yeoshuheng"},"content":" expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2024-03-05"},{"lineNumber":165,"author":{"gitId":"yeoshuheng"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2024-03-05"},{"lineNumber":166,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":167,"author":{"gitId":"yeoshuheng"},"content":" // funding stage","lastModifiedDate":"2024-03-05"},{"lineNumber":168,"author":{"gitId":"yeoshuheng"},"content":" userInput \u003d targetIndex.getOneBased() + CommandTestUtil.FUNDING_DESC_AMY;","lastModifiedDate":"2024-03-05"},{"lineNumber":169,"author":{"gitId":"yeoshuheng"},"content":" descriptor \u003d new EditPersonDescriptorBuilder().withFundingStage(","lastModifiedDate":"2024-03-05"},{"lineNumber":170,"author":{"gitId":"yeoshuheng"},"content":" CommandTestUtil.VALID_FUNDING_AMY).build();","lastModifiedDate":"2024-03-05"},{"lineNumber":171,"author":{"gitId":"-"},"content":" expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2017-05-04"},{"lineNumber":172,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2017-07-06"},{"lineNumber":173,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":174,"author":{"gitId":"-"},"content":" // tags","lastModifiedDate":"2017-05-04"},{"lineNumber":175,"author":{"gitId":"yeoshuheng"},"content":" userInput \u003d targetIndex.getOneBased() + CommandTestUtil.TAG_DESC_FRIEND;","lastModifiedDate":"2024-03-05"},{"lineNumber":176,"author":{"gitId":"yeoshuheng"},"content":" descriptor \u003d new EditPersonDescriptorBuilder().withTags(","lastModifiedDate":"2024-03-05"},{"lineNumber":177,"author":{"gitId":"yeoshuheng"},"content":" CommandTestUtil.VALID_TAG_FRIEND).build();","lastModifiedDate":"2024-03-05"},{"lineNumber":178,"author":{"gitId":"-"},"content":" expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2017-05-04"},{"lineNumber":179,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2017-07-06"},{"lineNumber":180,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":181,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":182,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":183,"author":{"gitId":"-"},"content":" public void parse_multipleRepeatedFields_failure() {","lastModifiedDate":"2023-07-14"},{"lineNumber":184,"author":{"gitId":"-"},"content":" // More extensive testing of duplicate parameter detections is done in","lastModifiedDate":"2023-07-14"},{"lineNumber":185,"author":{"gitId":"-"},"content":" // AddCommandParserTest#parse_repeatedNonTagValue_failure()","lastModifiedDate":"2023-07-14"},{"lineNumber":186,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":187,"author":{"gitId":"-"},"content":" // valid followed by invalid","lastModifiedDate":"2023-07-14"},{"lineNumber":188,"author":{"gitId":"-"},"content":" Index targetIndex \u003d INDEX_FIRST_PERSON;","lastModifiedDate":"2017-05-25"},{"lineNumber":189,"author":{"gitId":"yeoshuheng"},"content":" String userInput \u003d targetIndex.getOneBased()","lastModifiedDate":"2024-03-05"},{"lineNumber":190,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INVALID_PHONE_DESC","lastModifiedDate":"2024-03-05"},{"lineNumber":191,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.PHONE_DESC_BOB;","lastModifiedDate":"2024-03-05"},{"lineNumber":192,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":193,"author":{"gitId":"-"},"content":" assertParseFailure(parser, userInput, Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE));","lastModifiedDate":"2023-07-14"},{"lineNumber":194,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":195,"author":{"gitId":"-"},"content":" // invalid followed by valid","lastModifiedDate":"2023-07-14"},{"lineNumber":196,"author":{"gitId":"yeoshuheng"},"content":" userInput \u003d targetIndex.getOneBased() + CommandTestUtil.PHONE_DESC_BOB","lastModifiedDate":"2024-03-05"},{"lineNumber":197,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INVALID_PHONE_DESC;","lastModifiedDate":"2024-03-05"},{"lineNumber":198,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":199,"author":{"gitId":"-"},"content":" assertParseFailure(parser, userInput, Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE));","lastModifiedDate":"2023-07-14"},{"lineNumber":200,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-07-14"},{"lineNumber":201,"author":{"gitId":"-"},"content":" // mulltiple valid fields repeated","lastModifiedDate":"2023-07-14"},{"lineNumber":202,"author":{"gitId":"yeoshuheng"},"content":" userInput \u003d targetIndex.getOneBased() + CommandTestUtil.PHONE_DESC_AMY","lastModifiedDate":"2024-03-05"},{"lineNumber":203,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.ADDRESS_DESC_AMY + CommandTestUtil.EMAIL_DESC_AMY","lastModifiedDate":"2024-03-05"},{"lineNumber":204,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_FRIEND + CommandTestUtil.PHONE_DESC_AMY","lastModifiedDate":"2024-03-05"},{"lineNumber":205,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.ADDRESS_DESC_AMY + CommandTestUtil.EMAIL_DESC_AMY","lastModifiedDate":"2024-03-05"},{"lineNumber":206,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.TAG_DESC_FRIEND","lastModifiedDate":"2024-03-05"},{"lineNumber":207,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.PHONE_DESC_BOB + CommandTestUtil.ADDRESS_DESC_BOB","lastModifiedDate":"2024-03-05"},{"lineNumber":208,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.EMAIL_DESC_BOB + CommandTestUtil.TAG_DESC_HUSBAND;","lastModifiedDate":"2024-03-05"},{"lineNumber":209,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":210,"author":{"gitId":"-"},"content":" assertParseFailure(parser, userInput,","lastModifiedDate":"2023-07-14"},{"lineNumber":211,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS));","lastModifiedDate":"2023-07-14"},{"lineNumber":212,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":213,"author":{"gitId":"-"},"content":" // multiple invalid values","lastModifiedDate":"2023-07-14"},{"lineNumber":214,"author":{"gitId":"yeoshuheng"},"content":" userInput \u003d targetIndex.getOneBased() + CommandTestUtil.INVALID_PHONE_DESC","lastModifiedDate":"2024-03-05"},{"lineNumber":215,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INVALID_ADDRESS_DESC + CommandTestUtil.INVALID_EMAIL_DESC","lastModifiedDate":"2024-03-05"},{"lineNumber":216,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INVALID_PHONE_DESC + CommandTestUtil.INVALID_ADDRESS_DESC","lastModifiedDate":"2024-03-05"},{"lineNumber":217,"author":{"gitId":"yeoshuheng"},"content":" + CommandTestUtil.INVALID_EMAIL_DESC;","lastModifiedDate":"2024-03-05"},{"lineNumber":218,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":219,"author":{"gitId":"-"},"content":" assertParseFailure(parser, userInput,","lastModifiedDate":"2023-07-14"},{"lineNumber":220,"author":{"gitId":"-"},"content":" Messages.getErrorMessageForDuplicatePrefixes(PREFIX_PHONE, PREFIX_EMAIL, PREFIX_ADDRESS));","lastModifiedDate":"2023-07-14"},{"lineNumber":221,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":222,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":223,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-05-04"},{"lineNumber":224,"author":{"gitId":"-"},"content":" public void parse_resetTags_success() {","lastModifiedDate":"2017-08-15"},{"lineNumber":225,"author":{"gitId":"-"},"content":" Index targetIndex \u003d INDEX_THIRD_PERSON;","lastModifiedDate":"2017-05-25"},{"lineNumber":226,"author":{"gitId":"-"},"content":" String userInput \u003d targetIndex.getOneBased() + TAG_EMPTY;","lastModifiedDate":"2017-05-25"},{"lineNumber":227,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":228,"author":{"gitId":"-"},"content":" EditPersonDescriptor descriptor \u003d new EditPersonDescriptorBuilder().withTags().build();","lastModifiedDate":"2017-05-04"},{"lineNumber":229,"author":{"gitId":"-"},"content":" EditCommand expectedCommand \u003d new EditCommand(targetIndex, descriptor);","lastModifiedDate":"2017-05-04"},{"lineNumber":230,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-04"},{"lineNumber":231,"author":{"gitId":"-"},"content":" assertParseSuccess(parser, userInput, expectedCommand);","lastModifiedDate":"2017-07-06"},{"lineNumber":232,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-04"},{"lineNumber":233,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-05-04"}],"authorContributionMap":{"-":147,"yeoshuheng":86}},{"path":"src/test/java/seedu/address/model/person/FundingStageTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"yeoshuheng"},"content":"package seedu.address.model.person;","lastModifiedDate":"2024-03-05"},{"lineNumber":2,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":3,"author":{"gitId":"yeoshuheng"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2024-03-05"},{"lineNumber":4,"author":{"gitId":"yeoshuheng"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2024-03-05"},{"lineNumber":5,"author":{"gitId":"yeoshuheng"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2024-03-05"},{"lineNumber":6,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":7,"author":{"gitId":"yeoshuheng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2024-03-05"},{"lineNumber":8,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":9,"author":{"gitId":"yeoshuheng"},"content":"public class FundingStageTest {","lastModifiedDate":"2024-03-05"},{"lineNumber":10,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":11,"author":{"gitId":"yeoshuheng"},"content":" @Test","lastModifiedDate":"2024-03-05"},{"lineNumber":12,"author":{"gitId":"yeoshuheng"},"content":" public void constructor_null_throwsNullPointerException() {","lastModifiedDate":"2024-03-05"},{"lineNumber":13,"author":{"gitId":"yeoshuheng"},"content":" assertThrows(NullPointerException.class, () -\u003e new FundingStage(null));","lastModifiedDate":"2024-03-05"},{"lineNumber":14,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-03-05"},{"lineNumber":15,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":16,"author":{"gitId":"yeoshuheng"},"content":" @Test","lastModifiedDate":"2024-03-05"},{"lineNumber":17,"author":{"gitId":"yeoshuheng"},"content":" public void constructor_invalidFundingStage_throwsIllegalArgumentException() {","lastModifiedDate":"2024-03-05"},{"lineNumber":18,"author":{"gitId":"yeoshuheng"},"content":" String invalidPhone \u003d \"\";","lastModifiedDate":"2024-03-05"},{"lineNumber":19,"author":{"gitId":"yeoshuheng"},"content":" assertThrows(IllegalArgumentException.class, () -\u003e new FundingStage(invalidPhone));","lastModifiedDate":"2024-03-05"},{"lineNumber":20,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-03-05"},{"lineNumber":21,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":22,"author":{"gitId":"yeoshuheng"},"content":" @Test","lastModifiedDate":"2024-03-05"},{"lineNumber":23,"author":{"gitId":"yeoshuheng"},"content":" public void isValidFundingStage() {","lastModifiedDate":"2024-03-05"},{"lineNumber":24,"author":{"gitId":"yeoshuheng"},"content":" // null funding","lastModifiedDate":"2024-03-05"},{"lineNumber":25,"author":{"gitId":"yeoshuheng"},"content":" assertThrows(NullPointerException.class, () -\u003e FundingStage.isValidFundingLevel(null));","lastModifiedDate":"2024-03-05"},{"lineNumber":26,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":27,"author":{"gitId":"yeoshuheng"},"content":" // invalid funding levels","lastModifiedDate":"2024-03-05"},{"lineNumber":28,"author":{"gitId":"yeoshuheng"},"content":" assertFalse(FundingStage.isValidFundingLevel(\"\")); // empty string","lastModifiedDate":"2024-03-05"},{"lineNumber":29,"author":{"gitId":"yeoshuheng"},"content":" assertFalse(FundingStage.isValidFundingLevel(\" \")); // spaces only","lastModifiedDate":"2024-03-05"},{"lineNumber":30,"author":{"gitId":"yeoshuheng"},"content":" assertFalse(FundingStage.isValidFundingLevel(\"AB\")); // invalid funding level","lastModifiedDate":"2024-03-05"},{"lineNumber":31,"author":{"gitId":"yeoshuheng"},"content":" assertFalse(FundingStage.isValidFundingLevel(\"1\")); // numbers","lastModifiedDate":"2024-03-05"},{"lineNumber":32,"author":{"gitId":"yeoshuheng"},"content":" assertFalse(FundingStage.isValidFundingLevel(\"D\")); // invalid funding level","lastModifiedDate":"2024-03-05"},{"lineNumber":33,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":34,"author":{"gitId":"yeoshuheng"},"content":" // valid funding levels","lastModifiedDate":"2024-03-05"},{"lineNumber":35,"author":{"gitId":"yeoshuheng"},"content":" assertTrue(FundingStage.isValidFundingLevel(\"A\"));","lastModifiedDate":"2024-03-05"},{"lineNumber":36,"author":{"gitId":"yeoshuheng"},"content":" assertTrue(FundingStage.isValidFundingLevel(\"B\"));","lastModifiedDate":"2024-03-05"},{"lineNumber":37,"author":{"gitId":"yeoshuheng"},"content":" assertTrue(FundingStage.isValidFundingLevel(\"C\"));","lastModifiedDate":"2024-03-05"},{"lineNumber":38,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-03-05"},{"lineNumber":39,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":40,"author":{"gitId":"yeoshuheng"},"content":" @Test","lastModifiedDate":"2024-03-05"},{"lineNumber":41,"author":{"gitId":"yeoshuheng"},"content":" public void equals() {","lastModifiedDate":"2024-03-05"},{"lineNumber":42,"author":{"gitId":"yeoshuheng"},"content":" FundingStage fundingStage \u003d new FundingStage(\"A\");","lastModifiedDate":"2024-03-05"},{"lineNumber":43,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":44,"author":{"gitId":"yeoshuheng"},"content":" // same values -\u003e returns true","lastModifiedDate":"2024-03-05"},{"lineNumber":45,"author":{"gitId":"yeoshuheng"},"content":" assertTrue(fundingStage.equals(new FundingStage(\"A\")));","lastModifiedDate":"2024-03-05"},{"lineNumber":46,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":47,"author":{"gitId":"yeoshuheng"},"content":" // same object -\u003e returns true","lastModifiedDate":"2024-03-05"},{"lineNumber":48,"author":{"gitId":"yeoshuheng"},"content":" assertTrue(fundingStage.equals(fundingStage));","lastModifiedDate":"2024-03-05"},{"lineNumber":49,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":50,"author":{"gitId":"yeoshuheng"},"content":" // null -\u003e returns false","lastModifiedDate":"2024-03-05"},{"lineNumber":51,"author":{"gitId":"yeoshuheng"},"content":" assertFalse(fundingStage.equals(null));","lastModifiedDate":"2024-03-05"},{"lineNumber":52,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":53,"author":{"gitId":"yeoshuheng"},"content":" // different types -\u003e returns false","lastModifiedDate":"2024-03-05"},{"lineNumber":54,"author":{"gitId":"yeoshuheng"},"content":" assertFalse(fundingStage.equals(5.0f));","lastModifiedDate":"2024-03-05"},{"lineNumber":55,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":56,"author":{"gitId":"yeoshuheng"},"content":" // different values -\u003e returns false","lastModifiedDate":"2024-03-05"},{"lineNumber":57,"author":{"gitId":"yeoshuheng"},"content":" assertFalse(fundingStage.equals(new FundingStage(\"B\")));","lastModifiedDate":"2024-03-05"},{"lineNumber":58,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-03-05"},{"lineNumber":59,"author":{"gitId":"yeoshuheng"},"content":"}","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"yeoshuheng":59}},{"path":"src/test/java/seedu/address/model/person/IndustryTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"yeoshuheng"},"content":"package seedu.address.model.person;","lastModifiedDate":"2024-03-05"},{"lineNumber":2,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":3,"author":{"gitId":"yeoshuheng"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2024-03-05"},{"lineNumber":4,"author":{"gitId":"yeoshuheng"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2024-03-05"},{"lineNumber":5,"author":{"gitId":"yeoshuheng"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2024-03-05"},{"lineNumber":6,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":7,"author":{"gitId":"yeoshuheng"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2024-03-05"},{"lineNumber":8,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":9,"author":{"gitId":"yeoshuheng"},"content":"public class IndustryTest {","lastModifiedDate":"2024-03-05"},{"lineNumber":10,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":11,"author":{"gitId":"yeoshuheng"},"content":" @Test","lastModifiedDate":"2024-03-05"},{"lineNumber":12,"author":{"gitId":"yeoshuheng"},"content":" public void constructor_null_throwsNullPointerException() {","lastModifiedDate":"2024-03-05"},{"lineNumber":13,"author":{"gitId":"yeoshuheng"},"content":" assertThrows(NullPointerException.class, () -\u003e new Industry(null));","lastModifiedDate":"2024-03-05"},{"lineNumber":14,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-03-05"},{"lineNumber":15,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":16,"author":{"gitId":"yeoshuheng"},"content":" @Test","lastModifiedDate":"2024-03-05"},{"lineNumber":17,"author":{"gitId":"yeoshuheng"},"content":" public void constructor_invalidIndustry_throwsIllegalArgumentException() {","lastModifiedDate":"2024-03-05"},{"lineNumber":18,"author":{"gitId":"yeoshuheng"},"content":" String invalidName \u003d \"\";","lastModifiedDate":"2024-03-05"},{"lineNumber":19,"author":{"gitId":"yeoshuheng"},"content":" assertThrows(IllegalArgumentException.class, () -\u003e new Industry(invalidName));","lastModifiedDate":"2024-03-05"},{"lineNumber":20,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-03-05"},{"lineNumber":21,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":22,"author":{"gitId":"yeoshuheng"},"content":" @Test","lastModifiedDate":"2024-03-05"},{"lineNumber":23,"author":{"gitId":"yeoshuheng"},"content":" public void isValidIndustry() {","lastModifiedDate":"2024-03-05"},{"lineNumber":24,"author":{"gitId":"yeoshuheng"},"content":" assertThrows(NullPointerException.class, () -\u003e Industry.isValidIndustry(null));","lastModifiedDate":"2024-03-05"},{"lineNumber":25,"author":{"gitId":"yeoshuheng"},"content":" assertFalse(Industry.isValidIndustry(\"\")); // empty string","lastModifiedDate":"2024-03-05"},{"lineNumber":26,"author":{"gitId":"yeoshuheng"},"content":" assertFalse(Industry.isValidIndustry(\" \")); // spaces only","lastModifiedDate":"2024-03-05"},{"lineNumber":27,"author":{"gitId":"yeoshuheng"},"content":" assertFalse(Industry.isValidIndustry(\"^\")); // only non-alphanumeric characters","lastModifiedDate":"2024-03-05"},{"lineNumber":28,"author":{"gitId":"yeoshuheng"},"content":" assertFalse(Industry.isValidIndustry(\"finance*\")); // contains non-alphanumeric characters","lastModifiedDate":"2024-03-05"},{"lineNumber":29,"author":{"gitId":"yeoshuheng"},"content":" assertTrue(Industry.isValidIndustry(\"Finance\")); // alphabets only","lastModifiedDate":"2024-03-05"},{"lineNumber":30,"author":{"gitId":"yeoshuheng"},"content":" assertTrue(Industry.isValidIndustry(\"MANUFACTURING\")); // all capital","lastModifiedDate":"2024-03-05"},{"lineNumber":31,"author":{"gitId":"yeoshuheng"},"content":" assertTrue(Industry.isValidIndustry(\"web 3\")); // with numbers","lastModifiedDate":"2024-03-05"},{"lineNumber":32,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-03-05"},{"lineNumber":33,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":34,"author":{"gitId":"yeoshuheng"},"content":" @Test","lastModifiedDate":"2024-03-05"},{"lineNumber":35,"author":{"gitId":"yeoshuheng"},"content":" public void equals() {","lastModifiedDate":"2024-03-05"},{"lineNumber":36,"author":{"gitId":"yeoshuheng"},"content":" Industry industry \u003d new Industry(\"Valid Industry\");","lastModifiedDate":"2024-03-05"},{"lineNumber":37,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":38,"author":{"gitId":"yeoshuheng"},"content":" // same values -\u003e returns true","lastModifiedDate":"2024-03-05"},{"lineNumber":39,"author":{"gitId":"yeoshuheng"},"content":" assertTrue(industry.equals(new Industry(\"Valid Industry\")));","lastModifiedDate":"2024-03-05"},{"lineNumber":40,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":41,"author":{"gitId":"yeoshuheng"},"content":" // same object -\u003e returns true","lastModifiedDate":"2024-03-05"},{"lineNumber":42,"author":{"gitId":"yeoshuheng"},"content":" assertTrue(industry.equals(industry));","lastModifiedDate":"2024-03-05"},{"lineNumber":43,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":44,"author":{"gitId":"yeoshuheng"},"content":" // null -\u003e returns false","lastModifiedDate":"2024-03-05"},{"lineNumber":45,"author":{"gitId":"yeoshuheng"},"content":" assertFalse(industry.equals(null));","lastModifiedDate":"2024-03-05"},{"lineNumber":46,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":47,"author":{"gitId":"yeoshuheng"},"content":" // different types -\u003e returns false","lastModifiedDate":"2024-03-05"},{"lineNumber":48,"author":{"gitId":"yeoshuheng"},"content":" assertFalse(industry.equals(5.0f));","lastModifiedDate":"2024-03-05"},{"lineNumber":49,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":50,"author":{"gitId":"yeoshuheng"},"content":" // different values -\u003e returns false","lastModifiedDate":"2024-03-05"},{"lineNumber":51,"author":{"gitId":"yeoshuheng"},"content":" assertFalse(industry.equals(new Industry(\"Other Valid Industry\")));","lastModifiedDate":"2024-03-05"},{"lineNumber":52,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-03-05"},{"lineNumber":53,"author":{"gitId":"yeoshuheng"},"content":"}","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"yeoshuheng":53}},{"path":"src/test/java/seedu/address/model/person/PersonTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.model.person;","lastModifiedDate":"2018-03-26"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-02-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2019-03-15"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2019-03-15"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB;","lastModifiedDate":"2018-04-19"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_BOB;","lastModifiedDate":"2018-04-19"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB;","lastModifiedDate":"2018-04-19"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB;","lastModifiedDate":"2018-04-19"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND;","lastModifiedDate":"2018-04-19"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-23"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.ALICE;","lastModifiedDate":"2018-04-19"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.BOB;","lastModifiedDate":"2018-04-19"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.testutil.PersonBuilder;","lastModifiedDate":"2018-03-26"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":19,"author":{"gitId":"-"},"content":"public class PersonTest {","lastModifiedDate":"2018-03-26"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-01"},{"lineNumber":21,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2017-09-01"},{"lineNumber":22,"author":{"gitId":"-"},"content":" public void asObservableList_modifyList_throwsUnsupportedOperationException() {","lastModifiedDate":"2017-09-01"},{"lineNumber":23,"author":{"gitId":"-"},"content":" Person person \u003d new PersonBuilder().build();","lastModifiedDate":"2018-03-26"},{"lineNumber":24,"author":{"gitId":"-"},"content":" assertThrows(UnsupportedOperationException.class, () -\u003e person.getTags().remove(0));","lastModifiedDate":"2019-03-23"},{"lineNumber":25,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-09-01"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":27,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-04-19"},{"lineNumber":28,"author":{"gitId":"-"},"content":" public void isSamePerson() {","lastModifiedDate":"2018-04-19"},{"lineNumber":29,"author":{"gitId":"-"},"content":" // same object -\u003e returns true","lastModifiedDate":"2018-04-19"},{"lineNumber":30,"author":{"gitId":"-"},"content":" assertTrue(ALICE.isSamePerson(ALICE));","lastModifiedDate":"2018-04-19"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":32,"author":{"gitId":"-"},"content":" // null -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":33,"author":{"gitId":"-"},"content":" assertFalse(ALICE.isSamePerson(null));","lastModifiedDate":"2018-04-19"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":35,"author":{"gitId":"-"},"content":" // same name, all other attributes different -\u003e returns true","lastModifiedDate":"2020-12-18"},{"lineNumber":36,"author":{"gitId":"-"},"content":" Person editedAlice \u003d new PersonBuilder(ALICE).withPhone(VALID_PHONE_BOB).withEmail(VALID_EMAIL_BOB)","lastModifiedDate":"2020-12-18"},{"lineNumber":37,"author":{"gitId":"-"},"content":" .withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_HUSBAND).build();","lastModifiedDate":"2020-12-18"},{"lineNumber":38,"author":{"gitId":"-"},"content":" assertTrue(ALICE.isSamePerson(editedAlice));","lastModifiedDate":"2020-12-18"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":40,"author":{"gitId":"-"},"content":" // different name, all other attributes same -\u003e returns false","lastModifiedDate":"2020-12-18"},{"lineNumber":41,"author":{"gitId":"-"},"content":" editedAlice \u003d new PersonBuilder(ALICE).withName(VALID_NAME_BOB).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":42,"author":{"gitId":"-"},"content":" assertFalse(ALICE.isSamePerson(editedAlice));","lastModifiedDate":"2018-04-19"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":44,"author":{"gitId":"-"},"content":" // name differs in case, all other attributes same -\u003e returns false","lastModifiedDate":"2020-12-18"},{"lineNumber":45,"author":{"gitId":"-"},"content":" Person editedBob \u003d new PersonBuilder(BOB).withName(VALID_NAME_BOB.toLowerCase()).build();","lastModifiedDate":"2020-12-18"},{"lineNumber":46,"author":{"gitId":"-"},"content":" assertFalse(BOB.isSamePerson(editedBob));","lastModifiedDate":"2020-12-18"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":48,"author":{"gitId":"-"},"content":" // name has trailing spaces, all other attributes same -\u003e returns false","lastModifiedDate":"2020-12-18"},{"lineNumber":49,"author":{"gitId":"-"},"content":" String nameWithTrailingSpaces \u003d VALID_NAME_BOB + \" \";","lastModifiedDate":"2020-12-18"},{"lineNumber":50,"author":{"gitId":"-"},"content":" editedBob \u003d new PersonBuilder(BOB).withName(nameWithTrailingSpaces).build();","lastModifiedDate":"2020-12-18"},{"lineNumber":51,"author":{"gitId":"-"},"content":" assertFalse(BOB.isSamePerson(editedBob));","lastModifiedDate":"2020-12-18"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-04-19"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":54,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-04-19"},{"lineNumber":55,"author":{"gitId":"-"},"content":" public void equals() {","lastModifiedDate":"2018-04-19"},{"lineNumber":56,"author":{"gitId":"-"},"content":" // same values -\u003e returns true","lastModifiedDate":"2018-04-19"},{"lineNumber":57,"author":{"gitId":"-"},"content":" Person aliceCopy \u003d new PersonBuilder(ALICE).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":58,"author":{"gitId":"-"},"content":" assertTrue(ALICE.equals(aliceCopy));","lastModifiedDate":"2018-04-19"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":60,"author":{"gitId":"-"},"content":" // same object -\u003e returns true","lastModifiedDate":"2018-04-19"},{"lineNumber":61,"author":{"gitId":"-"},"content":" assertTrue(ALICE.equals(ALICE));","lastModifiedDate":"2018-04-19"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":63,"author":{"gitId":"-"},"content":" // null -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":64,"author":{"gitId":"-"},"content":" assertFalse(ALICE.equals(null));","lastModifiedDate":"2018-04-19"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":66,"author":{"gitId":"-"},"content":" // different type -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":67,"author":{"gitId":"-"},"content":" assertFalse(ALICE.equals(5));","lastModifiedDate":"2018-04-19"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":69,"author":{"gitId":"-"},"content":" // different person -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":70,"author":{"gitId":"-"},"content":" assertFalse(ALICE.equals(BOB));","lastModifiedDate":"2018-04-19"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":72,"author":{"gitId":"-"},"content":" // different name -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":73,"author":{"gitId":"-"},"content":" Person editedAlice \u003d new PersonBuilder(ALICE).withName(VALID_NAME_BOB).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":74,"author":{"gitId":"-"},"content":" assertFalse(ALICE.equals(editedAlice));","lastModifiedDate":"2018-04-19"},{"lineNumber":75,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":76,"author":{"gitId":"-"},"content":" // different phone -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":77,"author":{"gitId":"-"},"content":" editedAlice \u003d new PersonBuilder(ALICE).withPhone(VALID_PHONE_BOB).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":78,"author":{"gitId":"-"},"content":" assertFalse(ALICE.equals(editedAlice));","lastModifiedDate":"2018-04-19"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":80,"author":{"gitId":"-"},"content":" // different email -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":81,"author":{"gitId":"-"},"content":" editedAlice \u003d new PersonBuilder(ALICE).withEmail(VALID_EMAIL_BOB).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":82,"author":{"gitId":"-"},"content":" assertFalse(ALICE.equals(editedAlice));","lastModifiedDate":"2018-04-19"},{"lineNumber":83,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-19"},{"lineNumber":84,"author":{"gitId":"-"},"content":" // different address -\u003e returns false","lastModifiedDate":"2018-04-19"},{"lineNumber":85,"author":{"gitId":"-"},"content":" editedAlice \u003d new PersonBuilder(ALICE).withAddress(VALID_ADDRESS_BOB).build();","lastModifiedDate":"2018-04-19"},{"lineNumber":86,"author":{"gitId":"-"},"content":" assertFalse(ALICE.equals(editedAlice));","lastModifiedDate":"2018-04-19"},{"lineNumber":87,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-04-18"},{"lineNumber":88,"author":{"gitId":"-"},"content":" // different tags -\u003e returns false","lastModifiedDate":"2018-04-18"},{"lineNumber":89,"author":{"gitId":"-"},"content":" editedAlice \u003d new PersonBuilder(ALICE).withTags(VALID_TAG_HUSBAND).build();","lastModifiedDate":"2018-04-18"},{"lineNumber":90,"author":{"gitId":"-"},"content":" assertFalse(ALICE.equals(editedAlice));","lastModifiedDate":"2018-04-18"},{"lineNumber":91,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-04-19"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-02-23"},{"lineNumber":93,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2019-02-23"},{"lineNumber":94,"author":{"gitId":"-"},"content":" public void toStringMethod() {","lastModifiedDate":"2019-02-23"},{"lineNumber":95,"author":{"gitId":"yeoshuheng"},"content":" String expected \u003d Person.class.getCanonicalName() + \"{name\u003d\" + ALICE.getName()","lastModifiedDate":"2024-02-25"},{"lineNumber":96,"author":{"gitId":"yeoshuheng"},"content":" + \", industry\u003d\" + ALICE.getIndustry() + \", funding stage\u003d\" + ALICE.getFundingStage()","lastModifiedDate":"2024-02-25"},{"lineNumber":97,"author":{"gitId":"yeoshuheng"},"content":" + \", phone\u003d\" + ALICE.getPhone()","lastModifiedDate":"2024-02-25"},{"lineNumber":98,"author":{"gitId":"yeoshuheng"},"content":" + \", email\u003d\" + ALICE.getEmail() + \", address\u003d\" + ALICE.getAddress() + \", tags\u003d\"","lastModifiedDate":"2024-02-25"},{"lineNumber":99,"author":{"gitId":"yeoshuheng"},"content":" + ALICE.getTags() + \"}\";","lastModifiedDate":"2024-02-25"},{"lineNumber":100,"author":{"gitId":"-"},"content":" assertEquals(expected, ALICE.toString());","lastModifiedDate":"2019-02-23"},{"lineNumber":101,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-02-23"},{"lineNumber":102,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-09-01"}],"authorContributionMap":{"-":97,"yeoshuheng":5}},{"path":"src/test/java/seedu/address/storage/JsonAdaptedPersonTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.storage;","lastModifiedDate":"2018-08-13"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2019-03-15"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.storage.JsonAdaptedPerson.MISSING_FIELD_MESSAGE_FORMAT;","lastModifiedDate":"2018-08-13"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.Assert.assertThrows;","lastModifiedDate":"2019-03-14"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.testutil.TypicalPersons.BENSON;","lastModifiedDate":"2018-08-13"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import java.util.ArrayList;","lastModifiedDate":"2018-08-13"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2018-08-13"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2018-08-13"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2019-04-27"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.commons.exceptions.IllegalValueException;","lastModifiedDate":"2018-08-13"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2018-08-13"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2018-08-13"},{"lineNumber":17,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2018-08-13"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2018-08-13"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":20,"author":{"gitId":"-"},"content":"public class JsonAdaptedPersonTest {","lastModifiedDate":"2018-08-13"},{"lineNumber":21,"author":{"gitId":"-"},"content":" private static final String INVALID_NAME \u003d \"R@chel\";","lastModifiedDate":"2018-08-13"},{"lineNumber":22,"author":{"gitId":"-"},"content":" private static final String INVALID_PHONE \u003d \"+651234\";","lastModifiedDate":"2018-08-13"},{"lineNumber":23,"author":{"gitId":"-"},"content":" private static final String INVALID_ADDRESS \u003d \" \";","lastModifiedDate":"2018-08-13"},{"lineNumber":24,"author":{"gitId":"-"},"content":" private static final String INVALID_EMAIL \u003d \"example.com\";","lastModifiedDate":"2018-08-13"},{"lineNumber":25,"author":{"gitId":"-"},"content":" private static final String INVALID_TAG \u003d \"#friend\";","lastModifiedDate":"2018-08-13"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":27,"author":{"gitId":"yeoshuheng"},"content":" private static final String INVALID_FUNDING \u003d \"D\";","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"yeoshuheng"},"content":" private static final String INVALID_INDUSTRY \u003d \" \";","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" private static final String VALID_NAME \u003d BENSON.getName().toString();","lastModifiedDate":"2018-08-13"},{"lineNumber":32,"author":{"gitId":"-"},"content":" private static final String VALID_PHONE \u003d BENSON.getPhone().toString();","lastModifiedDate":"2018-08-13"},{"lineNumber":33,"author":{"gitId":"-"},"content":" private static final String VALID_EMAIL \u003d BENSON.getEmail().toString();","lastModifiedDate":"2018-08-13"},{"lineNumber":34,"author":{"gitId":"-"},"content":" private static final String VALID_ADDRESS \u003d BENSON.getAddress().toString();","lastModifiedDate":"2018-08-13"},{"lineNumber":35,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":36,"author":{"gitId":"yeoshuheng"},"content":" private static final String VALID_FUNDING \u003d BENSON.getFundingStage().toString();","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"yeoshuheng"},"content":" private static final String VALID_INDUSTRY \u003d BENSON.getIndustry().toString();","lastModifiedDate":"2024-02-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" private static final List\u003cJsonAdaptedTag\u003e VALID_TAGS \u003d BENSON.getTags().stream()","lastModifiedDate":"2018-08-13"},{"lineNumber":40,"author":{"gitId":"-"},"content":" .map(JsonAdaptedTag::new)","lastModifiedDate":"2018-08-13"},{"lineNumber":41,"author":{"gitId":"-"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2018-08-13"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":43,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":44,"author":{"gitId":"-"},"content":" public void toModelType_validPersonDetails_returnsPerson() throws Exception {","lastModifiedDate":"2018-08-13"},{"lineNumber":45,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d new JsonAdaptedPerson(BENSON);","lastModifiedDate":"2018-08-13"},{"lineNumber":46,"author":{"gitId":"-"},"content":" assertEquals(BENSON, person.toModelType());","lastModifiedDate":"2018-08-13"},{"lineNumber":47,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":49,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":50,"author":{"gitId":"-"},"content":" public void toModelType_invalidName_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":51,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2018-08-13"},{"lineNumber":52,"author":{"gitId":"yeoshuheng"},"content":" new JsonAdaptedPerson(INVALID_NAME, VALID_INDUSTRY, VALID_FUNDING,","lastModifiedDate":"2024-02-25"},{"lineNumber":53,"author":{"gitId":"yeoshuheng"},"content":" VALID_PHONE, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS);","lastModifiedDate":"2024-02-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" String expectedMessage \u003d Name.MESSAGE_CONSTRAINTS;","lastModifiedDate":"2018-08-13"},{"lineNumber":55,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":56,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":58,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":59,"author":{"gitId":"-"},"content":" public void toModelType_nullName_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":60,"author":{"gitId":"yeoshuheng"},"content":" JsonAdaptedPerson person \u003d new JsonAdaptedPerson(null, VALID_INDUSTRY, VALID_FUNDING,","lastModifiedDate":"2024-02-25"},{"lineNumber":61,"author":{"gitId":"yeoshuheng"},"content":" VALID_PHONE, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS);","lastModifiedDate":"2024-02-25"},{"lineNumber":62,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(MISSING_FIELD_MESSAGE_FORMAT, Name.class.getSimpleName());","lastModifiedDate":"2018-08-13"},{"lineNumber":63,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":64,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":66,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":67,"author":{"gitId":"-"},"content":" public void toModelType_invalidPhone_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":68,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2018-08-13"},{"lineNumber":69,"author":{"gitId":"yeoshuheng"},"content":" new JsonAdaptedPerson(VALID_NAME, VALID_INDUSTRY, VALID_FUNDING,","lastModifiedDate":"2024-02-25"},{"lineNumber":70,"author":{"gitId":"yeoshuheng"},"content":" INVALID_PHONE, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS);","lastModifiedDate":"2024-02-25"},{"lineNumber":71,"author":{"gitId":"-"},"content":" String expectedMessage \u003d Phone.MESSAGE_CONSTRAINTS;","lastModifiedDate":"2018-08-13"},{"lineNumber":72,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":75,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":76,"author":{"gitId":"-"},"content":" public void toModelType_nullPhone_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":77,"author":{"gitId":"yeoshuheng"},"content":" JsonAdaptedPerson person \u003d new JsonAdaptedPerson(VALID_NAME, VALID_INDUSTRY, VALID_FUNDING,","lastModifiedDate":"2024-02-25"},{"lineNumber":78,"author":{"gitId":"yeoshuheng"},"content":" null, VALID_EMAIL, VALID_ADDRESS, VALID_TAGS);","lastModifiedDate":"2024-02-25"},{"lineNumber":79,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(MISSING_FIELD_MESSAGE_FORMAT, Phone.class.getSimpleName());","lastModifiedDate":"2018-08-13"},{"lineNumber":80,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":82,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":83,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":84,"author":{"gitId":"-"},"content":" public void toModelType_invalidEmail_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":85,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2018-08-13"},{"lineNumber":86,"author":{"gitId":"yeoshuheng"},"content":" new JsonAdaptedPerson(VALID_NAME, VALID_INDUSTRY, VALID_FUNDING,","lastModifiedDate":"2024-02-25"},{"lineNumber":87,"author":{"gitId":"yeoshuheng"},"content":" VALID_PHONE, INVALID_EMAIL, VALID_ADDRESS, VALID_TAGS);","lastModifiedDate":"2024-02-25"},{"lineNumber":88,"author":{"gitId":"-"},"content":" String expectedMessage \u003d Email.MESSAGE_CONSTRAINTS;","lastModifiedDate":"2018-08-13"},{"lineNumber":89,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":90,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":91,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":92,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":93,"author":{"gitId":"-"},"content":" public void toModelType_nullEmail_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":94,"author":{"gitId":"yeoshuheng"},"content":" JsonAdaptedPerson person \u003d new JsonAdaptedPerson(VALID_NAME, VALID_INDUSTRY, VALID_FUNDING,","lastModifiedDate":"2024-02-25"},{"lineNumber":95,"author":{"gitId":"yeoshuheng"},"content":" VALID_PHONE, null, VALID_ADDRESS, VALID_TAGS);","lastModifiedDate":"2024-02-25"},{"lineNumber":96,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(MISSING_FIELD_MESSAGE_FORMAT, Email.class.getSimpleName());","lastModifiedDate":"2018-08-13"},{"lineNumber":97,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":98,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":99,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":100,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":101,"author":{"gitId":"-"},"content":" public void toModelType_invalidAddress_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":102,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2018-08-13"},{"lineNumber":103,"author":{"gitId":"yeoshuheng"},"content":" new JsonAdaptedPerson(VALID_NAME, VALID_INDUSTRY, VALID_FUNDING,","lastModifiedDate":"2024-02-25"},{"lineNumber":104,"author":{"gitId":"yeoshuheng"},"content":" VALID_PHONE, VALID_EMAIL, INVALID_ADDRESS, VALID_TAGS);","lastModifiedDate":"2024-02-25"},{"lineNumber":105,"author":{"gitId":"-"},"content":" String expectedMessage \u003d Address.MESSAGE_CONSTRAINTS;","lastModifiedDate":"2018-08-13"},{"lineNumber":106,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":107,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":108,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":109,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":110,"author":{"gitId":"-"},"content":" public void toModelType_nullAddress_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":111,"author":{"gitId":"yeoshuheng"},"content":" JsonAdaptedPerson person \u003d new JsonAdaptedPerson(VALID_NAME, VALID_INDUSTRY, VALID_FUNDING,","lastModifiedDate":"2024-02-25"},{"lineNumber":112,"author":{"gitId":"yeoshuheng"},"content":" VALID_PHONE, VALID_EMAIL, null, VALID_TAGS);","lastModifiedDate":"2024-02-25"},{"lineNumber":113,"author":{"gitId":"-"},"content":" String expectedMessage \u003d String.format(MISSING_FIELD_MESSAGE_FORMAT, Address.class.getSimpleName());","lastModifiedDate":"2018-08-13"},{"lineNumber":114,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, expectedMessage, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":115,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":116,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":117,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2018-08-13"},{"lineNumber":118,"author":{"gitId":"-"},"content":" public void toModelType_invalidTags_throwsIllegalValueException() {","lastModifiedDate":"2018-08-13"},{"lineNumber":119,"author":{"gitId":"-"},"content":" List\u003cJsonAdaptedTag\u003e invalidTags \u003d new ArrayList\u003c\u003e(VALID_TAGS);","lastModifiedDate":"2018-08-13"},{"lineNumber":120,"author":{"gitId":"-"},"content":" invalidTags.add(new JsonAdaptedTag(INVALID_TAG));","lastModifiedDate":"2018-08-13"},{"lineNumber":121,"author":{"gitId":"-"},"content":" JsonAdaptedPerson person \u003d","lastModifiedDate":"2018-08-13"},{"lineNumber":122,"author":{"gitId":"yeoshuheng"},"content":" new JsonAdaptedPerson(VALID_NAME, VALID_INDUSTRY, VALID_FUNDING,","lastModifiedDate":"2024-02-25"},{"lineNumber":123,"author":{"gitId":"yeoshuheng"},"content":" VALID_PHONE, VALID_EMAIL, VALID_ADDRESS, invalidTags);","lastModifiedDate":"2024-02-25"},{"lineNumber":124,"author":{"gitId":"-"},"content":" assertThrows(IllegalValueException.class, person::toModelType);","lastModifiedDate":"2019-03-14"},{"lineNumber":125,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-08-13"},{"lineNumber":126,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-08-13"},{"lineNumber":127,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2018-08-13"}],"authorContributionMap":{"-":101,"yeoshuheng":26}},{"path":"src/test/java/seedu/address/testutil/EditPersonDescriptorBuilder.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.testutil;","lastModifiedDate":"2017-05-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-12-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2017-12-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import java.util.stream.Stream;","lastModifiedDate":"2017-12-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand.EditPersonDescriptor;","lastModifiedDate":"2017-05-05"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.model.person.FundingStage;","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.model.person.Industry;","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-12-23"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-05-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * A utility class to help with building EditPersonDescriptor objects.","lastModifiedDate":"2017-05-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-05-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":"public class EditPersonDescriptorBuilder {","lastModifiedDate":"2017-05-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":" private EditPersonDescriptor descriptor;","lastModifiedDate":"2017-05-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":" public EditPersonDescriptorBuilder() {","lastModifiedDate":"2017-05-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":" descriptor \u003d new EditPersonDescriptor();","lastModifiedDate":"2017-05-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":28,"author":{"gitId":"-"},"content":" public EditPersonDescriptorBuilder(EditPersonDescriptor descriptor) {","lastModifiedDate":"2017-05-05"},{"lineNumber":29,"author":{"gitId":"-"},"content":" this.descriptor \u003d new EditPersonDescriptor(descriptor);","lastModifiedDate":"2017-05-05"},{"lineNumber":30,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-06-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * Returns an {@code EditPersonDescriptor} with fields containing {@code person}\u0027s details","lastModifiedDate":"2017-06-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-06-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":" public EditPersonDescriptorBuilder(Person person) {","lastModifiedDate":"2018-01-10"},{"lineNumber":36,"author":{"gitId":"-"},"content":" descriptor \u003d new EditPersonDescriptor();","lastModifiedDate":"2017-06-05"},{"lineNumber":37,"author":{"gitId":"-"},"content":" descriptor.setName(person.getName());","lastModifiedDate":"2017-06-21"},{"lineNumber":38,"author":{"gitId":"yeoshuheng"},"content":" descriptor.setIndustry(person.getIndustry());","lastModifiedDate":"2024-02-25"},{"lineNumber":39,"author":{"gitId":"yeoshuheng"},"content":" descriptor.setFundingStage(person.getFundingStage());","lastModifiedDate":"2024-02-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" descriptor.setPhone(person.getPhone());","lastModifiedDate":"2017-06-21"},{"lineNumber":41,"author":{"gitId":"-"},"content":" descriptor.setEmail(person.getEmail());","lastModifiedDate":"2017-06-21"},{"lineNumber":42,"author":{"gitId":"-"},"content":" descriptor.setAddress(person.getAddress());","lastModifiedDate":"2017-06-21"},{"lineNumber":43,"author":{"gitId":"-"},"content":" descriptor.setTags(person.getTags());","lastModifiedDate":"2017-06-21"},{"lineNumber":44,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-06-05"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-06-05"},{"lineNumber":46,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":47,"author":{"gitId":"-"},"content":" * Sets the {@code Name} of the {@code EditPersonDescriptor} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":48,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":49,"author":{"gitId":"-"},"content":" public EditPersonDescriptorBuilder withName(String name) {","lastModifiedDate":"2017-08-15"},{"lineNumber":50,"author":{"gitId":"-"},"content":" descriptor.setName(new Name(name));","lastModifiedDate":"2017-12-23"},{"lineNumber":51,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2017-05-05"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":54,"author":{"gitId":"yeoshuheng"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":55,"author":{"gitId":"yeoshuheng"},"content":" * Sets the {@code FundingStage} of the {@code EditPersonDescriptor} that we are building.","lastModifiedDate":"2024-02-25"},{"lineNumber":56,"author":{"gitId":"yeoshuheng"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":57,"author":{"gitId":"yeoshuheng"},"content":" public EditPersonDescriptorBuilder withFundingStage(String fundingLevel) {","lastModifiedDate":"2024-02-25"},{"lineNumber":58,"author":{"gitId":"yeoshuheng"},"content":" descriptor.setFundingStage(new FundingStage(fundingLevel));","lastModifiedDate":"2024-02-25"},{"lineNumber":59,"author":{"gitId":"yeoshuheng"},"content":" return this;","lastModifiedDate":"2024-02-25"},{"lineNumber":60,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":61,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":62,"author":{"gitId":"yeoshuheng"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":63,"author":{"gitId":"yeoshuheng"},"content":" * Sets the {@code Industry} of the {@code EditPersonDescriptor} that we are building.","lastModifiedDate":"2024-02-25"},{"lineNumber":64,"author":{"gitId":"yeoshuheng"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":65,"author":{"gitId":"yeoshuheng"},"content":" public EditPersonDescriptorBuilder withIndustry(String industry) {","lastModifiedDate":"2024-02-25"},{"lineNumber":66,"author":{"gitId":"yeoshuheng"},"content":" descriptor.setIndustry(new Industry(industry));","lastModifiedDate":"2024-02-25"},{"lineNumber":67,"author":{"gitId":"yeoshuheng"},"content":" return this;","lastModifiedDate":"2024-02-25"},{"lineNumber":68,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":69,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":70,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":71,"author":{"gitId":"-"},"content":" * Sets the {@code Phone} of the {@code EditPersonDescriptor} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":72,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":73,"author":{"gitId":"-"},"content":" public EditPersonDescriptorBuilder withPhone(String phone) {","lastModifiedDate":"2017-08-15"},{"lineNumber":74,"author":{"gitId":"-"},"content":" descriptor.setPhone(new Phone(phone));","lastModifiedDate":"2017-12-23"},{"lineNumber":75,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2017-05-05"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":77,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":78,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":79,"author":{"gitId":"-"},"content":" * Sets the {@code Email} of the {@code EditPersonDescriptor} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":80,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":81,"author":{"gitId":"-"},"content":" public EditPersonDescriptorBuilder withEmail(String email) {","lastModifiedDate":"2017-08-15"},{"lineNumber":82,"author":{"gitId":"-"},"content":" descriptor.setEmail(new Email(email));","lastModifiedDate":"2017-12-23"},{"lineNumber":83,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2017-05-05"},{"lineNumber":84,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":85,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":86,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":87,"author":{"gitId":"-"},"content":" * Sets the {@code Address} of the {@code EditPersonDescriptor} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":88,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":89,"author":{"gitId":"-"},"content":" public EditPersonDescriptorBuilder withAddress(String address) {","lastModifiedDate":"2017-08-15"},{"lineNumber":90,"author":{"gitId":"-"},"content":" descriptor.setAddress(new Address(address));","lastModifiedDate":"2017-12-23"},{"lineNumber":91,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2017-05-05"},{"lineNumber":92,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":93,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":94,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":95,"author":{"gitId":"-"},"content":" * Parses the {@code tags} into a {@code Set\u003cTag\u003e} and set it to the {@code EditPersonDescriptor}","lastModifiedDate":"2017-07-26"},{"lineNumber":96,"author":{"gitId":"-"},"content":" * that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":97,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":98,"author":{"gitId":"-"},"content":" public EditPersonDescriptorBuilder withTags(String... tags) {","lastModifiedDate":"2017-08-15"},{"lineNumber":99,"author":{"gitId":"-"},"content":" Set\u003cTag\u003e tagSet \u003d Stream.of(tags).map(Tag::new).collect(Collectors.toSet());","lastModifiedDate":"2017-12-23"},{"lineNumber":100,"author":{"gitId":"-"},"content":" descriptor.setTags(tagSet);","lastModifiedDate":"2017-12-23"},{"lineNumber":101,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2017-05-05"},{"lineNumber":102,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":103,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-05-05"},{"lineNumber":104,"author":{"gitId":"-"},"content":" public EditPersonDescriptor build() {","lastModifiedDate":"2017-05-05"},{"lineNumber":105,"author":{"gitId":"-"},"content":" return descriptor;","lastModifiedDate":"2017-05-05"},{"lineNumber":106,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-05-05"},{"lineNumber":107,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-05-05"}],"authorContributionMap":{"-":87,"yeoshuheng":20}},{"path":"src/test/java/seedu/address/testutil/PersonBuilder.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.testutil;","lastModifiedDate":"2016-09-03"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import java.util.HashSet;","lastModifiedDate":"2017-12-20"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2017-04-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-05"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Address;","lastModifiedDate":"2024-02-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Email;","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.model.person.FundingStage;","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"yeoshuheng"},"content":"import seedu.address.model.person.Industry;","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Name;","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Phone;","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2017-04-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.model.util.SampleDataUtil;","lastModifiedDate":"2017-04-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":16,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-09-03"},{"lineNumber":17,"author":{"gitId":"-"},"content":" * A utility class to help with building Person objects.","lastModifiedDate":"2017-04-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-09-03"},{"lineNumber":19,"author":{"gitId":"-"},"content":"public class PersonBuilder {","lastModifiedDate":"2016-09-03"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":21,"author":{"gitId":"-"},"content":" public static final String DEFAULT_NAME \u003d \"Amy Bee\";","lastModifiedDate":"2020-12-18"},{"lineNumber":22,"author":{"gitId":"-"},"content":" public static final String DEFAULT_PHONE \u003d \"85355255\";","lastModifiedDate":"2017-04-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":" public static final String DEFAULT_EMAIL \u003d \"amy@gmail.com\";","lastModifiedDate":"2020-12-18"},{"lineNumber":24,"author":{"gitId":"-"},"content":" public static final String DEFAULT_ADDRESS \u003d \"123, Jurong West Ave 6, #08-111\";","lastModifiedDate":"2017-04-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-05"},{"lineNumber":26,"author":{"gitId":"yeoshuheng"},"content":" public static final String DEFAULT_INDUSTRY \u003d \"finance\";","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"yeoshuheng"},"content":" public static final String DEFAULT_FUNDING \u003d \"A\";","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" private Name name;","lastModifiedDate":"2017-12-20"},{"lineNumber":31,"author":{"gitId":"-"},"content":" private Phone phone;","lastModifiedDate":"2017-12-20"},{"lineNumber":32,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"yeoshuheng"},"content":" private Industry industry;","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":35,"author":{"gitId":"yeoshuheng"},"content":" private FundingStage fundingStage;","lastModifiedDate":"2024-02-25"},{"lineNumber":36,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" private Email email;","lastModifiedDate":"2017-12-20"},{"lineNumber":38,"author":{"gitId":"-"},"content":" private Address address;","lastModifiedDate":"2017-12-20"},{"lineNumber":39,"author":{"gitId":"-"},"content":" private Set\u003cTag\u003e tags;","lastModifiedDate":"2017-12-20"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":41,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2020-05-27"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * Creates a {@code PersonBuilder} with the default details.","lastModifiedDate":"2020-05-27"},{"lineNumber":43,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2020-05-27"},{"lineNumber":44,"author":{"gitId":"-"},"content":" public PersonBuilder() {","lastModifiedDate":"2017-08-15"},{"lineNumber":45,"author":{"gitId":"-"},"content":" name \u003d new Name(DEFAULT_NAME);","lastModifiedDate":"2017-12-20"},{"lineNumber":46,"author":{"gitId":"yeoshuheng"},"content":" industry \u003d new Industry(DEFAULT_INDUSTRY);","lastModifiedDate":"2024-02-25"},{"lineNumber":47,"author":{"gitId":"yeoshuheng"},"content":" fundingStage \u003d new FundingStage(DEFAULT_FUNDING);","lastModifiedDate":"2024-02-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" phone \u003d new Phone(DEFAULT_PHONE);","lastModifiedDate":"2017-12-20"},{"lineNumber":49,"author":{"gitId":"-"},"content":" email \u003d new Email(DEFAULT_EMAIL);","lastModifiedDate":"2017-12-20"},{"lineNumber":50,"author":{"gitId":"-"},"content":" address \u003d new Address(DEFAULT_ADDRESS);","lastModifiedDate":"2017-12-20"},{"lineNumber":51,"author":{"gitId":"-"},"content":" tags \u003d new HashSet\u003c\u003e();","lastModifiedDate":"2018-03-26"},{"lineNumber":52,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":54,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2016-12-11"},{"lineNumber":55,"author":{"gitId":"-"},"content":" * Initializes the PersonBuilder with the data of {@code personToCopy}.","lastModifiedDate":"2016-12-11"},{"lineNumber":56,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-12-11"},{"lineNumber":57,"author":{"gitId":"-"},"content":" public PersonBuilder(Person personToCopy) {","lastModifiedDate":"2018-01-10"},{"lineNumber":58,"author":{"gitId":"-"},"content":" name \u003d personToCopy.getName();","lastModifiedDate":"2017-12-20"},{"lineNumber":59,"author":{"gitId":"yeoshuheng"},"content":" industry \u003d personToCopy.getIndustry();","lastModifiedDate":"2024-02-25"},{"lineNumber":60,"author":{"gitId":"yeoshuheng"},"content":" fundingStage \u003d personToCopy.getFundingStage();","lastModifiedDate":"2024-02-25"},{"lineNumber":61,"author":{"gitId":"-"},"content":" phone \u003d personToCopy.getPhone();","lastModifiedDate":"2017-12-20"},{"lineNumber":62,"author":{"gitId":"-"},"content":" email \u003d personToCopy.getEmail();","lastModifiedDate":"2017-12-20"},{"lineNumber":63,"author":{"gitId":"-"},"content":" address \u003d personToCopy.getAddress();","lastModifiedDate":"2017-12-20"},{"lineNumber":64,"author":{"gitId":"-"},"content":" tags \u003d new HashSet\u003c\u003e(personToCopy.getTags());","lastModifiedDate":"2017-12-20"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-12-11"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-12-11"},{"lineNumber":67,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":68,"author":{"gitId":"-"},"content":" * Sets the {@code Name} of the {@code Person} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":69,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":70,"author":{"gitId":"-"},"content":" public PersonBuilder withName(String name) {","lastModifiedDate":"2017-08-15"},{"lineNumber":71,"author":{"gitId":"-"},"content":" this.name \u003d new Name(name);","lastModifiedDate":"2017-12-20"},{"lineNumber":72,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2016-09-03"},{"lineNumber":73,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":75,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":76,"author":{"gitId":"-"},"content":" * Parses the {@code tags} into a {@code Set\u003cTag\u003e} and set it to the {@code Person} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":77,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":78,"author":{"gitId":"-"},"content":" public PersonBuilder withTags(String ... tags) {","lastModifiedDate":"2017-08-15"},{"lineNumber":79,"author":{"gitId":"-"},"content":" this.tags \u003d SampleDataUtil.getTagSet(tags);","lastModifiedDate":"2017-12-20"},{"lineNumber":80,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2016-09-03"},{"lineNumber":81,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":82,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":83,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":84,"author":{"gitId":"-"},"content":" * Sets the {@code Address} of the {@code Person} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":85,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":86,"author":{"gitId":"-"},"content":" public PersonBuilder withAddress(String address) {","lastModifiedDate":"2017-08-15"},{"lineNumber":87,"author":{"gitId":"-"},"content":" this.address \u003d new Address(address);","lastModifiedDate":"2017-12-20"},{"lineNumber":88,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2016-09-03"},{"lineNumber":89,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":91,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":92,"author":{"gitId":"-"},"content":" * Sets the {@code Phone} of the {@code Person} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":93,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":94,"author":{"gitId":"-"},"content":" public PersonBuilder withPhone(String phone) {","lastModifiedDate":"2017-08-15"},{"lineNumber":95,"author":{"gitId":"-"},"content":" this.phone \u003d new Phone(phone);","lastModifiedDate":"2017-12-20"},{"lineNumber":96,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2016-09-03"},{"lineNumber":97,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":98,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":99,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":100,"author":{"gitId":"-"},"content":" * Sets the {@code Email} of the {@code Person} that we are building.","lastModifiedDate":"2017-07-26"},{"lineNumber":101,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":102,"author":{"gitId":"-"},"content":" public PersonBuilder withEmail(String email) {","lastModifiedDate":"2017-08-15"},{"lineNumber":103,"author":{"gitId":"-"},"content":" this.email \u003d new Email(email);","lastModifiedDate":"2017-12-20"},{"lineNumber":104,"author":{"gitId":"-"},"content":" return this;","lastModifiedDate":"2016-09-03"},{"lineNumber":105,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":106,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":107,"author":{"gitId":"yeoshuheng"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":108,"author":{"gitId":"yeoshuheng"},"content":" * Sets the {@code fundingStage} of the {@code Person} that we are building.","lastModifiedDate":"2024-02-25"},{"lineNumber":109,"author":{"gitId":"yeoshuheng"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":110,"author":{"gitId":"yeoshuheng"},"content":" public PersonBuilder withFundingStage(String fundingLevel) {","lastModifiedDate":"2024-02-25"},{"lineNumber":111,"author":{"gitId":"yeoshuheng"},"content":" this.fundingStage \u003d new FundingStage(fundingLevel);","lastModifiedDate":"2024-02-25"},{"lineNumber":112,"author":{"gitId":"yeoshuheng"},"content":" return this;","lastModifiedDate":"2024-02-25"},{"lineNumber":113,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":114,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":115,"author":{"gitId":"yeoshuheng"},"content":" /**","lastModifiedDate":"2024-02-25"},{"lineNumber":116,"author":{"gitId":"yeoshuheng"},"content":" * Sets the {@code industry} of the {@code Person} that we are building.","lastModifiedDate":"2024-02-25"},{"lineNumber":117,"author":{"gitId":"yeoshuheng"},"content":" */","lastModifiedDate":"2024-02-25"},{"lineNumber":118,"author":{"gitId":"yeoshuheng"},"content":" public PersonBuilder withIndustry(String industry) {","lastModifiedDate":"2024-02-25"},{"lineNumber":119,"author":{"gitId":"yeoshuheng"},"content":" this.industry \u003d new Industry(industry);","lastModifiedDate":"2024-02-25"},{"lineNumber":120,"author":{"gitId":"yeoshuheng"},"content":" return this;","lastModifiedDate":"2024-02-25"},{"lineNumber":121,"author":{"gitId":"yeoshuheng"},"content":" }","lastModifiedDate":"2024-02-25"},{"lineNumber":122,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":123,"author":{"gitId":"yeoshuheng"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":124,"author":{"gitId":"-"},"content":" public Person build() {","lastModifiedDate":"2017-04-05"},{"lineNumber":125,"author":{"gitId":"yeoshuheng"},"content":" return new Person(name, fundingStage, industry, phone, email, address, tags);","lastModifiedDate":"2024-02-25"},{"lineNumber":126,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-03"},{"lineNumber":127,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-03"},{"lineNumber":128,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-09-03"}],"authorContributionMap":{"-":95,"yeoshuheng":33}},{"path":"src/test/java/seedu/address/testutil/PersonUtil.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.testutil;","lastModifiedDate":"2017-04-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-05"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_ADDRESS;","lastModifiedDate":"2024-02-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_EMAIL;","lastModifiedDate":"2024-02-25"},{"lineNumber":5,"author":{"gitId":"yeoshuheng"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_FUNDING_STAGE;","lastModifiedDate":"2024-02-25"},{"lineNumber":6,"author":{"gitId":"yeoshuheng"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_INDUSTRY;","lastModifiedDate":"2024-02-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_NAME;","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_PHONE;","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.parser.CliSyntax.PREFIX_TAG;","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import java.util.Set;","lastModifiedDate":"2018-03-26"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-03-26"},{"lineNumber":13,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.AddCommand;","lastModifiedDate":"2017-03-29"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import seedu.address.logic.commands.EditCommand.EditPersonDescriptor;","lastModifiedDate":"2018-03-26"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-01-10"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import seedu.address.model.tag.Tag;","lastModifiedDate":"2018-03-26"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2017-04-05"},{"lineNumber":19,"author":{"gitId":"-"},"content":" * A utility class for Person.","lastModifiedDate":"2017-04-05"},{"lineNumber":20,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-04-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":"public class PersonUtil {","lastModifiedDate":"2017-04-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-04-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":" * Returns an add command string for adding the {@code person}.","lastModifiedDate":"2017-04-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-04-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":" public static String getAddCommand(Person person) {","lastModifiedDate":"2018-01-10"},{"lineNumber":27,"author":{"gitId":"-"},"content":" return AddCommand.COMMAND_WORD + \" \" + getPersonDetails(person);","lastModifiedDate":"2017-03-29"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-04-06"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-04-06"},{"lineNumber":30,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-04-06"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * Returns the part of command string for the given {@code person}\u0027s details.","lastModifiedDate":"2017-04-06"},{"lineNumber":32,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-04-06"},{"lineNumber":33,"author":{"gitId":"-"},"content":" public static String getPersonDetails(Person person) {","lastModifiedDate":"2018-01-10"},{"lineNumber":34,"author":{"gitId":"-"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2017-04-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":" sb.append(PREFIX_NAME + person.getName().fullName + \" \");","lastModifiedDate":"2017-06-06"},{"lineNumber":36,"author":{"gitId":"yeoshuheng"},"content":" sb.append(PREFIX_FUNDING_STAGE + person.getFundingStage().value + \" \");","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"yeoshuheng"},"content":" sb.append(PREFIX_INDUSTRY + person.getIndustry().value + \" \");","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":" sb.append(PREFIX_PHONE + person.getPhone().value + \" \");","lastModifiedDate":"2017-05-09"},{"lineNumber":39,"author":{"gitId":"-"},"content":" sb.append(PREFIX_EMAIL + person.getEmail().value + \" \");","lastModifiedDate":"2017-05-09"},{"lineNumber":40,"author":{"gitId":"-"},"content":" sb.append(PREFIX_ADDRESS + person.getAddress().value + \" \");","lastModifiedDate":"2017-05-09"},{"lineNumber":41,"author":{"gitId":"-"},"content":" person.getTags().stream().forEach(","lastModifiedDate":"2017-05-09"},{"lineNumber":42,"author":{"gitId":"-"},"content":" s -\u003e sb.append(PREFIX_TAG + s.tagName + \" \")","lastModifiedDate":"2017-05-09"},{"lineNumber":43,"author":{"gitId":"-"},"content":" );","lastModifiedDate":"2017-05-09"},{"lineNumber":44,"author":{"gitId":"-"},"content":" return sb.toString();","lastModifiedDate":"2017-04-05"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-04-05"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2018-03-26"},{"lineNumber":47,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2018-03-26"},{"lineNumber":48,"author":{"gitId":"-"},"content":" * Returns the part of command string for the given {@code EditPersonDescriptor}\u0027s details.","lastModifiedDate":"2018-03-26"},{"lineNumber":49,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2018-03-26"},{"lineNumber":50,"author":{"gitId":"-"},"content":" public static String getEditPersonDescriptorDetails(EditPersonDescriptor descriptor) {","lastModifiedDate":"2018-03-26"},{"lineNumber":51,"author":{"gitId":"-"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2018-03-26"},{"lineNumber":52,"author":{"gitId":"-"},"content":" descriptor.getName().ifPresent(name -\u003e sb.append(PREFIX_NAME).append(name.fullName).append(\" \"));","lastModifiedDate":"2018-03-26"},{"lineNumber":53,"author":{"gitId":"yeoshuheng"},"content":" descriptor.getIndustry().ifPresent(industry -\u003e sb.append(PREFIX_INDUSTRY).append(industry.value).append(\" \"));","lastModifiedDate":"2024-02-25"},{"lineNumber":54,"author":{"gitId":"yeoshuheng"},"content":" descriptor.getFundingStage().ifPresent(fundingStage -\u003e","lastModifiedDate":"2024-02-25"},{"lineNumber":55,"author":{"gitId":"yeoshuheng"},"content":" sb.append(PREFIX_FUNDING_STAGE).append(fundingStage.value).append(\" \"));","lastModifiedDate":"2024-02-25"},{"lineNumber":56,"author":{"gitId":"-"},"content":" descriptor.getPhone().ifPresent(phone -\u003e sb.append(PREFIX_PHONE).append(phone.value).append(\" \"));","lastModifiedDate":"2018-03-26"},{"lineNumber":57,"author":{"gitId":"-"},"content":" descriptor.getEmail().ifPresent(email -\u003e sb.append(PREFIX_EMAIL).append(email.value).append(\" \"));","lastModifiedDate":"2018-03-26"},{"lineNumber":58,"author":{"gitId":"-"},"content":" descriptor.getAddress().ifPresent(address -\u003e sb.append(PREFIX_ADDRESS).append(address.value).append(\" \"));","lastModifiedDate":"2018-03-26"},{"lineNumber":59,"author":{"gitId":"-"},"content":" if (descriptor.getTags().isPresent()) {","lastModifiedDate":"2018-03-26"},{"lineNumber":60,"author":{"gitId":"-"},"content":" Set\u003cTag\u003e tags \u003d descriptor.getTags().get();","lastModifiedDate":"2018-03-26"},{"lineNumber":61,"author":{"gitId":"-"},"content":" if (tags.isEmpty()) {","lastModifiedDate":"2018-03-26"},{"lineNumber":62,"author":{"gitId":"-"},"content":" sb.append(PREFIX_TAG);","lastModifiedDate":"2018-03-26"},{"lineNumber":63,"author":{"gitId":"-"},"content":" } else {","lastModifiedDate":"2018-03-26"},{"lineNumber":64,"author":{"gitId":"-"},"content":" tags.forEach(s -\u003e sb.append(PREFIX_TAG).append(s.tagName).append(\" \"));","lastModifiedDate":"2018-03-26"},{"lineNumber":65,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-03-26"},{"lineNumber":66,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-03-26"},{"lineNumber":67,"author":{"gitId":"-"},"content":" return sb.toString();","lastModifiedDate":"2018-03-26"},{"lineNumber":68,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2018-03-26"},{"lineNumber":69,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2017-04-05"}],"authorContributionMap":{"-":62,"yeoshuheng":7}},{"path":"src/test/java/seedu/address/testutil/TypicalPersons.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.address.testutil;","lastModifiedDate":"2016-09-13"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-13"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_AMY;","lastModifiedDate":"2017-08-22"},{"lineNumber":4,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_ADDRESS_BOB;","lastModifiedDate":"2017-08-22"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_AMY;","lastModifiedDate":"2017-08-22"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_EMAIL_BOB;","lastModifiedDate":"2017-08-22"},{"lineNumber":7,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_AMY;","lastModifiedDate":"2017-08-22"},{"lineNumber":8,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_NAME_BOB;","lastModifiedDate":"2017-08-22"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_AMY;","lastModifiedDate":"2017-08-22"},{"lineNumber":10,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_PHONE_BOB;","lastModifiedDate":"2017-08-22"},{"lineNumber":11,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_FRIEND;","lastModifiedDate":"2017-08-22"},{"lineNumber":12,"author":{"gitId":"-"},"content":"import static seedu.address.logic.commands.CommandTestUtil.VALID_TAG_HUSBAND;","lastModifiedDate":"2017-08-22"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-08-22"},{"lineNumber":14,"author":{"gitId":"-"},"content":"import java.util.ArrayList;","lastModifiedDate":"2017-08-07"},{"lineNumber":15,"author":{"gitId":"-"},"content":"import java.util.Arrays;","lastModifiedDate":"2017-08-07"},{"lineNumber":16,"author":{"gitId":"-"},"content":"import java.util.List;","lastModifiedDate":"2017-08-07"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-08-07"},{"lineNumber":18,"author":{"gitId":"-"},"content":"import seedu.address.model.AddressBook;","lastModifiedDate":"2016-09-21"},{"lineNumber":19,"author":{"gitId":"-"},"content":"import seedu.address.model.person.Person;","lastModifiedDate":"2018-01-10"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-13"},{"lineNumber":21,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2016-09-13"},{"lineNumber":22,"author":{"gitId":"-"},"content":" * A utility class containing a list of {@code Person} objects to be used in tests.","lastModifiedDate":"2017-08-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2016-09-13"},{"lineNumber":24,"author":{"gitId":"-"},"content":"public class TypicalPersons {","lastModifiedDate":"2017-04-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-13"},{"lineNumber":26,"author":{"gitId":"-"},"content":" public static final Person ALICE \u003d new PersonBuilder().withName(\"Alice Pauline\")","lastModifiedDate":"2018-01-10"},{"lineNumber":27,"author":{"gitId":"-"},"content":" .withAddress(\"123, Jurong West Ave 6, #08-111\").withEmail(\"alice@example.com\")","lastModifiedDate":"2017-04-05"},{"lineNumber":28,"author":{"gitId":"yeoshuheng"},"content":" .withPhone(\"94351253\").withIndustry(\"finance\").withFundingStage(\"A\")","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" .withTags(\"friends\").build();","lastModifiedDate":"2016-09-13"},{"lineNumber":30,"author":{"gitId":"-"},"content":" public static final Person BENSON \u003d new PersonBuilder().withName(\"Benson Meier\")","lastModifiedDate":"2018-01-10"},{"lineNumber":31,"author":{"gitId":"yeoshuheng"},"content":" .withAddress(\"311, Clementi Ave 2, #02-25\").withIndustry(\"finance\").withFundingStage(\"A\")","lastModifiedDate":"2024-02-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" .withEmail(\"johnd@example.com\").withPhone(\"98765432\")","lastModifiedDate":"2017-04-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":" .withTags(\"owesMoney\", \"friends\").build();","lastModifiedDate":"2016-09-13"},{"lineNumber":34,"author":{"gitId":"-"},"content":" public static final Person CARL \u003d new PersonBuilder().withName(\"Carl Kurz\").withPhone(\"95352563\")","lastModifiedDate":"2018-01-10"},{"lineNumber":35,"author":{"gitId":"yeoshuheng"},"content":" .withEmail(\"heinz@example.com\").withIndustry(\"finance\").withFundingStage(\"A\")","lastModifiedDate":"2024-02-25"},{"lineNumber":36,"author":{"gitId":"yeoshuheng"},"content":" .withAddress(\"wall street\").build();","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":" public static final Person DANIEL \u003d new PersonBuilder().withName(\"Daniel Meier\").withPhone(\"87652533\")","lastModifiedDate":"2018-01-10"},{"lineNumber":38,"author":{"gitId":"yeoshuheng"},"content":" .withEmail(\"cornelia@example.com\").withIndustry(\"finance\").withFundingStage(\"A\")","lastModifiedDate":"2024-02-25"},{"lineNumber":39,"author":{"gitId":"yeoshuheng"},"content":" .withAddress(\"10th street\").withTags(\"friends\").build();","lastModifiedDate":"2024-02-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":" public static final Person ELLE \u003d new PersonBuilder().withName(\"Elle Meyer\").withPhone(\"9482224\")","lastModifiedDate":"2018-01-10"},{"lineNumber":41,"author":{"gitId":"yeoshuheng"},"content":" .withEmail(\"werner@example.com\").withIndustry(\"finance\").withFundingStage(\"A\")","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"yeoshuheng"},"content":" .withAddress(\"michegan ave\").build();","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":" public static final Person FIONA \u003d new PersonBuilder().withName(\"Fiona Kunz\").withPhone(\"9482427\")","lastModifiedDate":"2018-01-10"},{"lineNumber":44,"author":{"gitId":"yeoshuheng"},"content":" .withEmail(\"lydia@example.com\").withIndustry(\"finance\").withFundingStage(\"A\")","lastModifiedDate":"2024-02-25"},{"lineNumber":45,"author":{"gitId":"yeoshuheng"},"content":" .withAddress(\"little tokyo\").build();","lastModifiedDate":"2024-02-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":" public static final Person GEORGE \u003d new PersonBuilder().withName(\"George Best\").withPhone(\"9482442\")","lastModifiedDate":"2018-01-10"},{"lineNumber":47,"author":{"gitId":"yeoshuheng"},"content":" .withEmail(\"anna@example.com\").withIndustry(\"finance\").withFundingStage(\"A\")","lastModifiedDate":"2024-02-25"},{"lineNumber":48,"author":{"gitId":"yeoshuheng"},"content":" .withAddress(\"4th street\").build();","lastModifiedDate":"2024-02-25"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-13"},{"lineNumber":50,"author":{"gitId":"-"},"content":" // Manually added","lastModifiedDate":"2016-09-13"},{"lineNumber":51,"author":{"gitId":"-"},"content":" public static final Person HOON \u003d new PersonBuilder().withName(\"Hoon Meier\").withPhone(\"8482424\")","lastModifiedDate":"2018-01-10"},{"lineNumber":52,"author":{"gitId":"yeoshuheng"},"content":" .withEmail(\"stefan@example.com\").withIndustry(\"finance\").withFundingStage(\"A\")","lastModifiedDate":"2024-02-25"},{"lineNumber":53,"author":{"gitId":"yeoshuheng"},"content":" .withAddress(\"little india\").build();","lastModifiedDate":"2024-02-25"},{"lineNumber":54,"author":{"gitId":"-"},"content":" public static final Person IDA \u003d new PersonBuilder().withName(\"Ida Mueller\").withPhone(\"8482131\")","lastModifiedDate":"2018-01-10"},{"lineNumber":55,"author":{"gitId":"yeoshuheng"},"content":" .withEmail(\"hans@example.com\").withIndustry(\"finance\").withFundingStage(\"A\")","lastModifiedDate":"2024-02-25"},{"lineNumber":56,"author":{"gitId":"yeoshuheng"},"content":" .withAddress(\"chicago ave\").build();","lastModifiedDate":"2024-02-25"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-08-22"},{"lineNumber":58,"author":{"gitId":"-"},"content":" // Manually added - Person\u0027s details found in {@code CommandTestUtil}","lastModifiedDate":"2017-08-22"},{"lineNumber":59,"author":{"gitId":"-"},"content":" public static final Person AMY \u003d new PersonBuilder().withName(VALID_NAME_AMY).withPhone(VALID_PHONE_AMY)","lastModifiedDate":"2018-01-10"},{"lineNumber":60,"author":{"gitId":"-"},"content":" .withEmail(VALID_EMAIL_AMY).withAddress(VALID_ADDRESS_AMY).withTags(VALID_TAG_FRIEND).build();","lastModifiedDate":"2017-09-21"},{"lineNumber":61,"author":{"gitId":"-"},"content":" public static final Person BOB \u003d new PersonBuilder().withName(VALID_NAME_BOB).withPhone(VALID_PHONE_BOB)","lastModifiedDate":"2018-01-10"},{"lineNumber":62,"author":{"gitId":"-"},"content":" .withEmail(VALID_EMAIL_BOB).withAddress(VALID_ADDRESS_BOB).withTags(VALID_TAG_HUSBAND, VALID_TAG_FRIEND)","lastModifiedDate":"2017-09-21"},{"lineNumber":63,"author":{"gitId":"-"},"content":" .build();","lastModifiedDate":"2017-09-21"},{"lineNumber":64,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-09-21"},{"lineNumber":65,"author":{"gitId":"-"},"content":" public static final String KEYWORD_MATCHING_MEIER \u003d \"Meier\"; // A keyword that matches MEIER","lastModifiedDate":"2017-09-21"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2016-09-13"},{"lineNumber":67,"author":{"gitId":"-"},"content":" private TypicalPersons() {} // prevents instantiation","lastModifiedDate":"2017-07-20"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-07-20"},{"lineNumber":69,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2017-07-26"},{"lineNumber":70,"author":{"gitId":"-"},"content":" * Returns an {@code AddressBook} with all the typical persons.","lastModifiedDate":"2017-08-05"},{"lineNumber":71,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2017-07-26"},{"lineNumber":72,"author":{"gitId":"-"},"content":" public static AddressBook getTypicalAddressBook() {","lastModifiedDate":"2017-08-05"},{"lineNumber":73,"author":{"gitId":"-"},"content":" AddressBook ab \u003d new AddressBook();","lastModifiedDate":"2017-08-05"},{"lineNumber":74,"author":{"gitId":"-"},"content":" for (Person person : getTypicalPersons()) {","lastModifiedDate":"2018-01-10"},{"lineNumber":75,"author":{"gitId":"-"},"content":" ab.addPerson(person);","lastModifiedDate":"2017-08-05"},{"lineNumber":76,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-13"},{"lineNumber":77,"author":{"gitId":"-"},"content":" return ab;","lastModifiedDate":"2016-09-24"},{"lineNumber":78,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2016-09-24"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2017-08-04"},{"lineNumber":80,"author":{"gitId":"-"},"content":" public static List\u003cPerson\u003e getTypicalPersons() {","lastModifiedDate":"2018-01-10"},{"lineNumber":81,"author":{"gitId":"-"},"content":" return new ArrayList\u003c\u003e(Arrays.asList(ALICE, BENSON, CARL, DANIEL, ELLE, FIONA, GEORGE));","lastModifiedDate":"2017-08-07"},{"lineNumber":82,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2017-08-04"},{"lineNumber":83,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2016-09-13"}],"authorContributionMap":{"-":67,"yeoshuheng":16}}] diff --git a/AY2324S2-CS2103T-W09-2_tp_master/commits.json b/AY2324S2-CS2103T-W09-2_tp_master/commits.json index 40d8d9ef..c2eeede7 100644 --- a/AY2324S2-CS2103T-W09-2_tp_master/commits.json +++ b/AY2324S2-CS2103T-W09-2_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"dwangwk":[{"date":"2024-03-07","commitResults":[{"hash":"1499dc1041a33dd81b79a49768feaa09e6621c28","isMergeCommit":false,"messageTitle":"Docs: Update Profile","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":48,"deletions":6}}},{"hash":"6f6620f8977c5667616382a2af02c2584d143ef0","isMergeCommit":false,"messageTitle":"Docs: Updated Readme, DeveloperGuide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":230,"deletions":39}}},{"hash":"56d9b344a27da1a1ec908a06899ced743f39dea4","isMergeCommit":false,"messageTitle":"Docs: About Us Sifan Image","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"b76da9e9d536129352e67dec71a3206d94080289","isMergeCommit":true,"messageTitle":"Merge pull request #17 from dwangwk/master","messageBody":"Update AboutUs, Readme, DeveloperGuide","fileTypesAndContributionMap":{}}]}],"menatahari":[{"date":"2024-03-07","commitResults":[{"hash":"a8eb93c0cd4a775db4eede5a6f03de2aed2148ad","isMergeCommit":false,"messageTitle":"Update readme and uploaded photo","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":19,"deletions":11}}},{"hash":"2ab29ded407cf63b39c4cfea3ca859652647986d","isMergeCommit":true,"messageTitle":"Merge pull request #15 from menatahari/master","messageBody":"Update README.md","fileTypesAndContributionMap":{}}]}],"yespiggy":[{"date":"2024-03-07","commitResults":[{"hash":"84063188a916022bf2f1b80803f0b8d8b3b2dafc","isMergeCommit":false,"messageTitle":"docs: Update DG User stories","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":20,"deletions":13}}},{"hash":"fa249d62a450e496f8bf4fa2a07b6ef4cd6ffadd","isMergeCommit":true,"messageTitle":"Merge branch update DG user stories","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"676d51e0b69796e8a04234d2c15b914329cd0c96","isMergeCommit":true,"messageTitle":"Merge pull request #14 from yespiggy/master","messageBody":"Update user stories in DG","fileTypesAndContributionMap":{}}]}],"yeoshuheng":[{"date":"2024-02-25","commitResults":[{"hash":"842594880efd9ef12b06dd5f5716ce9d1c46de79","isMergeCommit":false,"messageTitle":"docs: Update profile","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":13,"deletions":15}}},{"hash":"c0b6212b3fdc7805ddddcc7a791160c2730d1219","isMergeCommit":false,"messageTitle":"feat: Add Industry and FundingStage options","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":108,"deletions":5}}},{"hash":"9d4aa185e921f647f7079e1ec5eca32e36a298fa","isMergeCommit":false,"messageTitle":"feat: Add logic for industry, funding","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":43,"deletions":17}}},{"hash":"ccc8a41ac1e34edbcc7189e0198a3ba61210178e","isMergeCommit":false,"messageTitle":"feat: Add sample for person with industry, funding","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":35,"deletions":13}}},{"hash":"078b9e51de07a37bc01af8b33991d63b78c98578","isMergeCommit":false,"messageTitle":"feat: Update storage for industry, funding","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":29,"deletions":7}}},{"hash":"9ded1fc99b36c25649aa251c7c64d68005bc3d5a","isMergeCommit":false,"messageTitle":"test: Fix test for industry, funding","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":81,"deletions":26}}},{"hash":"38212e7a41db0be57ac52c5dc78795a5ffb6a434","isMergeCommit":false,"messageTitle":"feat: Add funding, industry for edit command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":36,"deletions":12}}},{"hash":"eb7c924496e743e877b752b944d33651d1978638","isMergeCommit":false,"messageTitle":"style: Fix checkstyle for test","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":23,"deletions":5}}},{"hash":"1ede8657f049bee88e8b82f71417b1a8c8c2b6e4","isMergeCommit":false,"messageTitle":"style: Fix checkstyle for main","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":73,"deletions":15}}},{"hash":"d178843dbf22a382046ba7a4beb1cb3437ae9814","isMergeCommit":false,"messageTitle":"test: Update test for funding, industry","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":176,"deletions":113}}},{"hash":"b2b9eb02bac1c24cc39fb2b8efc575a549532253","isMergeCommit":false,"messageTitle":"style: Fix checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":29,"deletions":17}}}]},{"date":"2024-03-05","commitResults":[{"hash":"fb1bdef18772248a883d4eb0421a4c45a370c70a","isMergeCommit":false,"messageTitle":"fix: Add duplicate prefix checks","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1},"test-code":{"insertions":120,"deletions":0}}},{"hash":"aec40a6d3b801a6ddd30ac670bf513461480bd2e","isMergeCommit":false,"messageTitle":"test: Add test for funding stage \u0026 industry","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":205,"deletions":131}}},{"hash":"b773e6b431bdc5d09ffce4a4356131af78ddb243","isMergeCommit":true,"messageTitle":"Merge pull request #1 from yeoshuheng/branch-AddStartup","messageBody":"Branch add startup","fileTypesAndContributionMap":{}}]},{"date":"2024-03-06","commitResults":[{"hash":"728b2c0b2837cc516dc425fbc49fee8fd092bcc8","isMergeCommit":true,"messageTitle":"Merge pull request #9 from yeoshuheng/master","messageBody":"v1.1: Add startup \u0026 Assign Funding Stage","fileTypesAndContributionMap":{}}]},{"date":"2024-03-07","commitResults":[{"hash":"3d2e99f939f367257f2c910af59461e14544db3b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"dwangwk":{"docs":263,"functional-code":0,"test-code":0},"menatahari":{"docs":19,"functional-code":0,"test-code":0},"yespiggy":{"docs":15,"functional-code":0,"test-code":0},"yeoshuheng":{"docs":9,"functional-code":300,"test-code":519}},"authorContributionVariance":{"dwangwk":7005.7393,"menatahari":59.69388,"yespiggy":72.22959,"yeoshuheng":62455.977},"authorDisplayNameMap":{"dwangwk":"CS2103T-W09-2 WANG..NIEL","menatahari":"CS2103T-W09-2 NATA..HARI","yespiggy":"CS2103T-W09-2 YE S..IFAN","yeoshuheng":"CS2103T-W09-2 YEO ..HENG"}} +{"authorDailyContributionsMap":{"dwangwk":[{"date":"2024-03-07","commitResults":[{"hash":"1499dc1041a33dd81b79a49768feaa09e6621c28","isMergeCommit":false,"messageTitle":"Docs: Update Profile","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":48,"deletions":6}}},{"hash":"6f6620f8977c5667616382a2af02c2584d143ef0","isMergeCommit":false,"messageTitle":"Docs: Updated Readme, DeveloperGuide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":230,"deletions":39}}},{"hash":"56d9b344a27da1a1ec908a06899ced743f39dea4","isMergeCommit":false,"messageTitle":"Docs: About Us Sifan Image","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"b76da9e9d536129352e67dec71a3206d94080289","isMergeCommit":true,"messageTitle":"Merge pull request #17 from dwangwk/master","messageBody":"Update AboutUs, Readme, DeveloperGuide","fileTypesAndContributionMap":{}},{"hash":"0844d885ce4b55a007c5404578cab6ca1434f513","isMergeCommit":false,"messageTitle":"Docs: Updated Photo Name","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}}]}],"menatahari":[{"date":"2024-03-07","commitResults":[{"hash":"a8eb93c0cd4a775db4eede5a6f03de2aed2148ad","isMergeCommit":false,"messageTitle":"Update readme and uploaded photo","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":19,"deletions":11}}},{"hash":"2ab29ded407cf63b39c4cfea3ca859652647986d","isMergeCommit":true,"messageTitle":"Merge pull request #15 from menatahari/master","messageBody":"Update README.md","fileTypesAndContributionMap":{}}]}],"yespiggy":[{"date":"2024-03-07","commitResults":[{"hash":"84063188a916022bf2f1b80803f0b8d8b3b2dafc","isMergeCommit":false,"messageTitle":"docs: Update DG User stories","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":20,"deletions":13}}},{"hash":"fa249d62a450e496f8bf4fa2a07b6ef4cd6ffadd","isMergeCommit":true,"messageTitle":"Merge branch update DG user stories","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"676d51e0b69796e8a04234d2c15b914329cd0c96","isMergeCommit":true,"messageTitle":"Merge pull request #14 from yespiggy/master","messageBody":"Update user stories in DG","fileTypesAndContributionMap":{}}]}],"yeoshuheng":[{"date":"2024-02-25","commitResults":[{"hash":"842594880efd9ef12b06dd5f5716ce9d1c46de79","isMergeCommit":false,"messageTitle":"docs: Update profile","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":13,"deletions":15}}},{"hash":"c0b6212b3fdc7805ddddcc7a791160c2730d1219","isMergeCommit":false,"messageTitle":"feat: Add Industry and FundingStage options","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":108,"deletions":5}}},{"hash":"9d4aa185e921f647f7079e1ec5eca32e36a298fa","isMergeCommit":false,"messageTitle":"feat: Add logic for industry, funding","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":43,"deletions":17}}},{"hash":"ccc8a41ac1e34edbcc7189e0198a3ba61210178e","isMergeCommit":false,"messageTitle":"feat: Add sample for person with industry, funding","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":35,"deletions":13}}},{"hash":"078b9e51de07a37bc01af8b33991d63b78c98578","isMergeCommit":false,"messageTitle":"feat: Update storage for industry, funding","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":29,"deletions":7}}},{"hash":"9ded1fc99b36c25649aa251c7c64d68005bc3d5a","isMergeCommit":false,"messageTitle":"test: Fix test for industry, funding","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":81,"deletions":26}}},{"hash":"38212e7a41db0be57ac52c5dc78795a5ffb6a434","isMergeCommit":false,"messageTitle":"feat: Add funding, industry for edit command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":36,"deletions":12}}},{"hash":"eb7c924496e743e877b752b944d33651d1978638","isMergeCommit":false,"messageTitle":"style: Fix checkstyle for test","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":23,"deletions":5}}},{"hash":"1ede8657f049bee88e8b82f71417b1a8c8c2b6e4","isMergeCommit":false,"messageTitle":"style: Fix checkstyle for main","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":73,"deletions":15}}},{"hash":"d178843dbf22a382046ba7a4beb1cb3437ae9814","isMergeCommit":false,"messageTitle":"test: Update test for funding, industry","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":176,"deletions":113}}},{"hash":"b2b9eb02bac1c24cc39fb2b8efc575a549532253","isMergeCommit":false,"messageTitle":"style: Fix checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":29,"deletions":17}}}]},{"date":"2024-03-05","commitResults":[{"hash":"fb1bdef18772248a883d4eb0421a4c45a370c70a","isMergeCommit":false,"messageTitle":"fix: Add duplicate prefix checks","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1},"test-code":{"insertions":120,"deletions":0}}},{"hash":"aec40a6d3b801a6ddd30ac670bf513461480bd2e","isMergeCommit":false,"messageTitle":"test: Add test for funding stage \u0026 industry","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":205,"deletions":131}}},{"hash":"b773e6b431bdc5d09ffce4a4356131af78ddb243","isMergeCommit":true,"messageTitle":"Merge pull request #1 from yeoshuheng/branch-AddStartup","messageBody":"Branch add startup","fileTypesAndContributionMap":{}}]},{"date":"2024-03-06","commitResults":[{"hash":"728b2c0b2837cc516dc425fbc49fee8fd092bcc8","isMergeCommit":true,"messageTitle":"Merge pull request #9 from yeoshuheng/master","messageBody":"v1.1: Add startup \u0026 Assign Funding Stage","fileTypesAndContributionMap":{}}]},{"date":"2024-03-07","commitResults":[{"hash":"3d2e99f939f367257f2c910af59461e14544db3b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2024-03-08","commitResults":[{"hash":"6109993c1f7e29ed64a217e769a86d5cd1f9fecd","isMergeCommit":true,"messageTitle":"Merge pull request #18 from dwangwk/master","messageBody":"Docs: Updated Photo Name","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"dwangwk":{"docs":264,"functional-code":0,"test-code":0},"menatahari":{"docs":19,"functional-code":0,"test-code":0},"yespiggy":{"docs":15,"functional-code":0,"test-code":0},"yeoshuheng":{"docs":9,"functional-code":300,"test-code":519}},"authorContributionVariance":{"dwangwk":6817.128,"menatahari":56.0,"yespiggy":67.759995,"yeoshuheng":58870.8},"authorDisplayNameMap":{"dwangwk":"CS2103T-W09-2 WANG..NIEL","menatahari":"CS2103T-W09-2 NATA..HARI","yespiggy":"CS2103T-W09-2 YE S..IFAN","yeoshuheng":"CS2103T-W09-2 YEO ..HENG"}} diff --git a/archive.zip b/archive.zip index 0f876062b4b3b7cbfb324b67b742b3999aa5c423..142faf16dc8d59163be689a83ab9dd664682d4fe 100644 GIT binary patch delta 327347 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

5I818v;|8`l-JZ^0aDVGNynlxDVW9= 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

LQh>8uc-? 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�(VIorK4PB9=#oY4Gg-a` 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

2eJ{;u(PI&Kk}rv3&- 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 H^G1`uErz@`|Fd7F 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

YMfRKSw zZtdo-OXyFF?YmFyY3VD$83|0A-OGoEGmygg2*U+_I0&yBRx{gyR+vj&Nx8mlT;@&~(B3mjEXa%ya6tMFLueO5_2*f_`Cjhk zMC8MrmacA1nT?)sn|FGAy^_xriaZetKGD+pq&%63+$Ip|g#yxS( z^;|~lLCO#|MZm072>tJdGMUyLK=JG*1{F`n;=a*JJ>Gav@11HOJEQVZ1`|nxeqlzL z*V*B@<@0flZi#EgfByJAqMnvJ`QWwoEk)FChdL=aH_+pHxZ~%uyL>c9;{c_PF-eT?}0g1gYAV}KN-}}w` zvH2iy1d%wI_^Rs&gy%#i(KfmgFoB)NM{K|Z3142_ub;>B!rQ0Z=F47gFXmbX@rLpMxD#P^{njDGe2rxHh;^#IG|_6#H4 z#>Zw7As$t|G4_MUh{o(D%=3=vE&o9)Lz_5mw$^JezPN);@TgHD4ugfnU~VLXUuS6{ zH`?BvF5(~GPHB5c;fx>Kaj~(fhQbvdSGR@)EcSyIbgV6)&Dxse-1x@u#5Gb9;WsrB zN?okKr|@m6YzM|b@0oVPgE5=WbS6{dYEL7pby(*fP5L%DH%wHi&WEOg=|vg!Rl1gQ z9WJ#fYzGI%kA0+XU+(7*I=GMONhDOvT;Ybl1?FshIdA#MZ0Wb2w9k&>je`8T^0x;U zSK*P;3#DO)+49}r=wY+PLRj9^HM+ADJx8DL+i_YVbL)F6Pz%`fhuI3^$JBG*{*pcS za4MXa3(NavQ#G(;I_qjaxfL{?GL{ZI?EQn)EmAIh6ZUt>h6&XX+RY*Eg~Yo`MWz5< zKV)K-D;$lfGQ__$dzyFJYg|0Votui^)PMx#AJG;mmVZbq8-$oclrb0yfwa#Y?I|BX zjXqkw?e=s#AjdO#u4gGvBt^v|_aaa{cRp8WNBqo2+H+ES)w{De-{ue_Qu#`eyr`!>n) z$7o-c-(r2Yge`hz9C=ZK_iiVNGKy7+gx15lt}TfZzyq@l;mpC+UH~S8Q5bNEk>Xmk zF|5t61!>G5kouD}v=$-~IR7)x`EEzNQQ`6EfS=pcpQ#XCRsQKgRk`O#A1Oa;Ly0wu ze`c}g8oUi3XF~~{EBn&Dyg6f;8T3AsPm_7j`dFvW@ul~lkVK7qnwbvk<1!W*e z2$yUt*5KLSR5UkZS|fgSdElg*E^^6jc`AReoNUZ_Hp=qpg?d_ zFUt|_TZJB@A6<2?qN-rg+l@wDIk+`CMpwT*G%m{==%h^|OwPUzE+e;LOV9ul)23~1 z(VUQ_zMECwh>$`+i-E)1MxuK4YCkm*03;`*U1WAgW{iDdxo;#ljw23&kQ(BoGttKX zA%im!yiUi6$lhd*j#1D68-PI73-K?#fyNBTU`^@RSn z=I&QB+6aa8DRk|-aKnEFIEte< znzH{i~FdR-%Lq=8w6{O=*VM5n#`-rGNVeA#{it6G`_c4IL-Xmf#f6l`fCX=2bySy68S!~7ZXdL=pq(vj$iYZoCo2>=RK)8G&WCS0%) zTv8{*?pXr(t7HSbKP!H3Z%Xq~nTW{JS$8|DNvgzTv@iz(nC%%8lyFw~#&EO&6o*z2 znNJtUGpS};(xF6k#=r{EEd}k=>QE?hg*OzvG8RFCbg{e#AMx%Dk5p}r5m2J_r@|Hj zmp@4Hpb|kXp=w4Ci%f&{GcoPfK}UI$8x@|iESsH1>VX#Mil2iG&}T^>86h)iiUmVk z;li&a46v8fOBa8Dc4CzoI762)H!!xX4K|||*Xyvf8n0i&17(-8Q3}V%h?;u?rF*SkWC)iXBcj}^5BBIfjOi)% zUJw0;UkY3V4%py0L>Mx$H%0Y$UHIvdQX_7f_Z-;f9?+UF(%`H{@EBzi!00IQSk8I9 zPa??pfy}y&N)cwFDZ*_$YQ~<^5H1milzSkFPu0h^Vd46au{g|peMvz|n@xW_K-FRG0FqK*za zA}}17dWkB@R<_}(IX!yjbmsUZUtofBXHX~m1&7z4yJF0p*_Y>OG+ad#vKKN&JiFMHuG#4 z1xxOEBYNp(<96nNtom9^95oq_YE`WLE-9oo02ANpA)ljen8J{#_;kBVcnH>;`(DIa zuEm1_l0L6Yam$uK&OG&db8CqRMaGCg&J?9QR4;4F9)(Nhs!paohudH@JaNviANWsr zFuO(<`2ZgYpX#gn9(i1;oIK=Q_qi{pWr^bK?$iJiaTY0}YJyRuq=G68?iu*{wbDQW zz=}!RLio)VB~W0XjH~|ynKh9_;X76kDP#qq~FN<-B67uqSZ>;{w8Nnms<*!Qe3iN5sif9X3UU zaF{!5UpyKqP~tir60~>dsXu}G{&O7`AUrBgK_Z2GSbi+W6)prrJjbPZHd@FBq`DEuX1#$kjm4mImsIiBJKJx>YiN0snd zoLlRX;mfj9TJ$z6IMq?32!nV>Kg!lPu{*QzaVv+(SO20+k$n!bpjP<26NjL65Tbc+WyED0_u>t^p}Ll63dhqr`%SPFJNOXNa2tekYMC z8GiU~U(3ZAL*;*_@ulvwB4h^W15m#?E){#2`dRx1CA(suEld0lY`T-!;|d!wf!KH-a?`t~`O$Fs6_T~boa;>*rz^F`u2>LUp=3xcCBU(BOH?0|&_&e!9m z#ttge*5t>jB*KHfLEk}`OHI)Jf%^W-Bb(DSB+3u_5R7Z7J-#HTBbA&0J4-U9l^o6z zk$=AfF%JL5sUob|*jKz02$Pfq6Z=*&aeaxXR)t`mX>r;ldja%Ai;0!7fDKQ}cEzxF zfcUC!%kv4p?S1pW5%V*qC0XD`&et>|uksDZEvR{sFXP}pNdYrraSzN(GpuE%36`s;Df;Jw$Igt(pl947^N5wryozl^2gym6V#TQS3cq88m?UG!<85Q6r)wY>g6#uaq0pZ?EW*tzLdD3k zi{&ZWz;}*~7v0_251$5ekFSkV(1ZGLw1$L>dQE5Qe$+sueh2jvM)w^ zQ;ZK9C0B=~gq44xxXJWv3va}_#54v*{ftli=aJ$CVEFz065c{uw6Z2{{?6Fmfr0eY zf^ZnpY0Rj+xudsKk~2N60ctr;NiG2O(`&~BLIpaM#Md-c$ph; z#AsL}@UMtG6nwDUK{Q_DW*Im!^gvJH- zShw;HaQGfp_8^ASu*R=uvQ3DwO#Yw_kOVsU7Tpmb%OeVI?l@p?KIs27o=z$?5Cx{t zo9h2~8WQ8zSojw5YL=IDlLZ$ZMes(XDV?JLmBOdbS1&$+1jU_pwXa2E>cH5+vtw0+ z0S%4|wsSuHW7cpTIfd&WSIbuN4<319P$;^-C61=* zS589g^BH4)nf1nQ(_+7uqbK!%X$&=wj3ypFqG{-motb5t3}K5Q?{i(`3Wu`>jwO3H zkf7qKHlkZ96i>s3Lp3CKkO$V}S^)RXW%18xL}A9&{afw-US)n>Vq#0*hO*_yd!|C1 ziFl;Rg8AJYUVKf!hbIo!R`z9NmR5iAi`!mU)gn4&&`_HPi8iXsGaSX}!pLvecRZ$= zxjL5pIT2m}!?+?V`7vLLyRLGw{vCr)TpGDdXK}_w{qE)ZQZ;AnS9!BQY#rcctX}I? z_^iembNN-|fnLtY1BgVnP;a}O-5wK~UZfy4Rxi8+^W%S#)lLze(3MalG7lDrHRcCR zh*#boG<+>lwgO=;n3o3M>LDL$@i)(iSMDD1;|2{+GR^hn;BnYE8H}MG8`k(jcF}4ngd72BAR+Cj4p1^%s37PXF~H8`FORBn(ydEs`TO4LUGO3 zwfrd)vL5Z~ZZ6b!qHqU46ThWMx^y=+ICH3aH!8AQ^%!xWYl{@`=R?EfrUfw2K%*%znz>fbq9I71%Tz*(`?WPfZ>wK3G5A^>@#HmGeBiK3H< zxTa$55j53ki{*<*BL}GS_GZ%1X6v-e#5y3GiP&AXWg%UGu!yyreJzl&aCJoiGdDaf zbz9;2aoXVb?S+TGW^g~!E*tDCzuHl*T3M^x^J?3Pw z)ez7ZtU@YH!cJp)9soEfn31V)2Ssyn0<}FS_RPBJ=>Czd`u3W#dhd*4wzV--CBS^u zg>50%E_{WUaMwyvuV!ngh$E@p8rFMt6Y_tPU?R_hbb0g&-K!~|T29u%;@~$j8|b{; z)@-e!69(}`@X4%5T%5MseWa4R`nM*3|S{TnNTxWVr8rpVQF+0lB4|Q6LK)((C&+6 z5rzj@Jd-aD#cmzhaQ9#@w_>7uxft8)@=(w+fKq+x#(!9x)@2j4|Htv|Gt6dyw|8Km z2Pgk;Rr~BR7GQ3B#!N|nn&Zu^=NXw3Y6FcQ@eA>mU&HzBh!GRfNKUZ*>mPU73Oq*& zBl15SFa-Ly3APU)feH0kmv3Q$Tht86KkEh;aJ{-U;JisQ%S zn#YQI@no`@i^Xi9o9ybv6w5KBj`09tu_9P7u?8v~{P@Akxj>42x`qCbs!bDk3@6SJ z9<>x%oGJMJYbV}4>P;-ENjXP9X!7UJkmd6Db@Fyw34XHS3X6xDc|Xz~4-r3S&RE1| zoHG;-C%{@8Yk;pR2ymKscm=~($uuF?tGvdCofg_p%r`>ZI(>ot1tLM-B9 zRJPK4hcB6@BMMzQhNhlK)Lh+t!@5I+pR-@Ql5B@e|BtT@CR!j;?8nzn0a{r|s{>g8 z3dTj%?BZy8kNmkMTPci^r06A~TyMc*XcRQC#(qVGcII9Y5vFl4n0S(#oNoVRIAEr; zcZQ(v*^8W{+Gk^2F9GTtt7~b^_5(Ui7Zr77bX5Z};q$lYUz`gDf927>XPmag zv@!@#lBB@*BNGLst!e+X&2&Xz)CE-mn>)CpWZvr9@$D6tWqwVnxPlwf=J)t=!rf6v zB-}eM7mM5|)$rLwq0Pqo)sg6x=tpa6>m-d~2(L za<1LwOfQk1PC~7@snODT3gp5G4@?wfj^svEqE}>4ZRtB*&e%Wfh@d1UvpAdO9 z5Z!z=`iMY}tSp-nXut8%BDU(Z%=}C#lft%sG8HYI&4Os3m@q7>yvn-z(-Ab0n4zQ5 zik3BS?{!$|owx1N3FW4@CA7%?Rv8OD_(Uz7-X-gC6?GfF20C(gtti2E53X06d$n4k z#&4`b>mnV|Ri}?b)8TXU)t_}#B6cYa zs21db4?-bJb@DS2XbqvqDy@2(sf(6|y4zO(uf@^GU*jMbd7x$RO)V#%=q_o7%h+GT zEd$xcG_4e3J;te6jO5Ns1L)LqMx$Ve^MoGjXtn2OO2hM?Kg39tG6V=G564b>}6jCs1hF<_vn6M)0&^^1zzHWm4kNz=K=%5OYC2((oKr$kiQp%C+qMF1! z#xp2&drWrZVn|LKPM}oKlQewpA00VCD{;!{;%yzxz<5`H`rp!-SOkSC&l7Uon zS)!@w`|LrDtGV@PuWqM9f>zl-uW%G0Upn|##v#Q=WJz66sgs3#g*|MdMp}ci4B2zl zEf;1|Hswj&IsQP>$A#GQ9QAu5nH7F_FWGbRBqPkMEwF;|m56}?^~XLh7Ck1v*H*_w zGFKHssc+<{?8<{>W&b;BX7g1A4P?jFI7k? z&aazL8yfJ}(i$nLc|BuHq-wWDZr{Dj4Zo$H|5#9?vC<8%840*1*wXoQ`^%FDAnU$%m;!$p`j{_c4{_}|niR-*zzh+fNo`wqS z#^&lK%O{ZE`+f-GVXlHmnH6}3sQ%#P0P{$J^B|k+buTvH*OAzN<39c6E2uDsF?49oPDE=TtwptxK^m+9UiNt zFp9yDwo=gMKfk+)(f!WvtLW(iDH{)g65Fd{+X*LN13QnvOTMb6_nXs^*RBRu^#UiZ z(XM@Sulm2W`@tc|k66V>Yh8M;As*c&A_Eu|&3* zjdL4xQuMLUuRs8()tGJt ztOYxl)1F>cyP8s}7WA0Sb#!=KbEdWC7S1rQ*z4ErAyl{m_M$wzamG~UOPW0KlJLnu z9vKRCSuL_$YViJBF2QokyrFhCp>(8o@@E_CaTD`vk%~{nL&-3VE{#i(<{37;K~;aJ z?;TdXMJ{kN15|`H^$XyaR}3&RoHj5tY6z9%yedBbJ|{8Ya1WCDi%wh&7NkJ&u_Rd_*!CCPnX*D zK$7;*+^m~*6J}H|F#&xKV@PHE%gX0z-Z!mvCHN$Y$YU8tmHsKe95CHlB0ItlV)c!l z;D->0NS=D*X!_Y4a?s4#MbHQnhBdw2WvXwkz@}U7NDKWjprIxCejv!T+;W-Yjlrin zU$SNVpO`VYtO#Pop-KlWU2m zy-b(s?5S(x9pykbfIB6v0^V%+-^?uBebO_U6?1yPE#9Ml-XV>!RJGxozja zaXx-xJsSg9k1!nEVYdA#ls?-d=>$uabCW8QkN`PX!qLsW-ZAh)fy@ z+|$2B-1!tce~uK7kO|oDG0Bi;SX6Kd{h?wT_9TGS$XQpG5x>|_^Run#uhpqnpkBXY zuR@m`N!Cdufdex@pcx6W$j3x) zal)2?(eD)^xZtqGdjUyN4aoX{ze|D_=nZ*~KwAOyOe4XjGh)(7^r`$aqZLKK8|`2Q z2m0~EyY(#~=9k9-f%=R_lq%2XDon~sJeoRGrg`CRX0;hTz~XM&eU^J;O%uIgijzW0 z0XULQgo!>Vk54T36|L$ssvyNAte-ng+0+vi>u?HT#Wbak8&5s-|J9{)*{O@k_bqYV zm1=0vPOy2XbC02OpBO)#BPf1WN70Q^PB$;Uw=vgt8!V|>JQoF59v^oJD8vSM zxR^rn5`J7}FsMA-$~6*+R1WDVaHW0&2S7@NmhLdt2Xz|i<$wPqPcey96E9stELyCI zHD-OQ3~R2`A9aOv<7^^bp|lvup#d#$vMGO-G+C7&MTBE)Q%;R9YWVn;eDZ59HISm~ z_$6G$2aKc*lTW?Yd8ZExCO7f7oow(88#5@H{r#B(dbs)fG_ENVL6ULrHwZJhx*yP7=P zg?3}6*bQUz{#tO|DtVz1zT@H4M(W*uOO+>UJ_+J|$ z102h57idSBvG~$R3wmE#q&ckXGc`EmU2cXv)q>K6*ImTq67 z4d@UKs}~BCr^TPK_%jaAhe~;=Fz>W*#@rSem|P;~nTz)LfJhZj4{q=`lA$bPl83!t zx{>#mT~Rr4wjZ4RKP}*Wb130x$*%TMVb=8kWD9vsJpfMtB)4g&;P#;6^||9jWb605 zrNY@Jc~CQ+WR|RHm#lt+xjp4$>{Rg^p_p zD$_SFQUe-eL#gm42NW7lJv@juZh7kZZgt)r8u)Q}TE+0(r6iT~I)tIkzyI{AgDP`d zbN2L@Ios@zYIAI~6{>2?otBU2j_i(*QQ}z)Xc(e&JGsNr=YZ$YgdflGKEry)s`FNiVb2N5SV&X zRsBDWytP!5wq&FGsxVWwLE#uRt}D=~OS#C_{Q@o95I-0cCD`&Q3^f0)B($(AzFCL> z0q+!La{80zz>F@jAqFw{d-doM6cSnBrYg?<)X)#H5L@lAe@N(FBlCvGNR)d!j?sSV zCtucM_6Rr-Gom&vrir**vk0)j_CiWM-H;9D`gR=7J154jkB=?&yLzc=G1t?eiIbSa zS#qWzSmWx5@XEvv=wr>>e|A$J#>&N10_6+CLgJu{h>lbdD@$i2+Q<6b`twLKrL}Zs ze(FZjIpQnaSc6FWqFU>M9q{)a8jycmDGYLn_^dH2moQ)XYCeg|U%$e&pUrJ8!Cspms;Z~qeMJ~cFq3`iU#e%#9_cL(UWnk0SqJ+FCVVrWbhs`+M7ioaw%5~Z zp~_mkNod^+?R`;wE~9r?6+stW1F%Px@9pqd@Ag3^^H%g>XoHHBjL-?)sd)anB@xHV zJv^s_*^2fe_r{{?s-17PNIgvL=Ef^~H_=kJ?r>gW@6ErZ530Ftnb7J(D1yHVb|&%a zjR{3kzFanVwM@m3*xBWt9w5R#BL?){H3o*zA?|tpOfZ~ce9ECPs08|sMp{fFG zv#Uo&Y0#^{ONp#UmMy2UP8}V-xM!}dZ^<-l**Q%j zw!9$)RJ770?Up@_WbXOD6Cj@@LvyZl2ZkRbJ}X+cdxB&EaKKZ7IhSx zp#i>Hul{L1B3GvHn5jLq@N;=@mAda%3|D_sWA;;;%*rq)?3RY-d-%Yt2Ra)v;`>*Y zDJ?N&lkVF)QmP*)m7Vk1Dz}zCtCMvklID=4?3yZUr6b&7TaV*MX&f<~ z?H!?(xm2X_!A-~1HN zh=^|0ocMn8>|A`gEt-el;k|$!YZCbW#Wi}*c2 z7es;1+&TpzEWh>`6jYyAX)pGo=}?R>^X2%3v`S-@h}k#e3lQbH)2lQob04!jmW|Q# zeG2E4i6lnj z+j&NrKscCEIXGj826_152r_U+hJ<-X2W~kX_Ci}^0HHDgCM-Tp$*?<)Z2HlL3z!lQ zQ9X{i04I+#Ot2g6ayUaJgYwXyDzmOTs0@5|OAo)jwI+~z>o^@|ziY!QA79WGm}FDj z&~3Lmac}q4KKt}+lOzS};zA1baw6Sa9%w-=G`M`_3?3N%YgevUbMX|?&5dEI{CfH= z&CXhyv+0zl+v9stPC*mpefOqWf-0M_l63wHv6C+ z!MsJ)*3nwscJ?{lZ=A{t-gLN+LK5K^OMjdlfy-j=wX#c!cLZ>iBzPn1dNs9fXxlCip$en*Tf;@m+*jEEb2_}5z7inSe&^@=QSTzz=#f1v;^ zorc!Vf`rgzs4kYe&QRJZ`4fYjRs9GHP>jXF$Qhn#DU=bQ_8U{Jd?qQLtmAi@ z=v2ow$nb|M-%0t{^u3Ci;cDYott?>SBBZ{#3I8gfSeL=@opYKPrqOGcLAA;xd^}sN z(G`~s<5fdCKikFeKU4OsN(4;LpHF!fbgMVEg;}ryA3J5eA z*QHLAF*Oebl*zZ%4$8PRf*`h0?7#i_VaA8Fs;Sifo^q$$7_D$fXKUr`I{fs9{HguS ziBG~W24n_ykKXMHQ@}K_4q@tzpo{uy#(EONq7RSM@Wzi@5SH7`&UPNBVA}G$j5v=F zkQ=~QHHIGQHq@J{%avE2J5>)ftF&pR`%IBX$49bg-T%b7V{zRU)U`;Rh={f%I%+&k z6s?)He0IIQAeieQ(q`vHJ|j5fLPS1fTzs8cU7iXScOLF$>N7C?(DpMrPc{TQ+E$s= zZ|@!K*u38Ohmm(ahA9vRs=sRh6Jf^vKA#@JpPz9$LMT$dR|-3x1pEdN;9pB2!QADs zz&tDZ@%G6={tZ`Z1k~HWJ2x9w+69@^ePp855siH5{lEM|ExcRH@i5q`U&l@CK*Q>d zcED8-CEFX&-V`WbR_b%oz`f8jjxpj3gL}bKyP?Mr-4LjlqQu*4QfdXkaFmXora8FM zi&@pBOu{u0&QJrWwriEji3w%(A-gr288S>nmh>^iJU|NlKDjBzlBofKKirQB3OYL2 zZR8R!fveioD=oq&pIKHVcoSVMXq2y_;jAPL<6Kr z^zutVP$fHT`+v!de)UNHh5EJ{e9EiYc0N8`!gaxW^*xJl>Sg%dSO zC!+u8)HZE8qWfJ4;@$6xOX?AWKTBtc+Y<8R7$v~zvuqId10IO?^?LMJ!6C zftN5Sw&fHk&=e|I#g7j>i+=Eh`|iFL`_3U;==PRl-81U~$|{oSFLVoQcv*kFIl=c= zeuCn9+O#>vmN@+B-fU8S6%6zlneed7dl`^hyB?vV%!nIF{#{Qf`($-rAVpW5PD5;Ik}h`5{EolsQ&nw$f? zuZ`#><#>6Ya$^rvFdRy2%j6r_8&YLj{#DTy%v(;w&YJldSh`&1tU)&==vo#5;?RBX z&XvjhyEp4yk~*|>t#g<){_Wo0HL6>}M7ZdLU(Q&CiIleEGEgz5Ykj`*LB_&pi3=gU zRO1@4R|9xNf`TOSWx}R@PVD?uytsh+Ww5nNl{H|yh$(`8;SslusdR$!3QjV4$PYFk zz~X>xi%-7>!_LBgD8;}yvL5lLaBFVhqSu99dq9I$`2Rq4K~V0p_@6}G0n-nK1NrKr zw@eHz#3OVGmvTwt0DXHusv1$eq1y?TS+{6})Gr43w`xD>cZXavj}P?#w3bq=efQV{ zDDb#o3TEpeDY**F?^uvfPIGPFTg4H?`^EZRbCAoo9Y?eIO?z+jmg0;rI2-{`oOOl? zGo2DNOFKWk&#(EfWNvMUvrK5Tk6^gqlp5WQgJ55 z?jF_PS++csx|t{JNGJtBsZv_A^6mWrFYjnSCo{OAbF89b`3UmaQ+k8!ZMmXB3>^)f zaq|WGvp!y_gXsqpy}MCDO~~sp|LVEJKRX-nsF#{;KjfXEx=~=R(@Z$i{}imV9YoST&732&_XCZ@ulq zH0t3#$73j)+HAOnP<9)wYO4rSCDN-h)d`&u#Hm2+e15-cN}I#Cb>Qz5tF_AY_SZhV z3E#9*_g*o#ruhrQ^|;TJ9of-AOYkXsYiJ2%Y>QX<_JqMXXU{_oWGqd$8Aq&IbCk*7 z23{(6qpUi>E8oU@yr^C6etRaYEKZ$11$4n-S0|f%>dHla$baB@px44R_?P#X+M7g4 zy)Qk4M$(;3hA zPEu=t++9|>kC0YpT{?W!Q*^D4G86y$uqcMtaw9}2^E7Zh7e|u!vHlP8Kj8Kuk(GIt z4-8B;0sMb}+y5;;<1~Rsorcdvirb2y2w#i<@u^7jRqP8z+O+~aN}7E>5lZX54t%Y| zf9s!0H56&HT%`CwwfcJOIv1+nl_u3wng90>+j^bm zv+PNrhYA^*!lj=EgZ6-yaV&bJrDot7`)@t|E5RcEtD6L1HNu&aYiv-Km^q)iC2P&W zT+BpxhbU0dfB6Laj{X}fchgq#khp^QN6~P17*;omcyrwAodt=Imrp&9p@CU5d29G` z^}3Wu_Vus+r*)*qsNtLj-gu|#i>K|``<2Z)iaWjO@B#R^0pHejzZJjq1V-EW8M{W= ze{kRTv3}$Op@-~0p(|iO@p0ulIj$-$J24!@=|)=-^K6niLu{J4K9$*NZ$pbbDDNdf zcFs#3ZJ^S@0NouR*|GpN24c$IYqj6AQm~-WK*oWGr!c3Wog?;Dh26C`-R#K=Y11=r z35jeqT0O<}c{%(&-ZzW7+vaS)^0n6b80P#^*wTZLfVwZz<;`$Inundx~1_o{{A(D z;pgtKDr1x$yuC9ss`Ev0f)S6O#x2p(MZn2y;5%+6C|Q0zMBNgZ`UV}-R(^?e@Va{HjM>hZ27KAj<>a^rR%r z<&F|W*F5K3pg1{-$}SY^?m_g>mM&y;ez8SS>D(wj-jIQ#hj{Mz8tWcxa{^xlko~m!4=O=wRoB;voz9pM! z-=1aBv&9I7Fs4RTGJO64HvYZIZTJ}^FtCKk{ySR`U|=&a|DRI-A4q+M>l0G{FF=4U z9UBJ%ZtVB&o*?Bq5r%MlZT}*WzZQ@Cyf>P|`pR&DV{{O{3VRjL0PR@91@6aHS9X{| zDq*55HY~b%=zz~<@X?ms?P0wtYLdHDj^dT#G}G1-``U>cm0n$CSWurSohg#ymzj*q zXnW#H!+(s8tg1P4{6VEZ|U_=USfnq$={q(1M1XvNDyHy)kz~(Qj3e(_76}&Vb8KYEbR`d3KRSCptDVKzZV45c-&E5mX9kqRP<@l6}$E>s()vPV5-sZ?j>7sfE$Mo zvNBMbQLwp(w-|HyMm5pW`j#i;Kwy63+IZjKLk;AM!&ms3X9wFh$ze1-NQLfGQ^z08C<;br6Mv zggnNCM;xbI-U}+wPej^BB(M(wRDm(t!^I;XL+Dvno=YPyiMMX1L`rh3AF8|VZKwRb zV{3Wc3V8UPynF%z;tBe8k5^pAVPh5%aLqsMP%@+26U^Mv0>Rsr@qHV@6iqcjs$ zoD2=0r`mGvH9|n2M)&6rk6P{d1!m%p8C;N~J%QtELafYfkm}$X5{eMDzOO{t&etDR z7rWU#%eA&Gaiontml`QO&ZcVp27OQP3Xh;*&=V}|H+xcNPC|YIKwCjHzm!+2{K+4? z-MpGavimM0q4gvG9v(`=Zj!h@=p}RJ9jL8BdK(~n@KHV$m*6T2nsRG8`p{U+xX)!Y#seWHgkFvP$)~-2 zueUPbv*mDiZ#pOgwE0GzlYnAcO!rbZSArM&s@ytQ@OKgX99&frs2?qKqiA5q=HH`O z1*Kc%o~O}~C8sIJEJz1}Nn+v&vJ#XN>?LQ*XGLX1QOaTzc+!82)p!lGS;1WZ1MkAk zb)K?lLX9jhw&5tqF03D|`I7+#TqYAnHL>E&?(F3CjKAoDfNVY`2s3_?7Gigr zSgn6IGW?zsN<-__5Ujita_-go^ZdDB3=EEGJAm^(&GhGn27IQ?Tdh1aUDB!(O)>`( z=ML4onbjH_!19%x&g_W2s zWgeH&P?xXB$|KWkGuzr~u&vq3oZe}?o4@-Jf1Ot(O?Rt)Zw#|~sl|P&9woZ`hE08x z)S`oOzY1MXBdpSQ1o}9vflz)v&Q>yL+VHh)E;Q5vNMf_RnCWsn$f;Cwkc@#YzcBDg zK4`K2LRC}ek(9MJTHOe@j@guImc1JiG0+d}x0kLO7dXRPF6f*7B)$bX_o0}))1i2J!dZlIas|UOd}NAq{xA`he&1cfzmhT zVpmR{uaNFGr4Qdw=rrNaYc8sn6oL6h(ew$vC~Yxg#B7r}1uyVK#QjIgyHwtqjmMPv=a)jDNw%6_)KoYMUbcR*+P=5kuz*^7r&`wr~M zDklDAutBBod#??N+r*2hdSt>={ar^~+e8dfv9DGOob!aTM{Q0vSp!62>t&gn@$tk8 zKsl%e0ZUs(g6tlq{3tqBo26Fu)1LTS%@8m&_Q7QkD zH8=@wTs^wR{>#*9U$e(;G_n>#eK`o4NjG}P#4rBHtZ@$mw&!H1Bhl&7uLQd5?Sus= zLc0)BW2#=L<`pp*nyl+Ch`&j=c@x13P<%L_h=;@^*(1zroWiyUkHNnyS(^4MVX}rM zL&))P2b`UG-_)psiQcvdc4mQ-HUkB0oU$7~R~{x*-=m`PNV+14561T_g8@xp+Q~*m zbGx>5O3RN&nn>%}J@;7JX;lq#*{Kl^QelMjl102ABlHqNNgIr#7`1)ZigI)du%*c! zZgD6+S)#mp*UC@S+_(7_qXZoaR6w%7%WIXGDqcm+DV_u7&y}b)W-< z3jUPm5LWOeHV*UOX4Vw)f1fGRW+Dr2S}T)hg1XJ`<((4Ry8LIZ%m2>Osy&hjD)%1y z2cF1cIzv%pMr1Lgj6Le5)MKb>zL&I#V?a5v?(_*-##K983L?`Yw&;C%gXm>7*6?HNNC-F2Gm05z#m zYo=XiQ|xXHR5`|CoRoP9id48j0Z>a=$qi6h!!Uy20T0+F_gLrJ9a-NCI~Gs*;Pl{s ztg!$Qb{6oPs?|zVRp{7MW0F;8wbxIciW5bfUE$>llWT61JGTSfDyLaf`S6aMea+9x z)>UK{xW`DQWk&OzN%7$4oL{}lfI&KNNbwe)1bBFO^ynGq10t+z0V;pQ9+6X8UhD;M z;(0WY8_jfCa~s}u5jK5A8MAyv#rb>DD(b6Qe>Q_>5+_B^SLW} z>ZKFUgB5~z^t_F#h$ol7y`vse5d`rS;G+eGfrx*H^4*WPpqTfFUJ5#1sXP&h4+JRR z!^&Ns!AZ==O&|HR<|yca0(2nii|oqYy3D;Xc2j{I=f%xE5h!_uoi~IRGRRRAT>MSw zNg=K~5PD)530EO0sW!h*bQcN@+ctr`I%~^Ps^1*cd|EI%gxV64pL+eti4&KOYqQfh5HAq=3~DuXZ}<^+QXmi%rLXA%t^dxsf89>?*uK#OA<6`M}+_su9gVa$rD z+@Py-N#t_^|K#9r0d%FmZi2RPBgC^pff*V3I=I5mcC6f~_K@X^3pQ<0)F?4)IMN$RRr{MO* z>-b>)8yme&XSx=BE!6OKau>6_u7inbP*Jk7Vscv}6J2BFHY;>8Kjk)shwZUNcXK{$ zTOR}Xk@yGo0ANAMV9BOf3+0MV_PHP-ryzIhYqZ`b@aj5JhP(FQ*H;UT)2rppOE7rqIfJ*6T0*Fvx)kXVhnbSAd?0y45rtnI@ zaGgPVqv=`{9L-=BN~BT;A!OdEd=t;zQ{Ilfb^+H#7VR!H-`bA2El$hMks?FFPf(HIL?yMi#0_1=6arrsEj}Ex z-u3H;;E<-$7u%siIu_|twtAYhcZcDMEir4}2|$lcGIN*P^xH6}-BSJzlm8GRX63&k6S0V&qu+FfNBt)C9aD#N|*7?dBL`OQ^r|B%Ba zA5d@G#gZ|dd=lVv>jd~1f2;!9|qc#=|S%QH-VXv z1-by_kDBiU2EKp9X3L00Rp9f$y#GKxKOk3)qDemNA`2XEzTX>!B%Wc^$x@?bOiN6x zQ;TKIRLq1POh7!3{gk#psIztv70OYXlX8ov+w3lE;V>%e6%tJm4<{)9IOK&oeS~ExQtkc=6ZFFzV225gr%zL@%pVEv? zUJzo;SuN}-VsC6plYp7kOS82K(25=S?Zn&|FRXv7Ky)K)P7>i1vHDP<4e@F(H!J4+ zJ4VS8a7vckYz3XLv@PKWrHq1H09`ymNmUBDN%L)X0e{v|*b#i>IcA3vswhap1eUDt|71HWewu znh`6))f9u6Zulw-lFrLcFi9-ANbrbInfQDDA!WK7`PT;B1$;k}cN_=e2+$`b0~5e* z4v&S4!V5FPQ3WcsAs`}hkwPUs?ywQ-#va|row3ymEVYL2=D<@;=XrI?Az9zY1@0#q zk+7BYgB&ZiZSY628DImC%srbsT%f$jYa*Zbc<2eK@~8P8x;6TNF&cUT4m4K7Kv)eu z*upl2__16!@i0$}X6A;}0pjrI>^S(-#&{c1 zUe~z6>1*J17V~;u$i9NT*I_VA2HmO@uPJ-<7mUyYR!qhW6^=?FHM43UqfIMDG&nK~ zM{(Kp`ct2W9T zY0&G&ThA=7kv=&`b4RbZxOkF!Yk4$YC$TGL&=+k0v9hccZ#7?V241ZdzieJ8*r<1h zNWMr{Ms63OXo__Jr=KOwYy$^dDpAF`&Yo zer4#VGm!Y#l{cV;Qyyr41o#+q#@loGR@mgnT!^CpW*#$0pubvjqk&meHF^#x?wO7N z*d`we@~*&GfiHB4acaBZbBg1T!%u(eEo)U2OnLZv9?9eE(J~HRp4H7VcL)^*!Jn5m zq&5iWl&TFMonQv+ zTsNBqPQQ}GweAAkUc8p0S0Nl8(X#`5knH(e-)q=M?=@W=yefPgP{@Y&M{nx^4|0Fa zmOJ~$&-KtpUd|3i4X-(}aif*(*f{Y#dsFaD-1dL?jM{knh&-@cUayDE)!(;!qwQZ^ zr#0`|DK8rEJ8-fj25#O8-V`8kdV00z8{-kyf)xn};yz3^raRtoTmSM7__zUIOYQex zYuv3JS~X7F)-=<@@d-BjS!Dmt9Ip><3IHqIivbgfg5Qq!bRRV#!!H~eo`14%yP=~^ zZ(C9Wi&iBDHWERRP}IRMYntO3K;|=CxbVh1PHB+NhNE-1>lNeb&W#hc|5BRK?=ePB z&NJZEcb=oa6Fh_if&U762%Q8#IaqxdQhm9llUEjp)KOcRTnv)8_7Dl%vTOIr;t!lGl){{g!HPG@XEQYgaGnm8krA(Mgl1)awv!Lkjxbb8jBY!v~kSQ%`5Q>;jNiB zdoWSULK~J}zUra;+UE0T%DAI>XOgt#zv^G=yS~v@rhgjZAfp4S`2{}O$*{H~Y)K*q zp%)vW-rDiICHlq+9DK@cyVH=EKD{UWHlv?>Mj7V^N#(_Ks0VJ^&yZIC7f&?gEIkuW zSg|*_g*bDH0VkR>Wyl_&H&+0({+RK3Y2w%#jl`aWX62FU`vv^Mgl-nL4;75lf)JpE z*IOID@(9f)>rb?|`l}s6MKs=UBvu|WqwR0aRM8DQ1`t`J0V*Ynx!SK35OjOk@roUp zDik`HG~_-F_#5_7m@hDMO&LQRhu^-1N74&^?~e4dc)wS2TnAPF(zPw~zt*vN-jTi_ zrm--ZExO>n9(XmFpq*Ud*{LFTxgsWSL{A7}maV~S2xfswp#8vZoVEUPqVb3iWIJNqfPe3EFSwnKiVzK?8!&|@U zji-Ee`eEP>h04qTA2I#<1NP#QTzpRl%fUCa9y;>Rl}#GrI8>vmz_Jwd#;u$Z!)JFp zz+<$N{oHVF9wZ+k&yt8>G*EV&LM{4KjXGO9JcKFE^<0k3(p}~Ui|C6g_WIAH2c(pG zuZnrSOuXseKrP_xMOBf|E{B*{)z@`sDtC#xtHvO#HqCed9`P+5jE!IT9-;+#Sq~yP zqAjrE>fm%kpP#&IVDv=(?jDrKApGGAEG;-~0ENG7tSc~)9u;9xI z^?h!^q=0_awY;X26Gm#&Zq|_&UTMRK~*d_cEnplqRm)LRv!HWrM`ph%ok zW%vhYzRd~Ve#O>t0#vpI#_vCg6-NBMlza-@9GTt$4_~vc`H@BIkQ*~|nMLnMVxDkR z4JDjNV|Et+19tY5Sw^WmhS!>q5a-?mi<s9QX;=p4dn-99ENO5_}Nc>*#DtDYKl?yiA2>@fe+v@aE4(;seFk43{U^s2v? z((QU4{+{HXla!DoQ44l$PmT08o$H_;Bu~}=jS;H4h16<4x&f$+obl8Cobl44wmNWX z2GV!iq}uP%Ex8^Vs6JTqdIv}H8^PTvl^FKWixLys=Z!;*AIp@yi4k7tM1yzAu1}4$v`G9 zJ|a!|l-w`8^vf@DS9I4L4KTH`yNd?kTx4lXI#-^G3OQ$Zx`H#KBm>4-pL+52nR&c_ z-}!D0<7NN179{-F-O~u24qUf--s5O{Xw-WkfH8Zl1MPm))iH(bpOlc~er0zB6MRQc zy5WizNiNN>vnc4>O~S-Xc*Mobw1}fxYK2MSVpBSLV=Ok8#6vsRO;iF$twRGqr)IB5 z|6Zqn8nqsTO^rXIfE>@7 z8{1&dR*!+$r{gP`YSV+4XQwu7N(UsKxx3}?`Ol0$maUV5u1Fub-i=n!-~PPPpOPs~ z{Pc6CxWYnX$B$!kZAy$$XIH@hf`_3}_Q`+e#=ObhJbm!h9{5=qJ=NAO6(JADRgrIM z#&Rxa&P<{dA8Aqj+<1S&rg7=Zi<$h?P+6|>Q^f;6Vu>&gxj3e#XhwZ zI6$fQ^-TYK)+4B9y76>Ezw*Yh4yG~61W6d>b`mql@9Ya)W%$`nD$6_oP$+|lGKChz zH5qcjSR*l1si`aPErY}w)AcTOtQTp*Ml*fmvLc$91=7G%y3g_fWXS#~CwGQTk!BZS zKE5hsCR^CCnC= zj`-0`wkHG9!yRiAtC6ArJ;Z**K~j@=B6QJ#NpV%6rLe;6_WrEHMoxGJK~>V?;O`;Q z$b`bc#a882O`o_TBHi@w`kmTn*33G0HZ;t#n^?*+i8Z&XFod;6IYcD~=^4N8F%>X2 zQSd6Z$m=-m9OMYVAB~HIejdT0t6ILeUxYO_dR)yK4>Pux0KKw1O=R+x_f{O8)&Hc(neJ21^_&9f*Xo|^N8e(0XR zo4VFqwF9DO*lbH^@+il{As5kygAL`)H6jAjV2@D{`e#c3OdmJj;k@zu>^38iZ$vxzStn!i`1k>T650#zvw@$H!--`K0x=ZE zg5CXrz!{ewRt>>~E$vc!JV>2`3hs+2o=%?y&?>pdP6Pml>b994%jHI<4>cp5V$Ubl zP(NHkaS7PXLrcUXlvJi%zzj~$o4i%cyHYA=ie1S{TgeKLR0v-=p}F$sGjpyMOMFpK zFn3;`dQ{WmUTSz!z-dzIQ8mOhcAp*!*$eNlMGD2Q;BKTuCc`9Dsf^?kW*~+gPP0wF z*TmCy%E*OY4Uj)I#@A%|HQz7R5cxINB>rp5zh=;l?!~17(NELB8jeLZiT)|+SXzfm z(jGq9lo-na=(_Dej&EqlZDMj*R!yhyvJoltKD&_?R zslG&v$1xtUZMSB9VH$m&sOTxbd=t+Un`8nnk)vQzX=Itx#_v^Pf2dUcW|n-Vudbnp zEd~iYx4!m4>I0WPq|rWE#~2=JKnKUsAi^~ZK1CY@AQNz0^%aa5$CiSva$D3y<(~=A zB_%s(#!wfw&y}JL|2<_PphlU!3+U^?stM;-THNm9k3d|oE%7@@s<@VDt+31^e%frS zRSB_{_pm|>JcwtZ973)w8uV9|k0dVRINU0C%9jhF3F{D;X1QX9OYm(B_&T*bQ94a# z&G1nIOb}_xM1rVolu$i&46;AN->d~Hsu+7vjUl7{eXjWpXWj4J_zy`TaHWpJh<4yG zRM91H9*t2+SIz~2Ny$AU>taul$8ArVYZ+0}P82r(B0R?#jwiWJMnP40KNSHhxEq%X zn;A9ZC27j#KTtx|2=?s3u>SYje+;p3`Uwtz%(5g`Ka87b>mhGOLcNLf-gX7xMB-*u zM7(m$AH^#>d|QjmKk^5cvhFav8=4-mUoAnHer#M`@7RK{628#1*P+aQ_mgU$+D z{-74_gpxnhvC$OiF=+ligaIz@-Oqd>0K)prkA%|n1v2m>@;3iAmO)i8!6((LPw5_T z?Ey}9e9w?Bx`hL{1-EAk)9;(H>qrrQph1P}fpJPTCXneP93ze?wBOtAsY@cQzn-*jMpOHTa-|{8fAGpHUR!Q$Drjn= zO^vijw;iMz+A5&m-OiM39-a9ECp-rjadGunN+=qKW3LDum&><26LXy7Z2F4#p_1M| zp`502;KpHQA%K?rfs9NwN=Do$?43QCXTf5Skyi0~5V2_8=!O#Wtv5(`(NIIV`+E_D z0G112ElzSwg6+EEoebR8Qus!=ri{5ze`b`0 zX;FsM(0PUa#{K=+QTMml(q>N@4SFfI9M^TcHkzS{8~;{?qb5PMcBnp}>|Rn2FC{@d zuTiq&0Tx5xQlb$ZZG0KA@<*ArzdrUZ_GLD0AB>2C5~@*_N!hU{Y9sU1LlU zzPzg!A{0y;Z6N52+`Wd3n;ZC6w-SM?azrk-VJP3Q2Pvi71$0vN3WO7efVj-5H}MB< zQ$7O}H|vDpjNRT$dfRu|e2&_$!!v6RS#jB9}h*zULh`7bShW}e1r%4|f zwsKEtkr`f)*Tp|jUOSY52mOF;0L}7fUp2E>z4m63P@Z&zuA|%J#1t{waBOO=xA|c~ zGHOH_mqhInD_))^d)ghKih~i2ltaG1g#r^YkwimY@~T1&H0uG2b|EU>L>1YGI7~Qj z1$z*y&<-AK5u9YphIrX6Fi(N~42pB5!vyh%suL{J>H7NJIuw#RXeOHn!x@Y2qt=dy z{-;jevvi`sQAkG-Bf>zBV$z%u%u6tHhSn{LMq_rmk0&^)u_^-Kpj_mb2U2UI;=vo| zJ5(cDCH-tn&M$Xg!_~9QYs4?(-tk+&Smv>V##B;Ay{JfAHH---t_RhDbW?`N9Bmk(hUeuPi)!|WX&!zq*xcyP-)BMmHAlvaTf zBYibn5rrac+QDSDl;4vNX99np%_--9Pl|rDhSrKx>90f-Rysu&OX9^?_8O5pBqtd7 zccPn4f5l3QZ^ajbLUK69{5uhpdk=v+w$pBlWxz}r@{%m=~{ zt7qWvU%z^Z0vHi!Ib(TqmUG&iA(*(emO`GSt_?p^%K!NBFTJ$TUnTNG8fMT|Q^$DC zBHCG69ZJ$IKK$?r69`)3Yp*AnW~J0wF=*vGoHwhsTsrXF*Kcb)zbYTvsX}WxOSoIz zutFB8sztB?;v8gFsoBuf-GP&x#^JIq0YM=itKe}SNYM0Vi-H&q(%=v0Tf|QDCGFaW zruQ|p1L7p6`chS~!LzTUaKVbpis#&wWfMx+6weM3a5EETofQg%G&`z+svPuUKcSsMk$}(jPg3IJRwwJ zjV@6r09Y3tqcwdOn5MTAD`A6j=QK`hEiiK;Vl~)Yx*X!TXk6bg?M^ zTO>-#<(q9XzS%?=7{vXG+=y*fu9DiKOI*o42-a~U>QYuDjOr{r*;DACP<$#ym)3>^ z2m|BCmnMgFxsMBo5i?uJsELw}Eg|VA&&sCD&Yxoxv%$*4AUu;D=1a|M$i0qG=^i%g ze}nwJNsgVkDDiA68uHHlF8Poubu=&>b8}$P&m1PQTwSE9ys9DiHMd8iek%>5AD;Xr z#`;K;?F*ze1w5Su^N9s9aAmM$UzL>xK+sOg8R3fY40be>E407~2qw>OG8|KQr^bhj zJx5GTztwsS^DwU{S4FX9tmra!+V8xwRQ;y1%GtRgVyq)?> zBMCBR+xyux8xj_*y4U>&PpDU#Is$#OgbjaCNcTtdF+>UuB~*2##kH3wRjl&^&;bdI zt3&njz#oBtd~H-^s??0pE`utBQL}-aPYj_#OJCxsTK;OJ(5ylh!d3a`z@&?=#yss7 zF3*}hiw3Nse~07xEa=R@t}D^5MS9vkOx$3(K&y65QdwHA3Lff-Cd#PZor)5? zy|^aBin1FxuVp^jlRJPb&-9A*qeL!A*E7pS zH?X5vlkhC9epHoOCV^$o*LGV4VK?U;fN#Ifhyc(YP6;V2c3FTdzhIH-jJ04aoV)jJ zke8tBTWL~s$zX!5f<*bmW2M)ZI+Bt~JJaC_BTPLd)O_smpLbVz(s`IK)a|eS@aHyY z!4`^_Vx7=OlVg9Ho_|*T{gptFeEcy!{Q|-3M!Vw)dP{!l>V5{Mr(S4MF?UcA`rVQP z>V~cSVZqtaLkj|#9T=me3u_EhEx=!z*3i7`5v)8WsYkS-0 z6L15l7JSxp%%!Iu!>oh*52MhM-kL#FzP}JXDkQh-;M!yIR=-h!Ac^+j02jTgxL^)? z7(|9{qdX~!?p34V&9UC6Qp+^L(52_2l0sc)gOD&?3K0Dn{-$>h5?iWY*01%4;^r>r zgV@pLRsL>lyqoA){VO~POKO=LPm^&j3TC#9Menjw^Y9`-DpIeYEMK8ApDb)fm=AFo z7Y2Jbe9(&rTdyTnNGqsyIYp@C?mY08uAL~UcVZ3s-b8MaLZ&|Ba5rJxZdM3VL>?tq zu*1Ak15m!I+)YAv+Dp_O6USCpFRhUl^Rm<~6QqMbYD&Bjicy)iXjAxZ|IrmPPu}7n zw4g@=FhDO(Qe&(DLwC;6#~IeUs2WC=_bZ-Z|fPJnUMJT5lr3oSO+{s=mGo z(n@oLHvy4w@s9zomMy73CDg4Oe_nXxXV9xR0~XYD6hWl%9d{`-1=vg7ZQ9|9=s9o> zBXVpeu8Dsrg&WBKO4#Uv)%y*m%Rt`v>nlcBr2&h#zmEP@@F*a@TnLHuq zy^JWa4+Ppjx|Q>0J@5U zwM9C5ovJ%o)lu~fnycfrVz8T%b;-T35;sb)6!dOwH!wqcpFT!8{<1N|py>H=1Bo0) zX*4E9wesK1QfXw1%1XcjCh_w7lNT0?iV;h>dRh0U6~@HAKa@fhJe-K+(gw>)+TcY* z0q%(DEH#_P!7~?P9O&b3E&YF@fN?w2T#XmDRSrad5>>DoFN8|u+b|$Jr zzdDVD)VW&qr0e1E&bv=ffPI_E-yoY>8hZ~kB-L_(rM;ZGEG5DC8Bl3l=)6ht5Q3vi*JSznZM{D^V~k6yTc=8Sr}nM$<#$eQsrb=dF~K zmllZ$;nw!AY@J?v#4A|_8!v0^YK^6wgjzv`nN!TMa$(o;fGz1~-;#2!WDO0x73hfJ zs=r#KC1}p4Kb*ob%fx5hCiNrHpC23#uY74F5d{`6AZWexCbpV1vJhDq=LUp=uDyEh zt2l#liOsgmg>cTh3CZpptJHQ=3~mi9#5^eLXM<7`5c{Vp55+O?b7LJU>8h>0EEb7J&wko|Z8B5Kk{?@@Z=bTVOI*4d7wu^<{g2C1|!89lgm5}<1 zCZ#3}R62viNcSEenwn`CybvuSKd*i{A5&#P^L@)kOA>VPJBX>G7C3|?(J^#hyQS<& zTG%aYZVS!%ue!`XUXX`&i=baH=38( z@vgqS?1!&X5%4ErwjHe{3ddlJSv~ zsd^SEa8LjB2W+JT(ME=&z4hdi$|{x)psxp6q^%%tq&eStdndjFLf>n=O}$6aaX9Psh|M>Yc_<1aZk;i5=X8sU;cVbDvC%QTGEWuumP%gHB60DPPxlpeSSDl-SEAB*nSjm z!&x%0SUkRP!u@u?ht&t!qA~&trSCzpP*0Laf&rwp(|PnY<|ZJ zs_I9)98&tqhyA;+(z-8XOd4ELt5Kb5>{-sXD?%X#gW6P2 z)vcZ4`-68R!Dz#J;eMDThbT7sbg(S=)3zF0SkoD)D%D-XBf+e7S&b|okRR-~5+9ui z_*Yd%ogs2*=c`_dxRZcCfYq@1QQ#FB4<*)oDnL?A*#_r3)x%8^BY`;dpS3}a7(

  • W;d9ds;m)O>H1bmni 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

    k3j64VzUms8-jyw7j7Y)(tjA&5$13j4(1C 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Š_jZ60+EeJZts1CRw)u*V?RCFuj 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ыn@pd+&Ii|RBHF<0Atx^rLr+#<1;{o z3B%qz5ZjIF492(ih>}Bez?M;CBqR1>nRySy37|Z$4mT>a-_G`|&A9QOwF`C~Xcg?` zn4HnQdnb^genYVo385%}>jMU_fTBoRhwodz8-MfJqkTuf*+x=aTp!`-*_v`AGj~T) zH)^xjd2?ebulZO#I&;F04cP7m)NX`kIP(C~3Zpy0vKy<}6PDdr%YI_gGi10Ck+qYP z;PGYCK}|u<@p8^5B98*}a{Do|+=$DBTWbL?=za14W;X(}NBfSi;A_BKPR>Jm+?dE7 z?SDIZUb^D48!_4Iz`1de*Pzm)GuJ1i^>=-b4!^|Pj~l1hZqk_MKzNN5g7@n1wP+c`#QA zD|LQkUPgT#U~nRsUz|M%ap#fn(2at84S$+DOB#EkoF{9JleH0fWZ`ooEqk=@V=+}y z_6_%uFgGh{`|***Vwz*#tchS@n)oC)bR#T#wC`yoE%nN}qt)1rjqKjO8~eEPH9U5s zBKrXR*o{>D14`X~-U7yMT;o^BN8MM?PJr@OJ111<|GL)sM;{^To#r?0If?YxF@KBn zSM0sS^yq&S@zSHSp0k&_QH0C<1Vx^ftPl4t-N?WM|Cp?OnMxU9D&a(Y&dU_-jRda zo%+~|DEwZkvL6L^rwEVTD8hK=Fn=*f$+D>q8zoo5$`7D;VX}9hqt&yP;>!e{13Y_( zO3%FC@fYU(j{E2Rj@@{_FH6}&Ve}yWj-83WJPauX51xRe88)Qzq)KRfc+jfner`@fXUy@Wr?q6yVPdc&94dZSf!K8~JTUVr=zholRw zQ6;Ju6F39!Wsl|7zGBn|0JFzAbLnVTov1tm>BO9%ppNl`suLxxRiae+pOT1ImjN2G zp8?O&l_YZ_)H{bd>-U;;+#I<2)NDj4Ia~7P8(TbO6moM%yMM zz=~+PQhQbw+Z!;kpb|^!<8nV#9V5JtX#V*;i|$2P$qW9LIBCukaza5ZBJSD9{|O4X zeTCjBEVV@uotKRrah{D4)Vj{bwO+&x&t@Vg_0NOo@1za=gn**D!+$a@lFpsEup9>w zfuHVq7NrH&nWNfo5!Qau=QW0P$K$tN!0v&sB%TOeGYmvJ$~;~eoPgR;m90^;O%1^W znM*hY8Xs@wLW;GLZTV`6Pmo}4s^V>8tE`$wl$^_~c2{j1z`tnuqnzQGl04!u?FGzt zfjf{cb7pYiD|*}9C2cif(dy9cePOId4K8fi8$7On5kQQ$Pjv# z&^`vFdN6}rCX`O6gkT#*|M06+=TDUp#6yHC#Z=cF+Nkunagj@YU(JX%mr6fQVKzQQ zfq$m5ap=EHqQ4e`UF&Uoo5J@zo+n&=9xqWLq(Y7%d+RG2Zl1hrzGAa94JRw5wgn`` z&6N9%D+CTN4}axch8~RFa*- zXmmw9D%?=3O8J~8SUxq3@Vjt(F9ZxD)TYtPcW*FO-+z5Rjy(84#H_L1jilS6!#vh>Q-`P%`ed` zUp*0Uc$*_px(k;p{4MB61FWe$EepavT0DBl-e}{&eM(NizE)8i$AV6w30%r|styDO zEhQe58?(c>tJ&}7>BZz<_;`uF3@}|Hud*XNq=}A=grY>;|@x zU4M0`+|zS@3b*tWaN(n4jk6r5rHBvOE&Sm+n5QYFeR&C*Sb_MH8~E&0Wt(}JJ~PBI*C)JYYI zUo7AcnEMHJOoj0m;%kFu_J4|UQE%C;IDdJ5@$BpK(b|U*PlkDs%r?Jy{`~a(tns1y zko(n_-STHBzdV(?M)7s;&4`d)5yd@$MkCYSzZdLJuzBtdICBn-&U10XDn;mv7I3L& z0sRnud=f3-hLguycz^voTqd)RPe8c}^LhE5@yW^ZGkiD~(QKYqpN`M*Q>$Do+kYNi zb8d~!3*v-FA3nf0=EbBgv95kbU_Ac5T#={l@9*Xe8=WWTghz+$U5aFdZ!`Gl=rw2w zudqaX>hmh*mRQW>UZg!{TW5$PX)$^UeEbGzU#X`OBt6Iz*}>skIr**MLojX_gBa7{{&b|?iPZ=R^EUK!Tx<7>D(h%9+9HvEF+z# zvNxE_Fm=T0OJSrrS4rp9*nb;Fs@3oSNOP8w&J*(j$Zv}{KDy3%aMwX2b<0R%f=Mt< zOMe+?q?0tCV;&(;mGQv~F=7HEq#r^xO63OpBm62BEa&o0VvfHV5uUPip`i$W^ukHE zR3}ZWOYucFCO2j2u@%{oL?TI?&Z3}X2@!RKyn*OQ@~EZP3+%b2M1Mip`xp8hyAi4T z6ncR>w=5{T;I96gF9mt#G%B4}WN(mH|BVOine(W0o}3r#eS>h)%?x+TsbT`XZ%fA3 zq=@3Mw7{E)fj;3h!AFtDtnM`=)TIR6r{souO`NOVtO(==+X$ysM1kIcda42ZkgwE3 zP{3nOi?b>xyEeo91%EA|fpUZ_nXRCON*cZ^VEOkDyRaeMM@L7_0&WA6F<+%ce#w@A zTkbET79HeKj>o22A4Uu0{(#ie8W{mj>1R$(_VKpCWHI7Hc0*(hdioXduN?Asn%AF$Y45FhwL|sRi${Fk`9l|>o{haz)00&9`YsfQ~)+O5}MLb3>W}v zfpgX+a1@U!%EF^1hfY`=O)^eF4M#^{7ht+u4F5~+q>cr2KF((9x@k&`rC9_w7^R`c z31MxX2NB2Z$A7Q2(@qZ%t-E6bP5)E}uyrOj;OBmK>21uD z{Qa9B*ndrt!)?mrPsjq2;z)$WG2xS}U;EX^+S*IAnf}6YuK!jZFR8gjJe=o?_$kgH z7CcKRIa#$J&hs&|qfPT6`xT3Omuvc%*Ur$H4OlAahn>6k6k;qqonDQqcj1CJ#(SM7kQBDNC_l862aGf5xQ}ATU)h3 zo`1u`Hyd*-J#h`Wc+@^MblwXfnc2HW`}FV@Cw2>xd=Q`$R+0|`;Ei^pMI?O`(qUQzN@}PFQ-|%MA z?_PY7X2S25Gx9~=n9cwb5JX9oE54rsZ54UYIOUqf9;8`@1Ys%uS|Ar?&`jkbRptUP zBdrk*X7L>6vON(SK&FXQ8$t8HpCtWgo`xdU+^2Ui&j5781O{6MZ9b513MK-w27d;E z`=HHK<<2xx8(6-fvOkEfSp7QMf+(ly-J$;LtafNxrA9Q3@kH546(1gen; z&|L8tjg5k;MgxtCSdC_Z|6Ci*AAiBflVy=G-dG?!;|sA!cZt3m*V#C@YnVMK%xZX2 z{jfH`cNny<28Toq1u+j9C>Q$EJRK;_l4l`UT5?AOVe5E%G2+bx<&9Qx4KQUMC>d%E z0{Y=dYXeUirPz`Ru0U?$7=u1jQkzSSfh>GD%Znn;qh-7ebROXKUq@3uJb(P7(vjDc z$o1RDtU7!6tjrYW&hs>)py^I0GwNDjpOpcn%?e3rJ+;MPvj7zrR0bl!Oi%h2tBLwj z7LUfc8y+>S73aJGZnuCnA{T6Q>#h}jNxrkERbTGf4(tB>*_nlPPid13K{j8K7roKy zYZ9rc)((nn%alFfu}n!olYdef)J`sC^gkUq+k9s3bXPOhOkm!+ib63(k_IS^k{!Ny zdv%Dj;t9L0sCu{Ru+iz_luKhlPki{n%W`4djdwE}+5Bc&5opvnr=YK^cu}OlAfIMN zS40wIcD^PNx+P{WatDxZ)acgTvIato&KD}>tWr<3Qdl3NHJQWp&@)$GB(wH* zBeLpo0dQX@YyU(&HZ4ech)SBag{hoyHH9JjY1@u$USwRm4XZD>&&JwCkqX8ujZkIsp#z~0lYc%kncy-_E>*TSagV#0f{D3Cy(=xPiBNfV3fQyImw#ZUej8mB zrEKt0J>>P6o(>SIqBzE+k36rB*#QzKz|?=LXIO$bDIgxFu9G6&dg^R$hF#Zo1%z61 zrRlOhJ?Y|#Hxt0S&fJQ$eWRF>lG-M`#w^*-IG_g zh>mp+?hfWJN%-Dq^$#De^Q=&orq+8w-YVSqR@V;rCjERn zV7KptEaLoCB$qK?;RkO4xzpqa81!47h!{V*hU>17-|+0)G|f@B6?rgZFX9-t5L00( z7GOyrZ_cvaLTR0iwSpTZphiTw3N0d6#sn{3P;}t@y?=$JTvwX{zSKEOwfU@cIwUeq zME)R9C(^zi+M3EIq_#y%towYd-4yqcD&_Ot`zv>)z+4WrGo9E8d(ki40Ng_A#r__E z>f6tF94Jf`z2lTTnkk07URg;8My)lcOBFSDQlb_-SE;schttnB=?1sSeWC0h*s?0Y z{B4ECRewgeV|;+F`8!*tNHsV25n8LG#1(2DxBl*%x)aZP$6Wr@c&@u#)aC-HtrvA; zS|nNfSip4=Io{~PW952r6OYVwRt;+J`mt_D^!A>5(P>BKnyFh}C-wZJJos5%wMn^h zj7|f02h+%0B6Vvl$j298Ku}^muzzPNI90zMseh*ynX)R63ThC#u+%anld|%UE%e~% zk9vikJ>ip#66JHRk%!cz*Y5t|_nY?DY=zn+1<&mol#kcxuIQaOaeA)c?RGEc;M~t6Vl}KzvfFJ;s9knC7Ak28pAoz~Ry2-hZm) z(~J6+XA*rTa-J43hT4Z^($!GFQAt-cHqcBD{`8bhkXTocj>T0H@#>+W4BODwW!WK4 zHcARSZ;^7yP#5qA`eg2u6>L9_CR$v20qwM<8XwUhC9UEez> z-RjN5s^z*Y&Z4)9;s$vzkDwhN>9M&SlS}%9ATZV7L*>ogm0089IvTo=p zc3PcclDM-ds))XdLDh7|dDws5g7Vs%weg+ovj5bz^HMFD$@aTA>0lU|l*jv&^6sDWTVD5UEao`t!eUsQm}{ z87X7jV>%8POjYUT^nV&vGnCacN>ITZ@hP?H02A8Ol@y*;?{@3wU*Ah~@03gBF(qqq zAFCPF2I{C(*rgf4xh5Em-k!!dymOj+c&I1A#A*ntjZUXoPPu(M0F^Nc^0oUFMpXz z^{x(c9e{PM65R<3HuYKke)8g2g%P6Ho)jhvuYEiITI>4mi(?MQ+oS8=9GSPnbx+IH ztLvV^y^iaCJY4tv1oVxpBKme|Gc>8kyxC{xT_~L+tB603x%cBGw+gzuF+MDMEKNU9 zV-+%YsH(v!MSozeN*z5?M?*2BYS)|ZqgBWQ&y;hLmn0sz`&7;3nqgM{(T)UH?Tcgo zO4yuAP-Gc=47Y=RuM!yRCqng;VK(Z9EFCziaJj0E2UE#bPqn2kKp#TAZ*O1A%Cf>7#aLi60bHV;gM!(WR5p9FJG9#;w5RW2^`4Z;7OH(IMop(a7C{N%*ize zU}KF*2r&MM2%ox{FvUxq47|r`V4J36t%tMn^=HBF@a;4KBU6!Lq73VaR)t#CWGM?u zvK3(Lp;&Z_ZfwO~tMJAz^7!^5K?kbH5>91X4u5zyD*)Zlhps|1e){R{Q${Kpo}*cv zPiV-layD1qy&FEeRnSnrPd5z3+p;`#bvJCCP_6>9*8YmH7!D46`>#cWjQ2$7o-_<# z#%5idI_EQV-GZ*k!zzlT>JLj-YqFY_mu5TC)^pvyoxKEwj;x|Wcd4J>h#a=|ODLiJ zlz*!knS(X={*c;Fg_@B$4%1+g>huy_sAT<=l^NNGDtg+Z_MwB?9@T5rt3|3ad>l9X z^0+*@#TmBmN!LI_JuNGiRR>7uCDw3c9c)-iN;m4YIh=4m&K`46p;?_nLqYO;p{fXN z+mlsE%Ub=d^!D$sfBKOrB|s&n$?%q>ynk2Zw57V;-JU5>7XParFLF^TB%blD3Ejm@EUZGj5QayCV^H4A|b;7Bg;x}Nd?tDA96X1x73k$*|bk<|3% zkgrI5&Pj1t_wuNmI!WEU^L0BmN8*_#1g8$vkJUgqmqYa+o~Yuzih#nK8X|P9URg*- z)Gr_O@!ORC6eb3fiIhf$PBSD+*6ELY!rjN_xIEKr>WrvZyo`iw2cM|D!(MQ3Y!0I{ z>y$>Rp(K-0e(?16AAkS9?0*_`!nGHubt6dPuAowY8o%CVcSU$?j>vNvG|I6a@;lLZ zH>*;G8HP<3O2>gayylq)j%ROk;Jg|(z6&Lkj<=ujcPm%cUd6}Se7~Ut3iUyvyS02a z+OTaJ`Oc*NPz!5gL18Ti)(Le|~_LMzoVZt8l+_!7HB#ed^o#9kZKPvIY{ zz`@OG234#XSPSSstrChhY8V*rt%;ZuoPft_o)%pPc0$)NWyC*wrgHCd4E)T z^pbT@7aFY?jngQTIm@GkP=95qdzQ3aor0NvbdE#K<%V~!G}&%ZwF@Ns=SF!!^^He2h_4yT58wX=-J{V)qgJBgF=h3Wvj*OnkKUdQ_l$lM*(}-4F70XBd3{nM= zNJc3hcFMa z%T?+~#IQFsT|#tRevd49#70;bC6vtzG3gxZJ;lR zwa=7LHl=#oOfTPo>8qr`wCgzTGqR85OB;#9VlmAJwY{Ul@*ihQTsuT_P;jZ5Ivdxr0LWR)B{T_hlxcmNsgOnT zA7xouRShQ8Q_1x`Hq_?!p_KhR&&6U{E+Zf*?oQ>Z^0@fSA%NXQ)Sjf=<>Ipn-1BJG z#pmJjPa$h23$*D$>xS zSsPTmE<>mX*66WCo2xR}(0hjum~;Zx_Gay!)-GT|^Y;W3tBQRd&AL1uvRiy(s#TUS zEq{|hESIT_zy`*b)kvAqvi*Iov^dDvkULZ}Gzr`lb^8cBtrTU^Y@Tmxe%tTDU&PKZ z2j6u*)K-Q3{<*YqquXRCqhH0rQ+C8gx7&M$`Iw}MH(}D&^{(3J>g$5Pp{u{!eu3Vz zuFf9Os&RN8x1UuRMvrE{j62CH!qB5xH-C51dBdGVBG&K@mB|#FS;TH*^8J+@*V`VEuL)_;ZZ z!3+z;XO$B1=o{6LT}R|v+;!)GoO^7)HI1>lrnDiX?UtQy&9R9hBAf5!#>r?}i^puN zDLKm`!}Ed_!Kn!2RgSkQ#+Bd$AiqPFH^r~hH5%4$AY1R84cB#jM-p=>O3Q4nsU%z! zSv$SBeNNV_96;>5JY6;kMN<1se1CwUABT@syx|5goST8++!GkAViP@@wL#K#R~A0F z++&DX<;p5Rm@?1~F|P;5!2RVC3#m|&559pS>S_JaxFT z3SKDKEQR%QN9a%cy!wG4s{p-2EV0>0xiMk~C8Ir&;Y&#mQ5yIhzCamjaVjp+Gc92dZSX`p&Ls=l1d1pjuNb ze->ZKo&`E@U`{Xf(UTX85S_J_b;tyX@E`=Rni_v>(6$$w1x7VMSF~*0I zAFqsm2-l`m##Pn~|2llsWB*RA>h^gw+lvNuYE|>@zeND{X+KeWr4NWd)7aC_Gtr9(B}_oJIg-xkDh(n)fxTpvMDfS&ubrg z_HU<`eRw7Ae_G0FgXt&F9{YhWt9Y~j9`I$3aqGT9*6{UWNq?ClKVPzUD!(9wY@6n45E|gQ0*pq(oU8HDGHtQ!n()opG zeN2>!CLS2AIi-hI;XW^axS~b(n0-G`Vh(EBI*b3tK}ji{)&Ye1!=?l-N$KF#LS~v%hW9lv%pbmkbh|R0Wn|tRuM}cqql*ew^;+(;OV`bU_y&+-_k8qgawN=B|TyjicT&q^9^f18#3rjRRqf1)w~ zi72*K^mp?827%BOqV6MJN0c5BBfZX*^Vmv?DXbidVZ17}4wOv2lDZm*&hww}`)I}$ z+ka29sF67xi_Z+~xWZ;VJyy~juje3>?T1{;q?&E?D`}H3syLLklF?`?6G56aq_IpR z$S1gV^hQxGt76YFRrdkpamw%UwnT+5PC5c)wA%>?U}T=35kYzJw@Xn$lYQbj3+QF5VjmkHRpg>iwr_*gzwD%;Fw30Ob5-`c6%F7A6!i}{oK*iu#%+_lq-G6MI#!6bq~ANZUpkq*6UfFflb~IS^!kD>1KD71kL#)VTxcZ>O1x4x$w2jTP)7lSV6NPb;bQ z$xJLTI3uebSv_P@<{W07&3Hmd*Jw3}*2e&TDFs_C@~ECKaO==u4Uqv`Uw`M5D9h&| zUy&s8BmtPnBuCH2+VS^UNq0lXaV6KZAPnoE$Q9y-z?GX;R|DudB3kCgvtQXvm6X%n zh2&!NGYi669v{VEG7+Cdzvq=ERkg~tXz8<(?lz8I$=b$ALCK+ttZKmOFv(gbF`IOq zY8sbtP5-l!$xVH-QDRN+Lx25(Qf3+?XiQb12g?=gvXbsLj$TO%nM4z2Mk1t=6~oO? zD8{->r}+c7KIoN9D)U=ui~_yMDBxrtu5XUQ(TIvbV!s8A0!&S~#+6Er8`HkP9xG`M zLEo{Gx8>aI?e0Yi`l2|R0vaVDC4sZE5e+L@>QW}1QdNj!GnEe%q<@jVst-uR+O&~R zpOtjAaa>k%LnZ;RFk~mzjvVWCq#H*l{Zmp|5xjI3uue#rF4t|5D$4%`GO{p2LK`|i z$~xAF)VKjVmegk@U2U8WD=Ci9eIc@-o{Xh#`TIs4O|+A0!3@hPJ=(RgEr!ZfwB#8y z5G{FWSEdR1QIv*CZhyG)y!))AtBtd{lDjl>g=)BbMN;OSEw#E0&E>I`1fjdf0-bAO zNf{=i1wKtw%Zim%@hu}tg1DgcRCErs=+4n~NkLG%&$!P@y4pA{D=CX5s&%zNOz-3R z;*n}G<(#9{p#iXUCE>v4f-jI|JHeI5_t^jxNf*ViDdaHfP>}w`7f5!t zyKKBy($&WCSjlqvP|cG88Wxn`GDJ5J{9;Xv^rP|GrA&rr2IdS|-4SgGxpobf&N9WZ zqM{QE4rZnHwSRvBebSueqn{f`rliY(l^k)mJEziuU@Qq%MBPAH(#NiTB?N{Dsqkq8qtfZ@rQ>~~9IdbxH zy{dI>dWNbH)E1e#Q!ZZADFv)x)jYnGHJn4G_XiXsEM}`A zcM4xZm-NtUCC&L_zKl#tfI&Ic2{FsFSWZV<)Ax~hKoh=v*2Tiz0p@!tr(dor<(Ih^ z8E$XY1Am&883|$kuMg%FIeU^xI)EF_AU-397N{=(S#$|mD3xgA%+NbQZ{_-gDs^(> z_`=OpEcNZJ5J4D^{v#{vvy$F6j>RjjzPo2>3TLXw%kcV1`ne%3Rw4qTM;BF&T6kI1 zu~}%MdZ87%=5|^I0^lPKZ5iwWCbpuJ-or}v6MvFol_SWVHe!`#Mw8PhLyiYCty>lQ z_7$;CAaL+4I-zyYA5B7KHB(7Q4iB&Cwe;|?%yO_^BCM<|aCrCvpI;hZL$m01z>0(d z3H2!!?nNF>?ep3YhxQ?o!o4o&sZ~LD_kFM`zJ7RE3eY8crD{oVZC?A3-uub!a%z>` z<$v(-&Gog{p!-1v`@}7yq2id9R0>2#GJe!XJX#XjaJKF9tc-{2*}N#ZDOdgDGn@Yq ztO03t3)P;hp(|vB)t*)9P)mWkDOX1AAdPyV?NZWUnQmR#GG_H%B;0_*AI8vDuu`% z*CHFjzJc{I=_LDB;)GA#FD#19VkrBPitcd!>#$#^% z)cQWPPW{mkHke$oP*wS)stV@OZ$GEsoZ7=!UbCTRy`VBhk1AQM`l2~;hpAVOwtubl zhR4*c_AadT0*|(>uXmHq#Ty&ral4xnXISW5(68*&v31VMQxjb1)R`jm9>JM8vBqBZ z^vs+*!_>CDiqqbibs}VswjI#IO4(`esXv4`voAzlt36tE=W!-@h}C`~B#e9X-5+$E z*%zi(ckj6C-P=AAYaH=t+Zrk!xqpR69uqTXw%E_a>`OYs)=k#LvWkO1SL9>bVEX`i zL=JPRiXE~!=}R`vDJ=FhOKW85LpFPa7W+cSO*Qd#80GeQqTy0DXQ1$ylBsR`!tz#n zqM-|O28#U*-@XvBNlz5bo$=6?>}v-bopX((cPh;qj_2`Y+@^t8<4WnG!+);2Il<2C zi}Iee&0bBo!w{^I#-nX(AaPY!O`TaIi$~km@ZqGcntHMZ6Zf|5%inIPt5mB6v-y+0 z>ajcK3=?~rmo}p?AZK{?H${;ZQHhO^Um+N@AFpOy8q=QsmjUePAcis{b^+lnN00{naj5a zbvIei6J*be^ZBb${Q{qCu6*{ zfQ6@12LTpw+e`D8BR6twWy`e^`}g(kU_=gs~rFIo>>t?Fiwu(V-_LH zXbJmZ;U)rC_+-Zgf9$^(|GWdT~?nh)2U^j*?rJh9`f;kLFkyaM$)8UAf`nd$wH+jTTOsE^m1@s9#Xk zZpK`>$6PEsdIFx#v0YCb3oMc8S!A4RZje6j@k?ut=~Xnk|9NhaKt63`fm#(HTK|oH zpXF+%=(EB73I5-&$Xc&A=38@dzqqv6%UVY@*j#TqZf2i8Lq9w#kTJmjwb#mbyO?hc z+1WeY!`EEg#4x~Bo@Qgc$wqm zl=qdnu58G+)}+q7l4>Rq=d~&l)bzYYP`SU6)m*mKJoT0*nz>%D^YhN(1FH;`R~uQ6 zXR}S9^ML%)@%3}a;QGJvzCY3frr=$4^UNy$`FKEvYWwBhx3MgqdY0vK3g={5uDN`G z#r#VKi2#A?xNr{}dC|?t+b8dO?&~;551VPON43+-)WZLCNzlr-`MG?im9KaKb7wPm zAKw{?w4$i{Q{uK>S7%VT5qOzG?46b?}Liw4^#Kf7jW21Ta zk0?dBx9g8Ar@tylauN?N$nX!mYy%aP*Xh>=zCdzhNlq0PYbYY0i1_)a@ty`|D}gL* z$;Pr^&t_e|eH1;pi^bP7Kk}&GR`pYBDcqXk9nt?f!}{76QxKU;eIgf_>0 z<*x0;9mtoxjw<^jhrj{`{3kDf&9w5Pg{OYY0htCLw!)K)im;HYEvlt$f{OC`XS#xC zepcGrm5ET|=;UVs~|^Sz5k#GYZTOZaFljtv!u_-2G3$As}D>vw9$+^U#c~ zann<7Frw4c;HN}|JW{uX`)zgGmsPWtrCEy|+Wha*$hKg~dTuO;ue6b8^rkPX^=$Sj zS?bQ-aGLu^b(ltn@fjpM+e+UXE>;Wq%=^1)j`M!LTY^aKIQXBlj^sLJ470D&T!)RA zKMoJpaSEf7`1P&;pdm%_8vMN}EeE>JHI>*~i=`qXI0<|)bPW3u{J9H+@c^Sg6Y{Y5 zWX#hw6OZ!C*_h%>xN2lc8g_OF-^ZRl)2o*jP7#eHuVB*Vd-^w=TZhYk2r6Xp((L(G zpmm&8I+;!H(R}EWUZ!V9M@O}yVQAAwkSX(i&peyzOqj(1GL(ZRD0>-{iA-siLY>j> z7g4Mx>-(yo#)DEp+L>aMQ-)zxeRa?qiw^fSoSn!mplTKzsA4ly_EZIEX3{^oQwJHH zk|L(LctV4XB#9Qi~!S2dVvJ-alNj3ZRk25B7WuSwJU zA`MM6#GKTAlG%4d@+xKTs$)>WZJT>Xw$L1Z;Gfe?H*MXHebP(!oQ=p*7nIW&^v_l9 zl9r0Jv^4aBaWQri_ts?q^MB7alL^`sAlP+aTOg8saLbw3)tb4XFb1SS8z%$Hz|)f?a+&TuV3RZ@@$HZ2Dl z#04`VvD2MIXo%t-AkQ~K)22k7laJRei(Gfh8v|VnI=3i9*Eu1_8L%S!n|6vyRvmX@ zFlZCa>iaTYgTdc0jMBuk@jau!H^8>$v*%+)Mi^U5wmR<<%!h&*uthFo@U@|nxBx*; z8eA;}Ov-?15V$R((bJ(RBjtb?`;1)=m3pZ-vQ~;PpeNH$Bv|)fKH){Do72S5dz99? z7?Nw-s#1Z@SGil`;p^39=aYh&TK4#a#_!$xcFGgKY;*9woO&#GMaIZw;RG8x=I=4~ zXmt%62W8(8F0c6SyVu@g?NO^X3V-N9WgVme(tsUeg5pnoazIM)!-G=SHXZWpHmsri zNdRP|xK)yxL$#XRxLs`W#0}!e^g@S)iL*7@V)lD`7Tq6t-Yb$bL8l z+}f%)KHsvL%K||K%1&?~BtrJgBgB`2LMEifUXN_Po@tr7Yd9h^qffDV@o(^NcbUTM z^WKS>?KXTgnNZS5e*HQck#+wGLQQ-?Hi(UW2mfw?8yZe06IVMf@(0PEs5_mzABQW2 z+SY_ab6$vmtl4k;+@Vj!&(4;Lg=^MV(s^Ro0Wyi9m_PLNh=@PQBsh{7WcL87g+rh= z2fX>ox27;}jdh(0$4X-jO`_k)!`LgB2Bz{Y!-<-{&1x{g@Ln!Z1VdE1SmpgnDc(=5 z$!7-`M+Tt#`~>}C<#_ieMalj@6@(xG*l(cXMWJmX$D+}BXS3P@S;US#Jxz{>)PCit zKukrgZV&S@wj;Qx1|?*$$^bX;bNu3rNb)C)nl2`zco#B>WDAH~y3~@o3A^ZhBo8}+ zSa>IQ)^icd+|fK_0Gcm|V>AEmGB$9tegOOO2mUogr`@=W zOs}3i$gUw+>OOqi^Z_Wp?mTLBdqv}{Nk#`$0;6(jnv!7N%Z~jf z-_EA}W$ux1D2qLQsR%q<-AnK1fc7Je=q|t`zN44e^XLkteaW*$J@hs{pT{ZW^u#U( zc~r>o*b%6w2eM?xOU&&B+PF@!H7QF^KN#zKDFuV_L<%3(%+7y7u;!nHF8t8u zdNd%(#V=~_e93kchuuCt4q+d8Brk4WU(Ma0cLHAm{~ph5mWNX`FY zCno<^`hi%c5@1Up{2xdmSu%hC`+tySA7vaur2n4&7fA`0?5m6e zmppxdjof@-jN@bcU*ms7$7DiPLY#j{I$+Jk!#L^x%U2{z_EP;}H3m=NkO=+P^9QX+ z);xoR>;8W^m(4cVxPrC+XTTq-;(9!`IEwePx>HRxT-CejR*hLfCY061j42*YyT?e` zm_GvOJsOmhU5FZLN!*6jH*USlJiu(n9J`MJLOMB46gI!TJt6!!X?51qx z`u!cQpXvMtqzE5r^Oy}1QYWqf@4X%|s-N|$C=JO5u24BL^BuOTm`Z&S25@N~l$ejibElkr+7J1(@ zJ&R7dhvE%D?vkxd2uHOovxtMH+$3lU8l)C5F;=Ael~ z@I!}3F!;n?%1LWT;|IA$rO$7ne6Bi!jz80auo35*1(?8?Fj3pCAOOH}yqizD ztEX#tCEP*Gu6@3yYBjJ6FVcH)Cr!dSje%Nd@0{L#~GDs(+bAgERF`Ys*8Uv=KpK@!OH$U;yDjh%)e{1&LnA>)OA@y3 zMd;?*PBNP^#V_ghHq~@s$J6Qn%GRRouj?dVMtfWy*xK-uTVn1&x$X_KB__DW+#;z? z=3nfj&C7%1chg3n=SE1&h@L1JR`NA@m#iadc791M=^(HrbRu+ldgbwt*iKWuzVVsI zxAFs&Dp;2UNHu=M^Dmxzo|8YMku{f(n2C?M_W9s z$|{ZXBSZgnr6H!FZH{ja%H_cp6ZjxrlA4SoEAxg)nOENv+_oK&CLMbm&X$wBoYEpk zXaPhkn8S-Z(Rywq`_OQ^EsDXXiS&_Ziq1ZJl4PqbZErLHGW6 z@`%IY6l!_UQc91dn~d3xBBGgMI50tfb)^JLC^)w_XD@!_WBbwKY@wcjoEC~P>EPr4 zQd}7l@VMg)^;%cy?*DLvds=BH7z>Fcw}#2aK^0#=N(7+Jmh5FY6rO>56`?qb+{(`R zj?8@zKzy-T*dX4TH_})>v}k%p8XOYwvSy$9xr^>KJg@${kTeE&W=7^Sj~zY7iq`pa zHX|5ZZNHC0>jLZjo_?~WGH4z@J2^1-Ydg!Jdt;FQ5c=7C#nY1#?y(h>%8;(np!{if z{cG#-R0R;CEs%MGYqNl7`*AS(+|2(dHM;g}d8Hm=!YkMJ135?l{59>HtKhAf8)uie zgdCDS#;@KE_e0Wqf0~O_&_e8J3~}8`c=Q56d}bWn?|9bhAe$%K*8Lp%NTl?^+3LoI zySlakTs7(g&|C$)IB?;=z8gup{-4vVPfdU$Yo)I!P~zpZ*KQ! zU1V6$r@ya@L>Ut5IcrSvgwM9_ST(Dzj}Q&mn&-oC_iLLm+tdAv&JQn*VV?l8EI6Vc zN_(h$CywjWq&F~(FX#1?+v(P!QaxQ9i;Y`Bv0w}}i zy}aB%`q{S)Bj9s&&-CyG-s$uDK9#hKnZ^+Ix6-PfLRcPLF55$qKe!|J`aEi1?^omr zyssI)Xm9FGG2dLbo~3vH2vrXc3i|8EM0}LA?{^Ql&eEDa@Ys0PUA4bx+?=yXAw1wQ z@CFA)bi~B5l!K7Q!kkoaq#T@0TGx!l7a|Mun9(N%`b%^%&Y zrmb`8Un7ni3}tl;J8$iKRrA(r@^QuSA$GtXe|_dQhh+7L>L^7QB-RMG#x=UvomHsC ziQ!r3a7EZKB3ok|5O)>Sz0E&0H6QA}Eff92x4PY5Sl_Zy5N|5Y%ouR60T@(Yj&yJ9 zkqRcb^DJO_+D~)3`!@qZ1YQywJX)i;=54Mox!cm0`3|+U%X^P2={`&<^=y|EbpuC_ z^*b3QSgxbVCZzXGnN6uS&;;N*1L>66*Kf_gK#1!;-ri4V(uY{sD}*r6fR5=U%+_HA zM)6-$mctnA*gilYW?6Nn04b1N+Q9pMzLFVW&A=j&2L)N#9*B|hZ|mkC@P8iR8f>y7 zPTqt!k)od4X{L@I}eRcHp{BPk0K^5=_8!CY)`86upar^cf%E!Zs<;g zulJ9QocDfJ(B9lngFgBp!ZI%1)=t@;u6&U=HanAT&)C}RU7-Ry0ty)KI3C=pk-sus z6J)OaBiG%=2W%1~;+S2WteT%Xh$71md1>2;%=`f9FZWKx9TljrlgM6flQg$R$$$vU z1g_Vf+jCcBp=1!`7FE6C;$LIkmzxmJw09rpFInyv=fn>Il<0S7^evt12)!BVBRbHW zCR?*chRIUw5HCqzfV)IR01{2d(R4hdANSK&EnJa4Z`aNNzX4)R1($v!BxWQh$`L=* z5zm)>*M_)Fv-rJV$Q7^Oe&{PAN*}qCK{J+^GcupHwyoMyiQGKHt!O@#Wy%Lm z+rn~^6S!5|o(yk_|2#Q*ctW++n7MQ--K(Nc4<;bl;I~Z$0LEmOjSv>R{`%4c+L*^t zjzQX`WncyPXytXV`}y@c!N(MG2*3B41H5}=^yToxk-x>$XiV0?lyinhpw;x%kp7q6 z2?NPg-ftz3=82ZWPoz~%Rj3Nxe&`mc3%YAcnn|t)e;Htg{+(=@aAbScF|T4f!+B20 z9>dr=0Ien~KsD#1)QKciKQkcg!0Y%gtUa8{P0&F**%I)#)S$rRIFMz)3IA8$G8cR* zfxXdjk{%9<$l6=t^s@XJ_L_J1fSq>Jn#^kB`d;kOovh`1KmE|2dd$vdUj7#P3n)M;q6flbm|o$!>9z;d3)pM#8)_OQI! z7Og}#0O`c~u(l!kjM&EzF`A3RZj<8KfcmSpa$&nDxdwb0S4qdd3tE_cF_lD1)PES_ z>dp(xte02^!^v&;5N-LCGP2$b* zyUiHgvPyb2z14A^HaT{o@-M-nbR~lux+wx^K=SLUQmG@IcU23c0oMJH`U{QYjI_jC z4TA)*w`~g_9SbQTi&3h-A2=~@8oAwhmCq#A-4s`5cPBD*-DqOM z`PR-Z{SG8;RDDBDGf@j2v)U_yN)iIg{b_gud==-F=-4?ig2cFuX|I;JGjeMz`)Jo& zO|DWqO?sKZH4I0OT8Zd5VmRbdV)At~fb}tbx)@V1GZ*oxDu{XRT`-p*lQ;?Nb!s1=PeB9w9ACp&G?_OK zV{0*Wg_r%j2kCy5CyHGKcnR6TG+7C^KM6_wIuK2wJv|SJl&g;1(5w~z1CM|ak(aa@+}oDC-k?3i68v}($u%Va&QMsnYLiTf zP`!&xYsXv%5+c>@b(~_C?S!OCnrpaw-$a$|=f>Le2fZ4%bOSivZn6#%!cx66b&&bK zxlt>R`|zC*9*Fm$KZK=2%yUcH;;yw^1`<+3Qi)c%5l6xObWxr29cStsZo`*kH#}ZJ zpz%S)E@a~e{|8c28yE>lea8Z*-zv9ZZ+c~hsN)l2E%Nt?H@+rDAa~WHXw`utr_nH` zn{8y>Ey=XQfRBM!bLI%xtI6bTe4jHnJ|Nfb(TA4Wj7^Q9f$gqEcz9ps=`FWTeq}Vs zEkp!+?>_1Ln^Hd&kZw>W)%AqZX-yGmx_94A;sCd!9fD`F+mivb4g$u(%%oav3bR?F z4o#Ikpit(j1%;*q-LtwqkHgt-rNR6+nQOWjn}9-0Ku$1sdz7lf8~Jb?sEhfxjb4on zQUZerOsVp; zs^dkAbn@O44+;;UhUZt~tM_5app$^IGQLNvl`_HLVIR_I7fwOx_!=8=6_1!hflj=~ z%`?dBHv5^EoYN1B5%z}RW8P@n)69RGD5Tdu`&5!+UCQ7YM&98RR|ziD zr{$t6QV~sEEsnCoB-7It>8kx|f6?Ct)pa}aei{uB6$K(j7fN3L90$i-3Szpna?}!P zSNiIZSH^16S)C1HD0mpL7-Ky9iYG zM+L2geero+z703(I47PTCeh4dMCPY4JbTZ2GC#D!hx&ddHk>Ck-6hG9eTaGa1eriX zOF9H}XVF(b=Jz(}bSX4?m-2^pbQqF#soaayR498la$GEOODuPTI*6=bZ)(EBBHi`eqFr4P?OWU?Z-A z7Yl}Dc#2Ku#?r*yHo!KCN$&@M^o}?)>$CkuZ2lo2wjFcxRICYuUh>h_ zw;I8wf+t?@7qzI*xBJE@Yp2cCG0>mM;#D4)SQn`indS)Ykmi?m?_{IUgVd^~?H8WA zJXZBT`mQ5Pz$7LHZL5Z1!sItOTx*0lj|~TMMBB+E#byuE=toQnPN38OmAf*m>hc4S z%H`cSz?7gfqK?pE%`kYz+{owKx2wp%*We9^7fkRcwVQci@~vCnGGafgu+C6LDQkni z;o|%SdgpJ?6$+}-Q=CzHRK=3;!-JF3yfdu|;)4CYy#B5=vP0PMRA&}6LViMndciF0e#t0r(~=6}4ORejib{RKylN>P96n0?ZXv`Dloxc!wO=lprf9Mb zN>D6CQ$#N<5+8iu9Fj||*Cw_zU2*TEIxknuu2~Tlwq?b(t{QHwdguWsEI9b~Uf9}} zL64zyu^TE0VC&#)L5f9UqTy(>z~tu`kQoq%TT zzDvg9@tBU-xcly_a|_qDL#m4m)%qjvqoCjh(g-Ht-kng)jqaYWuwdK}Oat>C%ykg49e zP#J{G;ly8Qe8_ddysngsU{vp$761igU<$5DVa8t@^FG%D{Y@7~kCFi#8Z*mNE85cC zo-?;eaPg|${e$4)6aH5-un^56`DQjoAAPA~XAcrI^ z>WJzaUUY|29IsWjd`#kqc%94RRKAsl(tn%H_W>S)VH`tOKnKrK!+$HpLn;O>F$9iN z?4K}F&=me-PKj}(!yg48vDqChv5s{!`1Hd7uEB}Nk88!MG|k=-Hr{s;mAUM1vug6` zSpJcSZC{O?;q?Z<8_ka=h%C;cs+WtjRo7t__=+AH$ou_ivxtHgtp%c4^zLzlXS{>Q z9hm-eoyNV?xuV3R+;LnDrdEf&N|#Z;uY{(X3=FSZ}!P%5}3o~2sW?8tCpx5ts$TVe9Vk~vuDh9tq7^H|#AqMk`i zkQv{={W>39cf1+1AJ-&jrO4?M=>*$dfFZ7eEML`&8Y*1Wy-L{ZDD+k+brK2_O;mO4 zY9w}4!RdT!*IJ)WB`D<1QF2hQkMINUqX!G(hq5V1!T^*;B(hd$e1h>0S%WF;RaE&W zW&Y7|gt3?S9SWYf6L}6-Y_Hlquv`Ol5-^%-LSZ=L5bqe_Lma*gwW4B>H;{;=^l3y9 zJoxmliqB;W##b*nfz?{-+n@f_uuh61`HS~&<#P?NU1Y3R@K+{E&pxZ?ki`j z;s%VG`4s?F_FK2;V6(kI*phLvjFsa3Wko!LWC!t#%6d*-)l{)B;ZuUBm~~k? zuBPf&-Gsd9RF5%cfulkZ#}}Gq+dGVm<0FX^-cM|E9jssr<;t>5$zz$LAi05f;qGhY z4)%vVio*&j2X}3AqFhEbJ_jgmxKW&sNvw}2eNCoqtlhq&LS3QJBM8oAWfp~SjFEkgQ!{Qqy z&`XbLp*gXqeBlh{D0M5VqZDr&lmHB>YD$%|l0OME%NKGwu3t6CRT@3}icfh2bO#A3 zp1?>#LDi@+uA1nIkSrKLgb6Qyqe@$$<5}dsz1=c2}$-f1NUWaHX58fma0#3vSIS(t?3$GlXJf~abFNUg!p7Y-P*yZSoO*H!G zTS9$$qyM4s9C4L%s~_x8hiIX5>h2_iPHCf5mIoQ8QlM3jP3tEr^ck)Y68664qMF?6 zD3>ZYHI6c0zj9!en>8m;PO0}xcAEkE6qQ14@^=@V2*Bt$TSmiktOxLgO1{TkmCG0nF?5`gS};9_B6{UlB3$G?-VKgEmjPdZ|2E3z zQ0l&B?;Qwdng#fsZTc6*1!>_8V1fABs}Fq4iVA8gEBWlWR;rAZm@20+48V}xUO^Zt zMI~n~f#_j^%La{3PB!jtt#Z5_Fa~EkReb0R4(^BW&EF9g_yHPqOio`}dr1;S?c>6!Csh`p;NkFFczUOx{wVlq)O zpnnc{cY3N}%Hb?&R^)PF{phMnRvp5ZwH8BN9_{^!&DOV4^t#sGy8z}O4pl0BMV*c5 zMtRuYe4Ap$tWYnE%ASvt{x%vY|9e-sy$23=?z|iOH!6boYNjaIOv-xIKy5O~y^h2L zq@21DiZ@0IIroJ;r;=>bzg;uyBSFkL2o8t{xh#pwRcwYD7~l(9-f|fZ<o%GgYX4BQUa6${HNNsTTO)Ppapzt&9m z5<;X`aGvRlK1=+?fe%VN{*I^t7kuF=^h621lzbWG73A2Z;0LUWy>K0xqC5@37x%^B z>`4Xju}3(6-5Mbm3l80dn#ZbkI-lEfecqtjb}ih_CWAG*uC{%);;VfAn(mYo(9A*= zNivr&E75%`^48FykGzi=jrwm|uSyQa{H9b>>h)J?MQfQsh0n(<|MINqioA zf822zzDBR!H3a}4AhVV!`_uZ(Zhm50{}e50{X8&&h;bbu$%Zp_s^YU{m;I?R!dqd2 zKvk2|l<|41LVLfdiLqm>`u?62N=wYhF4`iJjnmE-`pUGn0xpqY8NsaMan+h-LfEmE4@ez@XzHn`KfA&o?D#pp2gS#(Swz| zRn8V}A*v(dcgZ97D*|u&xb@?jLQKFKqmzZdRl%WKv%Odps3t9{fr5oC#ac^-X$~kM z4$xj0zf(cNYm?B+bU5aS*5CRAYzESH-#xI}s<~gqds6ix27qpp+q_6q$wY1cx#A82 z+gN3O0L@VwE~{>GfZB2)!Q^2AjMgKyAm$^u~oBc z@n7W+p$ru1=B8+{43xKj{1VT;Bjq0CrnzP-0AZo}^Dt!?YC~O{#N*d7snlm<+Z_AZ z`F75fI$5`Pw46U*pc4Mogw0R|t)Udt>;5AC4>LTE^Wq9TTsE1^g%KzIR55;Bog82J zkSmIxkvD?Y<f z+Ss&k>oPulP5_a58+X#YQB;U_+yPn1>r1*d-^1)telNp@%~GH%X}I)Q<(qWsRE_Fp z-#*pwVIt8M<=C};ls~KHy*Ywaz~Gi)FY+^#p%|_A8-K4n`)_ZUa#IeHzBsI6(bakG zvtAMgs%C4T%9o_Ts|RYa7hmEXfKOYlHIX+8qmk-7$^Fe<<8l7o!Dvd@)8v%6rPEvI z5m)DJly2PVG!t`8#l{-XLmdBM1cJumjN!*re;UC#YO}`}+Sz(BxWl(G=xlh&x8HeP z48A{*;bNxQKs^e%=+MI%a^;mr*JnLYocz3GsbWJ71B9-&W6^#$?1#SzTAd4|V`&_Jb0L@G(SD|bEPh+lH z|G_lezxGB$GJVii)mmjx;X)QI|x(Lw{iv4Dv`B zO~_UZ&GHL5&~a=>A3h)uz)~Wdy?xm*ap%U*K_QfSN~cRXolS0^=J6cM(FsPd1lLvx zUiVZeL3$)Y29&c?FR7oc1N`9;W&$z@WvH3=<3nLUY>-9}vzR5cvmy^#62z1)xTHN~ zV;o9WLOUU{us!{p@w;5nDeVtk0h`kfl{FjSy~?(p@WzZvy7;ye&|%7!IDhf*XgtSN zsJ|QHEcF*;A2_@@%%4KA^MP%>RW3{p>`a$*i^pdwtVGT0u;YdRwy#wEiuz14zuG_-5wSl-YKC z75?O#S8$^`NH~39nEcqAA&jJf+nEzAlEHZJjUOFVdTg>Z0s7M?$XoJZMeO4R5$(y? z8oZCS*dQaoIH9wg<@^-vL`WbtpSt+c)&@fyu~L$H#ZV;IGL;s5*wh* z0Sa^w=LNk97(&PF4mXRi5?KY#-`%YP-9tOtAO~6-bh*)vg-H=v6hk}If^Tkb07c49 z6utYj(x?o=3iLwD(az-1S%YHymgF&Lh%4by7zZ6o@L6by7~}ukiZoztnOOgg*@>~e zlBFC@_;Uu>|BdwtavjzD@|?l^2364BQ3X-GC*n&7NKW%fy(97K(bmR@(P^1#ZeqQu z)w)r{fL&YTPP==SJ2jSG^^Ot%0gBAQ-nXZs!&OEU9J>MEd0uO5Z$Pk;TTQqB_w}?p zUN$a5a8E>vf>~`I)xPdQvBp-~P(4wJ(~}+n>mTD&o&6N=d9=W_Zyzb1<@HyX1GVe( zPa{$sVD&BbQ_2Ap?7C@%#e5fwD#H#YrjX>4Gn&|i zfOw8Bq6#(a9IY+-4|#@#V#=veqhb?K59pk#Q_Mg=lg11PdN*!LC^gwL)K?eZkjrcD z6v4zb$90|TO-Bt2&)f?e&HrPnf`6Js!Hg>;|;W@v^-U6FfR9xnb z;OZ`dxuM&FNl;Px?pGzcNrf?_tCOo=JvS5k%PpC-J%Zu>zChb@<8YJ1y*LGcYOAwN z75}bbc_{Ezl(BW{kQ+oY-BqY%h?C8p@Yo8wYYq_%KPP%3P_)!z;_Q7#FZa(EXV_0Z zw+Z9mEK6BV9^<;ohr94H^`9H9($?vtseoToVKHrg+xR5EzW%4l?L}(6n@_c?x_S`*BL%Xis-d>1g&fYAB^{Jw)gkI=2KmAwx5Cu-7QWPx zNM_Yi=+o=-s}A$=tW)E{_F|{4T-&L|pCgrYc0|fTadQ=({*1!;MF)G};qBX3lc~v5 zOB}oEktePG41>8v%MCIBvZ0-8uaZ0esSJd!7u~h~AC^cesfmpGnaQ!|$y1P$dc7*MUCiB{-WVE2#%sIrR$G2x_vtU#YC zHxU9IDDo+{E7 zAxwqe&;+5}I!(?4ToAd(-rmu4q2PQt5ZQ~#F)V&Bb}663NIVI|QrC|>h87y2#_23R z$fUjmvFdDXL7eJ>4MO{u%>4qbu%Kk;dh9O}!*uy_^2_Pt*_YrC3Jegt%A1DwYQtjuDbb`M1@-KItG*~noPlGw|$t7SR>ewiV_B%N6fA{c4 zzs8jUp5(k%fVc;gIKe}t6bI>?&6zs!(imrZCY5Dr{$1h_TK(czQw`s7Bl0#a94^OiMFpnOzDP?EAI3iEEJFSbodlETN;ZX#p8dS_Nhdm{O#?|*9~*HqI1-qdt)yWO8h zWNM$CD5eE3mjt#Ga57H(lgh6^%{jbqef}m7^C;7aEl*xgNw>YGupTXuw64+Fumpbq zk&)VS>WClXVmYQQ)c`5+0rkYzrW(Ex(2K(V3*7h)g;`53QCAsA9_xrpr{5A}S%E|3 zpLTw0sfuA>9ZSm0)>2Xxd_GnH&3&X5#g_oTK4sbGD1G6enZ)IkRNH5~>~-+gvtULT z!wW+<3~_c*2{JVE@9%QUsY)HNWn9`w3`g*=7IZj0+Mel!w1lY48mfI5xG^kQfM&cP zMjnz_iJAp{l4q~%Aknurngu_~x$5^zR*iupLbP))#bQdHp2L<;^<0R^4roqDyhF>_ zT~u&+7Hp_tSZ!1^h{D~+A+ZUl#so0yf>e+w2~ow48Z=8d40|#BVlDkUHMo64#yx0? zzq$`J`=~!^Z{7z}^>`I5`%W@G0FEJcXfIm$v5RQKy_O>g9Dh8#wvV_J`rAp7!*DyJ z#U%L(BD-}BN^$G==*8a5c;~b_E*{x;n_FScoY-jHw*^jC9q=b6j+}0I8%_AdS4d5Q z-WmNB&m)J{A8toA`W(1vejno;!<@4$(UODu>xH9G#tLbaV?>=N@jC2$z=^X)DIz>a z2m=j+D|NEg^HUw_ytL+^cd?B~UHOgkhpH3GES-Pv+)G28z(8oF|8pib26C`-d70Z( zCBli|SffFkgPZ*Td}BNdFli#x#%~PAQ(ynIp}Wt@4~K6GKLw24LURy=faWXKe-7@y z#;H5BKhg~+9$hA)n7k9A06I(Z(gohdNfPnnE}ZFcnx)B>Chu~cQ9G?4Yx-h2=RKKr z%@Z%4^LmHV{Mrnq`#){rLrB#JLkJkdxf-xO_{B{kfrfbh`d(q=UYbH`8LYOx_WHF+ zP0peke2Xz!#))GlF;+=fqq1+IZyp}vX}hi$>?9aaalO`+zec_QO1fvIC`chYet=l{ zF#`S!s&6)ol{%kp#HTbLjww{1`gRTrzuyC%B(og3N2q{b0z2YnQpu{WqD>TxzML0LLC4 zg#CsO$+6QXlJX3I7U(J8YEnFPb8Qtts~T-puutj9I+N0n%v_F1#Q+x@rc%&dM7kT* z9^(cYn5$n2g1!zblI)v?2@A^&aV)XZX9L-qtEKdS{QiCQ94@k0b%k?fh5)X7-*AU-H?x-{!s;a zK9XB9W6vhUpIAZpie)5d8irb^AU(hCBdPa4Ej2p9nn0Ec0F_qb9pi-a<#CeBo{S@t zjc{r2dxTD!AOU>+Ml^TGBQ(nV5gO91aze@aKDtax4Ld(_^z;e$hBPnSIPvS9quI=i^D{X-)=I9FWbH~<+bs*$$Pjb(>20GsZteW>-ra=uE_S8VAfCa z9<&h7J2}xB?ijs=%sEkeN@&y+^w-+81MPQg59CrvIXaPp*$#AT?EnjG3Q6FyDo#NC z0h2&;xuK80{_gp#h0`ItiG)nfh0w`jy2NjhEkjrUZNTKx@uh{1+SEI73M7yrvI2|? zA|Dym@Iu5Nx19yu0xRi*o($L}4<UjA>Pe%LVBip;Cyu-w>jQ=@Vhws)4Y>IM7HNtQ#L|k(tcVPeOug8Br zpk)|7F2mxPgY!-l#$R6MN8-S+yUF7BSQNldA9wb>3n9LgT{BMmH^$DRSF`FzqvMY3mtv>r>2}gDaMq3Xj^ja| zs#yW#p5e|bn;1q9*B!W#KaKh!dZph<&ssUaPczETp+TplpWP;nO zT^7@Yn9%TX&M*cmRowxORZw0|`Fw3T1XPVK@NZ9;7{7=D;s-yP{$(s0O_L)SE$RP*h!Z~~JUh#8YCK9kPgBm`< z?{^)9(EYhcy3LX0MWQr$12EEb%lk>-`1q?J27h0~_G5emuUg}P!z-e<`Rc}FTwWlGAS0YTzp|{p{f*c`%Taf$N z(H(#qRio@!_RRs6b|WQPO4)csb~XOFXM1($$6VOk#LD&1Qj0+JDLfEg*o__Dhx~0L2e^YO%`55wi5fi+_Wk zzMTAf;}h?H`H=!~aJ;3*+&Ni2lPGT)Ll7k*d%;iL-q^p~z-LqPnEdev*hZ`0_~x068c&V^($j=Le~Fh|=`6zk7+uikGIt ze7=mhQA)X!sHSsU-n;h@G=}5|zQ+S$j74#@&8?Pufbz&63I8-GpH0bV<4GX}i!aA7 z^Dp;F_Xm|xFB_vO;|gvKzue0?K!1;?%TyGA@CNLw0IG0X`r}yArl?iAiKdqjsrNu8 z*nElb)h%x&j6Gf6-U7@{qgX|14!m^dc@S~RNoraEfpVO@zKFSMU+{-Ue$BXj4=_P} z%e*ttxA1fp80}biDz6{C6bc1$?vV?VYng+2?+wc9AS|HIT9`QN_cD${l7HQW>ZS)h zlrwgl2-C~wXAnT4C4MB2`~`8HKtJBWxu0c^n=6lXzSH_1;CeAD#!Hcq#&5t*!sY;-f)snob}6C)YL3b$u?k?U#WE9XWrW+}0htt<$^Z9qR;f zyobw&h|6 zDlWn95fWCNGT!i`x+sYbT=v%ady%qc_q4J6F~&`Aoz8!){6HTLdMio2oyb)n;*XyIUu5tOC`q!`()m z*_CXh?wh*Wt@OGIQD-N+btbn5c=zsgD?z=~kurOXjjG+jrEZ(qGVfgNXZ#+xM%T?2RDB71nS0tx-SCnl^;D}x}PxJPrmdgO!pI}+v;C` zmzW71AAe7n?mrTyyHB`vJ4iG}$o@W%=r*YBo*~ga+O!C`_3sLa9+zFdX)@h`4hK8G z`1k%!%GhkVqnuJZVSF1*cizaZ2%a_ruWz%bLhvpUEYBur`xy z9zQyc!%#G}PVw`)gl=u~UWotT=WGQmu?^}HEmaFK@Y{$BNN%Z*-X-iN_=;bWOWe~q z`g@;c}?}y^aD#5?fQTr$F)2Ha)#{Wm! zK)!jKT^rsY$bWbG{^ITV=aaLGcdw8BetN=xaB}*$Vi^!9(hZWJsl4tPJQJ>Kxkl1j z92=mytVOQj;`8gXi%Y(Ow?Ce~|MBefr(zL&!)JLDG%%Cc>`x@3T|s*eM4xTC@Ujf-8F~e?D#Gz2W!?F1aX47i=nKEc`w(L{mg|0skvx+v1bZ z=Y@r{0laQ&w$M&)+lJWYQC(4aHEPE`xMN>4`F_oo3G^L|JSKXGDTM=oco>GwUT{sntw=FOn%EU(LzmWs#kGxq8I#5t#=^57>!27X6T=7 z+BKV~TEZXxjF7F>CH2Ac^h3jzj%qS~&6^y^(hi(IhQzqIAN4F+Ul3QOU zj(B4s$zKV3O(tsn`e$%iC=22@p&@5Mx(NM8?PY>ThW$-prN>!j)x0aLgVU@c7gE1D9Xr0|Wc5uoHz5Vv2x~zgVznHc&5a zuHnx8Ijiw_T4y)=742D<)jygJZhU!X(QKKDZk(SsYCW&Uq)D?65=%$1ADWs5FR+;w zRQhk-p1e{iu@{gMOWYV_qHoj2D3Sz4q|I?}Y-`?=cXx4AzZZ69b$=F_wOb%4AYB%W zS!Y`N>D&)O;@aIC%+{@4P(WHcMs}Lku0W;4)l)3J_0=mHDC<9!a6dINFD9<%6`2 z>LRG@#O5xahMb6lm4BRweO!P{XZ7#!YjG^U{{3QQBTY?{Cw09l&+i>HQ^sl$S$ca7 zk?3>;0JI=s=W%qt3`6_EoF*MG0Oa}qj&F5U!DE!^U=x4d;S8n zzvFBs03zB(AnWwa(b;P}QAX8lGn44lz4~x|a(4d1=Zj1Ja(~8CX;k9fQ+alN^5Nq0 z{onBfVnTp;y3UW@5H`(4_tR;5_m{Wl1frY*i*%|udl6`A=PX$~f&%dcWon~ja`FG=G-zv3(2@V6KB3!aUzp=JlmGYU(P;GPQ$!&H>ys9{E)n`55BR^=#24kRx`*_vVnUZLCQXl*jB6L+ z<%{Rf4)*sZByJ!}$>J{j!q-3hv&xm!37km6UtIiU9tVUS6ueGq6GduvBOg zxqqGZh{Ox=8ecE>?jDz`e`gw(>>P4a7pGXOJ5gQMS#+o>nbyAEyCs<$K z|3!m0#X4jA$eQ)^+KLPFsIKDT&u{Npk_0kfg}TNENMOF=x%Vtxh8dT+Y`V>BKoI#3{2g)UsN1c!NMlm39>Hv)d)nXAxpfCQ`#-HRpj%vH)XOMhAM zSTzLgpCNN@xYZgm$Yl7((ht*t46(}u{5la}ogOQFWU9YZw@T?|+~jV~4p?W0=UDNh zI5X!6>&&0a_$v z8@wPIDJwvUflxE}*=bnm8Guy<=RwYoWI_DgB%E{`gy;)bg9VQeec>W%+J9p?fm^!3 za-PnD?7s(?bIiBf5btbf&zc8)0&_lrIiJ9sPhigfabV6mno1}?Aml`Pr!M~T_NUKB zuV3pz6}5uwg%NkyN<>>xrlcxWDkB>Zl}*lXLj@L6xvIbT>0MoMEc@(_~Et)v<7C8El8TZ6<2n^}vgp2i6qi7GgwGx)o~ zATgo2FapMo>n^U~2mVij!S@G&mpcJKdx4ibAw9o2yxa*X+C9A73EtTZFISnKc(v;U z^=zJBuuo4Gkk#oS z>zyz=SuD!gIp>Wo{ad`^bpmzbJpnFKtsb9a8Q96^wdH|-Miz1@6+(x&mM$Hi7q~;E zfLMrfa*NeMb1Vb97+{qYkdj}jgB*}neGaXwaz;s_b3hnheLd#RLQzZLq-E3&fs;*1 zAVz-AN`)L}0IwBTw13)U5X(v^0QBoeL4YhF8Htf(+cI_MR5>N4VO63^V{NXAVAEX# zXpaU=SCT+gLwpFr(7R?HG&|94&GIEImYMoo19slJgLuq(HJwJ*=p4+sW(O*LZxN?~ z=pY5{+-@N}Pr$OHORcPB7F05CekRd?a`4p>V@$yjANaIUM}M2W3{Q)+pcUF0QgUeI z;lb`JRITLZG##MPr-ZKAvPQ*9k`9due2UNt6^3jb8YTFAp+3@eoI$5msaT(`GbU{a zUOum9%#0^{`v=dSljbKU46S6$#H^e%LrKwaLcOB3i!)r+!O}QAIlI&)qSw+jz|7zZ zTfVVeay2aUc7Iq2`uy#sp!u|92Oeb}^ta1A{uYzPi$&WgPQ0fTsIF-}BGKPVQRsHL zCZvTpL3Ht>x{BgzvWal8N_!FSW_5zyuFnY!ExGxGrPCx>WY7-J@J+(rwk(!v8MTXI zsn)>}#Zv#g0P9ql_bZPL$(=Vr$ZglEeXs8!{(Rl*rhjVEOvji%kF-1}kqyng@LT4b zDL{DtW6`^%*Z-h&n}+Ue-T?A79}NzYS4ox-^fe_*m_Pv-n{#DOk#^b(l(< zkJSlBj2{*A8U}#9jB)c-{Rd0p@BNg`2AirUf?9WFGe&9fPblt7a4I|FkPCTZPYct@ zLvB58D93}5jJ4Tf=HXj~U#z2I9=w$#-pd#Sw|{3ma?Tt^Hlge)#_y;IWa90q{-Fq* ziWKbA(oY8Ebqvim4uRfQ<maoT+7(cSl~_$us%45?Dn>XXT@m z#LgF3x8t`-?0ku_3Gs=YFI(Ar)=@FiP@ZJUGApm==i0D+V*@4l6w{^Xd2i5zb|7TE zp?_^eLcZ)V4b|Z7T2D!>UKm2&#LF%+Q_XhY%U&FcFT1I+VHuoMV`HX{7HZv9%V~&* z`)cg7(!WLC5W?oV*WFOJPtu|$Hz}Xr@bH51uCrhx_!!2!SZ|&3W-3i=P{9U^q9YfC zt-!{37b8YhE3k^i^C$gwt<5^IZ(=XbzJKv9M)U#f%9A2_CcainGHr6v%w`lPr(wz} zx}?9M-`ij`-)@?^9grgE-^a{%0KfRF3_ZrqyZ55-J zMM$n7$I(}}aHV+-CDDTvH`l;Ly^Hz38+NehLS$o#QlBEqYB2V$fTZdb$bU4DuYa1w z*l5?iWC#rHlyIX7S6E(6y8dSa@p-Qo8~H^u7|H@LZj8JM;-#-UAgZ-MiqI zO~dwFMW$xv4$8=sVy3muFgp>w6q2c#uainLHRHGPb=rr;I6KQQc5!0mZ|G_=<&&e9 zlNqC$8>^F(PVjO)nQ}P@8Pdj6f-bNQe=3e%qiJI!6XzMPA=_1G5m?bFCx3@9tgFDH zSHc-P7fbK36wVk`8NKsbIAe5Wboir+;fPxU#c=AcPtD}C&Yfa%(_H{sjCX`U8mXyg zn?gNf=Q8N{NmI8UnCIiY=2p8dDA%IL@#353b{;21)N84Kf9;bP~6Y%mB}ku+9KU; z&8ch`oOU8Gl1ux+g^x9=%XPJT1#n3(_}45gaYe5zcf1AURN}EYH>JB3nzK$^S6Fe- z-n2^J9-A{yI$S9xwxJg&UFnP3Y-BroqH;&{l+xMBYE$xSro_DE^naAvN$EG#A*h)a zV>0P!4W35MJEZCR@eHBrmzTi9Yluy5h7$Z;?Mj*3hsC_r>Z}B7?I2vq@-6Q;UOaNm z8*v%AoWg61FeNH)ZOc32HpvZ(Qb_%r!t_P38+h%QXCbOy`bz96NROh&SFlJ4OR9CI*(o67DU@feTC!~si}e;s8iSogJEs)Bu3lp{(W zm##i5{UvZ-%3+d2Oewk znOKUfk?x*T*N3&c$12GSw6Na9sry5lGwa1lnm8f0Yww;ov*PZlEDp-ubB1|4+`T4$ zwEY}0!iaK?{WO3;A-GrWo_43N1er-U5C!edZ-1a)&A}l@xhGD@?-r-$1OX=uOR!q1 zw@{s3aS!u!B+5;sLcL8lu{k+@hLJ8kbP+)EV`mrpn2G6rt+&nK9 zc`E`}{k-}Sd@y~2Lw0|o5dXv(xGkx|hxjK>@NJ9m712Zs&W0p`ok8Cf37nNO2M6LG z<$px+P4E8__-WOwO42F`9Y{hC8xqRxd)Kqwq&tqoc^8pTKk}B*T+9RV z7Z?fnZ0J4Q1=BlS>`Yy=4^g^YK(h@td%IwX58^woSyNj&#zHg-N3aDETS@9vObr*_ z&oY1**M)2C(<9}g-ZQluT77*dFwTR`-+zF83b7hIpfN$M#Q=pD(nfF z7+f!qjEz?&?uhiNF<}-%B@<&%YS%X^^E_XN6iXnN@?TJgN{~^gwh#mvM$jv~O|PbD>Xg;oXdvJ)$P0lKp7k`=+63|Yt^y}jJ1&8x@q&5dE+UeEaF9O9BmC!^n zSjBbZHXtwU#CG$Fw+eixh7IUc+=+X$1+Pt#`~(H;?=Vq*g2wfCo-98>1N`+Lm9q}& z406Vi z#JQ^j{K1!Um^e3PAb4+_8ZbDF`?DVAnEzH1Tra_I^~PVosN2eeSdtTmdoO@nXy+II-ro_elYe&<7w(9@?mG)VNm;UUG@Gf?IPb(aM(_)qx|<+mmyZje zic6BIbee60?-NMp3r;rC{y^ zo#LrPfq>~$>h`dB0$pS#oi6C3i>Jv&*3xMbZ8#}~b9<$Vvlpe#XCFe+3F4<#3VLO< zgp9xomemURJyV+oCoJFERNN|O{(N*H{zI6wZ6wCLYZxhMV2r8M*XgLx-FT(xg!HQ+ zLUAY4(cyF??1wyB+<&y$rYvYGMRU=WLlt^DYCwzCWRrC=|7k5^v?dpVBLD4VylRzM zXT}fGsW~I3cRC>mn+Z6t%UH8dj*xFPlS{uEVS0=aS~GoZ{(yaUjE!lSopavk(!a$^ zT_?C9{*~Y&@amvB)`6WKt6QFskI=(-vCKR_xn0irk7SFNsef+wB0Oz{SXX#FJV{RP z+Zt4fbzm2ROL;71sk+tor58XSak+H)ogA^MKBqt?wP90$yRARj+6Jf155X?#Gg=2n zlxI}@12qkAgL@WfD3bKE{03;rf~!<7Vll|qOxHpzHW^PTq9$XdYf-e$&)yC6z!AMS zgSyg;R$AOEGk{A24%d}*S@9s!3?3-nn1#^D^wB%pQuzNiL zll7)ZX3(LlOI=fR8Gm6>@K0{yX6mZ}?9M0a=p$|F9frs8|ZzboFa zcp}Z%L^P4YTa(kGTuS-BIiZBiR3}g)+Tbul5}Ot*P(Xgd-X-iN_{viL-;{r1P-5XK zx2&BWe)**CCoAV-<`sQDc$&yvPD(UMPOWebK4ygiIO;$D`j_{o(us*yTHq{zT$RmH zke*7IXn#G7YitZNpn#C@r|1`2mBN-Lj%Hu-uq5YmxAO=1yP=PdQJSNGl(mt3^UZ5j zG1EFKNy?VF;GQMH&Et7|vRs4!M$a$#t2h~$?zDk{QCDlvq~K|_ejBg4mOu6K*Gv%x z<&#&b(EvJW?~AHn!T=G4P*yJAk5Ie2yv3WM0e^Etx8>)i?ucewC#tWVsbQ+-ZjmBl!V=N>kuvYcUww%0{N!?O%7NV~L6J0MAVX%=cll<#w7FV8wAvy$v($V2i=%$YY?d`D+@RZL$QW*P%=*& z)qmx>=4n>}+BzyppH`A#Guk?_2byRnbS0CqUC95-XCC=s_{Ptscj{Z-w$co%bQiiyeh?mfdeIc|?_56` z|59=)5se?!MT9wsuLiIhX!J5xZG1q&sufU(KR8Iulr`E~pqqTHU4*nuuYR|P)_<{< z(Aus1nvcO>8W~G&p!w6_`1RSQmx?2U+73Y!2&jMu2nKGGWU)7go45#>r$G&9TAkER zlXu-Pu8U@#JbwQ%`}R)xskR- zF9K-OKU7@6|438ay+oxP#I z$)I=)+SGIl+FBLn4R(=J4S!E_^T2MO)9)9%?O0%ipBB3ge@HGR; zhBqyJkPJ9=!lvUF?fR^uu#Xd@Tsgcu0GyU~8BZz#<+*}5UFT^8kJQDem+$J zu|rr%EkNmoX%A7wdw*+Phejpa8su&sl_bcVL9u3i(U};gBj2$in39#yCQV%V>-N`2 zMF9>?bt_p-F-!gQTk9)dFH_8{)#eFpUq7iW9%N-0(TPR|tpYv>{oBj{b{D=h9nMHM z_;g1~Tb3oUmlR&c2B)MiU+PYZ7-S2 zPz8<&Tt>=Ca_6!F{@#|s$Ssv^43@+9@wAXSq}rIPK8>JeN9jD(O{$WWr%00Cou^cK zLR*F+Cz#q8N+wox1ox(LQ%!bj(azDLexH=4~%=YDvo+LjSE&IvD%hlpSVxX9u+@^g?LMUSrn7S3ST z*sLiD+(HbtjL=qz#dt+Z316k%8wi){ z&?vJALY2bi78AB)4u1I#L{T!6Gx`!V6V`{%&0D9wR=d(|>XYpEf>iKnuol+eNW+&~Fi1EyBkM z_*YDDZN1U-+S@~<`^)t<#7oWOxQbHzalY&Y3IEbXB03P;kk0^bkxD+pJ}IH0bXtGt zOol&JPUjyXlL0*_0^o~I6(DDDu1%W;0%%pyJ1W#q zEKAtch)BE*;Ue@XH5{Ch6Us##KzIh(qc>;#mu4vd)ddJ$yoF_JIS{Nl z)c@X3f_RyFTPo2)Bw(<52LTsxFV-n_a(@sI>Jd04J5g)KgDFrTwo?d>%qwGlqj`plSg!KPwTg^3P8)ZF`FF!Kh$nO45sv{P-x zBD;G?@p8wxs(xcaGjai2;=k= zLA%1v9|b9Y>i!33jSq@5&Lm?D%764W`4WwC#=U@lQ~1s(g9+6!Q8^3_bt~HBFDUn$ zJo%d>p1)PRFi;1ev0&NCNf7v>ealYkl6x`ioRb6^G!);Bm+ONg0z67X`PKAIQJ8r( zq6Y7Q`g(?DY7kvaT$P=xLNZX}p5lrhyR*(Cm5f?-7P-E|>ofOcfqH#rUVk;R(TLJ# zqW*UQUoY`pcS;OZpME9tQ&7?*i441e3G!6+=6R_YI?V2O{>S_x91m^?~l&TFKaS!fE`|LPuA5nsy=e+M z?bNv$9^SP&H$%SN)p@1I)Os$iftkBg?Pg3lQngn|BjkOM5@xFE{Z)wst>VjMk=48z z!S1By%crPSeVNYczJF14y%~|-O4nD2?nd96@#o#^do#2gq3P4pmQ$sPN~P1LwYgwbQW1GiDO zfj*5E&T(f9ccXLMv}{_iSG6=OlH1G7*PVad2@P&h@{*JWSAV5xM=+t>s#1SfZt*DQ zcXN@OsK7*Sh4vPcYqc#8rA!vdOa8L69>9{iZrtQAJL~FeUNo*8XReJ6drmlaR}qI_ z*Lb&WzOrRlSNTLyh~r&Ebk?E~6@qdN(4UFtKc(nnI6W2YnxC!MK@>_%&jof}>e)r)h}sujIy*?bBgxQao_ z>e`p|H4fY7YjW(A>rk&eMGNIM)hQBUD2mgq0mL^`oPTb;ABc+6DLDeKIQ5CNQJZe* z6;!q9+ykPjHf7uSQemw!3wEe5-MdJvD@;iXK{mPfgIH6Sa$l6P6a>&!rF$m`tt!Rr zT2ab#Dbqz$lJ0FDnv|p@uOk)doR>jVBFIh;MfsogZKs@lk8ew-JPN|Fy}m7-Gac;e zG4pR%eSfW&{96Q7MgwKz`*~8z!)T)y-P02&deJ#Mp{f@-L**5H1_j@B zs1Z?Z6;?DNP(lz!sCEifeF*ze)PAAsLR2FJp$qxUS`+dw%eYwnPnsrl&xL5xgg{(J zdeA*3f~GCplN_pg5H3Jz!zpLp;}g*-i-9m~M}JR5OE+iy6S2dJcldg2WA_9GLhj?( zIW?gwqSu#J)L{FT#n;BDyoPm2PU$5!Mx`yN%@nz4^7g;DLukTlv@@^sAwwJNN9Fy z&VQHaB#m1F+jA{FHirrzJF@=BP6hYWaq%%5R>oX~Y+fphf(IO- zFi_~xQD~-)>XO-;)6j{jDHwIMScok0=^dMX(Tx!a{U>@o2NdFz1j9zb*0#L&Y$2Z=r^6rFObVNX<_huga{Idg)!f3}@h%VL^7sWH+K+RC_g&BoKRg;HPZ3<^5M4uZ0yizvELl#WBOVy6et%Vn z;U$(iEZ3AG!3|V@UV*K9mv?zSgcpkM43380_e1Y^Q+L(Y;+0A&Au$s#Va>5S2gYtr zg}_T)bF}W;COw#AdQCLkG^RPk9~RtnJoeMNx1F6TQl@3aR2np9It)#!ghDJS15*e` z)7}vXK&Kbs!TsjQUS~qt9HHx4D1V#dbPeM0y()^v1v3M8v9E#?I&)VvP4HwzusoX= zPue#TfB5$7RYUALjzi}2wHxkMM?#U-n_YPzDl&-6Nk4>&@JCP*{$KyH{Pg?UpC0p{ z5*nSOr7HeLngfg7J+aYJ?ay!TS&{@ZYe_)+TxbEN*i!SOIxhL5_hK-@Nq@XY$_R%L zQk>iUd7FalE~xV@+KC`{7t?OIgkp7@V};#k$C(3!ow2Ps_}8?IogFT^xr~dZj9asJ zel!dDyAC>*q<9KQ0!+jq6&saEDVv?NR?y_;yjrC4i$!23T5EJXJDCH2-LVs?ibcg6 zBhIw)9VH+tIj)=XbA*j1$$u<$xWWk4%5II&k@zvCT{l{U5e^Ig!?zz- z>QBeBV)@13+jSGys)p;h5z)8BeGYw;myl+W6c_1>|IOG`BGXl2A#Y7NmTW3URm~PKjylwOt8O&n`;6wW#7s z2m*PQ*kZmdIXRuh6iMaYDlx^PvTVCpEIwvLa0>S;(D30Hihn@E1!R;s`8Lr-d@zR; zU8II_%+bYFp~KC%?At|kw1@(qxhf=!GGTG3lbNXX~`siknk}r6w`6|7$19CWn5DD7#EJwQxe#=-)9{@6eFyK z4#UT^c#I`{+<&TqKR!US!b!x?F)nCBXC-qARd=jJ3LWR(Msb#_-6HZ92;^`vp*4+H z6E4mJR@6{2z84MQpi#1^%P8OrQWWr=Y(?F13~;r>Fg^4)ezv{)Vtcah7W#8dl(r3u zY4zS1TPt#QMTkv#6^_ENDF!GrF~^3cXKmJO%e{3;zJF9}E~1*n+ERQDCZctFF{8@l zt*u0`w>^307Tjx^O+{^M*ETjC5u!JHF&in9wQbK%Bl%8c5RJX%E3AL1os-BnA>v<>~-7Y-kcxYi(GN4Ygku%!8)*0YIY@J?R)Q3s5+{IviJk#i@lbDl>n#Q z?Je(zrGKCJ{NF4+^kyvcgOF2_Fi(*sLYAV%H5ZISkIx;>qzNEDCY(~7nAy+^=JRFd zUx)U*AAY!F&Q*p?cBkC$nwk&RU2qXHm6*CZgWB>8V`F&+7YT!3fNRYP{`@$b@qY%{ zqdX<+s{>ZBZ;~<2H4PU@aL-3mVJs2+fVgWr#FJ^W3W)470QWlmYB zPgLk5%;_R#@RpWq`3KG$d^DfT7yY7$2mz_e$y8vq<$g_shzsf=@(rR+)s^NiK^+9> zJEqi8oT%|~>7vm}<<;7fMizChC0L!;T&gB*QK-gd>^hYr#6OE%E6`9(7(|so@ARG} zN`LQ2=*_j+g23A`h;o8>^8gH#g;I;SoK<;pLQ}eylt5WO9*HK^b3K`h4)I1XLooJt-HH9itDCSzA>U)Wq z;Zni$N6jVWY?{!yTMb^-N!aQ>q zE*8vyt~8YA<+umqf`a0%lZiCKk+-!;n~7~}7QhgcI^+ablgP442$elM+qBaM?H z58#4tv+}p9;H*HM$*=3~sDG6dY@e*sd?kM{gqy04QcEXTo2RF;2Ep%fFoHWDa&)+Wlt4=BfrZC15L zlI%`wAW8O3CXj@Ykw%gHG&Mj{>=gCq`gUt0PZ-u!u+q&x z_Xh9E{tKdvtM&BmIG)u9pR6;wcYXJSJ+VxgF!8)OQmz^`H>+$YLsK z#{3x=`N4b>D-+zpki5EXa1X>A^GF=l9s8Xma61u8}s{Vp%ZoS_L!@7#87Od>t zx*cEHpk`8x%~tNzT1_Gvh(`=QlL*z2UH=iy6F+SLZ+_YsdbPGr&D11d;tCDgk^wqe zST(dNKP$9UT7LuqK`jj!XB@YI79lZ!hI&)Qemc%zZo}k4PQm2$MoG=&6w^&juB0PO z-(-H&5I`~16agTWVRj*%2~$%HvQZ&~2((^{xkN7bX7$#~TY^^B_--Av6H8NTb}!)Yeq zybhg;EPn@$p8OrLqkxlF#$ozeEGV)Fbk}7M405ood&ZJ)?;_$F5O6QH$LqKwH|CBo!W#MZ8#szHomi=vzsY{^mUd*&T#wxm_b-v$X&;Bb9D$oOA9ZiScRUC}dx~zq9!6)5hjde5R7FBO3_HALQvDpEh0v5d`btM`)QsDEGX&3IU`4 zwDIEk{@#lhyU%k9C7_!>Ncp1pfOmgpU&R?iF&G-HSiq7dQ6rf@ZG0bo@%DDTAJ}8) z^M9Mo-;9i9-sI)b`)>Ey_Wo`iU3M;@_>d&N6VR2PHg1xDMKk_r-mID3CYT27#bZ;`=oxIpv^kx9f;mb)l65$(W`mI%C;Kn? zMB_DX3}98Qc@b6Dp@tWqdzYLL0e_U$9JmV{_8{V&NE@6R;_gT{CUET)xQGcB)i&gw9 zh9E%UYAJn_!92>B|MtTSy*TR@19QLN=sfR@6h0f zBJB*;^42>7{#qqO%Y;!j1Y=qemhw{^$7Fi10i`+v!fkg06>)R0VVqRBnCwIP|>G&s$=38mxG`M@|E38_O{7^$TLX;Gwh4mkLcao)Ds z=f*)1@EiUF9o_K3S@Lxb0K4fIk$w_IaVCnTjNpDB^JVho;a7(N;y6+AE{PW`$?WJ8 zJ1MOS@>oZ8ksq~BTI2+yi;g8UtATNzWSZOyn8#?-`8>kHxeTDMj^p3tl z#S3~xU$w*}wnJaF1SPgbUv+~=B%-gJ@H%bKS617m7m?=#*=eYTVIJ7&RkY>(RjP(< z8Cwn?y?cHH;vf94~8Q4ZzbYKuykX>e#$UaC|K{jYJN7cKI54ngzn(}e}^l5`|A$qa4%n%gQu2j1>$o;4# z;Uz5nizPvC@8FWV1sr?0Kpy^hd)Lrprd8!btLveo%7^B`5tR>*`3ovbmQ&G+P64mi zG^v7Lg9BSQtX1_X-8v3$FSsKD2sVRrRR7PVM>>8MbbshxY4^3=9sIfcM9=e_H_NJS z=&gRJNJQRT)f?Y3g1<^uS+(ITtM>_!#SR*nB5CJ#I?zwaagG^dm$}H2iSP*5gEHES;AAqk>&K;;dgtx{z zK@(U9N1_SV%_9vRikHchHPl5klYkK^W&I_mEPnuBK%l>s^1b1gyw;U#rvW2eD$=_k zLN!nsiB8M}5-^gcBFYOARMQYL2^g8PBG(Hd@&A5do zicIECK~=T$7@0CuYs8XTDhQE%6*LB?wm6?rQ#tn=DgP1Ro2o6`jKeX_LCrdK66R{-i zP+w8R^0Rn->)frxBkYXxgL2FJvuZVC44{LB3so$c_W*zS(W9)1J{1llpKnm=-3M{# z!{!B%*sSVa5;n&9wMj5UoLZQa3=w5^Wbqqd0f2vG4K}^n9m88D&J9q6v|sUq7O#7` z-VGmt=5JvIu-aAE`Px*F;3TY4suACxe3os@mUIaV!Nx_eb zZFy3%ecfKQ_NlS1IB~ILMw01nX#g?juDPEL>Y|}Tkqk8wZzHfiE<|Zn)p~<+^qnoj3);I(vcAn)|ObzHm5ut-Nv^y<4`|gSl0UOJJcxfq>{q?iT% zge)y!8XW~ffaTq+g%CSiac5Mrf%8+NR1xgAnYX2Fj0=|<{3R{ro2A*zA6>v%I@P#J zxUy%dJ1J*rU(?4WBFR%B=PFBAvQB;PHM?hFg~v!T&(ig#3zn)7-;Ln2G}Gzh&`5tG zR!Y9|!lm?kWpJIY6-ua_C8eTizi>lKZ=9O9LpiX}@`ZtV42l=q=?1`dUr`>`^e(qSCP{aFul92@%}ffJ-$VP$Wv z4^qa`%v50|jBkVK&TIJljURvUlT9x9Ck^FQV1T{~s|X@$J0-p})!S*=`N%vdrmlg^ zJdKmv5fnJ&yS7{e8B0d~A{ZT|DNAI@1z&u5Dw>_v_W#=39vkvB&;%Jacl3sT$v3`G zFK6dJ9=$$0`TXwm{l(k!&nIUW?_MAM{q%(Y;NI68Xs_c~1h`P&Al zNSpifT=eN)9~4mqLDaYj;?db#r$Qv=MPRDGhzTP;BgnPU(R9kU^n^ia(q;mH!Jd(8 zz8DF3$Hg;Y!7W4JmQjBZa?dRAzGwWs!A|{Y&6-|94aJt#T+FkB)*{S{kXq(>`B`4F z`Qjv~DO_Zoy=_}K;{~MGV38siY6khyEQQ)U$MS0elagz(tPr6nc+b*hSl{rEZ^nyt zI#6K{1VO-WAL{xw_E4#1g%SWOHXhJ(A+^>I$jNKxLPe>xlp=q|L6|>>z1cPF4Y|^l zq-xR>mwgfp$x}GQR-26uuHL28i zDm@pxlMip+{QdLU+s~(eJ3f7PdG_|a0?;ZxIry|OTh8Z?{Ci%m9zJc@dwPlGL^KLnpxY1lCG`w`Embs>^_#1i^JTo?*aPH-x=n&$-Yw+M%SKZ57*1e=n z@n%J{fw`iMo%!zLUbPYtyeaJ7|QOn}#9vOuYT>NiSv&h!g4OUj38vmi{!xN7@&>G}$)pZNdV z`_`^DlBCV=`zvZaU$7fwOTN#3*v4GCnK9sF@LcwFFQ6`2(o85t4J6I)G1*={U=H#2{Q>`P8!*jSXZjAg&W=BBpusR(2t zb;4;&CLu!yF`{CQ8kt|_N9~lc?LL`Erfkl#-?HKDD!Uj@zv{fYyZ;}WvV#i?{;b}= zy{6B0j0X68I3+FxxmQ`DHRb2+czAVvGyC@6*|%ZpWA{YYiDQRtuAsIARnfK+B-0@{ zyUBkXHQxRc@X(?CC*V=3R*az2A&qVzogU`FEd5XQ-VPRv*}^GxJ zq~K*Mbg{fO_sKP8pMulJlAJ8w8mHNlbufQB*XvSzyXTDJ#otdq;yGY^ojC4aMaR$F zx|GD*t_YUv`q`(wJ@u_CacR|UKt`%9Zmi}l~ zD6_N5vLies(wh2xt?Y334v&A{ zA6%S%IJ-Fb`0?~(Q9as}RhN*uDh@xe4V9H@GjUWDIyA*z@->xe?z|fT7n;e3k8gzC zQOHKX1?1dC`5U1e9}V9Kk}lftMo?ajsjOC>4YVi9Vh8UDGV=}pwo0O_;g1^awyMl; z^D;~(m?`fGP4YILtg=PUm8j40iyMFaP(%FV_Qa>@@^-HCIN9iQo-IsUD6*#yOUt>y zmg~#5yt3Gm{q01_wBss_Z5AAy=+@)jBD0?yGf-!U&nkR|9L1s(C`Q>hviT;vA2tP-K61(!)H5?JbxD$CH6F#vQ!16~Vyy?fUkXv(;C13@4*U z7l8{Bwi&yMdKA~~x+AuoRHKH1TR2REgUDAYvr88C|J*&?9xBeG+$t|-+c^SB#lMQ% z!uhTG3v*JM)6UtH^O;V=cq!{px%f_OT`rrFXuJQT0#NO_uOBbGqY!@@oY0H}LS4f= zVzI(Igt&%&#%@;+*d(oQDPzXXA*fGd^E>*_o${BCr{Qd|@KTrJbD$f_%~@}R&W35e z@i}wrV@meBmMUS`?-sut5tT)-4ZWGFXjSoZ|GX|KzX%l}x#4=>$k?GU5MHqbVjSuxa9s0%%z}U6mu}8H(5Y(t<^h>A`Rb0kcU>3=L|FdK-D@D~6A+mQMARr3 zbY$$%8#*#H?D7Ef@R|Jeetap{%lUR2e_4@^`w6m-LUQ{q6@^f9&ejp zEDGSf*Dnll!Q-(ZSlZ@0Y~1*3S8@K8jZTi^wYeY?Dv;_1A2yQBMMl5>xF~~uCJ*-2 z0(XVVd@ot~z%U+zv?iCz9wo*m=+dK2#!DIGHV-af${@Z0kIicAF#Nov^W+F(r8K^q z-@|#yV%WjY%WZ!+%IbCf;RA`>WO{udxuhNC=xOBa!0@W%Od`W>LIauj%7s@l;rbq4 z$^=2?BQ=;tu<)D?(>fh)t)&IlsDp7no2p;QyDD8P#h7T#pIxcbGPj{6SlRdd$hy2U zT^DI#3G+=LAXT=_0*Jvf6D-9fg-!+q{1TlFzRWU{**zInINF!Ss9LXGYtuIO^&9f!CSck%67L`rUyWnxj2YPX=+WbyvXF+bv9K_ z;8*oB`3rwS2JGlBE&$GlP0JNPq;ITV)cWhk)33_iACGXy7k#&^4%B9UmXV3+*Q|W2 z2PhoM%eQSeho&(yYa>`0NlB{y%A3la5|ZPd$8+Khl}9I@wxIaqxb7{#kgv~cQ7xH7 z2nfhCEGPBO0cQ$Ck(7rDAfWhBAvr6UNTQ8`K|Oy`hZLTAhUHknI3QDxFd?WS&#)Zh zrB3nl#rTVwP#%S;SbF81s)0t@_q2CV?P{shUA^`^Dkl(7)SJfndFiN*+gvk|Re(Ur z4|zf@XXEM}emdFLT-W;tXL}dB$Nxk{M_FcJ@DjDxPgA0!ll@O;=O6!Bhy?u3$?oxi z@8^FXem*@p2$_?(M-DuvgX7(!_dbDl_xC>@oShZFB4GO^pq*`5Zph@O(@FT zJ6lSk$35-Fx?bCt`g0FkhDXsk2Sz!ULd>{GWMVY{uZW>JiyZlLbty$+h=HYfL~?Bi z$eD9;QpY2AjNajhi$=m>5yE1>(C@YhZ!?=Q~RV+I{y z?Rox9^BRKna`~Ih!({U!74h*$6*Ki|OQY3)I9p`B@pP2^);rSw>+QkNhsznHGDLr3 zSA|!G)qS&_W_52eKD(Q)Qhb4M_b!m%l*BBGu0tTb>9L>F6@6?Vp{ZjP)g3wXv7e5o z%fDuK-)4)^Qr*Qz*`}qBAIb4kA>b~B} zvT2qBdP(64M#vMPSi06iXlP)Pll^}r$rUEK&L--Oxl8{txtc8!y^#9eT^Jp{6eO3q zty&lwn9WXF^H|%8exYXuwGcu_Wm2_NNJCv<#Ios_V1d4N7xX{7H+RXqENfx^0o9#U zWkwh4-RZlvSnp<+$=>yBCX$OudVtGiV<(mM>bozIU`)=@Ho+<@HgI1e!I*z!SGZs{ zx>H%P^ycoz?6*`mhSR=@L_Tr>98tc?!d=cTgXLrL&EWFo!LP~+zMIU3zb4O>W0>ge zs{SC$R*6Uj$pvm?Nvqq|NUDp76Sadc3t69wWMvXH;If|Y{&ey4r?YpvC;MwzuWy%^ z%G!%0WAeB9B|H3hbWj%TYB7J#gmMLO)S#oXquQ<0E&|&X?KxDxI34=VBJ@rGSFXj8 zv9cFKWMuVk=MT^B+TOYZc}Ar2mUbm`hl}K*2v>DyM8bjQJKBqZ3*dxvucmv7dF%iD zkQA5d-iMC|he!V~j+Oen>ih{7h;{iV&!D1KS9qe3STUlW_4@T;i5a?V%0O;t!tJ4!I|8SqP~HhN3E7*7c}&&n6xt?X ze!ZAPaSawsf^|~SCqaLC6VN1NZzAS-ST6`^ore2^Vj`tWwO}eSZ$Fi(P~HeO71>*f zdGP9+tC>dq`ijg%{eCfv^{rPh3D$W_okSx#K%9m9JHa$q=Q?|MxU5s`W0l-*y*T9FkK}XayR(==r8F_W{`%1SL*(!s}?Qd$$ezLPo}d~l1_gnvu_4OlT7vB@MVvA zP8J;Z#d#UHuS=jtU{`}}|zn@l?G=*1lem$E?mNVvImoMk~&nZJ2e3# zb6F>Ka?)jcC3=4u^N`7xGCynrmyvxTM3&JWWjYRid3pDwvdN#on|zgi;V&hrqLdwz zh6_XkUr;5Mz=6bVl>)%@{?^V03< zWHvp}=JUfMOK&tIgG9!_-cHDpG^p?xOPvGFK>eqjbckq;NZCR9tu6Wz3=09*E7F13N-qbw)gZ7KJYT-F6*}+XZ zo@~|PMfQJ3u0nCE5xx+J&i1eyb1*=c`o-M}dNdu~D(CBNtC@DdVZE5A0JjNXiF$ZD z9VxSSw$c#FMzERy)aSxSH5&R{j=@w`TF@Jn*0G>GH(vt__ht%?wbHBcGpvErr?)-G zzd)9?>dSW$3mRE7`XuNbg_Ic+O;dd zkEYG9Vd!vue>Klq&Q7|#p50DHCZu+y+^K)w=SSOGR_{U~qH_3Pyk|Qyexz2=;7bng z1q}{MHD@9YK5{z(3zkvt!Z@1_v*g<%oom31AzL-4G)xz|SF!#zi=VTH@{dARqXWyn zmHw&@;xvz^BMh-P#s^(NMzaC|sT{fKK+I!V&q@$SEpn%|ol&`y$AJl)_ zFG)@+a*KlXDOG!^#mlU`M&w9k(0e0`8*W7LwFokz_^>gID2}XV7}1U2zc`%<)Kw#6&}n)thNg1_`L*G77Sg0=%HXSb0bP@C-r zg2m>9YL&3FsS;{5(~rEg(itlA)pE_ED}XiAnQ4C+hsc38t<a+{WLw^C6n=` zEuI)m+CguZ@Fe*(AEm3c=U{(K_V=7lzBsncd9BR+@_P2o+EZ=c-I?vWTUFe+Rk~2G z!Vu(qH?1cC(wb=8?7T)hOAa6-l17Qi7)qAk|y=xbF%lZd5 z)-y04mEVESDZr=C3FWR?!L~}z)%)@PWQ*CmbeWBm#j{6(6%*}5zZ`%6J8M4;Ac;wx z8U({~?5U%doL5*T{S#K7dlpT!5F8U*t|$7hUy|i~GG6IibuPRk@ljHl4EE#R)$L@W zzwMb{-O`m%pFb~u@NwDW+koESL4DbEyfropSW4}Fco~qkEb&<{U7Fu7rutvcetFz- zNFdUO^1&d(@`EAni0prFN7!A1oo8pPj zb=12;so58DYC=^cny%>Kl54)~f?N|E^ghWo!79ei$Tbg@I2&Qt?3C=2!)OPQeb(3x z>vXdLRh}CVOjhREtzdM7Azs0=2?^VAsi=IUj99RMtuz(5d>nuNQL%jO5NljO4mqh< zKnk)F7cr!70(!b|NJn9_spsgmk}q}!uba;erF4R4Bc>Cry}!1icD`>Q=M)Vl^@QaK zYNmybO0kp`a!SngYwJ%bWfbL)O1%dEsKw?F&rI^0KuBh9J(7wbRwL}EPi=$Ruj%AA zTNaU9Tco*6R?2@t;!l{9o(BOXqvG4Yk5|`cO2EHa`C97Iw{qX9t%GL>S7|LOls~fP zUKu8PYlCnpQ7L~^PJ$;_klCf_i5EvfIN2J{QWtMqvb3QI7WgX1$*-uTo!(9+jWxZ} zwMPgn*)CqO}Mxmljd98m!g&J#Fb+8 zdakT2a##qLmfyM=UfTS6Dq7)Ad?i+*p|Zl7<0I1glDj;kr*Wn}%to5Pmk0|h>@o@u zBVmK!>BKT~#jGUyLdrw%M-|&T!(tLkVK}xfP&W|lo?JWlPFxq-(TUr}>f&6{4qapx z%grEV9wL8f2Lj)eYX?8^+ktkFdOGt*<=DlFcI3qbarA@Lk2z33a15_pM_3)2yVH@- z^ea3nvl_DGOQ&C=DG0~y3{(&ps~n;ov7FT~?V#FVZw441I_O%AB^1fMn*9+rba-YL z3lm{m&1_}Jv1tnAjkKZ9<=8sZwQhXa7Uc4mPQrhZa;#dd{yLWjlEqem>Y9wbbUK@k zhv~%D(iqaD|LALs{cD^r43{~G0OSX7ZA-;Iv&Dhlm?qj`q}@)&j$xrqd z$g+2=ZezPY9bDuTjC-fY$IAV_I6VD$ynBD{ZBqUkYEsTGOY^mHt-pR##bGz1`OqQO z+R8XyHC^b9is?YYd@)0-*ovYBwO6#?XARY|=dE0OW9nq%SFT~gcuR#aVM22O;ND^s zm_@C^3GX%yF>Q#uO;=4sn+*UepJVlyUY`Jb;~TA|G*(Tv`PR}73*me8 zH(ssa>8!g;yBOs=3!nBEE(DWHli&UXl8F0ER|L>EX2DD0)YRe+Z|kv*dPtm#SJDKELd#g;Q7HzlQg;aX_-&oBp$C)cwin~C zYP8046YI*=pzxJnX$eKca)l-t;Zc97(UjI&NO*WAHq=CF&H7!WlgZ&Yn;6jBQvKq^ z($V9HY9vLy2pj}5zo37pKq2*et?Znwg1OZM7Vv^`DqkwzK(!Mmk5y2nxihYnuewy1 z-OM7X=Z>A-^I(`n9WEqmdpXTJ(U#qK1ua>z^Z@%kf6YZLYt})ix=hvPqRoGwS6kEZ z#SILm*Tt#!XXA?#7$~oc(`=^M{GEEsMZVC15%Rh~^`2^cfkcgIaDi%_(Y9-6)mGK; zdE$@EPSSKsg&2%*vJ}Anu?pvOOQhS$YCPApK_*$Q`_CllP}8M&c%9IPi&~9=2h_2X zOP@m2!;1Z4`K_Y!ueNisX}*7(34Ok}qP_^NWdm45iB(dEA7t!k3BS9u@6B|4MDdz8 zbC0Ml>@U9`^aD7>cx|5T*v=vq@o6d0j2Aw1NQ(k| zRBGnWd$GfZryA7e#cq+!Gd2F`WHwcA!+@nOt{h#U=Wd6KB64+I(aV3=bTS?tR8+wvl%}P%F8Vx?{bp!Q$=<|Qn;?T8rZ#3?BE1O-CFAdr ziB~D~#?;vf^hV^^GW4c&48_+QQ9wG5-k5nw^d_i7F8Ur>m2+jiY44hhJ~A}o+@?Ae zmm#|H@EhjFQyw=nk@~Oi=+&7mhX#VAmW!Sytz0>l=4zk*~*mVa+ujYx#+C4Itf zqLn+UK#YG*N;Md5hm-KzDAGnaV3Tk{b&ad4;8=$NcMtnMN^3tXc$vaLhU`X)Gzs3Y z?yRq?66Lu^^D4iS1|a}FuTvP$5Z*~)NZ^LGXMJClXwN-HG~{>EAkZNGI=QI9;5%tB zS}=zGl<%to4GIGj-rt>+hbk0|FD>B+zmv+qevyCGs&ZcyTpPjwg7ixr6)QB@ z5qKwsv4tDfuJV0VpjJndzc|;hD`f zOJC|38ji=yrBb~hh6Z|9Ubi#P*^?Ii?`-iSP6%TC_oo`p1TT!eA~0V zib3a)yTAzhAPiA=PY(P5M$|z@2QYt7F1RrY zjE{@g8HLoTO^@G9)w-fIGIg#;2x0ZE4|L*r+NR*hg%`x%Au{yZMtllH;K-ISm?eD> z241_b6NcAQu3hRnPr5*&uG@X+K5s>R#NO$NTEX3;lk+n{qmMxlD$Zjvgs3<#I0b)P zbXZ*6=<6U1^+v(NbYP)i)Z2f3S|}JW_s}hr40qS1g$l#b5iFGH#u&>)b<{ymil6hM zFFlWYFhOHvl_M8Rv^r2tL?~Zq7#w$>CJM&YJ#-T#1Lt*VqGI>$YnUk0!Z?cE{%Uw7_^RHq+Fl( zSZ0a@rsG=;7)Q4;l;!{i+&!4=+#saA-{!MjgOCP)!gOL2=qeDq>n?u+kpirLn7u;e z39$PFYjtS1@tNMme3J!>%!39B#uu6J7}Ny=7>@UF%odE(d$49p)=!XXwgmD-wfZC% z3t*!V$Q{-Eha0Vswt#;Gqjlu=Z#09|EhWZ)gg@jD3nL8MubRr%^BqPRT5xmM%- zaL_d_P#{s{p!a63m|<-Jag&@|9f3rV)0@qtd13XA4hj9*I+-$7jJR@`PB zzPbSm?3jP?s|z$2&fA^A01zNBE{>F?!Ei;~AWUb|o$O}5GLVn-=5pdIF~FYLb!hy< z$AjJDckd4_PEJoQ4vs&Z^I2&IvGIi!KdK9J5IH;^>PN{M2Hv-MlJy$IrRFqFch@?? zO-nE@3G_S?;f#NzT9(v%P|GN&mL+u{B#iq@KFpr_tHt>8RujSko<)N(O=x>9fW>A%vi>C^k6%~*~nPrvF=0u=l`mq9S9Sjr^A0=HNM9P)N=y$j6gjrke5K{ z<<7GvV{K@z1RRv|7RNW*Bh|@})p!U_sUT(at2ge!TbACY3R8~jcJb_r_b>|EHnEzk zMmg@~VwppOFBGLJNiLK*S@}XyE?{z@lu76BBg*BCE>hj3n4_lYWqHNa#;_qKC9D=t zOvmxa7n6SkKk&(^4eqTupYP`5VLCaQjT(sccgFy!HlxK@Cy?@pFKipKZ3!ct#S%Igo(l5R9 z^oxJs!D1U(oNkcnJDO~PJfSH8cvOm0=>V8RHS{t8@1uU`CH&-2+A8>3NCuTI#$VNF zxqosso~9EQ@R#l#JB?%mIi^nZRxLcDiUpBVnA)JTbMzV*wmz4W@t^F`vu%6WmN z^4Y?mHiktFtu}{8CASrD@1(J%EX;XPCfR>){Em-OAC)W=00fUp#s9Pd#o^(pNy{cq z+>uzQ1zRntIB{48CJJ+^^QOuzPL}g*Xr94-Wb}?H9v%(Nf{$1MLFEoy%pIy_W{*oH9IHhbY0CW%Bp{J zC_22Wt{0uF)%apZVeo)w910zWM~%kc0S*t>6LaW0KDZPzoxuZmEpXYfM_aQm$^rVC zS)Jw2I(Dh?=SMp)jcsfXpI6~DIDc^g=>04EgrdDhwOMIb>;9LuPk;fScce@ zTE-D(+e=wb5B){yyzVK}BX^lcC67&2AzZ+SG{!&!X&*@myupIb z+Hp0c*+GIE4gN0G9}L<(Vc*kG%0L`miu<1Zkyw2lIb?se5oFW35J`2$TYiF z;oSxL7w#cK6Sv5R3Ndc5K(RaZnb+99xO_naIP2G$hgcZEhfYkDQ0Vu z&{rC>^GKJk5$;G5dMd%KMm(Lpl)WC$Cs_judU?CDa8P~nK#r8c5c# zB)XZGH7sfOsfqwZFrgzXb|+}({IUf%Rxdk?ZGF{Yp*fCx{uL2r33n%n5`%;rjRe>6 z!YxFi1tI(779!0kWIBJD9O_K)@+{8;Uo35{ep@W^4cM&=?kj>Qhp97tCN&K;}E zNsDtwMqa|covZ^&eBZ9swGmh+5{iniNwWSXQBQx`AuCw1AU?R#q27AH%Fi4UK2MKc}1yYK+En5;PA-kOgVcYx;Cn4B2zQaifIKgB& zmRId?Ssi~`U)H`OXom-1OlAE&q&r+1W|epS=HnziI7+>%XCt>SK zJDkv74tbEsB@Wu-^|YBpRYmTwbeHGZ3W1#B{9b!zBxI+H40~5w-XmvdC3K9v?-7q> z#rfmI;6G9$Bw+)jz6|FVWDcrq%QAZ)>kcBd2YG*g8i7HOcLjkBLa}&(7D3h)~Z-vQ{9{t#0ar1VW18=Uo;W!EnQe zv%`Nm(d>=wa2SmkCnMVpg0N495DGK0WQ-rcuIF$eAG3L;9yGEQK@`Rb4>dE>SRT(7 znbHjPgQX^Q($uTkVVYefquaTXS3OZno8DxrOsD@=N`=O==~6>eMjA^wo(hCyGNi40 zqpTTI|76#2;nwbCHdW@SM%f{dETk08Gc11-VeOicmyp#C7bJKz$If+I872eOu`}rW zvmhq4E&}Ge9}`|zEsB#ctA~VoalK@L=sc*j(g9aAqfzQ`prO(3gTvWkKR0F{3`115 z+$wiB@$^{oOdy0j(lad6Hs*lA1`UJY(IRj1Ug0<};w{$BmF$*~;s(#F5xRp9Ww(C} zNI*Nmu*@nn<#IVJuG=-nHnGT&QF);x0|OrDu3ey3d;q7}I3jYVZA1z9QT~xNfFXLpjWJ05!B|HY-#U}p zfYslE_+Z>l%6trZ9h)RLoZx@m#9^=y%xCj;7ZEOG0~q}lPGV6uINk7A3}A3w zxajNUB+gGDdSv_GTuy;Rq57WsKZ;grf+3H-d z^Tn+|F4kp()F#>rmJ4;gn0};jim-X;8aGz85Y1L1btHte59q<>^+sWi&WwybI`u4+Yto~|o@Y^t(>)q?E zyufk6@)BLUBex(~dPWPj6D8A*abq&$##E{<^>lpqB^-~%6&XEvJ!pS{j!T0#qwTkP8E+Plk7`6*>(M-0@YCzh<10LyuX~`_b*!bets0IFFR{jV9P?;8Rdyc zb_k!#h`&SNphdJD!six}?GQfEPkD!omw&783X$5w;SK^)K-}xg=p9OGeB%Xg3N)a4Id5c4GO!O@IZD-&p2<;7-+r?Jv%4-Ap*tU4dZsw~y z*W`^aYJkZki<%U&F4cuHTN)a2{>?6+wG>&@-FJnopfd2K4ruB}mbzaEJvEQzt1KL4 zi7e)R?6qZ`0{r2n<~@oLk+Bi2BLO6BH!p-QT0o~ks%YrB4w?LSJnfQq+ix1Jz~*saBb34RC` zZ<*d?u1urw9v9i_b}?Nh>MqJh!@{IKjD1{w4Lzq3$ZL>nW|$o)-iwfWu;xX~F8`Gc zSCL*sfG>-_i1L4DqSf!#%)ul*)O%fh*{`&F#Fru1Zv=OM@WKW&@WfkiQ8-gAxO%`< zwoo4@tGhX1dxUEr(98&5`5- z$MINi2;=)Q)aA_d%eSJ;bk5fDM^^fetn?pQ=|8g4akGEYW$W@sM*5G8^tVDI{>VoE z4ztnu%X_GqXiXpgdrL$Y8=^FaKXT9yKL=gBx6S3BB{nw~vsV{eoBuRm3%$u@>3$USmjji>2! zm^~@P*CT(WxOu)!|nXT?2ao#5C@$Si|!`;2}Pals?ekut( z(XGVCt8}vo^EPR}WtYkGLP`xA*mxoyW^d1DiU37v*@a?_Gb0vP#{?31oe7I?3q;6#Ia0BmcK( z)gNd|J7O*`B$;j9ord}g-R_5)w(cg67m~Y%*Ik;!d#DNPu5x(6$?Fz-f4aKP7D*JV z&r5B~964ToJ7zlXxhS1yq1JJec{NmRKn}0}MlZtvzzPS#qTlX3>(f$qwLwLRu>+&o z_$+^wG=rVNb6UzShCu!lqL$}5#JNCWT!^1JM8%=7F8C6Lli8Q?us5`T^<~fBBgjW` zs@3$xPX8?}%@!LQ1`BS$L3_dSA{y5MWy1bohg~>*z${|g)XF|$NMRgR@;k=@L`W?RoZ_cipeATxY< zd3)d&6l9w)OG~2KYFB@Bcq-*qHT!&)-egvlyt<4&mD&GX8pA{dAaP&;p-bZu^eXc= zANf=fl_98!3_2>O-Igd&i9ed(Cc%G(Yk*a42~pxQbmH#7Ij9zWovQ!YHp$GHi8rMy z8*9myrN9|0BL8fsKiKKNA!e%lM?*GJuGnZ-?dc3ZAFOU0hCIVdu~oa?lv`}qE{=F> z6Lc1w#xwa>rTcH=c3mR(YutMX4Y^QBIXs1a>rr|QzVIU|Ne~}4rtWYm3s-;lwK{ur z-s}lpfEb%KoD0MHp)nO**S>94qYN}R30_Km_e0bs(sTtEC8*^gIx4e?m(~!cFw0~- zO@`@m6B@%Y;1vt`Zgz>QO<`gHrRl9^?`Pk##h#kr*5d$c183a`Dx`$~6iCfTVrt;* zT(J6ZOlht@*Qq`z)uChh<(hvAxDBWf$7gjV!CKnC>l4TcduFTkoIX|cCHWySg?;=t z1LyC&=8&P)@Eij48BXtQT%Y009qT5DDK(t13*9O(t~A%vwNI z5iS77-*jg}st@12+5E26l@NOjFhG>*T)G!h$SH9YVEAaL`o3a1mC=9i{IB?Sr@64= z+y1Md^fEdsvpGt{+x{zl0I=-Y(n^u=r&FvIe^jPTsumu_T3C)XjOyK5a_7P zXy1BOUHm%Ey1wSe{D5`U&XHhcUw0Dhd(8~?RWItX)>V+0xZg|p>nNrx@H+mw6ASiQ zY{BM+K{t|0a7&FpjGao?L)jC!`U$s5%iL{??3wykW-QN*-_eMWzsd5F7`Q zs}R!c4=U~3D1IbM8vr4~+sC05l0i3BtnT=2oaS-p@RHtftC@d|(;jE)4@cf87W!Nf zILC#D^Zr)39$Ou@B`~_)WiOr1rn&;qxWA80g!n(&bGN_$`H}j>DwXMG`=t-oAo^fLIw6()7N*vl@T;#r$l{e^s0C{P*}%5`i+;Q!1pgRb57;?=5sGpdkHce1m-8jIi5) z+fJI?AZ)dimVu_A|18`l<6~2dGNES82mRTxo2P;Rq5^=HtJy;B*Qb9`25fhf&efvc z8w|+F;yqN~?DT=+z(5ZR9P~aBKp@10j{pLfx7T>pz2kqQv$LaA~mJY z{7EptIP2%h9>u}cte>Skmn^;M?ad~WOp}m#6bF59Xyg|jl>vH*3cv`BOu)0@*rdv~ z(l{r*jk15dfPC3=+-HB&sp6upT=3pF_9w$&s6FR%37*ffIQa98b0~Pa7!p%?y1tYM z9?roK;tw~@y5Q-dp;*|rpxB=Z76){t{Dl_qlc{d$d@=s2M$6AH&4e|{uc}8U>+H*# z-SFd&!|QC~aoTaA$gmrNP$mnomgKK#*{GU!%rvs%3)s5 zdtY(^=JDb2hi6~(DN{c>+5dEQ{_&r*-GK_nW2fT}AH#MwEvI$**HODt;DN93WW-Oq zj1_-Fx)#z!y~3o7VOaqqwwBU`!NR1BVQfL`zm~Iz!i7m1jUF0Se0Es4eMM^4ZoMMa zh%aSXaJi##;=#kS&G!`6hFUIS&-*KH%&u;h@Qr(ay=uQD@J}EBtf(sD~4Ai)V0igQE z?`+vUAbIcnQUjOEu#eo%;qs+rl_?;#gv*;?hKCNVGKEK_S~;0+lR-9^ZkMR_tF3$H2>iuKG6IN-aqAV!*=bQ+^)J4+wAjD)-SI7Rq~d%%TDQb)%V*j zosNQYn+*8TU$v5gW94C%T8L_`>*WcVz0(u5j=M)E=VyYf499pvJt?Z{p7VXwuIZdG7- z5yh%(#+r}-NHl9=f7-j6EpF1)mM`nOZ7okx(R4P}@kSf;5I7|)xYNBGA2LFUZ+wE` zPw=QzYbi56WMET^3uVGl@eL5C5;nFE1w*95e5ejRC>Tn`@t`WHn+~lW33q=*vwBAD z;y6((+}6F@F*3l5Z^uYTEdHoeA5~_@$QUc16V;6ogMnAwcu`&27je04*|qD!oCruj zA~;dj^u+R_Sg5djw?1U_7~lGkuwML8yA86EQCuxvlu4IGH$W_GS8Oi|#%VoRFA7F< ziQ`a}8jrYUkA)KRn?0j;alC&h7HsU^?HCz0#&x`8Dh{0g8 z-<=mF!=^RtO4+4~V@_bqS?6AqH9fJsC>Uqss6K|B-zGoUH_TLW}`;0;!4#DdIPOr{~5vcgmx&b;SoM;w5}q^_>#6FfODlQNIS4YoWMa#{cB0kvOy|9vGz~x zFKv4<~}SE#w{MN?T^{7`&p=cjW8@PY*`pRbGI-94^N5)okHN zwKmM+k&A?@$m^YFFQIQwI`n^vhzhXhGVtz==boAW z<3BUBog?_F#L)Fx>r}lLT>I1>v@iIY83)(iMk#>DT{ple;0b$h&cAjs%AhgHT`8_K zIaEt>+;-2jfIpnWPJ}=FgTLiE{&+F(#|@q60e@v(1zc3m6F<6-?mFV6Q%Py0yF*$~ zx)d;gLjgs)pVBEJAs~7xAc9G^fJjKFloBE$2>6TbRVQ^^>T{5z%X_}S73?a&&`wErY zA}Grx53@$O4xar_Qzy*wjJ_HvUUsgN>u|X;JJl#v+dS-WpxGd2r)*bTlzWpS_ggjP zwH7_?Es}3W($5Q9<@COU@85OQZq)TNNo!fu$Yn=O<~tHUd>a)u`?XuM)gSeAiKzqb zv2`kzZ}5)yR79Zx?^wnB>$`2cnTaW%zgf`97N`o3)am{ZqLjU{y?En7eYfyQtFV&2 zT5-23yYx?mm6N`0^h9H`;MIoC&B5F5&4VLaephl-$%3zK=<#1s*GZ#TA!7Y*)X02H zZ!Xof1yyj#i}y?$ubH>!)yUdkjWL!(jBg)QiSeZrM@d|qcC`-O8WjV7^`(Exh!?}# zFuM*dlc`&FrE|SIp;YQwBsMDTGXVu90<}Dki%!Me_!1f*P!^Y*Je=KJD%q$n`4;t>f8xb*;6`!l4C}3|`5g=sc~urG3Ho6{1@JMI-Y} zQIMiYyemtPy$HE0OSPoms34`a654`>xb&oNI1TYD@(|MYI0Ch_Ym)f1f`l~0zJwa} z0`KnJ-oLrzx>zB5msj*uYQzgT0o}8gVI7(z$0n`s>eASl=(j~aPtbW$KC^x7LQW=y zKGCk(I_i`X7ylBy=?XQ<^6UxbC9_AUz{k6bzc1CSFMsWE+z{^y=VUMRnl3)LBgDXZ zZBX121ag5s=Vu(v;fp@(@j~=1n?6mp55=n%dnQwyMYr?NeZtS&yO)zp9%)HW6C{_S2w%U zW^STByekWow_S6m%ZXVHO8dz3>~h;V#cQ$`Cpq$*vNBf0q-Cap^NlJm-i43f*%SbO z1ivM}I`})A6J?yf)|<(XGErY<4ErjiyB^t!-^z25AsG=cWX(T&Z?lW*yw6>3Q$sT? zSO4;^L5A{}kaIft&*-cevi*GQ8uV|T@1aj4eS<2lkRu7PV>#Vu^~7A)iCv)5W92;2 zJI{CvVer@NQi?|1d@#;9s0c*fpJe1u4;-|rVhbyvFtE9`xwm(ruXyDgAtm|QPcI|| zzucAD*u3A(*>E$XbbB?t1T4Q~j0NUUP5couPwQ0_2d(ZI_y`An*&Ltpjoju;`Ba2I zc>dcnR2*Dd{=t^R7DpwlaFr0bb}l%e@7I8NNvj*FVh8H0tDfuIn6>2`lvTT0ExB=F6P?1he7G25-~W$?!&iC^9t`8t?7 z5@o}(d2#=&%fpBKj6$xp<}ulsU;5R>ga*tiLp5TYT{6W&O|P(q0qJXevyPqBalT&% z&8gh!%n3V|_`O2CcO0rd0+~S>OFVibA!DG@#+WCRgQt;la?VrB+;_;;92xjnJQ-~V)G3rYDt+r|7=BE(9}c4M$%~>kc(O$M@;8$EYydG& z$W}{p;&8;iL)@@T{n8EMA+3+ZjxH?nE^?7l_mLo9PTZk!+Y4-z z&G>@)MJW5I6t8nYQHO3%o^UX!_hjZ}bNF$8vMVnLhAxlF^bgxSh}}%xx#eX~9fV?F z=ejjtDkC-YUV!0)l&&BsJ1zM4+DxJYs!~1cJ^RfEj7uNti#5t&OJ{!j3B8U+Oe;!T1##n?mMNj2j!E^=8nrPLNqqb5!&t4t}6xBlE+eDiz$#{4GV??Udz z)F(Z%EW$R9O95vI3WVmZFFO4~ZgJ&2N*jKitSroWYvP$}R2ysN_|El#UG*m}BAk(g zp-KDe!1}1K{ltlfT>gGnNK<9#&d4e~PRw;_xp8lab?Qx0M)?Et`QrWs4}~?`9XkVd zxt}Vi9wAm+ryqkmN<-J(BQBZkqNloQ!a`2oW+8ksF<0|@A8teIUKv6&0O zQAsXOY?U|Jf)^ZkJUYl3bRPSP#u(LDI0SfkqExre=8M4xKW;G{?BsceJW%OKj?R;_ z*7q}cNOwmY?I!G8KS5lu&h&v}PjzMXn5T5f)1FG&AA@I{`8tfghZ|EV$`kPN zg?Ot;yEi06>vIvPL|+TJy>|P00zr>L*hT!O8l@Y-i8c((f-Ik^TlMo^`h=Ye-%`JQ zVJiW3?BjKI1x?RX)E(5rz|44)nvsm|Yts}}Qu*nH^#$f>-?S^N>Uif1Kcn1CDk{$WVu|*d(YZTI z#*g_ODmYJ=cgpJB>0a+i(#&y46d%fBz8O!iBj@>B zU(vCd=s&uaw{o#4ykslELUNe5@R>npwuJF24N6OCVChvQuQzRNq zc9S$O@r4Dx%&yH1v~@gF(=dJ!gCIlgU-;o~!|&!*nc&(3d-Hl zJLnK{zo*EmWlclsnQmJ9(P%j9^AB^6Pbd zDWM~XC65ZUJ*jiLls;?b{!-QxYf>@3>c_H5sGS|Ndkep%c6$Pu#<^IgUJC9l{VbYq zSd*RI-5Ho*?sNV@B2oBRnn@wre2!!{L;vMuqn29i*+*KQr#lE--U%=j+V;%J-PNx!)Qp_jBib^Thb?k&T9@Id9tQ6pE-ykLS9}Ey=ynRwuDn z-||7d?{2EFiOCX3{dODGQ(IB`zMxWgBX{(^)3b{zsVm4}W!AE6@CV>GY&!zCcLqY~ z^b9nAO~{K)PW=8^aJTfzqFegjR_OY-*E!F^_k-6qM$V_r##?x1ZAa!ORUBNOy7Hz| zSlEW((IonU^uR+hyGJE=PsO}ueyqRpt$>5mGz;aXnxFhY&-JnJ;&J!Ow4weB zm!qK8sc z&HP@OjQg%54W=q{>FzQ~G#hi=V=9SXy>4GNv>4&3HCFlfT|9HvajjZ<^)D>l_mRvp zDiJvx6+@>NPELBc*vQVR3YU#kSS%Hqbc{9^oQnmBjX57oUzalI><+*9=9ziy4f=L)qFVVE)o%%zyn`*m`QqQyk#3Gv z*GK1Ee|a#i(4@sv?XZSS+^&VO57%>!UO}2094;9n-RCD^O2Y(pbcS5g} z1HJbYs1b&+OCrOA=)KkF;$)($*X$SC=i-xP^fmS68ZUQd(kxv{;=lRUBl=m?{Nl;4 zKBlN^EyTb1_I*f6zmAZf2)|$aGiX)jar0W};Kk#6%b0 z?^jAqGJ~htS5%jmw&tQsqf?d(-u4ddIKPitJ=TiCe8?efLAqJbW~t$+VYl;IEVV#9 zQJ#7*&zUK!hdH)GWdYM$mY)+=s(vk$H@xs3xl;vxTmK+DBb@4oF1cHow$5sLTF!@_ zip~+!)$XF9FSSGWlH2iUgP)z z%bf-k=_0Z}y)Aygx&lwPt@7nNmuBIoDm&-BwBlEhZ67k&Nf(?K%WLlk8pbndlV98q z(yx^=&L;negd+`*QU_vF1&g;iqysNV)k+e=WyEcUpuG`qw4m#UeGL zj+!g_5?#J+&9LghYkk&UTZ85M9odzrvCt=i)jEryuo9JieaSH|3Gr?&yfy?tay`Y19t)0kx?C2`RogK>^hZ80@YY3Cz@hfRF)3 zN=gbdBL?cbI0VqC*_@SR_+X1igOCr99O57ZKoTX|zlbx+1fmCZvGN1Xwg_rKEsmQK zEwRQahWCdb3I50yf)glO=i~+{6>aOB^wd(D8~~ zIs}LP6BN1Nz>FP&8qKJ}H7p9!GX_p0(KJ3>UolEBqQDj$*q6blMr-(SDG~o)6!66! z!H#Y{&&5S?C~wgo)LKhLMT_P`aedJ^WZgRrs!(g^Ize>E`ujA36aDxN*G)((G)g4! zdzTBIrb3Cn_MOX;e56^-&eEd3Vq1)Q})rvq*Tjm znQDajem&ZyZwdQe(zU&n6SNsD@h6`x z-^f2L^9$ATWcF!5T2F>pBR#)B+H_^Z4Y!uPhrepPc3N!D&3T;vrtGk=)mfx{e)@d0 zal{ZSV^{V0Z0nQ+UNPX2>jLH1NcpPS;)smn7kAK`wxhY;{mT(u%Wqa^=Zh~cQK{}; zY?HUY*tvOm%?8dv>Wyi}MM&=>MisA<(T%?m@mc1qJaCEudAmEQjjsJ z+m*`?$h-#RHGbqPB&ISEA^B-&>0HRjY-0%JH9kbj&C|Q}t7-V2gY&;EDq`YAyez6` zY6t%-d3N2B)#EV@71zK$ubkNQ$g`pH6!$&$6HWR%7^nSmd5hk zpw{tfL_wg33X*U)Gxf8DhVL3vhwjbiWv7(Pc}0b4MN2~3XluF>JRL8b5^2a}@fDKl zGk06b6wQesRobNq_`$QXqM81(4m8uX?7A3blRgs_H?>l@($v~|-3y&lOmM0x76l247y2al=JxWoiY}>x?R6-&niz(_z4rme$Pd< zvSwP_OMC?z+O`WuU1zze3L;Jf{1_M;*D;WGWrF_@;z(l3rL;(=BcLEzh8lJrb;p$k zG821tJ)Nd>&TOiD3gT55B%A%;AdksYavQ(+r8sNneK9ERv-#xP*S<0(mesw|jRR$m9V;a*2 zzZdOoZS3c=5QO^gjy4yU8jn+D5EYA8w>I!h5*^WF^|JYQf;g=e*dPBvywn6po z47i)9(6tOVQ4Xcuy7urHSE;6Zp|nD@w=&~&^kb+twRkg#6AW_%q`j)&mU*z%5c@Rd zR1A1GYKzDxceSJ1RAQ|{U`lB|=w}Qg&8`MgC+;(7o-vTh6uoFMGh?)VO)i#ds+&?G zC&F!Qg?{sFA&c^ETxi`H=9nBbVt99S8aC2e z4G&ESopw((KQxJX=c&c2v2vYg*3T9JKEx*4YTHhZ$poNCnzX;UFmu4YKF-8t%Y;XL z*8D2Z#Az8@(=*!qK0K+WM_}BJgivKU>f$+0njh5!Vj{2lXUr*kz{i+5W%{BJ;X8}C ziV7Mh6WZ9FvBt_z9P&~@NQw+&)^kz54+6G>QLgao(f@SRrhmV zelwqRRG<3K#dbfRu3Zk_TGH+h$@rx0)U$mnx8bLV^I3y)rocq^ho_UJkyF2NYVUn= zdN_Hj5Y~}>P7H}&SW=w4C2>~TYWu*5=@y_VznXTFO#gVmNd((YA+pev* zfp4{4qRX7)DffS^U)|v_I>-Ft&Vi;(f$?P>zd60l zJx=cakar%JS>+tB0>BSBP8|5xdmGM`o>Nv;J=nmMLFS03(=;S7nABMqSO($YGr$fD zp);HaTWA+;;Y6HZnLLx0-h+}L&^Hx~c=r>%v+wu=y0eE(0|jtAiY zHzW46o$CECRYC!S`HBNCco0Sih*nQO^)W&N2J>sfgGs{v{_`LjkmN;RN~SM77Ql(w^UdcA5h4L;02yp zUqjv zRQHdn*?52kiQvPi;)Vu$*5ak|l>``!^*zCn!P)}UNQ5dhAX6l$MM|0gSofo40H%;& zB}XHQHJ}QDY?W}35Y&O}7)Tw+_(Q#)O#la6YKSQT1UG_`2hw_@rd} zf1~mTA;gM_N_8=?YYG+ArU!b&5HyD|l?NfW*bWg9$h2P&(aH~8E(9|mA&%h3XksZ~ z{V6C1gCV_+x&|!dkd+b$;6|`x_{|E#O(en9nmm4V!md|C{21SaOMt3q(NLQYFp zB!=y%EpNO?04ZKjjlCp-9~yj=B&ggw2uB5-9ekBLblWKi_o)4Y`%6J-M+)mX3Q{1{ z{Qw7H)6Um=&ec9b7>tAFsB+7BfJPb$O8q~psfgn9P8Wf}tf`OAapWSzidjulX;6(n zBPrloN=^?X@sPrSRB5aQ_aLYpfrGIAhM9xgbiCjdKMZ!B;iws}PLo1G$O{xYkYckD zW&!!zeGuHzFxWlwqsH8H1)`2)jd^|?)JUB9N2B2h1U&l$))uxCAktETLxeD9be@kl zVE`R=nd@l2mxPgFhLp8ShK*qifA5n)>#9}I>}RAfiGPxI0qG$>97xthuw(e?8V0>) zK)2)IKPvyu4=g|6B7-=F;oVA?lIT~2!SvJcj>w+DBgalJ$O{M5hB*Fmrf187G6`V1 zlLzPK-!w#}Ob&W7Aw95WOwN9ohSX%iiP+S|LDV>FIpC2Wr|@C0KF~S;-Tgi#VJzSQ zOtcUz*pW?2uHu6k$WID(#9FR246h{4;U`DwFYghmGQZH&nIV~BA7UpCgsfi?~o z;~;7vb(9?E^>BF*4_+b%+5{^ZflUk*o7gdivft%<2^qS{cXUv}>J-ql zG6K8ue>NO8@6S=1U{#S%f`4RCz4|y_%4~gXYKT+-HTow}0QHJs%)%AH=uvN`R*r-1>{CsBj@@a1w+ZM{&?!A^4i{UAP!M40g@zs4X0PRM-v7*^cTj=O?$z zYcO)fgNcSy9m#fOvbYY|!zRq)V**!<>%_1YIAoLmY*i+=fG8zw=50{|Gw-(&sLhAj z&Y|STt_&J~`v8u$#aQ`IoFuxmU19}o4my7{>Bf*yAM(O6#RbL#VvIrp2|)LYWjs32 zU0Z7Gq}@xQ#_iM+Dxh9FXB-3v0#&dpo&-T(Q>lTp^IS|o;Tvk~W&m0H1%iHO;2=s| zV14%y!2b*eRpfsHAft#H3Q`8(k}BdDB&Jvu6f<%cM}-5X;>%g-n;E>20Q!C>TNNByi_65_}BS&%x| z-z*4fgXKj94KAs4Lr729Awqpv*$Hca2-_Vj;-G=RhCx()gXoJZrhkptDCDt(59_7(xG6>f;nahES3LF!igfZ zkW2CcYiDS&^9?O>-6?RT?#o~xTn!4>0;$uUw2(`RA0})sh{_Ovq4Hu}3NstAeG=Ad zV6G+vcdvg{)|LTk+TiF9HDdT1VUAp%%x|o2X&$KxA zo`4{xhCdLE4nhDLh=L9{-9i(P0A}Dm9~~tiVfAMY>#Qu9I(1;Mx3HsOYO{RE&yLFz zB#D8Kxxv98z^(G%0iliqG`iU3HPQvG*f~iDwE58S{_EXU5L6pYhs^*}x_`384aY9> zr(mHdA9-{sH4<>Ve{I<&C6lqX;9AD;9JRy#1s$|BOu%hDY<1SE2dbp%!BG!)22Ont zVHco>>|_FJ^ue9sFtJ1Pb`ipjrExg6tp8$xo(Tc-#N2=0pkDo?$L0xkDF$4`OBsM- zvS18YXjz^CSJ9_Hkhv`bV4BasgYj%g?;=Endtj)4ZP3%iS6J1+BH|b5^Z(Ah*%A|W z3|9=XV=guXC9G`WsFX+Y6NuxRDFaf*V0ABPgb;+(+8cqymzsw}8UQ?d|0^*;uud!l z^I_i5F&?Xy6zJQk1Uk_5qbpYy53yo%k}=q|?G4ms1`3H;C=XvIx*LE|LaT0 zR=7F1+}GzYI0Jyk0dUGr@J5Yay z9e0Y8Y6(i{7Qj$(iTEo-O-*2j>Psdd(h5`wr8US)Xwz+(*_9GQ+%W7il{lMEiuRwAv3!O*FMN7guO3e!Ou!&b_(t#Ti9vYr1p*<=a_ zwsiSw4ZagVXBC(Ze_vPr`v(3w8`lBz3eRc-4#nJ_6D!80h!ZRqjLHA9@nz!G?=~hd z7`^dPhv9d}^}?ncjN_&%@5$5S!C>3qzVvSz8Git**qd{5SisJ=KPVfW>GyY+&+wFAV36K%E82_4J zvd@W4li;l>&WQ`{z*ua?1BxBMTmas#QbYHtm@}#05Hc(dA@sn^8CpUh$^I`#u(b!_ zMah3*Y<2TiYnGT0%%)7B0sq?IC5Kf6-o0YBPukOS4r@@?m zVfX=f=gxaDjluu3=l(E&_%XS()(O-nVhOeR4*iDG86;|_V1-6?{cQy4@4MC