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 0f876062..142faf16 100644 Binary files a/archive.zip and b/archive.zip differ diff --git a/reposense-logs/reposense.log.0 b/reposense-logs/reposense.log.0 index 11db5520..71ae6e95 100644 --- a/reposense-logs/reposense.log.0 +++ b/reposense-logs/reposense.log.0 @@ -1,42 +1,42 @@ -Mar 08, 2024 12:49:56 AM reposense.system.LogsManager addFileHandler +Mar 08, 2024 3:53:34 AM reposense.system.LogsManager addFileHandler INFO: Log temp folder has been successfully created -Mar 08, 2024 12:49:56 AM reposense.parser.CsvParser validateHeader +Mar 08, 2024 3:53:34 AM reposense.parser.CsvParser validateHeader INFO: Parsed header of CSV file, repo-config.csv, and recognized columns: Ignore Standalone Config, Repository's Location, Branch, Shallow Cloning, File formats, Ignore Glob List, Ignore Authors List, Find Previous Authors, Ignore Commits List -Mar 08, 2024 12:49:57 AM reposense.parser.RepoConfigCsvParser matchValueAndKeyword +Mar 08, 2024 3:53:34 AM reposense.parser.RepoConfigCsvParser matchValueAndKeyword WARNING: Ignoring unknown value 02a7620d1ed1d78c4ed314a67cf8c359a5a97dc5;ca7ce2d5c002a436dfccc9621a3de79fb140f5c5;92f90c348b0741617ace600a4e405bbe681dd795;d2fecfe583c1c351929ad4e6afc900bcc96f45d8;7e6624f484ea788645ed2d42d34fed57a06976a6;b524367f655bd758f95a7ac73e32c35b3d0219c5;66dcd0ed0a3f94a90b339936a8421aa03eb959e0;2c111e93c9140e523e532aba953f58457561867d;beae79deffcbbdef42f3222a0d937ff4f3961f40;f539c5095bde90a01fd591b0ad5c1d633f3c07b3;ce0abf71c5163b5c97539a960017c1cb7f524243;6376848908a5ab36696cc3b233ab1d4050a1a375;21de2ce55fcc9ffe1f188da7c67b05cbbcfef840;72cbb26bf7d664fdc845206ba97c62d5dc4b4c2b;a69eccecfb02e23360f2286bf626c5ddb08dc62d;360564cb5892ae1c758678718ae0b6ce27a0c8e3 in yes column. -Mar 08, 2024 12:49:57 AM reposense.parser.CsvParser validateHeader +Mar 08, 2024 3:53:34 AM reposense.parser.CsvParser validateHeader INFO: Parsed header of CSV file, author-config.csv, and recognized columns: Author's Emails, Repository's Location, Author's GitHub ID, Branch, Author's Display Name, Ignore Glob List, Author's Git Author Name -Mar 08, 2024 12:49:57 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 08, 2024 3:53:34 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias guohuang found. The alias will belong to the last author - guohuang88 -Mar 08, 2024 12:49:57 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 08, 2024 3:53:34 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias amanzainal found. The alias will belong to the last author - amanzainal -Mar 08, 2024 12:49:57 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 08, 2024 3:53:34 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias shuyuan found. The alias will belong to the last author - legionlegion -Mar 08, 2024 12:49:57 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 08, 2024 3:53:34 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias alphajae11 found. The alias will belong to the last author - alphajae11 -Mar 08, 2024 12:49:57 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 08, 2024 3:53:34 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jayne1010 found. The alias will belong to the last author - Jayne1010 -Mar 08, 2024 12:49:57 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 08, 2024 3:53:34 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias miffi found. The alias will belong to the last author - miffi -Mar 08, 2024 12:49:57 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 08, 2024 3:53:34 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias windofbitter found. The alias will belong to the last author - Windofbitter -Mar 08, 2024 12:49:57 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 08, 2024 3:53:34 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias guohuang found. The alias will belong to the last author - guohuang88 -Mar 08, 2024 12:49:57 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 08, 2024 3:53:34 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias amanzainal found. The alias will belong to the last author - amanzainal -Mar 08, 2024 12:49:57 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 08, 2024 3:53:34 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias shuyuan found. The alias will belong to the last author - legionlegion -Mar 08, 2024 12:49:57 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 08, 2024 3:53:34 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias alphajae11 found. The alias will belong to the last author - alphajae11 -Mar 08, 2024 12:49:57 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 08, 2024 3:53:34 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias windofbitter found. The alias will belong to the last author - Windofbitter -Mar 08, 2024 12:49:57 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 08, 2024 3:53:34 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jayne1010 found. The alias will belong to the last author - Jayne1010 -Mar 08, 2024 12:49:57 AM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 08, 2024 3:53:34 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias miffi found. The alias will belong to the last author - miffi -Mar 08, 2024 12:49:57 AM reposense.parser.CsvParser validateHeader +Mar 08, 2024 3:53:34 AM reposense.parser.CsvParser validateHeader INFO: Parsed header of CSV file, group-config.csv, and recognized columns: Globs, Repository's Location, Group Name -Mar 08, 2024 12:49:57 AM reposense.git.GitConfig getGlobalGitLfsConfig +Mar 08, 2024 3:53:35 AM reposense.git.GitConfig getGlobalGitLfsConfig WARNING: Could not get global git lfs config java.lang.RuntimeException: reposense.system.CommandRunnerProcessException: Error returned from command git config --global --list on path . : fatal: unable to read config file '/home/runner/.gitconfig': No such file or directory @@ -52,1663 +52,1663 @@ fatal: unable to read config file '/home/runner/.gitconfig': No such file or dir at reposense.system.CommandRunner.runCommand(CommandRunner.java:21) ... 3 more -Mar 08, 2024 12:49:57 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:53:35 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T16-1/tp.git... -Mar 08, 2024 12:49:57 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:53:35 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W10-4/tp.git... -Mar 08, 2024 12:49:57 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F15-2/tp.git... -Mar 08, 2024 12:49:57 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:53:35 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F13-3/tp.git... -Mar 08, 2024 12:49:57 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F13-3/tp.git to complete... -Mar 08, 2024 12:49:57 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T16-1/tp.git to complete... -Mar 08, 2024 12:49:57 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:35 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F15-2/tp.git... +Mar 08, 2024 3:53:35 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F15-2/tp.git to complete... -Mar 08, 2024 12:49:57 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:35 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F13-3/tp.git to complete... +Mar 08, 2024 3:53:35 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W10-4/tp.git to complete... -Mar 08, 2024 12:49:58 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:35 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T16-1/tp.git to complete... +Mar 08, 2024 3:53:36 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103-F15-2/tp.git completed! -Mar 08, 2024 12:49:58 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:53:36 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F10-3/tp.git... -Mar 08, 2024 12:49:58 AM reposense.report.ReportGenerator analyzeRepos -INFO: [1/92] Analyzing https://github.com/AY2324S2-CS2103-F15-2/tp.git (master)... -Mar 08, 2024 12:49:58 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:36 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F10-3/tp.git to complete... -Mar 08, 2024 12:49:58 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:53:36 AM reposense.report.ReportGenerator analyzeRepos +INFO: [1/92] Analyzing https://github.com/AY2324S2-CS2103-F15-2/tp.git (master)... +Mar 08, 2024 3:53:36 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103-F15-2/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:49:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:53:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F15-2/tp.git (master)... -Mar 08, 2024 12:49:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:53:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F15-2/tp.git (master)... -Mar 08, 2024 12:49:58 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F13-3/tp.git completed! -Mar 08, 2024 12:49:58 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W13-4/tp.git... -Mar 08, 2024 12:49:58 AM reposense.report.ReportGenerator analyzeRepos -INFO: [2/92] Analyzing https://github.com/AY2324S2-CS2103T-F13-3/tp.git (master)... -Mar 08, 2024 12:49:58 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W13-4/tp.git to complete... -Mar 08, 2024 12:49:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:53:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F15-2/tp.git (master)... -Mar 08, 2024 12:49:58 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:53:36 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103-F15-2/tp.git (master) completed! -Mar 08, 2024 12:49:58 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-F13-3/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:49:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F13-3/tp.git (master)... -Mar 08, 2024 12:49:58 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:36 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T16-1/tp.git completed! +Mar 08, 2024 3:53:36 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W13-4/tp.git... +Mar 08, 2024 3:53:36 AM reposense.report.ReportGenerator analyzeRepos +INFO: [2/92] Analyzing https://github.com/AY2324S2-CS2103T-T16-1/tp.git (master)... +Mar 08, 2024 3:53:36 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W13-4/tp.git to complete... +Mar 08, 2024 3:53:36 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-T16-1/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:53:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T16-1/tp.git (master)... +Mar 08, 2024 3:53:36 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-W10-4/tp.git completed! -Mar 08, 2024 12:49:58 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:53:36 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F10-2/tp.git... -Mar 08, 2024 12:49:58 AM reposense.report.ReportGenerator analyzeRepos +Mar 08, 2024 3:53:36 AM reposense.report.ReportGenerator analyzeRepos INFO: [3/92] Analyzing https://github.com/AY2324S2-CS2103T-W10-4/tp.git (master)... -Mar 08, 2024 12:49:58 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:36 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F10-2/tp.git to complete... -Mar 08, 2024 12:49:58 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T16-1/tp.git completed! -Mar 08, 2024 12:49:58 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F15-3/tp.git... -Mar 08, 2024 12:49:58 AM reposense.report.ReportGenerator analyzeRepos -INFO: [4/92] Analyzing https://github.com/AY2324S2-CS2103T-T16-1/tp.git (master)... -Mar 08, 2024 12:49:58 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F15-3/tp.git to complete... -Mar 08, 2024 12:49:58 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:53:36 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-W10-4/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:49:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:53:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W10-4/tp.git (master)... -Mar 08, 2024 12:49:59 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-T16-1/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:49:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T16-1/tp.git (master)... -Mar 08, 2024 12:49:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F13-3/tp.git (master)... -Mar 08, 2024 12:49:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F13-3/tp.git (master)... -Mar 08, 2024 12:49:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W10-4/tp.git (master)... -Mar 08, 2024 12:49:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:53:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T16-1/tp.git (master)... -Mar 08, 2024 12:49:59 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T16-1/tp.git (master)... +Mar 08, 2024 3:53:37 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-F13-3/tp.git completed! +Mar 08, 2024 3:53:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W10-4/tp.git (master)... +Mar 08, 2024 3:53:37 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F15-3/tp.git... +Mar 08, 2024 3:53:37 AM reposense.report.ReportGenerator analyzeRepos +INFO: [4/92] Analyzing https://github.com/AY2324S2-CS2103T-F13-3/tp.git (master)... +Mar 08, 2024 3:53:37 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F15-3/tp.git to complete... +Mar 08, 2024 3:53:37 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T16-1/tp.git (master) completed! +Mar 08, 2024 3:53:37 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-F13-3/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:53:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F13-3/tp.git (master)... +Mar 08, 2024 3:53:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W10-4/tp.git (master)... +Mar 08, 2024 3:53:37 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-W10-4/tp.git (master) completed! +Mar 08, 2024 3:53:37 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-F10-3/tp.git completed! -Mar 08, 2024 12:49:59 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F13-3/tp.git (master) completed! -Mar 08, 2024 12:49:59 AM reposense.report.ReportGenerator analyzeRepos -INFO: [5/92] Analyzing https://github.com/AY2324S2-CS2103T-F10-3/tp.git (master)... -Mar 08, 2024 12:49:59 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:53:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F13-3/tp.git (master)... +Mar 08, 2024 3:53:37 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F15-1/tp.git... -Mar 08, 2024 12:50:00 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:37 AM reposense.report.ReportGenerator analyzeRepos +INFO: [5/92] Analyzing https://github.com/AY2324S2-CS2103T-F10-3/tp.git (master)... +Mar 08, 2024 3:53:37 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F15-1/tp.git to complete... -Mar 08, 2024 12:50:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W10-4/tp.git (master)... -Mar 08, 2024 12:50:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T16-1/tp.git (master)... -Mar 08, 2024 12:50:00 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W10-4/tp.git (master) completed! -Mar 08, 2024 12:50:00 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:53:38 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-F10-3/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:53:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F10-3/tp.git (master)... -Mar 08, 2024 12:50:00 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T16-1/tp.git (master) completed! -Mar 08, 2024 12:50:00 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103-F15-3/tp.git completed! -Mar 08, 2024 12:50:00 AM reposense.report.ReportGenerator analyzeRepos -INFO: [6/92] Analyzing https://github.com/AY2324S2-CS2103-F15-3/tp.git (master)... -Mar 08, 2024 12:50:00 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:53:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F13-3/tp.git (master)... +Mar 08, 2024 3:53:38 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-F13-3/tp.git (master) completed! +Mar 08, 2024 3:53:38 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-W13-4/tp.git completed! +Mar 08, 2024 3:53:38 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T16-2/tp.git... -Mar 08, 2024 12:50:00 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:38 AM reposense.report.ReportGenerator analyzeRepos +INFO: [6/92] Analyzing https://github.com/AY2324S2-CS2103T-W13-4/tp.git (master)... +Mar 08, 2024 3:53:38 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T16-2/tp.git to complete... -Mar 08, 2024 12:50:00 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W13-4/tp.git completed! -Mar 08, 2024 12:50:00 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T10-1/tp.git... -Mar 08, 2024 12:50:00 AM reposense.report.ReportGenerator analyzeRepos -INFO: [7/92] Analyzing https://github.com/AY2324S2-CS2103T-W13-4/tp.git (master)... -Mar 08, 2024 12:50:00 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103-F15-3/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F15-3/tp.git (master)... -Mar 08, 2024 12:50:00 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T10-1/tp.git to complete... -Mar 08, 2024 12:50:00 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:53:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F10-3/tp.git (master)... +Mar 08, 2024 3:53:38 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-W13-4/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:53:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W13-4/tp.git (master)... -Mar 08, 2024 12:50:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F10-3/tp.git (master)... -Mar 08, 2024 12:50:00 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F10-2/tp.git completed! -Mar 08, 2024 12:50:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:53:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F10-3/tp.git (master)... -Mar 08, 2024 12:50:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W13-4/tp.git (master)... -Mar 08, 2024 12:50:00 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:53:38 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-F10-3/tp.git (master) completed! -Mar 08, 2024 12:50:00 AM reposense.report.ReportGenerator analyzeRepos -INFO: [8/92] Analyzing https://github.com/AY2324S2-CS2103T-F10-2/tp.git (master)... -Mar 08, 2024 12:50:00 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:53:38 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-F10-2/tp.git completed! +Mar 08, 2024 3:53:38 AM reposense.report.ReportGenerator analyzeRepos +INFO: [7/92] Analyzing https://github.com/AY2324S2-CS2103T-F10-2/tp.git (master)... +Mar 08, 2024 3:53:38 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T10-1/tp.git... +Mar 08, 2024 3:53:38 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T10-1/tp.git to complete... +Mar 08, 2024 3:53:38 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103-F15-3/tp.git completed! +Mar 08, 2024 3:53:38 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F13-2/tp.git... -Mar 08, 2024 12:50:00 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:38 AM reposense.report.ReportGenerator analyzeRepos +INFO: [8/92] Analyzing https://github.com/AY2324S2-CS2103-F15-3/tp.git (master)... +Mar 08, 2024 3:53:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W13-4/tp.git (master)... +Mar 08, 2024 3:53:38 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F13-2/tp.git to complete... -Mar 08, 2024 12:50:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F15-3/tp.git (master)... -Mar 08, 2024 12:50:01 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:53:38 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-F10-2/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:53:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F10-2/tp.git (master)... -Mar 08, 2024 12:50:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:53:38 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103-F15-3/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:53:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F15-3/tp.git (master)... +Mar 08, 2024 3:53:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W13-4/tp.git (master)... -Mar 08, 2024 12:50:01 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:53:39 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-W13-4/tp.git (master) completed! -Mar 08, 2024 12:50:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:53:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F15-3/tp.git (master)... +Mar 08, 2024 3:53:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F10-2/tp.git (master)... +Mar 08, 2024 3:53:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F15-3/tp.git (master)... -Mar 08, 2024 12:50:01 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:53:39 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103-F15-3/tp.git (master) completed! -Mar 08, 2024 12:50:01 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F10-2/tp.git (master)... +Mar 08, 2024 3:53:39 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-F10-2/tp.git (master) completed! +Mar 08, 2024 3:53:39 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-T16-2/tp.git completed! -Mar 08, 2024 12:50:01 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F13-4/tp.git... -Mar 08, 2024 12:50:01 AM reposense.report.ReportGenerator analyzeRepos +Mar 08, 2024 3:53:39 AM reposense.report.ReportGenerator analyzeRepos INFO: [9/92] Analyzing https://github.com/AY2324S2-CS2103T-T16-2/tp.git (master)... -Mar 08, 2024 12:50:01 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:39 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F13-4/tp.git... +Mar 08, 2024 3:53:39 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F13-4/tp.git to complete... -Mar 08, 2024 12:50:01 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103-F15-1/tp.git completed! -Mar 08, 2024 12:50:01 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W10-3/tp.git... -Mar 08, 2024 12:50:01 AM reposense.report.ReportGenerator analyzeRepos -INFO: [10/92] Analyzing https://github.com/AY2324S2-CS2103-F15-1/tp.git (master)... -Mar 08, 2024 12:50:01 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:53:39 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T16-2/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:53:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T16-2/tp.git (master)... -Mar 08, 2024 12:50:01 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W10-3/tp.git to complete... -Mar 08, 2024 12:50:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:53:39 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T16-2/tp.git (master)... -Mar 08, 2024 12:50:01 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103-F15-1/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F15-1/tp.git (master)... -Mar 08, 2024 12:50:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:53:39 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T16-2/tp.git (master)... -Mar 08, 2024 12:50:02 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:53:39 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T16-2/tp.git (master) completed! -Mar 08, 2024 12:50:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F10-2/tp.git (master)... -Mar 08, 2024 12:50:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F15-1/tp.git (master)... -Mar 08, 2024 12:50:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F10-2/tp.git (master)... -Mar 08, 2024 12:50:02 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F10-2/tp.git (master) completed! -Mar 08, 2024 12:50:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F15-1/tp.git (master)... -Mar 08, 2024 12:50:02 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103-F15-1/tp.git (master) completed! -Mar 08, 2024 12:50:02 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:40 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103-F15-1/tp.git completed! +Mar 08, 2024 3:53:40 AM reposense.report.ReportGenerator analyzeRepos +INFO: [10/92] Analyzing https://github.com/AY2324S2-CS2103-F15-1/tp.git (master)... +Mar 08, 2024 3:53:40 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W10-3/tp.git... +Mar 08, 2024 3:53:40 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W10-3/tp.git to complete... +Mar 08, 2024 3:53:40 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103-F15-1/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:53:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F15-1/tp.git (master)... +Mar 08, 2024 3:53:40 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-F13-2/tp.git completed! -Mar 08, 2024 12:50:02 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T13-2/tp.git... -Mar 08, 2024 12:50:02 AM reposense.report.ReportGenerator analyzeRepos +Mar 08, 2024 3:53:40 AM reposense.report.ReportGenerator analyzeRepos INFO: [11/92] Analyzing https://github.com/AY2324S2-CS2103T-F13-2/tp.git (master)... -Mar 08, 2024 12:50:02 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:40 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T13-2/tp.git... +Mar 08, 2024 3:53:40 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T13-2/tp.git to complete... -Mar 08, 2024 12:50:02 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:53:40 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-F13-2/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:53:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F13-2/tp.git (master)... -Mar 08, 2024 12:50:02 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F13-4/tp.git completed! -Mar 08, 2024 12:50:02 AM reposense.report.ReportGenerator analyzeRepos -INFO: [12/92] Analyzing https://github.com/AY2324S2-CS2103T-F13-4/tp.git (master)... -Mar 08, 2024 12:50:02 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:53:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F15-1/tp.git (master)... +Mar 08, 2024 3:53:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F15-1/tp.git (master)... +Mar 08, 2024 3:53:40 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103-F15-1/tp.git (master) completed! +Mar 08, 2024 3:53:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F13-2/tp.git (master)... +Mar 08, 2024 3:53:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F13-2/tp.git (master)... +Mar 08, 2024 3:53:40 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T10-1/tp.git completed! +Mar 08, 2024 3:53:40 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T13-1/tp.git... -Mar 08, 2024 12:50:02 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:40 AM reposense.report.ReportGenerator analyzeRepos +INFO: [12/92] Analyzing https://github.com/AY2324S2-CS2103T-T10-1/tp.git (master)... +Mar 08, 2024 3:53:41 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-F13-2/tp.git (master) completed! +Mar 08, 2024 3:53:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-F13-4/tp.git completed! +Mar 08, 2024 3:53:41 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T13-1/tp.git to complete... -Mar 08, 2024 12:50:02 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-F13-4/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F13-4/tp.git (master)... -Mar 08, 2024 12:50:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W10-3/tp.git completed! -Mar 08, 2024 12:50:03 AM reposense.report.ReportGenerator analyzeRepos -INFO: [13/92] Analyzing https://github.com/AY2324S2-CS2103T-W10-3/tp.git (master)... -Mar 08, 2024 12:50:03 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:53:41 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T10-2/tp.git... -Mar 08, 2024 12:50:03 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:41 AM reposense.report.ReportGenerator analyzeRepos +INFO: [13/92] Analyzing https://github.com/AY2324S2-CS2103T-F13-4/tp.git (master)... +Mar 08, 2024 3:53:41 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T10-2/tp.git to complete... -Mar 08, 2024 12:50:03 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-W10-3/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W10-3/tp.git (master)... -Mar 08, 2024 12:50:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:53:41 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-F13-4/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:53:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F13-4/tp.git (master)... +Mar 08, 2024 3:53:41 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-T10-1/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:53:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T10-1/tp.git (master)... +Mar 08, 2024 3:53:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F13-4/tp.git (master)... -Mar 08, 2024 12:50:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T10-1/tp.git completed! -Mar 08, 2024 12:50:03 AM reposense.report.ReportGenerator analyzeRepos -INFO: [14/92] Analyzing https://github.com/AY2324S2-CS2103T-T10-1/tp.git (master)... -Mar 08, 2024 12:50:03 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F13-1/tp.git... -Mar 08, 2024 12:50:03 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F13-1/tp.git to complete... -Mar 08, 2024 12:50:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F13-2/tp.git (master)... -Mar 08, 2024 12:50:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:53:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F13-4/tp.git (master)... -Mar 08, 2024 12:50:03 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:53:41 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-F13-4/tp.git (master) completed! -Mar 08, 2024 12:50:03 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-T10-1/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T10-1/tp.git (master)... -Mar 08, 2024 12:50:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F13-2/tp.git (master)... -Mar 08, 2024 12:50:03 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F13-2/tp.git (master) completed! -Mar 08, 2024 12:50:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:53:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-W10-3/tp.git completed! +Mar 08, 2024 3:53:41 AM reposense.report.ReportGenerator analyzeRepos +INFO: [14/92] Analyzing https://github.com/AY2324S2-CS2103T-W10-3/tp.git (master)... +Mar 08, 2024 3:53:41 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F13-1/tp.git... +Mar 08, 2024 3:53:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F13-1/tp.git to complete... +Mar 08, 2024 3:53:41 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-W10-3/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:53:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W10-3/tp.git (master)... +Mar 08, 2024 3:53:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W10-3/tp.git (master)... -Mar 08, 2024 12:50:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:53:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W10-3/tp.git (master)... -Mar 08, 2024 12:50:03 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:53:41 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-W10-3/tp.git (master) completed! -Mar 08, 2024 12:50:04 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T10-1/tp.git (master)... +Mar 08, 2024 3:53:42 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-T13-2/tp.git completed! -Mar 08, 2024 12:50:04 AM reposense.report.ReportGenerator analyzeRepos -INFO: [15/92] Analyzing https://github.com/AY2324S2-CS2103T-T13-2/tp.git (master)... -Mar 08, 2024 12:50:04 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:53:42 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F15-4/tp.git... -Mar 08, 2024 12:50:04 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:42 AM reposense.report.ReportGenerator analyzeRepos +INFO: [15/92] Analyzing https://github.com/AY2324S2-CS2103T-T13-2/tp.git (master)... +Mar 08, 2024 3:53:42 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F15-4/tp.git to complete... -Mar 08, 2024 12:50:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T10-2/tp.git completed! -Mar 08, 2024 12:50:04 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:42 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-T13-1/tp.git completed! -Mar 08, 2024 12:50:04 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:53:42 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-T13-2/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:53:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T13-2/tp.git (master)... +Mar 08, 2024 3:53:42 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W13-3/tp.git... -Mar 08, 2024 12:50:04 AM reposense.report.ReportGenerator analyzeRepos -INFO: [16/92] Analyzing https://github.com/AY2324S2-CS2103T-T10-2/tp.git (master)... -Mar 08, 2024 12:50:04 AM reposense.report.ReportGenerator analyzeRepos -INFO: [17/92] Analyzing https://github.com/AY2324S2-CS2103T-T13-1/tp.git (master)... -Mar 08, 2024 12:50:04 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W13-2/tp.git... -Mar 08, 2024 12:50:04 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:42 AM reposense.report.ReportGenerator analyzeRepos +INFO: [16/92] Analyzing https://github.com/AY2324S2-CS2103T-T13-1/tp.git (master)... +Mar 08, 2024 3:53:42 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W13-3/tp.git to complete... -Mar 08, 2024 12:50:04 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T10-1/tp.git (master)... +Mar 08, 2024 3:53:42 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T10-1/tp.git (master) completed! +Mar 08, 2024 3:53:42 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-T13-1/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:53:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T13-1/tp.git (master)... +Mar 08, 2024 3:53:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T10-2/tp.git completed! +Mar 08, 2024 3:53:42 AM reposense.report.ReportGenerator analyzeRepos +INFO: [17/92] Analyzing https://github.com/AY2324S2-CS2103T-T10-2/tp.git (master)... +Mar 08, 2024 3:53:42 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W13-2/tp.git... +Mar 08, 2024 3:53:42 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W13-2/tp.git to complete... -Mar 08, 2024 12:50:04 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-T13-2/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T13-2/tp.git (master)... -Mar 08, 2024 12:50:04 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:53:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T13-1/tp.git (master)... +Mar 08, 2024 3:53:42 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T10-2/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:53:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T10-2/tp.git (master)... -Mar 08, 2024 12:50:04 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-T13-1/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T13-1/tp.git (master)... -Mar 08, 2024 12:50:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T10-1/tp.git (master)... -Mar 08, 2024 12:50:04 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F13-1/tp.git completed! -Mar 08, 2024 12:50:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:53:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T13-2/tp.git (master)... +Mar 08, 2024 3:53:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T13-1/tp.git (master)... +Mar 08, 2024 3:53:42 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T13-1/tp.git (master) completed! +Mar 08, 2024 3:53:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T13-2/tp.git (master)... +Mar 08, 2024 3:53:43 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T13-2/tp.git (master) completed! +Mar 08, 2024 3:53:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T10-2/tp.git (master)... -Mar 08, 2024 12:50:04 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:53:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-F13-1/tp.git completed! +Mar 08, 2024 3:53:43 AM reposense.report.ReportGenerator analyzeRepos +INFO: [18/92] Analyzing https://github.com/AY2324S2-CS2103T-F13-1/tp.git (master)... +Mar 08, 2024 3:53:43 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T16-4/tp.git... -Mar 08, 2024 12:50:04 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:43 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T16-4/tp.git to complete... -Mar 08, 2024 12:50:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T13-1/tp.git (master)... -Mar 08, 2024 12:50:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:53:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T10-2/tp.git (master)... -Mar 08, 2024 12:50:05 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:53:43 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T10-2/tp.git (master) completed! -Mar 08, 2024 12:50:05 AM reposense.report.ReportGenerator analyzeRepos -INFO: [18/92] Analyzing https://github.com/AY2324S2-CS2103T-F13-1/tp.git (master)... -Mar 08, 2024 12:50:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T10-1/tp.git (master)... -Mar 08, 2024 12:50:05 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T10-1/tp.git (master) completed! -Mar 08, 2024 12:50:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T13-1/tp.git (master)... -Mar 08, 2024 12:50:05 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T13-1/tp.git (master) completed! -Mar 08, 2024 12:50:05 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:53:43 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-F13-1/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:53:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F13-1/tp.git (master)... -Mar 08, 2024 12:50:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T13-2/tp.git (master)... -Mar 08, 2024 12:50:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T13-2/tp.git (master)... -Mar 08, 2024 12:50:05 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T13-2/tp.git (master) completed! -Mar 08, 2024 12:50:05 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103-F15-4/tp.git completed! -Mar 08, 2024 12:50:05 AM reposense.report.ReportGenerator analyzeRepos -INFO: [19/92] Analyzing https://github.com/AY2324S2-CS2103-F15-4/tp.git (master)... -Mar 08, 2024 12:50:05 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:53:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-W13-2/tp.git completed! +Mar 08, 2024 3:53:43 AM reposense.report.ReportGenerator analyzeRepos +INFO: [19/92] Analyzing https://github.com/AY2324S2-CS2103T-W13-2/tp.git (master)... +Mar 08, 2024 3:53:43 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W10-1/tp.git... -Mar 08, 2024 12:50:05 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:43 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W10-1/tp.git to complete... -Mar 08, 2024 12:50:05 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W13-2/tp.git completed! -Mar 08, 2024 12:50:05 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:53:44 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-W13-2/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:53:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W13-2/tp.git (master)... +Mar 08, 2024 3:53:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W13-2/tp.git (master)... +Mar 08, 2024 3:53:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W13-2/tp.git (master)... +Mar 08, 2024 3:53:44 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-W13-2/tp.git (master) completed! +Mar 08, 2024 3:53:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103-F15-4/tp.git completed! +Mar 08, 2024 3:53:44 AM reposense.report.ReportGenerator analyzeRepos +INFO: [20/92] Analyzing https://github.com/AY2324S2-CS2103-F15-4/tp.git (master)... +Mar 08, 2024 3:53:44 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T13-3/tp.git... -Mar 08, 2024 12:50:05 AM reposense.report.ReportGenerator analyzeRepos -INFO: [20/92] Analyzing https://github.com/AY2324S2-CS2103T-W13-2/tp.git (master)... -Mar 08, 2024 12:50:05 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:53:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T13-3/tp.git to complete... +Mar 08, 2024 3:53:44 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103-F15-4/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:53:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F15-4/tp.git (master)... -Mar 08, 2024 12:50:05 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T13-3/tp.git to complete... -Mar 08, 2024 12:50:06 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-W13-2/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W13-2/tp.git (master)... -Mar 08, 2024 12:50:06 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W13-3/tp.git completed! -Mar 08, 2024 12:50:06 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:53:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F13-1/tp.git (master)... +Mar 08, 2024 3:53:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T16-4/tp.git completed! +Mar 08, 2024 3:53:44 AM reposense.report.ReportGenerator analyzeRepos +INFO: [21/92] Analyzing https://github.com/AY2324S2-CS2103T-T16-4/tp.git (master)... +Mar 08, 2024 3:53:44 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T13-4/tp.git... -Mar 08, 2024 12:50:06 AM reposense.report.ReportGenerator analyzeRepos -INFO: [21/92] Analyzing https://github.com/AY2324S2-CS2103T-W13-3/tp.git (master)... -Mar 08, 2024 12:50:06 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:44 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T13-4/tp.git to complete... -Mar 08, 2024 12:50:06 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-W13-3/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W13-3/tp.git (master)... -Mar 08, 2024 12:50:06 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T16-4/tp.git completed! -Mar 08, 2024 12:50:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:53:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F13-1/tp.git (master)... +Mar 08, 2024 3:53:44 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-T16-4/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:53:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T16-4/tp.git (master)... +Mar 08, 2024 3:53:44 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-F13-1/tp.git (master) completed! +Mar 08, 2024 3:53:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F15-4/tp.git (master)... -Mar 08, 2024 12:50:06 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W10-2/tp.git... -Mar 08, 2024 12:50:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W13-2/tp.git (master)... -Mar 08, 2024 12:50:06 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W10-2/tp.git to complete... -Mar 08, 2024 12:50:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:53:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T16-4/tp.git (master)... +Mar 08, 2024 3:53:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F15-4/tp.git (master)... -Mar 08, 2024 12:50:06 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:53:44 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103-F15-4/tp.git (master) completed! -Mar 08, 2024 12:50:06 AM reposense.report.ReportGenerator analyzeRepos -INFO: [22/92] Analyzing https://github.com/AY2324S2-CS2103T-T16-4/tp.git (master)... -Mar 08, 2024 12:50:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W13-2/tp.git (master)... -Mar 08, 2024 12:50:06 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W13-2/tp.git (master) completed! -Mar 08, 2024 12:50:06 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-T16-4/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T16-4/tp.git (master)... -Mar 08, 2024 12:50:07 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T13-4/tp.git completed! -Mar 08, 2024 12:50:07 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T16-4/tp.git (master)... +Mar 08, 2024 3:53:44 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T16-4/tp.git (master) completed! +Mar 08, 2024 3:53:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-W13-3/tp.git completed! +Mar 08, 2024 3:53:45 AM reposense.report.ReportGenerator analyzeRepos +INFO: [22/92] Analyzing https://github.com/AY2324S2-CS2103T-W13-3/tp.git (master)... +Mar 08, 2024 3:53:45 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W10-2/tp.git... +Mar 08, 2024 3:53:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W10-2/tp.git to complete... +Mar 08, 2024 3:53:45 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-W13-3/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:53:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W13-3/tp.git (master)... +Mar 08, 2024 3:53:45 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-W10-1/tp.git completed! -Mar 08, 2024 12:50:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T16-4/tp.git (master)... -Mar 08, 2024 12:50:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W13-3/tp.git (master)... -Mar 08, 2024 12:50:07 AM reposense.report.ReportGenerator analyzeRepos +Mar 08, 2024 3:53:45 AM reposense.report.ReportGenerator analyzeRepos INFO: [23/92] Analyzing https://github.com/AY2324S2-CS2103T-W10-1/tp.git (master)... -Mar 08, 2024 12:50:07 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:53:45 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F10-1/tp.git... -Mar 08, 2024 12:50:07 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F10-4/tp.git... -Mar 08, 2024 12:50:07 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F10-4/tp.git to complete... -Mar 08, 2024 12:50:07 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:45 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F10-1/tp.git to complete... -Mar 08, 2024 12:50:07 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T13-3/tp.git completed! -Mar 08, 2024 12:50:07 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T16-3/tp.git... -Mar 08, 2024 12:50:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T16-4/tp.git (master)... -Mar 08, 2024 12:50:07 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T16-4/tp.git (master) completed! -Mar 08, 2024 12:50:07 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:53:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W13-3/tp.git (master)... +Mar 08, 2024 3:53:45 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-W10-1/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:53:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W10-1/tp.git (master)... -Mar 08, 2024 12:50:07 AM reposense.report.ReportGenerator analyzeRepos -INFO: [24/92] Analyzing https://github.com/AY2324S2-CS2103T-T13-4/tp.git (master)... -Mar 08, 2024 12:50:07 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T16-3/tp.git to complete... -Mar 08, 2024 12:50:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:53:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W13-3/tp.git (master)... -Mar 08, 2024 12:50:07 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:53:45 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-W13-3/tp.git (master) completed! -Mar 08, 2024 12:50:07 AM reposense.report.ReportGenerator analyzeRepos -INFO: [25/92] Analyzing https://github.com/AY2324S2-CS2103T-T13-3/tp.git (master)... -Mar 08, 2024 12:50:07 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W10-2/tp.git completed! -Mar 08, 2024 12:50:07 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F09-3/tp.git... -Mar 08, 2024 12:50:07 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F09-3/tp.git to complete... -Mar 08, 2024 12:50:07 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:53:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T13-3/tp.git completed! +Mar 08, 2024 3:53:45 AM reposense.report.ReportGenerator analyzeRepos +INFO: [24/92] Analyzing https://github.com/AY2324S2-CS2103T-T13-3/tp.git (master)... +Mar 08, 2024 3:53:45 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F10-4/tp.git... +Mar 08, 2024 3:53:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F10-4/tp.git to complete... +Mar 08, 2024 3:53:45 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T13-3/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:53:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T13-3/tp.git (master)... -Mar 08, 2024 12:50:07 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:53:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W10-1/tp.git (master)... +Mar 08, 2024 3:53:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T13-4/tp.git completed! +Mar 08, 2024 3:53:46 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T16-3/tp.git... +Mar 08, 2024 3:53:46 AM reposense.report.ReportGenerator analyzeRepos +INFO: [25/92] Analyzing https://github.com/AY2324S2-CS2103T-T13-4/tp.git (master)... +Mar 08, 2024 3:53:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T16-3/tp.git to complete... +Mar 08, 2024 3:53:46 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T13-4/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:53:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T13-4/tp.git (master)... -Mar 08, 2024 12:50:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F13-1/tp.git (master)... -Mar 08, 2024 12:50:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W10-1/tp.git (master)... -Mar 08, 2024 12:50:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T13-3/tp.git (master)... -Mar 08, 2024 12:50:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T13-4/tp.git (master)... -Mar 08, 2024 12:50:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F13-1/tp.git (master)... -Mar 08, 2024 12:50:08 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F13-1/tp.git (master) completed! -Mar 08, 2024 12:50:08 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F10-1/tp.git completed! -Mar 08, 2024 12:50:08 AM reposense.report.ReportGenerator analyzeRepos -INFO: [26/92] Analyzing https://github.com/AY2324S2-CS2103T-W10-2/tp.git (master)... -Mar 08, 2024 12:50:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:53:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W10-1/tp.git (master)... -Mar 08, 2024 12:50:08 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:53:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T13-3/tp.git (master)... +Mar 08, 2024 3:53:46 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-W10-1/tp.git (master) completed! -Mar 08, 2024 12:50:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:53:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-W10-2/tp.git completed! +Mar 08, 2024 3:53:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T13-3/tp.git (master)... -Mar 08, 2024 12:50:08 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:53:46 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T13-3/tp.git (master) completed! -Mar 08, 2024 12:50:08 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T10-3/tp.git... -Mar 08, 2024 12:50:08 AM reposense.report.ReportGenerator analyzeRepos -INFO: [27/92] Analyzing https://github.com/AY2324S2-CS2103T-F10-1/tp.git (master)... -Mar 08, 2024 12:50:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:53:46 AM reposense.report.ReportGenerator analyzeRepos +INFO: [26/92] Analyzing https://github.com/AY2324S2-CS2103T-W10-2/tp.git (master)... +Mar 08, 2024 3:53:46 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F09-3/tp.git... +Mar 08, 2024 3:53:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F09-3/tp.git to complete... +Mar 08, 2024 3:53:46 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-W10-2/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:53:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W10-2/tp.git (master)... +Mar 08, 2024 3:53:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T13-4/tp.git (master)... +Mar 08, 2024 3:53:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T13-4/tp.git (master)... -Mar 08, 2024 12:50:08 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:53:46 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T13-4/tp.git (master) completed! -Mar 08, 2024 12:50:08 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W10-2/tp.git (master)... +Mar 08, 2024 3:53:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W10-2/tp.git (master)... +Mar 08, 2024 3:53:46 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-W10-2/tp.git (master) completed! +Mar 08, 2024 3:53:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-F10-1/tp.git completed! +Mar 08, 2024 3:53:46 AM reposense.report.ReportGenerator analyzeRepos +INFO: [27/92] Analyzing https://github.com/AY2324S2-CS2103T-F10-1/tp.git (master)... +Mar 08, 2024 3:53:46 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T10-3/tp.git... +Mar 08, 2024 3:53:46 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T10-3/tp.git to complete... -Mar 08, 2024 12:50:08 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-W10-2/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W10-2/tp.git (master)... -Mar 08, 2024 12:50:08 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T16-3/tp.git completed! -Mar 08, 2024 12:50:08 AM reposense.report.ReportGenerator analyzeRepos -INFO: [28/92] Analyzing https://github.com/AY2324S2-CS2103T-T16-3/tp.git (master)... -Mar 08, 2024 12:50:08 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F09-1/tp.git... -Mar 08, 2024 12:50:08 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F09-1/tp.git to complete... -Mar 08, 2024 12:50:09 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:53:46 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-F10-1/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:53:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F10-1/tp.git (master)... -Mar 08, 2024 12:50:09 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-T16-3/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T16-3/tp.git (master)... -Mar 08, 2024 12:50:09 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F10-1/tp.git (master)... +Mar 08, 2024 3:53:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F10-1/tp.git (master)... +Mar 08, 2024 3:53:47 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-F10-1/tp.git (master) completed! +Mar 08, 2024 3:53:47 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-F10-4/tp.git completed! -Mar 08, 2024 12:50:09 AM reposense.report.ReportGenerator analyzeRepos -INFO: [29/92] Analyzing https://github.com/AY2324S2-CS2103T-F10-4/tp.git (master)... -Mar 08, 2024 12:50:09 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F09-4/tp.git... -Mar 08, 2024 12:50:09 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F09-4/tp.git to complete... -Mar 08, 2024 12:50:09 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:53:47 AM reposense.report.ReportGenerator analyzeRepos +INFO: [28/92] Analyzing https://github.com/AY2324S2-CS2103T-F10-4/tp.git (master)... +Mar 08, 2024 3:53:47 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F09-1/tp.git... +Mar 08, 2024 3:53:47 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F09-1/tp.git to complete... +Mar 08, 2024 3:53:47 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-F10-4/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:53:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F10-4/tp.git (master)... -Mar 08, 2024 12:50:09 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103-F09-3/tp.git completed! -Mar 08, 2024 12:50:09 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:53:47 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T16-3/tp.git completed! +Mar 08, 2024 3:53:47 AM reposense.report.ReportGenerator analyzeRepos +INFO: [29/92] Analyzing https://github.com/AY2324S2-CS2103T-T16-3/tp.git (master)... +Mar 08, 2024 3:53:47 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F09-4/tp.git... +Mar 08, 2024 3:53:47 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F09-4/tp.git to complete... +Mar 08, 2024 3:53:47 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-T16-3/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:53:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T16-3/tp.git (master)... +Mar 08, 2024 3:53:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F10-4/tp.git (master)... +Mar 08, 2024 3:53:47 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103-F09-3/tp.git completed! +Mar 08, 2024 3:53:47 AM reposense.report.ReportGenerator analyzeRepos +INFO: [30/92] Analyzing https://github.com/AY2324S2-CS2103-F09-3/tp.git (master)... +Mar 08, 2024 3:53:47 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F09-2/tp.git... -Mar 08, 2024 12:50:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W10-2/tp.git (master)... -Mar 08, 2024 12:50:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F10-1/tp.git (master)... -Mar 08, 2024 12:50:09 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:47 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F09-2/tp.git to complete... -Mar 08, 2024 12:50:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:53:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F10-4/tp.git (master)... +Mar 08, 2024 3:53:47 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-F10-4/tp.git (master) completed! +Mar 08, 2024 3:53:47 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103-F09-3/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:53:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F09-3/tp.git (master)... +Mar 08, 2024 3:53:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T16-3/tp.git (master)... -Mar 08, 2024 12:50:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W10-2/tp.git (master)... -Mar 08, 2024 12:50:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F10-1/tp.git (master)... -Mar 08, 2024 12:50:09 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W10-2/tp.git (master) completed! -Mar 08, 2024 12:50:09 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F10-1/tp.git (master) completed! -Mar 08, 2024 12:50:09 AM reposense.report.ReportGenerator analyzeRepos -INFO: [30/92] Analyzing https://github.com/AY2324S2-CS2103-F09-3/tp.git (master)... -Mar 08, 2024 12:50:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:53:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T16-3/tp.git (master)... -Mar 08, 2024 12:50:09 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:53:47 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T16-3/tp.git (master) completed! -Mar 08, 2024 12:50:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F10-4/tp.git (master)... -Mar 08, 2024 12:50:09 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103-F09-3/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F09-3/tp.git (master)... -Mar 08, 2024 12:50:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F10-4/tp.git (master)... -Mar 08, 2024 12:50:10 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F10-4/tp.git (master) completed! -Mar 08, 2024 12:50:10 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103-F09-4/tp.git completed! -Mar 08, 2024 12:50:10 AM reposense.report.ReportGenerator analyzeRepos -INFO: [31/92] Analyzing https://github.com/AY2324S2-CS2103-F09-4/tp.git (master)... -Mar 08, 2024 12:50:10 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T09-4/tp.git... -Mar 08, 2024 12:50:10 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T09-4/tp.git to complete... -Mar 08, 2024 12:50:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:53:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F09-3/tp.git (master)... -Mar 08, 2024 12:50:10 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103-F09-4/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F09-4/tp.git (master)... -Mar 08, 2024 12:50:10 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F09-3/tp.git (master)... +Mar 08, 2024 3:53:48 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103-F09-3/tp.git (master) completed! +Mar 08, 2024 3:53:48 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-T10-3/tp.git completed! -Mar 08, 2024 12:50:10 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F08-4/tp.git... -Mar 08, 2024 12:50:10 AM reposense.report.ReportGenerator analyzeRepos -INFO: [32/92] Analyzing https://github.com/AY2324S2-CS2103T-T10-3/tp.git (master)... -Mar 08, 2024 12:50:10 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F08-4/tp.git to complete... -Mar 08, 2024 12:50:10 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:53:48 AM reposense.report.ReportGenerator analyzeRepos +INFO: [31/92] Analyzing https://github.com/AY2324S2-CS2103T-T10-3/tp.git (master)... +Mar 08, 2024 3:53:48 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T09-4/tp.git... +Mar 08, 2024 3:53:48 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T09-4/tp.git to complete... +Mar 08, 2024 3:53:48 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T10-3/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:53:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T10-3/tp.git (master)... -Mar 08, 2024 12:50:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F09-3/tp.git (master)... -Mar 08, 2024 12:50:10 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103-F09-3/tp.git (master) completed! -Mar 08, 2024 12:50:10 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:48 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T10-3/tp.git (master)... +Mar 08, 2024 3:53:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T10-3/tp.git (master)... +Mar 08, 2024 3:53:48 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T10-3/tp.git (master) completed! +Mar 08, 2024 3:53:48 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103-F09-4/tp.git completed! +Mar 08, 2024 3:53:48 AM reposense.report.ReportGenerator analyzeRepos +INFO: [32/92] Analyzing https://github.com/AY2324S2-CS2103-F09-4/tp.git (master)... +Mar 08, 2024 3:53:48 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F08-4/tp.git... +Mar 08, 2024 3:53:48 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F08-4/tp.git to complete... +Mar 08, 2024 3:53:48 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103-F09-4/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:53:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F09-4/tp.git (master)... +Mar 08, 2024 3:53:49 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103-F09-1/tp.git completed! -Mar 08, 2024 12:50:10 AM reposense.report.ReportGenerator analyzeRepos +Mar 08, 2024 3:53:49 AM reposense.report.ReportGenerator analyzeRepos INFO: [33/92] Analyzing https://github.com/AY2324S2-CS2103-F09-1/tp.git (master)... -Mar 08, 2024 12:50:10 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:53:49 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T09-3/tp.git... -Mar 08, 2024 12:50:10 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:49 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T09-3/tp.git to complete... -Mar 08, 2024 12:50:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T10-3/tp.git (master)... -Mar 08, 2024 12:50:11 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103-F09-2/tp.git completed! -Mar 08, 2024 12:50:11 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:53:49 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103-F09-1/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:53:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F09-1/tp.git (master)... -Mar 08, 2024 12:50:11 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:53:49 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103-F09-2/tp.git completed! +Mar 08, 2024 3:53:49 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T12-4/tp.git... -Mar 08, 2024 12:50:11 AM reposense.report.ReportGenerator analyzeRepos +Mar 08, 2024 3:53:49 AM reposense.report.ReportGenerator analyzeRepos INFO: [34/92] Analyzing https://github.com/AY2324S2-CS2103-F09-2/tp.git (master)... -Mar 08, 2024 12:50:11 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:49 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T12-4/tp.git to complete... -Mar 08, 2024 12:50:11 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:53:49 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103-F09-2/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:53:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F09-2/tp.git (master)... -Mar 08, 2024 12:50:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T10-3/tp.git (master)... -Mar 08, 2024 12:50:11 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T10-3/tp.git (master) completed! -Mar 08, 2024 12:50:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:53:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F09-1/tp.git (master)... -Mar 08, 2024 12:50:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:53:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F09-2/tp.git (master)... +Mar 08, 2024 3:53:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F09-1/tp.git (master)... -Mar 08, 2024 12:50:11 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:53:49 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103-F09-1/tp.git (master) completed! -Mar 08, 2024 12:50:11 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103-F08-4/tp.git completed! -Mar 08, 2024 12:50:11 AM reposense.report.ReportGenerator analyzeRepos -INFO: [35/92] Analyzing https://github.com/AY2324S2-CS2103-F08-4/tp.git (master)... -Mar 08, 2024 12:50:11 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F08-2/tp.git... -Mar 08, 2024 12:50:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F09-2/tp.git (master)... -Mar 08, 2024 12:50:11 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F08-2/tp.git to complete... -Mar 08, 2024 12:50:12 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T09-4/tp.git completed! -Mar 08, 2024 12:50:12 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103-F08-4/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F08-4/tp.git (master)... -Mar 08, 2024 12:50:12 AM reposense.report.ReportGenerator analyzeRepos -INFO: [36/92] Analyzing https://github.com/AY2324S2-CS2103T-T09-4/tp.git (master)... -Mar 08, 2024 12:50:12 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W11-1/tp.git... -Mar 08, 2024 12:50:12 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W11-1/tp.git to complete... -Mar 08, 2024 12:50:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:53:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F09-2/tp.git (master)... -Mar 08, 2024 12:50:12 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:53:49 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103-F09-2/tp.git (master) completed! -Mar 08, 2024 12:50:12 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:53:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F09-4/tp.git (master)... +Mar 08, 2024 3:53:50 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T09-4/tp.git completed! +Mar 08, 2024 3:53:50 AM reposense.report.ReportGenerator analyzeRepos +INFO: [35/92] Analyzing https://github.com/AY2324S2-CS2103T-T09-4/tp.git (master)... +Mar 08, 2024 3:53:50 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F08-2/tp.git... +Mar 08, 2024 3:53:50 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F08-2/tp.git to complete... +Mar 08, 2024 3:53:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F09-4/tp.git (master)... +Mar 08, 2024 3:53:50 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103-F09-4/tp.git (master) completed! +Mar 08, 2024 3:53:50 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T09-4/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:53:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T09-4/tp.git (master)... -Mar 08, 2024 12:50:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:53:50 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103-F08-4/tp.git completed! +Mar 08, 2024 3:53:50 AM reposense.report.ReportGenerator analyzeRepos +INFO: [36/92] Analyzing https://github.com/AY2324S2-CS2103-F08-4/tp.git (master)... +Mar 08, 2024 3:53:50 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W11-1/tp.git... +Mar 08, 2024 3:53:50 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W11-1/tp.git to complete... +Mar 08, 2024 3:53:50 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103-F08-4/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:53:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F08-4/tp.git (master)... +Mar 08, 2024 3:53:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T09-4/tp.git (master)... +Mar 08, 2024 3:53:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F08-4/tp.git (master)... -Mar 08, 2024 12:50:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F09-4/tp.git (master)... -Mar 08, 2024 12:50:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:53:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F08-4/tp.git (master)... -Mar 08, 2024 12:50:12 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:53:50 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103-F08-4/tp.git (master) completed! -Mar 08, 2024 12:50:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F09-4/tp.git (master)... -Mar 08, 2024 12:50:12 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103-F09-4/tp.git (master) completed! -Mar 08, 2024 12:50:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T09-4/tp.git (master)... -Mar 08, 2024 12:50:12 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T09-4/tp.git (master)... +Mar 08, 2024 3:53:50 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T09-4/tp.git (master) completed! +Mar 08, 2024 3:53:50 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-T12-4/tp.git completed! -Mar 08, 2024 12:50:12 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W11-3/tp.git... -Mar 08, 2024 12:50:12 AM reposense.report.ReportGenerator analyzeRepos +Mar 08, 2024 3:53:50 AM reposense.report.ReportGenerator analyzeRepos INFO: [37/92] Analyzing https://github.com/AY2324S2-CS2103T-T12-4/tp.git (master)... -Mar 08, 2024 12:50:12 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:50 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W11-3/tp.git... +Mar 08, 2024 3:53:50 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W11-3/tp.git to complete... -Mar 08, 2024 12:50:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T09-4/tp.git (master)... -Mar 08, 2024 12:50:12 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:53:51 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T12-4/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:53:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T12-4/tp.git (master)... -Mar 08, 2024 12:50:12 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T09-4/tp.git (master) completed! -Mar 08, 2024 12:50:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:53:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T12-4/tp.git (master)... -Mar 08, 2024 12:50:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:53:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T12-4/tp.git (master)... -Mar 08, 2024 12:50:13 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:53:51 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T12-4/tp.git (master) completed! -Mar 08, 2024 12:50:13 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W11-1/tp.git completed! -Mar 08, 2024 12:50:13 AM reposense.report.ReportGenerator analyzeRepos -INFO: [38/92] Analyzing https://github.com/AY2324S2-CS2103T-W11-1/tp.git (master)... -Mar 08, 2024 12:50:13 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:53:51 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103-F08-2/tp.git completed! +Mar 08, 2024 3:53:51 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W09-3/tp.git... -Mar 08, 2024 12:50:13 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:51 AM reposense.report.ReportGenerator analyzeRepos +INFO: [38/92] Analyzing https://github.com/AY2324S2-CS2103-F08-2/tp.git (master)... +Mar 08, 2024 3:53:51 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W09-3/tp.git to complete... -Mar 08, 2024 12:50:13 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103-F08-2/tp.git completed! -Mar 08, 2024 12:50:13 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F14-1/tp.git... -Mar 08, 2024 12:50:13 AM reposense.report.ReportGenerator analyzeRepos -INFO: [39/92] Analyzing https://github.com/AY2324S2-CS2103-F08-2/tp.git (master)... -Mar 08, 2024 12:50:13 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F14-1/tp.git to complete... -Mar 08, 2024 12:50:13 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:53:51 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103-F08-2/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:53:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F08-2/tp.git (master)... -Mar 08, 2024 12:50:13 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:53:51 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-W11-1/tp.git completed! +Mar 08, 2024 3:53:51 AM reposense.report.ReportGenerator analyzeRepos +INFO: [39/92] Analyzing https://github.com/AY2324S2-CS2103T-W11-1/tp.git (master)... +Mar 08, 2024 3:53:51 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F14-1/tp.git... +Mar 08, 2024 3:53:51 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F14-1/tp.git to complete... +Mar 08, 2024 3:53:52 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-W11-1/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:53:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W11-1/tp.git (master)... -Mar 08, 2024 12:50:13 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T09-3/tp.git completed! -Mar 08, 2024 12:50:13 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T12-2/tp.git... -Mar 08, 2024 12:50:13 AM reposense.report.ReportGenerator analyzeRepos -INFO: [40/92] Analyzing https://github.com/AY2324S2-CS2103T-T09-3/tp.git (master)... -Mar 08, 2024 12:50:13 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T12-2/tp.git to complete... -Mar 08, 2024 12:50:14 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-T09-3/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T09-3/tp.git (master)... -Mar 08, 2024 12:50:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:53:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F08-2/tp.git (master)... -Mar 08, 2024 12:50:14 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F08-2/tp.git (master)... +Mar 08, 2024 3:53:52 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103-F08-2/tp.git (master) completed! +Mar 08, 2024 3:53:52 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-W11-3/tp.git completed! -Mar 08, 2024 12:50:14 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:53:52 AM reposense.report.ReportGenerator analyzeRepos +INFO: [40/92] Analyzing https://github.com/AY2324S2-CS2103T-W11-3/tp.git (master)... +Mar 08, 2024 3:53:52 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T12-2/tp.git... +Mar 08, 2024 3:53:52 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T12-2/tp.git to complete... +Mar 08, 2024 3:53:52 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T09-3/tp.git completed! +Mar 08, 2024 3:53:52 AM reposense.report.ReportGenerator analyzeRepos +INFO: [41/92] Analyzing https://github.com/AY2324S2-CS2103T-T09-3/tp.git (master)... +Mar 08, 2024 3:53:52 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F14-3/tp.git... -Mar 08, 2024 12:50:14 AM reposense.report.ReportGenerator analyzeRepos -INFO: [41/92] Analyzing https://github.com/AY2324S2-CS2103T-W11-3/tp.git (master)... -Mar 08, 2024 12:50:14 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:52 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F14-3/tp.git to complete... -Mar 08, 2024 12:50:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F08-2/tp.git (master)... -Mar 08, 2024 12:50:14 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103-F08-2/tp.git (master) completed! -Mar 08, 2024 12:50:14 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:53:52 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-W11-3/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:53:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W11-3/tp.git (master)... -Mar 08, 2024 12:50:14 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:52 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-T09-3/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:53:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T09-3/tp.git (master)... +Mar 08, 2024 3:53:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W11-3/tp.git (master)... +Mar 08, 2024 3:53:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W11-3/tp.git (master)... +Mar 08, 2024 3:53:52 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-W11-3/tp.git (master) completed! +Mar 08, 2024 3:53:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W11-1/tp.git (master)... +Mar 08, 2024 3:53:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W11-1/tp.git (master)... +Mar 08, 2024 3:53:53 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-W11-1/tp.git (master) completed! +Mar 08, 2024 3:53:53 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-W09-3/tp.git completed! -Mar 08, 2024 12:50:14 AM reposense.report.ReportGenerator analyzeRepos +Mar 08, 2024 3:53:53 AM reposense.report.ReportGenerator analyzeRepos INFO: [42/92] Analyzing https://github.com/AY2324S2-CS2103T-W09-3/tp.git (master)... -Mar 08, 2024 12:50:14 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:53:53 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W09-1/tp.git... -Mar 08, 2024 12:50:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W11-3/tp.git (master)... -Mar 08, 2024 12:50:15 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:53 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W09-1/tp.git to complete... -Mar 08, 2024 12:50:15 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:53:53 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-W09-3/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:53:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W09-3/tp.git (master)... -Mar 08, 2024 12:50:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W11-3/tp.git (master)... -Mar 08, 2024 12:50:15 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W11-3/tp.git (master) completed! -Mar 08, 2024 12:50:15 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F14-1/tp.git completed! -Mar 08, 2024 12:50:15 AM reposense.report.ReportGenerator analyzeRepos -INFO: [43/92] Analyzing https://github.com/AY2324S2-CS2103T-F14-1/tp.git (master)... -Mar 08, 2024 12:50:15 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T17-4/tp.git... -Mar 08, 2024 12:50:15 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T17-4/tp.git to complete... -Mar 08, 2024 12:50:15 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-F14-1/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:15 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F14-1/tp.git (master)... -Mar 08, 2024 12:50:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T09-3/tp.git (master)... -Mar 08, 2024 12:50:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:53:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W09-3/tp.git (master)... -Mar 08, 2024 12:50:15 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W09-3/tp.git (master)... +Mar 08, 2024 3:53:53 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-W09-3/tp.git (master) completed! +Mar 08, 2024 3:53:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T09-3/tp.git (master)... +Mar 08, 2024 3:53:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-T12-2/tp.git completed! -Mar 08, 2024 12:50:15 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:53:54 AM reposense.report.ReportGenerator analyzeRepos +INFO: [43/92] Analyzing https://github.com/AY2324S2-CS2103T-T12-2/tp.git (master)... +Mar 08, 2024 3:53:54 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T17-4/tp.git... +Mar 08, 2024 3:53:54 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T17-4/tp.git to complete... +Mar 08, 2024 3:53:54 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-T12-2/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:53:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T12-2/tp.git (master)... +Mar 08, 2024 3:53:54 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-F14-1/tp.git completed! +Mar 08, 2024 3:53:54 AM reposense.report.ReportGenerator analyzeRepos +INFO: [44/92] Analyzing https://github.com/AY2324S2-CS2103T-F14-1/tp.git (master)... +Mar 08, 2024 3:53:54 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T11-2/tp.git... -Mar 08, 2024 12:50:15 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T11-2/tp.git to complete... -Mar 08, 2024 12:50:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:53:54 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-F14-1/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:53:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F14-1/tp.git (master)... +Mar 08, 2024 3:53:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T09-3/tp.git (master)... -Mar 08, 2024 12:50:15 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:53:54 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T09-3/tp.git (master) completed! -Mar 08, 2024 12:50:15 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W11-1/tp.git (master)... -Mar 08, 2024 12:50:15 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W09-3/tp.git (master)... -Mar 08, 2024 12:50:15 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W09-3/tp.git (master) completed! -Mar 08, 2024 12:50:15 AM reposense.report.ReportGenerator analyzeRepos -INFO: [44/92] Analyzing https://github.com/AY2324S2-CS2103T-T12-2/tp.git (master)... -Mar 08, 2024 12:50:16 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-T12-2/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T12-2/tp.git (master)... -Mar 08, 2024 12:50:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W11-1/tp.git (master)... -Mar 08, 2024 12:50:16 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W09-1/tp.git completed! -Mar 08, 2024 12:50:16 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W11-1/tp.git (master) completed! -Mar 08, 2024 12:50:16 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:53:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T12-2/tp.git (master)... +Mar 08, 2024 3:53:54 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-F14-3/tp.git completed! +Mar 08, 2024 3:53:54 AM reposense.report.ReportGenerator analyzeRepos +INFO: [45/92] Analyzing https://github.com/AY2324S2-CS2103T-F14-3/tp.git (master)... +Mar 08, 2024 3:53:54 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T11-4/tp.git... -Mar 08, 2024 12:50:16 AM reposense.report.ReportGenerator analyzeRepos -INFO: [45/92] Analyzing https://github.com/AY2324S2-CS2103T-W09-1/tp.git (master)... -Mar 08, 2024 12:50:16 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T11-4/tp.git to complete... -Mar 08, 2024 12:50:16 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:53:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T12-2/tp.git (master)... +Mar 08, 2024 3:53:54 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T12-2/tp.git (master) completed! +Mar 08, 2024 3:53:55 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-F14-3/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:53:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F14-3/tp.git (master)... +Mar 08, 2024 3:53:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-W09-1/tp.git completed! +Mar 08, 2024 3:53:55 AM reposense.report.ReportGenerator analyzeRepos +INFO: [46/92] Analyzing https://github.com/AY2324S2-CS2103T-W09-1/tp.git (master)... +Mar 08, 2024 3:53:55 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T17-2/tp.git... +Mar 08, 2024 3:53:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T17-2/tp.git to complete... +Mar 08, 2024 3:53:55 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-W09-1/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:53:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W09-1/tp.git (master)... -Mar 08, 2024 12:50:16 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:55 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-T17-4/tp.git completed! -Mar 08, 2024 12:50:16 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F14-3/tp.git completed! -Mar 08, 2024 12:50:16 AM reposense.report.ReportGenerator analyzeRepos -INFO: [46/92] Analyzing https://github.com/AY2324S2-CS2103T-T17-4/tp.git (master)... -Mar 08, 2024 12:50:16 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T17-2/tp.git... -Mar 08, 2024 12:50:16 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:53:55 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T08-3/tp.git... -Mar 08, 2024 12:50:16 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:55 AM reposense.report.ReportGenerator analyzeRepos +INFO: [47/92] Analyzing https://github.com/AY2324S2-CS2103T-T17-4/tp.git (master)... +Mar 08, 2024 3:53:55 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T08-3/tp.git to complete... -Mar 08, 2024 12:50:16 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T17-2/tp.git to complete... -Mar 08, 2024 12:50:16 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:53:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W09-1/tp.git (master)... -Mar 08, 2024 12:50:16 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:53:55 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T17-4/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:16 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:53:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T17-4/tp.git (master)... -Mar 08, 2024 12:50:16 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:53:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W09-1/tp.git (master)... -Mar 08, 2024 12:50:16 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:53:55 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-W09-1/tp.git (master) completed! -Mar 08, 2024 12:50:16 AM reposense.report.ReportGenerator analyzeRepos -INFO: [47/92] Analyzing https://github.com/AY2324S2-CS2103T-F14-3/tp.git (master)... -Mar 08, 2024 12:50:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T12-2/tp.git (master)... -Mar 08, 2024 12:50:17 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T11-2/tp.git completed! -Mar 08, 2024 12:50:17 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T08-1/tp.git... -Mar 08, 2024 12:50:17 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-F14-3/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F14-3/tp.git (master)... -Mar 08, 2024 12:50:17 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T08-1/tp.git to complete... -Mar 08, 2024 12:50:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T12-2/tp.git (master)... -Mar 08, 2024 12:50:17 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:53:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T17-4/tp.git (master)... -Mar 08, 2024 12:50:17 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T12-2/tp.git (master) completed! -Mar 08, 2024 12:50:17 AM reposense.report.ReportGenerator analyzeRepos -INFO: [48/92] Analyzing https://github.com/AY2324S2-CS2103T-T11-2/tp.git (master)... -Mar 08, 2024 12:50:17 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-T11-2/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T11-2/tp.git (master)... -Mar 08, 2024 12:50:17 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:53:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F14-3/tp.git (master)... +Mar 08, 2024 3:53:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T17-4/tp.git (master)... -Mar 08, 2024 12:50:17 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:53:55 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T17-4/tp.git (master) completed! -Mar 08, 2024 12:50:17 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F14-3/tp.git (master)... +Mar 08, 2024 3:53:56 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-F14-3/tp.git (master) completed! +Mar 08, 2024 3:53:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F14-1/tp.git (master)... +Mar 08, 2024 3:53:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F14-1/tp.git (master)... +Mar 08, 2024 3:53:56 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-F14-1/tp.git (master) completed! +Mar 08, 2024 3:53:56 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T11-2/tp.git completed! +Mar 08, 2024 3:53:56 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-T11-4/tp.git completed! -Mar 08, 2024 12:50:17 AM reposense.report.ReportGenerator analyzeRepos +Mar 08, 2024 3:53:56 AM reposense.report.ReportGenerator analyzeRepos +INFO: [48/92] Analyzing https://github.com/AY2324S2-CS2103T-T11-2/tp.git (master)... +Mar 08, 2024 3:53:56 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T08-1/tp.git... +Mar 08, 2024 3:53:56 AM reposense.report.ReportGenerator analyzeRepos INFO: [49/92] Analyzing https://github.com/AY2324S2-CS2103T-T11-4/tp.git (master)... -Mar 08, 2024 12:50:17 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:53:56 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F12-4/tp.git... -Mar 08, 2024 12:50:17 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:56 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T08-1/tp.git to complete... +Mar 08, 2024 3:53:56 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F12-4/tp.git to complete... -Mar 08, 2024 12:50:17 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T08-3/tp.git completed! -Mar 08, 2024 12:50:17 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T14-1/tp.git... -Mar 08, 2024 12:50:17 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:53:56 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-T11-2/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:53:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T11-2/tp.git (master)... +Mar 08, 2024 3:53:56 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T11-4/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:17 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:53:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T11-4/tp.git (master)... -Mar 08, 2024 12:50:18 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:56 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T17-2/tp.git completed! +Mar 08, 2024 3:53:56 AM reposense.report.ReportGenerator analyzeRepos +INFO: [50/92] Analyzing https://github.com/AY2324S2-CS2103T-T17-2/tp.git (master)... +Mar 08, 2024 3:53:56 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T14-1/tp.git... +Mar 08, 2024 3:53:56 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T14-1/tp.git to complete... -Mar 08, 2024 12:50:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:53:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T11-2/tp.git (master)... -Mar 08, 2024 12:50:18 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T17-2/tp.git completed! -Mar 08, 2024 12:50:18 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F12-2/tp.git... -Mar 08, 2024 12:50:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F14-3/tp.git (master)... -Mar 08, 2024 12:50:18 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F12-2/tp.git to complete... -Mar 08, 2024 12:50:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:53:56 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-T17-2/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:53:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T17-2/tp.git (master)... +Mar 08, 2024 3:53:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T11-2/tp.git (master)... -Mar 08, 2024 12:50:18 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:53:56 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T11-2/tp.git (master) completed! -Mar 08, 2024 12:50:18 AM reposense.report.ReportGenerator analyzeRepos -INFO: [50/92] Analyzing https://github.com/AY2324S2-CS2103T-T08-3/tp.git (master)... -Mar 08, 2024 12:50:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F14-3/tp.git (master)... -Mar 08, 2024 12:50:18 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:53:56 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T08-3/tp.git completed! +Mar 08, 2024 3:53:56 AM reposense.report.ReportGenerator analyzeRepos +INFO: [51/92] Analyzing https://github.com/AY2324S2-CS2103T-T08-3/tp.git (master)... +Mar 08, 2024 3:53:56 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F12-2/tp.git... +Mar 08, 2024 3:53:56 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F12-2/tp.git to complete... +Mar 08, 2024 3:53:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T11-4/tp.git (master)... -Mar 08, 2024 12:50:18 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F14-3/tp.git (master) completed! -Mar 08, 2024 12:50:18 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T08-1/tp.git completed! -Mar 08, 2024 12:50:18 AM reposense.report.ReportGenerator analyzeRepos -INFO: [51/92] Analyzing https://github.com/AY2324S2-CS2103T-T17-2/tp.git (master)... -Mar 08, 2024 12:50:18 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W08-4/tp.git... -Mar 08, 2024 12:50:18 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W08-4/tp.git to complete... -Mar 08, 2024 12:50:18 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T11-4/tp.git (master)... -Mar 08, 2024 12:50:18 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T11-4/tp.git (master) completed! -Mar 08, 2024 12:50:18 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:53:57 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T08-3/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:53:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T08-3/tp.git (master)... -Mar 08, 2024 12:50:18 AM reposense.report.ReportGenerator analyzeRepos -INFO: [52/92] Analyzing https://github.com/AY2324S2-CS2103T-T08-1/tp.git (master)... -Mar 08, 2024 12:50:18 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-T17-2/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T17-2/tp.git (master)... -Mar 08, 2024 12:50:18 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-T08-1/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:18 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T08-1/tp.git (master)... -Mar 08, 2024 12:50:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F14-1/tp.git (master)... -Mar 08, 2024 12:50:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:53:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T17-2/tp.git (master)... +Mar 08, 2024 3:53:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T11-4/tp.git (master)... +Mar 08, 2024 3:53:57 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T11-4/tp.git (master) completed! +Mar 08, 2024 3:53:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T17-2/tp.git (master)... +Mar 08, 2024 3:53:57 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T17-2/tp.git (master) completed! +Mar 08, 2024 3:53:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T08-3/tp.git (master)... -Mar 08, 2024 12:50:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T08-1/tp.git (master)... -Mar 08, 2024 12:50:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:53:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T08-3/tp.git (master)... -Mar 08, 2024 12:50:19 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:53:57 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T08-3/tp.git (master) completed! -Mar 08, 2024 12:50:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F14-1/tp.git (master)... -Mar 08, 2024 12:50:19 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F14-1/tp.git (master) completed! -Mar 08, 2024 12:50:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T08-1/tp.git (master)... -Mar 08, 2024 12:50:19 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T08-1/tp.git (master) completed! -Mar 08, 2024 12:50:19 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T17-2/tp.git (master)... -Mar 08, 2024 12:50:19 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F12-2/tp.git completed! -Mar 08, 2024 12:50:19 AM reposense.report.ReportGenerator analyzeRepos -INFO: [53/92] Analyzing https://github.com/AY2324S2-CS2103T-F12-2/tp.git (master)... -Mar 08, 2024 12:50:19 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:53:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-F12-4/tp.git completed! +Mar 08, 2024 3:53:57 AM reposense.report.ReportGenerator analyzeRepos +INFO: [52/92] Analyzing https://github.com/AY2324S2-CS2103T-F12-4/tp.git (master)... +Mar 08, 2024 3:53:57 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W08-4/tp.git... +Mar 08, 2024 3:53:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W08-4/tp.git to complete... +Mar 08, 2024 3:53:57 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-F12-4/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:53:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F12-4/tp.git (master)... +Mar 08, 2024 3:53:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T08-1/tp.git completed! +Mar 08, 2024 3:53:57 AM reposense.report.ReportGenerator analyzeRepos +INFO: [53/92] Analyzing https://github.com/AY2324S2-CS2103T-T08-1/tp.git (master)... +Mar 08, 2024 3:53:57 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W12-2/tp.git... -Mar 08, 2024 12:50:19 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W12-2/tp.git to complete... -Mar 08, 2024 12:50:19 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T17-2/tp.git (master)... -Mar 08, 2024 12:50:19 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T17-2/tp.git (master) completed! -Mar 08, 2024 12:50:19 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:58 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-T08-1/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:53:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T08-1/tp.git (master)... +Mar 08, 2024 3:53:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F12-4/tp.git (master)... +Mar 08, 2024 3:53:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F12-4/tp.git (master)... +Mar 08, 2024 3:53:58 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-F12-4/tp.git (master) completed! +Mar 08, 2024 3:53:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T08-1/tp.git (master)... +Mar 08, 2024 3:53:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T08-1/tp.git (master)... +Mar 08, 2024 3:53:58 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T08-1/tp.git (master) completed! +Mar 08, 2024 3:53:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-T14-1/tp.git completed! -Mar 08, 2024 12:50:19 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-F12-2/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:19 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F12-2/tp.git (master)... -Mar 08, 2024 12:50:19 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W08-3/tp.git... -Mar 08, 2024 12:50:19 AM reposense.report.ReportGenerator analyzeRepos +Mar 08, 2024 3:53:58 AM reposense.report.ReportGenerator analyzeRepos INFO: [54/92] Analyzing https://github.com/AY2324S2-CS2103T-T14-1/tp.git (master)... -Mar 08, 2024 12:50:19 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:58 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W08-3/tp.git... +Mar 08, 2024 3:53:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W08-3/tp.git to complete... -Mar 08, 2024 12:50:19 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F12-4/tp.git completed! -Mar 08, 2024 12:50:19 AM reposense.report.ReportGenerator analyzeRepos -INFO: [55/92] Analyzing https://github.com/AY2324S2-CS2103T-F12-4/tp.git (master)... -Mar 08, 2024 12:50:19 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:53:58 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-F12-2/tp.git completed! +Mar 08, 2024 3:53:58 AM reposense.report.ReportGenerator analyzeRepos +INFO: [55/92] Analyzing https://github.com/AY2324S2-CS2103T-F12-2/tp.git (master)... +Mar 08, 2024 3:53:58 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W12-1/tp.git... -Mar 08, 2024 12:50:20 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W12-1/tp.git to complete... -Mar 08, 2024 12:50:20 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:53:58 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T14-1/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:53:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T14-1/tp.git (master)... -Mar 08, 2024 12:50:20 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W08-4/tp.git completed! -Mar 08, 2024 12:50:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:53:58 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-F12-2/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:53:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F12-2/tp.git (master)... +Mar 08, 2024 3:53:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F12-2/tp.git (master)... -Mar 08, 2024 12:50:20 AM reposense.report.ReportGenerator analyzeRepos -INFO: [56/92] Analyzing https://github.com/AY2324S2-CS2103T-W08-4/tp.git (master)... -Mar 08, 2024 12:50:20 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F11-4/tp.git... -Mar 08, 2024 12:50:20 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F11-4/tp.git to complete... -Mar 08, 2024 12:50:20 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-F12-4/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F12-4/tp.git (master)... -Mar 08, 2024 12:50:20 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-W08-4/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:20 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W08-4/tp.git (master)... -Mar 08, 2024 12:50:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:53:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F12-2/tp.git (master)... -Mar 08, 2024 12:50:20 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:53:58 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-F12-2/tp.git (master) completed! -Mar 08, 2024 12:50:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:53:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T14-1/tp.git (master)... -Mar 08, 2024 12:50:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F12-4/tp.git (master)... -Mar 08, 2024 12:50:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:53:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T14-1/tp.git (master)... -Mar 08, 2024 12:50:20 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:53:58 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T14-1/tp.git (master) completed! -Mar 08, 2024 12:50:20 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:59 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-W12-2/tp.git completed! -Mar 08, 2024 12:50:20 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F12-4/tp.git (master)... -Mar 08, 2024 12:50:20 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F12-4/tp.git (master) completed! -Mar 08, 2024 12:50:20 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F14-4/tp.git... -Mar 08, 2024 12:50:20 AM reposense.report.ReportGenerator analyzeRepos -INFO: [57/92] Analyzing https://github.com/AY2324S2-CS2103T-W12-2/tp.git (master)... -Mar 08, 2024 12:50:20 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F14-4/tp.git to complete... -Mar 08, 2024 12:50:20 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W08-4/tp.git (master)... -Mar 08, 2024 12:50:21 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:53:59 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F11-4/tp.git... +Mar 08, 2024 3:53:59 AM reposense.report.ReportGenerator analyzeRepos +INFO: [56/92] Analyzing https://github.com/AY2324S2-CS2103T-W12-2/tp.git (master)... +Mar 08, 2024 3:53:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F11-4/tp.git to complete... +Mar 08, 2024 3:53:59 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-W12-2/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:53:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W12-2/tp.git (master)... -Mar 08, 2024 12:50:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W08-4/tp.git (master)... -Mar 08, 2024 12:50:21 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W08-4/tp.git (master) completed! -Mar 08, 2024 12:50:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:53:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W12-2/tp.git (master)... -Mar 08, 2024 12:50:21 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W08-3/tp.git completed! -Mar 08, 2024 12:50:21 AM reposense.report.ReportGenerator analyzeRepos -INFO: [58/92] Analyzing https://github.com/AY2324S2-CS2103T-W08-3/tp.git (master)... -Mar 08, 2024 12:50:21 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W08-2/tp.git... -Mar 08, 2024 12:50:21 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W08-2/tp.git to complete... -Mar 08, 2024 12:50:21 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-W08-3/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W08-3/tp.git (master)... -Mar 08, 2024 12:50:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:53:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-W08-4/tp.git completed! +Mar 08, 2024 3:53:59 AM reposense.report.ReportGenerator analyzeRepos +INFO: [57/92] Analyzing https://github.com/AY2324S2-CS2103T-W08-4/tp.git (master)... +Mar 08, 2024 3:53:59 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F14-4/tp.git... +Mar 08, 2024 3:53:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F14-4/tp.git to complete... +Mar 08, 2024 3:53:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W12-2/tp.git (master)... -Mar 08, 2024 12:50:21 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:53:59 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-W12-2/tp.git (master) completed! -Mar 08, 2024 12:50:21 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F11-4/tp.git completed! -Mar 08, 2024 12:50:21 AM reposense.report.ReportGenerator analyzeRepos -INFO: [59/92] Analyzing https://github.com/AY2324S2-CS2103T-F11-4/tp.git (master)... -Mar 08, 2024 12:50:21 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:53:59 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-W08-4/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:53:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W08-4/tp.git (master)... +Mar 08, 2024 3:53:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-W08-3/tp.git completed! +Mar 08, 2024 3:53:59 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W08-2/tp.git... +Mar 08, 2024 3:53:59 AM reposense.report.ReportGenerator analyzeRepos +INFO: [58/92] Analyzing https://github.com/AY2324S2-CS2103T-W08-3/tp.git (master)... +Mar 08, 2024 3:53:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W08-2/tp.git to complete... +Mar 08, 2024 3:53:59 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-W08-3/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:53:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W08-3/tp.git (master)... +Mar 08, 2024 3:53:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-W12-1/tp.git completed! +Mar 08, 2024 3:53:59 AM reposense.report.ReportGenerator analyzeRepos +INFO: [59/92] Analyzing https://github.com/AY2324S2-CS2103T-W12-1/tp.git (master)... +Mar 08, 2024 3:53:59 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F11-3/tp.git... -Mar 08, 2024 12:50:21 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:53:59 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F11-3/tp.git to complete... -Mar 08, 2024 12:50:21 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W12-1/tp.git completed! -Mar 08, 2024 12:50:21 AM reposense.report.ReportGenerator analyzeRepos -INFO: [60/92] Analyzing https://github.com/AY2324S2-CS2103T-W12-1/tp.git (master)... -Mar 08, 2024 12:50:21 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T15-2/tp.git... -Mar 08, 2024 12:50:21 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T15-2/tp.git to complete... -Mar 08, 2024 12:50:21 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-F11-4/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F11-4/tp.git (master)... -Mar 08, 2024 12:50:21 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W08-3/tp.git (master)... -Mar 08, 2024 12:50:21 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:53:59 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-W12-1/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:21 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:53:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W12-1/tp.git (master)... -Mar 08, 2024 12:50:21 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:53:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W08-4/tp.git (master)... +Mar 08, 2024 3:54:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W08-4/tp.git (master)... +Mar 08, 2024 3:54:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W08-3/tp.git (master)... +Mar 08, 2024 3:54:00 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-W08-4/tp.git (master) completed! +Mar 08, 2024 3:54:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W08-3/tp.git (master)... -Mar 08, 2024 12:50:21 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:54:00 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-W08-3/tp.git (master) completed! -Mar 08, 2024 12:50:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F11-4/tp.git (master)... -Mar 08, 2024 12:50:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:54:00 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W12-1/tp.git (master)... -Mar 08, 2024 12:50:22 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F14-4/tp.git completed! -Mar 08, 2024 12:50:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F11-4/tp.git (master)... -Mar 08, 2024 12:50:22 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F11-4/tp.git (master) completed! -Mar 08, 2024 12:50:22 AM reposense.report.ReportGenerator analyzeRepos -INFO: [61/92] Analyzing https://github.com/AY2324S2-CS2103T-F14-4/tp.git (master)... -Mar 08, 2024 12:50:22 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-T14-1/tp.git... -Mar 08, 2024 12:50:22 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-T14-1/tp.git to complete... -Mar 08, 2024 12:50:22 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:54:00 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W12-1/tp.git (master)... -Mar 08, 2024 12:50:22 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:54:00 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-W12-1/tp.git (master) completed! -Mar 08, 2024 12:50:22 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-F14-4/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F14-4/tp.git (master)... -Mar 08, 2024 12:50:22 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:54:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-F11-4/tp.git completed! +Mar 08, 2024 3:54:00 AM reposense.report.ReportGenerator analyzeRepos +INFO: [60/92] Analyzing https://github.com/AY2324S2-CS2103T-F11-4/tp.git (master)... +Mar 08, 2024 3:54:00 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T15-2/tp.git... +Mar 08, 2024 3:54:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T15-2/tp.git to complete... +Mar 08, 2024 3:54:00 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-F11-4/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:54:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F11-4/tp.git (master)... +Mar 08, 2024 3:54:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-W08-2/tp.git completed! -Mar 08, 2024 12:50:22 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:54:01 AM reposense.report.ReportGenerator analyzeRepos +INFO: [61/92] Analyzing https://github.com/AY2324S2-CS2103T-W08-2/tp.git (master)... +Mar 08, 2024 3:54:01 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-T14-1/tp.git... +Mar 08, 2024 3:54:01 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-T14-1/tp.git to complete... +Mar 08, 2024 3:54:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F11-4/tp.git (master)... +Mar 08, 2024 3:54:01 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-F14-4/tp.git completed! +Mar 08, 2024 3:54:01 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F11-2/tp.git... -Mar 08, 2024 12:50:22 AM reposense.report.ReportGenerator analyzeRepos -INFO: [62/92] Analyzing https://github.com/AY2324S2-CS2103T-W08-2/tp.git (master)... -Mar 08, 2024 12:50:22 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:54:01 AM reposense.report.ReportGenerator analyzeRepos +INFO: [62/92] Analyzing https://github.com/AY2324S2-CS2103T-F14-4/tp.git (master)... +Mar 08, 2024 3:54:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F11-2/tp.git to complete... -Mar 08, 2024 12:50:22 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:54:01 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-W08-2/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:22 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:54:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W08-2/tp.git (master)... -Mar 08, 2024 12:50:22 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F14-4/tp.git (master)... -Mar 08, 2024 12:50:23 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:54:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F11-4/tp.git (master)... +Mar 08, 2024 3:54:01 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-F11-4/tp.git (master) completed! +Mar 08, 2024 3:54:01 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-F14-4/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:54:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F14-4/tp.git (master)... +Mar 08, 2024 3:54:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-F11-3/tp.git completed! -Mar 08, 2024 12:50:23 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F11-1/tp.git... -Mar 08, 2024 12:50:23 AM reposense.report.ReportGenerator analyzeRepos +Mar 08, 2024 3:54:01 AM reposense.report.ReportGenerator analyzeRepos INFO: [63/92] Analyzing https://github.com/AY2324S2-CS2103T-F11-3/tp.git (master)... -Mar 08, 2024 12:50:23 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:54:01 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F11-1/tp.git... +Mar 08, 2024 3:54:01 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F11-1/tp.git to complete... -Mar 08, 2024 12:50:23 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:54:01 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-F11-3/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:54:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F11-3/tp.git (master)... +Mar 08, 2024 3:54:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F14-4/tp.git (master)... +Mar 08, 2024 3:54:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F14-4/tp.git (master)... -Mar 08, 2024 12:50:23 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:54:01 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-F14-4/tp.git (master) completed! -Mar 08, 2024 12:50:23 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:54:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W08-2/tp.git (master)... +Mar 08, 2024 3:54:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W08-2/tp.git (master)... +Mar 08, 2024 3:54:01 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-W08-2/tp.git (master) completed! +Mar 08, 2024 3:54:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-T15-2/tp.git completed! -Mar 08, 2024 12:50:23 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T15-3/tp.git... -Mar 08, 2024 12:50:23 AM reposense.report.ReportGenerator analyzeRepos +Mar 08, 2024 3:54:02 AM reposense.report.ReportGenerator analyzeRepos INFO: [64/92] Analyzing https://github.com/AY2324S2-CS2103T-T15-2/tp.git (master)... -Mar 08, 2024 12:50:23 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-F11-3/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F11-3/tp.git (master)... -Mar 08, 2024 12:50:23 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:54:02 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T15-3/tp.git... +Mar 08, 2024 3:54:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T15-3/tp.git to complete... -Mar 08, 2024 12:50:23 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:54:02 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T15-2/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:23 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:54:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T15-2/tp.git (master)... -Mar 08, 2024 12:50:23 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W08-2/tp.git (master)... -Mar 08, 2024 12:50:24 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T15-2/tp.git (master)... -Mar 08, 2024 12:50:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W08-2/tp.git (master)... -Mar 08, 2024 12:50:24 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W08-2/tp.git (master) completed! -Mar 08, 2024 12:50:24 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T15-2/tp.git (master)... -Mar 08, 2024 12:50:24 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T15-2/tp.git (master) completed! -Mar 08, 2024 12:50:24 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F11-2/tp.git completed! -Mar 08, 2024 12:50:24 AM reposense.report.ReportGenerator analyzeRepos -INFO: [65/92] Analyzing https://github.com/AY2324S2-CS2103T-F11-2/tp.git (master)... -Mar 08, 2024 12:50:24 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:54:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F11-3/tp.git (master)... +Mar 08, 2024 3:54:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103-T14-1/tp.git completed! +Mar 08, 2024 3:54:03 AM reposense.report.ReportGenerator analyzeRepos +INFO: [65/92] Analyzing https://github.com/AY2324S2-CS2103-T14-1/tp.git (master)... +Mar 08, 2024 3:54:03 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T15-1/tp.git... -Mar 08, 2024 12:50:24 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:54:03 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T15-1/tp.git to complete... -Mar 08, 2024 12:50:24 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103-T14-1/tp.git completed! -Mar 08, 2024 12:50:24 AM reposense.report.ReportGenerator analyzeRepos -INFO: [66/92] Analyzing https://github.com/AY2324S2-CS2103-T14-1/tp.git (master)... -Mar 08, 2024 12:50:24 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:54:03 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T15-2/tp.git (master)... +Mar 08, 2024 3:54:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-F11-1/tp.git completed! +Mar 08, 2024 3:54:03 AM reposense.report.ReportGenerator analyzeRepos +INFO: [66/92] Analyzing https://github.com/AY2324S2-CS2103T-F11-1/tp.git (master)... +Mar 08, 2024 3:54:03 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T09-1/tp.git... -Mar 08, 2024 12:50:24 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T09-1/tp.git to complete... -Mar 08, 2024 12:50:24 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-F11-2/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F11-2/tp.git (master)... -Mar 08, 2024 12:50:24 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:54:03 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103-T14-1/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:24 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:54:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T15-2/tp.git (master)... +Mar 08, 2024 3:54:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-T14-1/tp.git (master)... -Mar 08, 2024 12:50:24 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F11-1/tp.git completed! -Mar 08, 2024 12:50:25 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:54:03 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F11-3/tp.git (master)... +Mar 08, 2024 3:54:03 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T15-2/tp.git (master) completed! +Mar 08, 2024 3:54:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T09-1/tp.git to complete... +Mar 08, 2024 3:54:03 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-F11-3/tp.git (master) completed! +Mar 08, 2024 3:54:03 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-F11-1/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:54:03 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F11-1/tp.git (master)... +Mar 08, 2024 3:54:03 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-F11-2/tp.git completed! +Mar 08, 2024 3:54:03 AM reposense.report.ReportGenerator analyzeRepos +INFO: [67/92] Analyzing https://github.com/AY2324S2-CS2103T-F11-2/tp.git (master)... +Mar 08, 2024 3:54:03 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W12-4/tp.git... -Mar 08, 2024 12:50:25 AM reposense.report.ReportGenerator analyzeRepos -INFO: [67/92] Analyzing https://github.com/AY2324S2-CS2103T-F11-1/tp.git (master)... -Mar 08, 2024 12:50:25 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:54:03 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W12-4/tp.git to complete... -Mar 08, 2024 12:50:25 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:54:04 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-F11-2/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:54:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F11-2/tp.git (master)... +Mar 08, 2024 3:54:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F11-1/tp.git (master)... +Mar 08, 2024 3:54:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F11-1/tp.git (master)... +Mar 08, 2024 3:54:04 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-F11-1/tp.git (master) completed! +Mar 08, 2024 3:54:04 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-T15-3/tp.git completed! -Mar 08, 2024 12:50:25 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:54:04 AM reposense.report.ReportGenerator analyzeRepos +INFO: [68/92] Analyzing https://github.com/AY2324S2-CS2103T-T15-3/tp.git (master)... +Mar 08, 2024 3:54:04 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W12-3/tp.git... -Mar 08, 2024 12:50:25 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:54:04 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W12-3/tp.git to complete... -Mar 08, 2024 12:50:25 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-F11-1/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:25 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F11-1/tp.git (master)... -Mar 08, 2024 12:50:25 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:54:04 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-T15-3/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:54:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T15-3/tp.git (master)... +Mar 08, 2024 3:54:04 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-T15-1/tp.git completed! -Mar 08, 2024 12:50:25 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:54:04 AM reposense.report.ReportGenerator analyzeRepos +INFO: [69/92] Analyzing https://github.com/AY2324S2-CS2103T-T15-1/tp.git (master)... +Mar 08, 2024 3:54:04 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T09-2/tp.git... -Mar 08, 2024 12:50:25 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:54:04 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T09-2/tp.git to complete... -Mar 08, 2024 12:50:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F11-3/tp.git (master)... -Mar 08, 2024 12:50:26 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:54:05 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-T09-1/tp.git completed! -Mar 08, 2024 12:50:26 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:54:05 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T15-4/tp.git... -Mar 08, 2024 12:50:26 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:54:05 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-T15-1/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:54:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T15-1/tp.git (master)... +Mar 08, 2024 3:54:05 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T15-4/tp.git to complete... -Mar 08, 2024 12:50:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:54:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F11-2/tp.git (master)... -Mar 08, 2024 12:50:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F11-3/tp.git (master)... -Mar 08, 2024 12:50:26 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F11-3/tp.git (master) completed! -Mar 08, 2024 12:50:26 AM reposense.report.ReportGenerator analyzeRepos -INFO: [68/92] Analyzing https://github.com/AY2324S2-CS2103T-T15-3/tp.git (master)... -Mar 08, 2024 12:50:26 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:54:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T15-3/tp.git (master)... +Mar 08, 2024 3:54:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T15-3/tp.git (master)... +Mar 08, 2024 3:54:05 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T15-3/tp.git (master) completed! +Mar 08, 2024 3:54:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T15-1/tp.git (master)... +Mar 08, 2024 3:54:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F11-2/tp.git (master)... -Mar 08, 2024 12:50:26 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:54:05 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-F11-2/tp.git (master) completed! -Mar 08, 2024 12:50:26 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F11-1/tp.git (master)... -Mar 08, 2024 12:50:26 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:54:05 AM reposense.report.ReportGenerator analyzeRepos +INFO: [70/92] Analyzing https://github.com/AY2324S2-CS2103T-T09-1/tp.git (master)... +Mar 08, 2024 3:54:05 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-W12-4/tp.git completed! -Mar 08, 2024 12:50:26 AM reposense.report.RepoCloner spawnCloneProcess +Mar 08, 2024 3:54:05 AM reposense.report.ReportGenerator analyzeRepos +INFO: [71/92] Analyzing https://github.com/AY2324S2-CS2103T-W12-4/tp.git (master)... +Mar 08, 2024 3:54:05 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F08-3/tp.git... -Mar 08, 2024 12:50:26 AM reposense.report.ReportGenerator analyzeRepos -INFO: [69/92] Analyzing https://github.com/AY2324S2-CS2103T-T15-1/tp.git (master)... -Mar 08, 2024 12:50:26 AM reposense.report.RepoCloner waitForCloneProcess +Mar 08, 2024 3:54:05 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F08-3/tp.git to complete... -Mar 08, 2024 12:50:26 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-T15-3/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T15-3/tp.git (master)... -Mar 08, 2024 12:50:26 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-T15-1/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:26 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T15-1/tp.git (master)... -Mar 08, 2024 12:50:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F11-1/tp.git (master)... -Mar 08, 2024 12:50:27 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F11-1/tp.git (master) completed! -Mar 08, 2024 12:50:27 AM reposense.report.ReportGenerator analyzeRepos -INFO: [70/92] Analyzing https://github.com/AY2324S2-CS2103T-T09-1/tp.git (master)... -Mar 08, 2024 12:50:27 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W12-3/tp.git completed! -Mar 08, 2024 12:50:27 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F08-1/tp.git... -Mar 08, 2024 12:50:27 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F08-1/tp.git to complete... -Mar 08, 2024 12:50:27 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:54:05 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T09-1/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:54:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T09-1/tp.git (master)... -Mar 08, 2024 12:50:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T15-3/tp.git (master)... -Mar 08, 2024 12:50:27 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T09-2/tp.git completed! -Mar 08, 2024 12:50:27 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W08-1/tp.git... -Mar 08, 2024 12:50:27 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W08-1/tp.git to complete... -Mar 08, 2024 12:50:27 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T15-1/tp.git (master)... -Mar 08, 2024 12:50:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T15-3/tp.git (master)... -Mar 08, 2024 12:50:27 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T15-3/tp.git (master) completed! -Mar 08, 2024 12:50:27 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T15-4/tp.git completed! -Mar 08, 2024 12:50:27 AM reposense.report.ReportGenerator analyzeRepos -INFO: [71/92] Analyzing https://github.com/AY2324S2-CS2103T-W12-4/tp.git (master)... -Mar 08, 2024 12:50:27 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T12-1/tp.git... -Mar 08, 2024 12:50:27 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T12-1/tp.git to complete... -Mar 08, 2024 12:50:27 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-W12-4/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:27 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W12-4/tp.git (master)... -Mar 08, 2024 12:50:27 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:54:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T15-1/tp.git (master)... -Mar 08, 2024 12:50:27 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:54:05 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T15-1/tp.git (master) completed! -Mar 08, 2024 12:50:27 AM reposense.report.ReportGenerator analyzeRepos -INFO: [72/92] Analyzing https://github.com/AY2324S2-CS2103T-W12-3/tp.git (master)... -Mar 08, 2024 12:50:27 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103-F08-3/tp.git completed! -Mar 08, 2024 12:50:27 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W11-2/tp.git... -Mar 08, 2024 12:50:28 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W11-2/tp.git to complete... -Mar 08, 2024 12:50:28 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-W12-3/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W12-3/tp.git (master)... -Mar 08, 2024 12:50:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:54:05 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-W12-4/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:54:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W12-4/tp.git (master)... +Mar 08, 2024 3:54:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T09-1/tp.git (master)... -Mar 08, 2024 12:50:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:54:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T09-2/tp.git completed! +Mar 08, 2024 3:54:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W12-4/tp.git (master)... +Mar 08, 2024 3:54:06 AM reposense.report.ReportGenerator analyzeRepos +INFO: [72/92] Analyzing https://github.com/AY2324S2-CS2103T-T09-2/tp.git (master)... +Mar 08, 2024 3:54:06 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F08-1/tp.git... +Mar 08, 2024 3:54:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F08-1/tp.git to complete... +Mar 08, 2024 3:54:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T09-1/tp.git (master)... -Mar 08, 2024 12:50:28 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:54:06 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T09-1/tp.git (master) completed! -Mar 08, 2024 12:50:28 AM reposense.report.ReportGenerator analyzeRepos -INFO: [73/92] Analyzing https://github.com/AY2324S2-CS2103T-T09-2/tp.git (master)... -Mar 08, 2024 12:50:28 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W12-4/tp.git (master)... -Mar 08, 2024 12:50:28 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:54:06 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T09-2/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:54:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T09-2/tp.git (master)... -Mar 08, 2024 12:50:28 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103-F08-1/tp.git completed! -Mar 08, 2024 12:50:28 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W09-2/tp.git... -Mar 08, 2024 12:50:28 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W09-2/tp.git to complete... -Mar 08, 2024 12:50:28 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:54:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T15-4/tp.git completed! +Mar 08, 2024 3:54:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W12-4/tp.git (master)... -Mar 08, 2024 12:50:28 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:54:06 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-W12-4/tp.git (master) completed! -Mar 08, 2024 12:50:28 AM reposense.report.ReportGenerator analyzeRepos -INFO: [74/92] Analyzing https://github.com/AY2324S2-CS2103T-T15-4/tp.git (master)... -Mar 08, 2024 12:50:28 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W08-1/tp.git completed! -Mar 08, 2024 12:50:28 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W09-4/tp.git... -Mar 08, 2024 12:50:28 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W09-4/tp.git to complete... -Mar 08, 2024 12:50:28 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:54:06 AM reposense.report.ReportGenerator analyzeRepos +INFO: [73/92] Analyzing https://github.com/AY2324S2-CS2103T-T15-4/tp.git (master)... +Mar 08, 2024 3:54:06 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W08-1/tp.git... +Mar 08, 2024 3:54:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W08-1/tp.git to complete... +Mar 08, 2024 3:54:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-W12-3/tp.git completed! +Mar 08, 2024 3:54:06 AM reposense.report.ReportGenerator analyzeRepos +INFO: [74/92] Analyzing https://github.com/AY2324S2-CS2103T-W12-3/tp.git (master)... +Mar 08, 2024 3:54:06 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T12-1/tp.git... +Mar 08, 2024 3:54:06 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T15-4/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:28 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:54:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T15-4/tp.git (master)... -Mar 08, 2024 12:50:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:54:06 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T12-1/tp.git to complete... +Mar 08, 2024 3:54:06 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-W12-3/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:54:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W12-3/tp.git (master)... +Mar 08, 2024 3:54:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T09-2/tp.git (master)... -Mar 08, 2024 12:50:29 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T12-1/tp.git completed! -Mar 08, 2024 12:50:29 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T12-3/tp.git... -Mar 08, 2024 12:50:29 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T12-3/tp.git to complete... -Mar 08, 2024 12:50:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:54:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T09-2/tp.git (master)... -Mar 08, 2024 12:50:29 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:54:07 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T09-2/tp.git (master) completed! -Mar 08, 2024 12:50:29 AM reposense.report.ReportGenerator analyzeRepos +Mar 08, 2024 3:54:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103-F08-3/tp.git completed! +Mar 08, 2024 3:54:07 AM reposense.report.ReportGenerator analyzeRepos INFO: [75/92] Analyzing https://github.com/AY2324S2-CS2103-F08-3/tp.git (master)... -Mar 08, 2024 12:50:29 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103-F08-3/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:29 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F08-3/tp.git (master)... -Mar 08, 2024 12:50:29 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:54:07 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W11-2/tp.git... +Mar 08, 2024 3:54:07 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W11-2/tp.git to complete... +Mar 08, 2024 3:54:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T15-4/tp.git (master)... -Mar 08, 2024 12:50:29 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:54:07 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T15-4/tp.git (master)... -Mar 08, 2024 12:50:29 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:54:07 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T15-4/tp.git (master) completed! -Mar 08, 2024 12:50:29 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W11-2/tp.git completed! -Mar 08, 2024 12:50:29 AM reposense.report.ReportGenerator analyzeRepos -INFO: [76/92] Analyzing https://github.com/AY2324S2-CS2103-F08-1/tp.git (master)... -Mar 08, 2024 12:50:29 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F14-2/tp.git... -Mar 08, 2024 12:50:30 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F14-2/tp.git to complete... -Mar 08, 2024 12:50:30 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103-F08-1/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:30 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F08-1/tp.git (master)... -Mar 08, 2024 12:50:30 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W09-2/tp.git completed! -Mar 08, 2024 12:50:30 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T11-3/tp.git... -Mar 08, 2024 12:50:30 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T11-3/tp.git to complete... -Mar 08, 2024 12:50:30 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:54:07 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103-F08-3/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:54:07 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F08-3/tp.git (master)... +Mar 08, 2024 3:54:07 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F08-3/tp.git (master)... -Mar 08, 2024 12:50:30 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T12-3/tp.git completed! -Mar 08, 2024 12:50:30 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F12-1/tp.git... -Mar 08, 2024 12:50:30 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F12-1/tp.git to complete... -Mar 08, 2024 12:50:30 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W09-4/tp.git completed! -Mar 08, 2024 12:50:30 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:54:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-W08-1/tp.git completed! +Mar 08, 2024 3:54:08 AM reposense.report.ReportGenerator analyzeRepos +INFO: [76/92] Analyzing https://github.com/AY2324S2-CS2103T-W08-1/tp.git (master)... +Mar 08, 2024 3:54:08 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W09-2/tp.git... +Mar 08, 2024 3:54:08 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F08-3/tp.git (master)... -Mar 08, 2024 12:50:30 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:54:08 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103-F08-3/tp.git (master) completed! -Mar 08, 2024 12:50:30 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T17-3/tp.git... -Mar 08, 2024 12:50:30 AM reposense.report.ReportGenerator analyzeRepos -INFO: [77/92] Analyzing https://github.com/AY2324S2-CS2103T-W08-1/tp.git (master)... -Mar 08, 2024 12:50:31 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T17-3/tp.git to complete... -Mar 08, 2024 12:50:31 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:54:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W09-2/tp.git to complete... +Mar 08, 2024 3:54:08 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-W08-1/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:54:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W08-1/tp.git (master)... -Mar 08, 2024 12:50:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:54:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T12-1/tp.git completed! +Mar 08, 2024 3:54:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103-F08-1/tp.git completed! +Mar 08, 2024 3:54:08 AM reposense.report.ReportGenerator analyzeRepos +INFO: [77/92] Analyzing https://github.com/AY2324S2-CS2103-F08-1/tp.git (master)... +Mar 08, 2024 3:54:08 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W09-4/tp.git... +Mar 08, 2024 3:54:08 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T12-3/tp.git... +Mar 08, 2024 3:54:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T12-3/tp.git to complete... +Mar 08, 2024 3:54:08 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W09-4/tp.git to complete... +Mar 08, 2024 3:54:08 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103-F08-1/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:54:08 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F08-1/tp.git (master)... +Mar 08, 2024 3:54:08 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W12-3/tp.git (master)... -Mar 08, 2024 12:50:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:54:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-W11-2/tp.git completed! +Mar 08, 2024 3:54:09 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F14-2/tp.git... +Mar 08, 2024 3:54:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W08-1/tp.git (master)... +Mar 08, 2024 3:54:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F14-2/tp.git to complete... +Mar 08, 2024 3:54:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W08-1/tp.git (master)... +Mar 08, 2024 3:54:09 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-W08-1/tp.git (master) completed! +Mar 08, 2024 3:54:09 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W12-3/tp.git (master)... -Mar 08, 2024 12:50:31 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F08-1/tp.git (master)... -Mar 08, 2024 12:50:31 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:54:09 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-W12-3/tp.git (master) completed! -Mar 08, 2024 12:50:31 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F14-2/tp.git completed! -Mar 08, 2024 12:50:31 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T14-2/tp.git... -Mar 08, 2024 12:50:31 AM reposense.report.ReportGenerator analyzeRepos +Mar 08, 2024 3:54:09 AM reposense.report.ReportGenerator analyzeRepos INFO: [78/92] Analyzing https://github.com/AY2324S2-CS2103T-T12-1/tp.git (master)... -Mar 08, 2024 12:50:31 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T14-2/tp.git to complete... -Mar 08, 2024 12:50:31 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:54:09 AM reposense.report.ReportGenerator analyzeRepos +INFO: [79/92] Analyzing https://github.com/AY2324S2-CS2103T-W11-2/tp.git (master)... +Mar 08, 2024 3:54:09 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T12-1/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:31 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:54:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T12-1/tp.git (master)... -Mar 08, 2024 12:50:31 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F08-1/tp.git (master)... -Mar 08, 2024 12:50:31 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103-F08-1/tp.git (master) completed! -Mar 08, 2024 12:50:31 AM reposense.report.ReportGenerator analyzeRepos -INFO: [79/92] Analyzing https://github.com/AY2324S2-CS2103T-W11-2/tp.git (master)... -Mar 08, 2024 12:50:32 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T11-3/tp.git completed! -Mar 08, 2024 12:50:32 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F12-1/tp.git completed! -Mar 08, 2024 12:50:32 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:54:09 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-W11-2/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:54:09 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W11-2/tp.git (master)... -Mar 08, 2024 12:50:32 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T08-2/tp.git... -Mar 08, 2024 12:50:32 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T17-1/tp.git... -Mar 08, 2024 12:50:32 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T08-2/tp.git to complete... -Mar 08, 2024 12:50:32 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T17-1/tp.git to complete... -Mar 08, 2024 12:50:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W08-1/tp.git (master)... -Mar 08, 2024 12:50:32 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T17-3/tp.git completed! -Mar 08, 2024 12:50:32 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W13-1/tp.git... -Mar 08, 2024 12:50:32 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W13-1/tp.git to complete... -Mar 08, 2024 12:50:32 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:54:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T12-1/tp.git (master)... -Mar 08, 2024 12:50:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W08-1/tp.git (master)... -Mar 08, 2024 12:50:32 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W08-1/tp.git (master) completed! -Mar 08, 2024 12:50:32 AM reposense.report.ReportGenerator analyzeRepos +Mar 08, 2024 3:54:09 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F08-1/tp.git (master)... +Mar 08, 2024 3:54:09 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-W09-2/tp.git completed! +Mar 08, 2024 3:54:09 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T11-3/tp.git... +Mar 08, 2024 3:54:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T11-3/tp.git to complete... +Mar 08, 2024 3:54:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T12-1/tp.git (master)... +Mar 08, 2024 3:54:10 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T12-1/tp.git (master) completed! +Mar 08, 2024 3:54:10 AM reposense.report.ReportGenerator analyzeRepos INFO: [80/92] Analyzing https://github.com/AY2324S2-CS2103T-W09-2/tp.git (master)... -Mar 08, 2024 12:50:32 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:54:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F08-1/tp.git (master)... +Mar 08, 2024 3:54:10 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103-F08-1/tp.git (master) completed! +Mar 08, 2024 3:54:10 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-W09-2/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:54:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W09-2/tp.git (master)... -Mar 08, 2024 12:50:32 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T12-1/tp.git (master)... -Mar 08, 2024 12:50:32 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T12-1/tp.git (master) completed! -Mar 08, 2024 12:50:32 AM reposense.report.ReportGenerator analyzeRepos +Mar 08, 2024 3:54:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T12-3/tp.git completed! +Mar 08, 2024 3:54:10 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F12-1/tp.git... +Mar 08, 2024 3:54:10 AM reposense.report.ReportGenerator analyzeRepos INFO: [81/92] Analyzing https://github.com/AY2324S2-CS2103T-T12-3/tp.git (master)... -Mar 08, 2024 12:50:32 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:54:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F12-1/tp.git to complete... +Mar 08, 2024 3:54:10 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T12-3/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:54:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T12-3/tp.git (master)... -Mar 08, 2024 12:50:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:54:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-W09-4/tp.git completed! +Mar 08, 2024 3:54:10 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T17-3/tp.git... +Mar 08, 2024 3:54:10 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T17-3/tp.git to complete... +Mar 08, 2024 3:54:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T12-3/tp.git (master)... -Mar 08, 2024 12:50:33 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T14-2/tp.git completed! -Mar 08, 2024 12:50:33 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F12-3/tp.git... -Mar 08, 2024 12:50:33 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F12-3/tp.git to complete... -Mar 08, 2024 12:50:33 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T08-2/tp.git completed! -Mar 08, 2024 12:50:33 AM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T11-1/tp.git... -Mar 08, 2024 12:50:33 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T17-1/tp.git completed! -Mar 08, 2024 12:50:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:54:10 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T12-3/tp.git (master)... -Mar 08, 2024 12:50:33 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:54:10 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T12-3/tp.git (master) completed! -Mar 08, 2024 12:50:33 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T11-1/tp.git to complete... -Mar 08, 2024 12:50:33 AM reposense.report.ReportGenerator analyzeRepos +Mar 08, 2024 3:54:10 AM reposense.report.ReportGenerator analyzeRepos INFO: [82/92] Analyzing https://github.com/AY2324S2-CS2103T-W09-4/tp.git (master)... -Mar 08, 2024 12:50:33 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W13-1/tp.git completed! -Mar 08, 2024 12:50:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W11-2/tp.git (master)... -Mar 08, 2024 12:50:33 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:54:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-T14-1/tp.git (master)... +Mar 08, 2024 3:54:10 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-W09-4/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:54:10 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W09-4/tp.git (master)... -Mar 08, 2024 12:50:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:54:10 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W11-2/tp.git (master)... +Mar 08, 2024 3:54:11 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-F14-2/tp.git completed! +Mar 08, 2024 3:54:11 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T14-2/tp.git... +Mar 08, 2024 3:54:11 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T14-2/tp.git to complete... +Mar 08, 2024 3:54:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W11-2/tp.git (master)... -Mar 08, 2024 12:50:33 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:54:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-T14-1/tp.git (master)... +Mar 08, 2024 3:54:11 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-W11-2/tp.git (master) completed! -Mar 08, 2024 12:50:33 AM reposense.report.ReportGenerator analyzeRepos +Mar 08, 2024 3:54:11 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103-T14-1/tp.git (master) completed! +Mar 08, 2024 3:54:11 AM reposense.report.ReportGenerator analyzeRepos INFO: [83/92] Analyzing https://github.com/AY2324S2-CS2103T-F14-2/tp.git (master)... -Mar 08, 2024 12:50:33 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:54:11 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-F14-2/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:54:11 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F14-2/tp.git (master)... -Mar 08, 2024 12:50:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-T14-1/tp.git (master)... -Mar 08, 2024 12:50:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W09-2/tp.git (master)... -Mar 08, 2024 12:50:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:54:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W09-4/tp.git (master)... -Mar 08, 2024 12:50:34 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F12-3/tp.git completed! -Mar 08, 2024 12:50:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W09-2/tp.git (master)... -Mar 08, 2024 12:50:34 AM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T11-1/tp.git completed! -Mar 08, 2024 12:50:34 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W09-2/tp.git (master) completed! -Mar 08, 2024 12:50:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-T14-1/tp.git (master)... -Mar 08, 2024 12:50:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:54:11 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W09-4/tp.git (master)... -Mar 08, 2024 12:50:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F14-2/tp.git (master)... -Mar 08, 2024 12:50:34 AM reposense.report.ReportGenerator analyzeRepos -INFO: [84/92] Analyzing https://github.com/AY2324S2-CS2103T-T11-3/tp.git (master)... -Mar 08, 2024 12:50:34 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:54:11 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-W09-4/tp.git (master) completed! -Mar 08, 2024 12:50:34 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103-T14-1/tp.git (master) completed! -Mar 08, 2024 12:50:34 AM reposense.report.ReportGenerator analyzeRepos +Mar 08, 2024 3:54:11 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T11-3/tp.git completed! +Mar 08, 2024 3:54:11 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T08-2/tp.git... +Mar 08, 2024 3:54:11 AM reposense.report.ReportGenerator analyzeRepos +INFO: [84/92] Analyzing https://github.com/AY2324S2-CS2103T-T11-3/tp.git (master)... +Mar 08, 2024 3:54:11 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T08-2/tp.git to complete... +Mar 08, 2024 3:54:11 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-F12-1/tp.git completed! +Mar 08, 2024 3:54:11 AM reposense.report.ReportGenerator analyzeRepos INFO: [85/92] Analyzing https://github.com/AY2324S2-CS2103T-F12-1/tp.git (master)... -Mar 08, 2024 12:50:34 AM reposense.report.ReportGenerator analyzeRepos -INFO: [86/92] Analyzing https://github.com/AY2324S2-CS2103T-T17-3/tp.git (master)... -Mar 08, 2024 12:50:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F14-2/tp.git (master)... -Mar 08, 2024 12:50:34 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F14-2/tp.git (master) completed! -Mar 08, 2024 12:50:34 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-F12-1/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:34 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:54:11 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T17-1/tp.git... +Mar 08, 2024 3:54:11 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W09-2/tp.git (master)... +Mar 08, 2024 3:54:11 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T17-1/tp.git to complete... +Mar 08, 2024 3:54:12 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T11-3/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:54:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T11-3/tp.git (master)... -Mar 08, 2024 12:50:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:54:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T17-3/tp.git completed! +Mar 08, 2024 3:54:12 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-F12-1/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:54:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F12-1/tp.git (master)... -Mar 08, 2024 12:50:34 AM reposense.report.ReportGenerator analyzeRepos -INFO: [87/92] Analyzing https://github.com/AY2324S2-CS2103T-T14-2/tp.git (master)... -Mar 08, 2024 12:50:34 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:54:12 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W13-1/tp.git... +Mar 08, 2024 3:54:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F14-2/tp.git (master)... +Mar 08, 2024 3:54:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W13-1/tp.git to complete... +Mar 08, 2024 3:54:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W09-2/tp.git (master)... +Mar 08, 2024 3:54:12 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-W09-2/tp.git (master) completed! +Mar 08, 2024 3:54:12 AM reposense.report.ReportGenerator analyzeRepos +INFO: [86/92] Analyzing https://github.com/AY2324S2-CS2103T-T17-3/tp.git (master)... +Mar 08, 2024 3:54:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F12-1/tp.git (master)... +Mar 08, 2024 3:54:12 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T17-3/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:54:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T17-3/tp.git (master)... -Mar 08, 2024 12:50:34 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-T14-2/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T14-2/tp.git (master)... -Mar 08, 2024 12:50:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F12-1/tp.git (master)... -Mar 08, 2024 12:50:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:54:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F14-2/tp.git (master)... +Mar 08, 2024 3:54:12 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-F14-2/tp.git (master) completed! +Mar 08, 2024 3:54:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T11-3/tp.git (master)... +Mar 08, 2024 3:54:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F12-1/tp.git (master)... -Mar 08, 2024 12:50:34 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:54:12 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-F12-1/tp.git (master) completed! -Mar 08, 2024 12:50:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T11-3/tp.git (master)... -Mar 08, 2024 12:50:34 AM reposense.report.ReportGenerator analyzeRepos -INFO: [88/92] Analyzing https://github.com/AY2324S2-CS2103T-T08-2/tp.git (master)... -Mar 08, 2024 12:50:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T17-3/tp.git (master)... -Mar 08, 2024 12:50:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T14-2/tp.git (master)... -Mar 08, 2024 12:50:34 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-T08-2/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T08-2/tp.git (master)... -Mar 08, 2024 12:50:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:54:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T11-3/tp.git (master)... -Mar 08, 2024 12:50:34 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:54:12 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T11-3/tp.git (master) completed! -Mar 08, 2024 12:50:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T14-2/tp.git (master)... -Mar 08, 2024 12:50:34 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T14-2/tp.git (master) completed! -Mar 08, 2024 12:50:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:54:12 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T17-3/tp.git (master)... +Mar 08, 2024 3:54:12 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T17-3/tp.git (master)... -Mar 08, 2024 12:50:34 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:54:12 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T17-3/tp.git (master) completed! -Mar 08, 2024 12:50:34 AM reposense.report.ReportGenerator analyzeRepos -INFO: [89/92] Analyzing https://github.com/AY2324S2-CS2103T-T17-1/tp.git (master)... -Mar 08, 2024 12:50:34 AM reposense.report.ReportGenerator analyzeRepos -INFO: [90/92] Analyzing https://github.com/AY2324S2-CS2103T-W13-1/tp.git (master)... -Mar 08, 2024 12:50:34 AM reposense.report.ReportGenerator analyzeRepos -INFO: [91/92] Analyzing https://github.com/AY2324S2-CS2103T-F12-3/tp.git (master)... -Mar 08, 2024 12:50:35 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:54:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T14-2/tp.git completed! +Mar 08, 2024 3:54:12 AM reposense.report.ReportGenerator analyzeRepos +INFO: [87/92] Analyzing https://github.com/AY2324S2-CS2103T-T14-2/tp.git (master)... +Mar 08, 2024 3:54:12 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F12-3/tp.git... +Mar 08, 2024 3:54:12 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F12-3/tp.git to complete... +Mar 08, 2024 3:54:12 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-T14-2/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:54:12 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T14-2/tp.git (master)... +Mar 08, 2024 3:54:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T14-2/tp.git (master)... +Mar 08, 2024 3:54:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T14-2/tp.git (master)... +Mar 08, 2024 3:54:13 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T14-2/tp.git (master) completed! +Mar 08, 2024 3:54:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T17-1/tp.git completed! +Mar 08, 2024 3:54:13 AM reposense.report.ReportGenerator analyzeRepos +INFO: [88/92] Analyzing https://github.com/AY2324S2-CS2103T-T17-1/tp.git (master)... +Mar 08, 2024 3:54:13 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T11-1/tp.git... +Mar 08, 2024 3:54:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T11-1/tp.git to complete... +Mar 08, 2024 3:54:13 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T17-1/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:54:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T17-1/tp.git (master)... -Mar 08, 2024 12:50:35 AM reposense.report.ReportGenerator updateRepoConfig +Mar 08, 2024 3:54:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T08-2/tp.git completed! +Mar 08, 2024 3:54:13 AM reposense.report.ReportGenerator analyzeRepos +INFO: [89/92] Analyzing https://github.com/AY2324S2-CS2103T-T08-2/tp.git (master)... +Mar 08, 2024 3:54:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-W13-1/tp.git completed! +Mar 08, 2024 3:54:13 AM reposense.report.ReportGenerator analyzeRepos +INFO: [90/92] Analyzing https://github.com/AY2324S2-CS2103T-W13-1/tp.git (master)... +Mar 08, 2024 3:54:13 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-T08-2/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:54:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T08-2/tp.git (master)... +Mar 08, 2024 3:54:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T17-1/tp.git (master)... +Mar 08, 2024 3:54:13 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-W13-1/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 08, 2024 3:54:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W13-1/tp.git (master)... -Mar 08, 2024 12:50:35 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-F12-3/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F12-3/tp.git (master)... -Mar 08, 2024 12:50:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T17-1/tp.git (master)... -Mar 08, 2024 12:50:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T08-2/tp.git (master)... -Mar 08, 2024 12:50:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W13-1/tp.git (master)... -Mar 08, 2024 12:50:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:54:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T17-1/tp.git (master)... -Mar 08, 2024 12:50:35 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:54:13 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T17-1/tp.git (master) completed! -Mar 08, 2024 12:50:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T08-2/tp.git (master)... -Mar 08, 2024 12:50:35 AM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T08-2/tp.git (master) completed! -Mar 08, 2024 12:50:35 AM reposense.report.ReportGenerator analyzeRepos -INFO: [92/92] Analyzing https://github.com/AY2324S2-CS2103T-T11-1/tp.git (master)... -Mar 08, 2024 12:50:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:54:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T08-2/tp.git (master)... +Mar 08, 2024 3:54:13 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W13-1/tp.git (master)... +Mar 08, 2024 3:54:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W13-1/tp.git (master)... -Mar 08, 2024 12:50:35 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:54:13 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-W13-1/tp.git (master) completed! -Mar 08, 2024 12:50:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:54:13 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T08-2/tp.git (master)... +Mar 08, 2024 3:54:13 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T08-2/tp.git (master) completed! +Mar 08, 2024 3:54:13 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-F12-3/tp.git completed! +Mar 08, 2024 3:54:13 AM reposense.report.ReportGenerator analyzeRepos +INFO: [91/92] Analyzing https://github.com/AY2324S2-CS2103T-F12-3/tp.git (master)... +Mar 08, 2024 3:54:13 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-F12-3/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:54:13 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F12-3/tp.git (master)... +Mar 08, 2024 3:54:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F12-3/tp.git (master)... -Mar 08, 2024 12:50:35 AM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-T11-1/tp.git (master) does not contain a standalone config file. -Mar 08, 2024 12:50:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T11-1/tp.git (master)... -Mar 08, 2024 12:50:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:54:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F12-3/tp.git (master)... -Mar 08, 2024 12:50:35 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:54:14 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-F12-3/tp.git (master) completed! -Mar 08, 2024 12:50:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 08, 2024 3:54:14 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T11-1/tp.git completed! +Mar 08, 2024 3:54:14 AM reposense.report.ReportGenerator analyzeRepos +INFO: [92/92] Analyzing https://github.com/AY2324S2-CS2103T-T11-1/tp.git (master)... +Mar 08, 2024 3:54:14 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-T11-1/tp.git (master) does not contain a standalone config file. +Mar 08, 2024 3:54:14 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T11-1/tp.git (master)... +Mar 08, 2024 3:54:14 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T11-1/tp.git (master)... -Mar 08, 2024 12:50:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 08, 2024 3:54:14 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T11-1/tp.git (master)... -Mar 08, 2024 12:50:35 AM reposense.report.ReportGenerator analyzeRepo +Mar 08, 2024 3:54:14 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T11-1/tp.git (master) completed! -Mar 08, 2024 12:50:35 AM reposense.report.ReportGenerator generateReposReport +Mar 08, 2024 3:54:14 AM reposense.report.ReportGenerator generateReposReport INFO: The report is generated at /home/runner/work/tp-dashboard/tp-dashboard/reposense-report -Mar 08, 2024 12:50:35 AM reposense.RepoSense main -INFO: Elapsed processing time: 38.94 second(s) +Mar 08, 2024 3:54:14 AM reposense.RepoSense main +INFO: Elapsed processing time: 40.38 second(s) diff --git a/summary.json b/summary.json index cbe7af82..c39ece8f 100644 --- a/summary.json +++ b/summary.json @@ -1 +1 @@ -{"repoSenseVersion":"bbb2f694a7","reportGeneratedTime":"Fri Mar 8 08:49:57 2024 UTC+08:00","reportGenerationTime":" 38.62 second(s)","zoneId":"UTC+08:00","reportTitle":"CS2103 tP Code Dashboard","repos":[{"location":{"location":"https://github.com/AY2324S2-CS2103-T14-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103-T14-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103-T14-1/tp[master]","outputFolderName":"AY2324S2-CS2103-T14-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103-F15-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103-F15-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103-F15-2/tp[master]","outputFolderName":"AY2324S2-CS2103-F15-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103-F15-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103-F15-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103-F15-3/tp[master]","outputFolderName":"AY2324S2-CS2103-F15-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103-F09-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103-F09-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103-F09-4/tp[master]","outputFolderName":"AY2324S2-CS2103-F09-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103-F15-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103-F15-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103-F15-4/tp[master]","outputFolderName":"AY2324S2-CS2103-F15-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103-F15-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103-F15-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103-F15-1/tp[master]","outputFolderName":"AY2324S2-CS2103-F15-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103-F08-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103-F08-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103-F08-3/tp[master]","outputFolderName":"AY2324S2-CS2103-F08-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103-F09-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103-F09-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103-F09-2/tp[master]","outputFolderName":"AY2324S2-CS2103-F09-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103-F09-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103-F09-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103-F09-1/tp[master]","outputFolderName":"AY2324S2-CS2103-F09-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103-F08-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103-F08-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103-F08-2/tp[master]","outputFolderName":"AY2324S2-CS2103-F08-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103-F08-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103-F08-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103-F08-1/tp[master]","outputFolderName":"AY2324S2-CS2103-F08-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103-F09-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103-F09-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103-F09-3/tp[master]","outputFolderName":"AY2324S2-CS2103-F09-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103-F08-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103-F08-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103-F08-4/tp[master]","outputFolderName":"AY2324S2-CS2103-F08-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W08-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W08-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W08-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-W08-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T13-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T13-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T13-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-T13-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T11-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T11-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T11-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-T11-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T17-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T17-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T17-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-T17-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W12-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W12-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W12-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-W12-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T12-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T12-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T12-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-T12-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T10-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T10-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T10-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-T10-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F10-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F10-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F10-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-F10-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W13-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W13-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W13-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-W13-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T09-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T09-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T09-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-T09-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T14-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T14-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T14-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-T14-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T16-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T16-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T16-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-T16-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T10-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T10-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T10-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-T10-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T17-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T17-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T17-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-T17-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F13-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F13-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F13-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-F13-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F14-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F14-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F14-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-F14-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T11-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T11-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T11-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-T11-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F11-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F11-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F11-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-F11-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T08-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T08-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T08-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-T08-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W12-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W12-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W12-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-W12-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W08-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W08-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W08-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-W08-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W10-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W10-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W10-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-W10-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F12-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F12-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F12-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-F12-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W11-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W11-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W11-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-W11-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W08-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W08-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W08-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-W08-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T09-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T09-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T09-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-T09-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W11-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W11-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W11-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-W11-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W11-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W11-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W11-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-W11-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T12-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T12-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T12-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-T12-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F11-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F11-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F11-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-F11-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T11-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T11-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T11-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-T11-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T10-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T10-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T10-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-T10-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F14-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F14-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F14-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-F14-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T08-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T08-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T08-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-T08-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W09-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W09-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W09-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-W09-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T11-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T11-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T11-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-T11-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W10-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W10-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W10-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-W10-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F10-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F10-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F10-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-F10-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T13-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T13-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T13-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-T13-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T13-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T13-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T13-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-T13-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F13-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F13-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F13-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-F13-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T12-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T12-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T12-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-T12-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T08-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T08-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T08-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-T08-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T12-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T12-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T12-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-T12-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T09-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T09-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T09-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-T09-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W12-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W12-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W12-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-W12-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F10-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F10-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F10-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-F10-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F13-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F13-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F13-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-F13-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T15-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T15-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T15-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-T15-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T13-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T13-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T13-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-T13-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F11-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F11-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F11-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-F11-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W09-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W09-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W09-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-W09-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F12-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F12-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F12-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-F12-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T17-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T17-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T17-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-T17-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T15-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T15-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T15-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-T15-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T16-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T16-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T16-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-T16-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W13-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W13-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W13-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-W13-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W10-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W10-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W10-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-W10-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T15-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T15-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T15-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-T15-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W12-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W12-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W12-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-W12-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T09-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T09-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T09-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-T09-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T17-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T17-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T17-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-T17-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W13-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W13-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W13-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-W13-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W08-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W08-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W08-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-W08-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F11-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F11-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F11-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-F11-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T16-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T16-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T16-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-T16-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F10-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F10-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F10-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-F10-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W09-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W09-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W09-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-W09-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T15-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T15-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T15-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-T15-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W09-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W09-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W09-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-W09-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F14-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F14-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F14-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-F14-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W13-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W13-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W13-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-W13-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F13-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F13-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F13-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-F13-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W10-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W10-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W10-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-W10-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F12-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F12-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F12-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-F12-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F12-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F12-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F12-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-F12-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F14-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F14-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F14-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-F14-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T16-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T16-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T16-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-T16-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T14-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T14-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T14-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-T14-1_tp_master"}],"errorSet":[],"sinceDate":"2024-02-23","untilDate":"2024-03-08","isSinceDateProvided":true,"isUntilDateProvided":false,"supportedDomainUrlMap":{"NOT_RECOGNIZED":{"BRANCH":"","REPO_URL":"UNSUPPORTED","BASE_URL":"UNSUPPORTED","HISTORY_PATH":"","COMMIT_PATH":"","BLAME_PATH":""},"github":{"BRANCH":"tree/$BRANCH","REPO_URL":"https://github.com/$ORGANIZATION/$REPO_NAME/","BASE_URL":"https://github.com/","HISTORY_PATH":"commits/$BRANCH/$FILE_PATH","COMMIT_PATH":"commit/$COMMIT_HASH","BLAME_PATH":"blame/$BRANCH/$FILE_PATH"}}} +{"repoSenseVersion":"bbb2f694a7","reportGeneratedTime":"Fri Mar 8 11:53:35 2024 UTC+08:00","reportGenerationTime":" 40.04 second(s)","zoneId":"UTC+08:00","reportTitle":"CS2103 tP Code Dashboard","repos":[{"location":{"location":"https://github.com/AY2324S2-CS2103-T14-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103-T14-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103-T14-1/tp[master]","outputFolderName":"AY2324S2-CS2103-T14-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103-F15-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103-F15-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103-F15-2/tp[master]","outputFolderName":"AY2324S2-CS2103-F15-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103-F15-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103-F15-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103-F15-3/tp[master]","outputFolderName":"AY2324S2-CS2103-F15-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103-F09-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103-F09-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103-F09-4/tp[master]","outputFolderName":"AY2324S2-CS2103-F09-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103-F15-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103-F15-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103-F15-4/tp[master]","outputFolderName":"AY2324S2-CS2103-F15-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103-F15-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103-F15-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103-F15-1/tp[master]","outputFolderName":"AY2324S2-CS2103-F15-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103-F08-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103-F08-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103-F08-3/tp[master]","outputFolderName":"AY2324S2-CS2103-F08-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103-F09-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103-F09-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103-F09-2/tp[master]","outputFolderName":"AY2324S2-CS2103-F09-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103-F09-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103-F09-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103-F09-1/tp[master]","outputFolderName":"AY2324S2-CS2103-F09-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103-F08-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103-F08-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103-F08-2/tp[master]","outputFolderName":"AY2324S2-CS2103-F08-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103-F08-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103-F08-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103-F08-1/tp[master]","outputFolderName":"AY2324S2-CS2103-F08-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103-F09-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103-F09-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103-F09-3/tp[master]","outputFolderName":"AY2324S2-CS2103-F09-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103-F08-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103-F08-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103-F08-4/tp[master]","outputFolderName":"AY2324S2-CS2103-F08-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W08-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W08-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W08-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-W08-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T13-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T13-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T13-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-T13-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T11-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T11-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T11-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-T11-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T17-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T17-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T17-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-T17-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W12-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W12-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W12-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-W12-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T12-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T12-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T12-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-T12-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T10-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T10-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T10-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-T10-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F10-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F10-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F10-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-F10-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W13-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W13-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W13-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-W13-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T09-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T09-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T09-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-T09-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T14-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T14-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T14-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-T14-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T16-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T16-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T16-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-T16-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T10-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T10-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T10-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-T10-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T17-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T17-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T17-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-T17-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F13-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F13-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F13-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-F13-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F14-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F14-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F14-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-F14-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T11-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T11-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T11-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-T11-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F11-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F11-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F11-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-F11-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T08-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T08-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T08-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-T08-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W12-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W12-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W12-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-W12-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W08-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W08-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W08-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-W08-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W10-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W10-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W10-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-W10-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F12-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F12-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F12-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-F12-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W11-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W11-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W11-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-W11-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W08-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W08-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W08-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-W08-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T09-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T09-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T09-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-T09-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W11-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W11-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W11-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-W11-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W11-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W11-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W11-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-W11-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T12-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T12-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T12-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-T12-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F11-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F11-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F11-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-F11-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T11-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T11-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T11-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-T11-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T10-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T10-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T10-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-T10-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F14-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F14-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F14-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-F14-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T08-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T08-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T08-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-T08-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W09-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W09-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W09-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-W09-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T11-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T11-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T11-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-T11-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W10-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W10-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W10-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-W10-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F10-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F10-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F10-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-F10-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T13-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T13-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T13-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-T13-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T13-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T13-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T13-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-T13-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F13-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F13-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F13-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-F13-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T12-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T12-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T12-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-T12-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T08-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T08-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T08-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-T08-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T12-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T12-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T12-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-T12-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T09-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T09-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T09-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-T09-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W12-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W12-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W12-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-W12-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F10-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F10-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F10-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-F10-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F13-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F13-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F13-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-F13-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T15-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T15-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T15-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-T15-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T13-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T13-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T13-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-T13-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F11-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F11-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F11-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-F11-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W09-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W09-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W09-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-W09-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F12-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F12-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F12-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-F12-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T17-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T17-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T17-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-T17-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T15-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T15-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T15-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-T15-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T16-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T16-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T16-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-T16-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W13-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W13-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W13-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-W13-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W10-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W10-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W10-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-W10-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T15-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T15-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T15-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-T15-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W12-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W12-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W12-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-W12-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T09-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T09-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T09-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-T09-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T17-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T17-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T17-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-T17-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W13-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W13-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W13-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-W13-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W08-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W08-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W08-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-W08-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F11-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F11-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F11-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-F11-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T16-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T16-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T16-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-T16-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F10-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F10-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F10-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-F10-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W09-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W09-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W09-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-W09-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T15-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T15-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T15-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-T15-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W09-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W09-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W09-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-W09-1_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F14-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F14-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F14-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-F14-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W13-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W13-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W13-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-W13-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F13-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F13-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F13-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-F13-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-W10-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-W10-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-W10-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-W10-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F12-2/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F12-2","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F12-2/tp[master]","outputFolderName":"AY2324S2-CS2103T-F12-2_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F12-3/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F12-3","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F12-3/tp[master]","outputFolderName":"AY2324S2-CS2103T-F12-3_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-F14-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-F14-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-F14-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-F14-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T16-4/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T16-4","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T16-4/tp[master]","outputFolderName":"AY2324S2-CS2103T-T16-4_tp_master"},{"location":{"location":"https://github.com/AY2324S2-CS2103T-T14-1/tp.git","repoName":"tp","organization":"AY2324S2-CS2103T-T14-1","domainName":"github"},"branch":"master","displayName":"AY2324S2-CS2103T-T14-1/tp[master]","outputFolderName":"AY2324S2-CS2103T-T14-1_tp_master"}],"errorSet":[],"sinceDate":"2024-02-23","untilDate":"2024-03-08","isSinceDateProvided":true,"isUntilDateProvided":false,"supportedDomainUrlMap":{"NOT_RECOGNIZED":{"BRANCH":"","REPO_URL":"UNSUPPORTED","BASE_URL":"UNSUPPORTED","HISTORY_PATH":"","COMMIT_PATH":"","BLAME_PATH":""},"github":{"BRANCH":"tree/$BRANCH","REPO_URL":"https://github.com/$ORGANIZATION/$REPO_NAME/","BASE_URL":"https://github.com/","HISTORY_PATH":"commits/$BRANCH/$FILE_PATH","COMMIT_PATH":"commit/$COMMIT_HASH","BLAME_PATH":"blame/$BRANCH/$FILE_PATH"}}}