diff --git a/AY2324S2-CS2103-F08-2_tp_master/authorship.json b/AY2324S2-CS2103-F08-2_tp_master/authorship.json index 13ecbd0d..e00a8c78 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/new-feature.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"tankh99"},"content":"---","lastModifiedDate":"2024-02-26"},{"lineNumber":2,"author":{"gitId":"tankh99"},"content":"name: New feature","lastModifiedDate":"2024-02-26"},{"lineNumber":3,"author":{"gitId":"tankh99"},"content":"about: Atomic features by module","lastModifiedDate":"2024-02-26"},{"lineNumber":4,"author":{"gitId":"tankh99"},"content":"title: \"[Module] Feature\"","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":"### Feature description","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"tankh99"},"content":"### Acceptance criteria**","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":14,"author":{"gitId":"tankh99"},"content":"### Proposed implementation","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":16,"author":{"gitId":"tankh99"},"content":"### Additional information","lastModifiedDate":"2024-02-26"}],"authorContributionMap":{"tankh99":16}},{"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":"-"},"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":"-"},"content":"### Jane Doe","lastModifiedDate":"2020-06-17"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/johndoe.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2020-06-17"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"-"},"content":"[[github](http://github.com/johndoe)]","lastModifiedDate":"2020-06-17"},{"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":"-"},"content":"* Role: Team Lead","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":"* Responsibilities: UI","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"Jerome-j"},"content":"### Jerome Chua","lastModifiedDate":"2024-03-01"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"Jerome-j"},"content":"\u003cimg src\u003d\"images/jerome-j.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-01"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"Jerome-j"},"content":"[[github](http://github.com/Jerome-j] [[portfolio](team/jerome-j.md)]","lastModifiedDate":"2024-03-01"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"Jerome-j"},"content":"* Responsibilities: Integration","lastModifiedDate":"2024-03-01"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":41,"author":{"gitId":"caitlyntang"},"content":"### Caitlyn Tang","lastModifiedDate":"2024-03-04"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"caitlyntang"},"content":"\u003cimg src\u003d\"images/caitlyntang.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"caitlyntang"},"content":"[[github](http://github.com/caitlyntang)]","lastModifiedDate":"2024-03-04"},{"lineNumber":46,"author":{"gitId":"caitlyntang"},"content":"[[portfolio](team/caitlyntang.md)]","lastModifiedDate":"2024-03-04"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"-"},"content":"* Responsibilities: Dev Ops + Threading","lastModifiedDate":"2020-05-23"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"tankh99"},"content":"### Tan Khang Hou","lastModifiedDate":"2024-03-05"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"tankh99"},"content":"\u003cimg src\u003d\"images/tankh99.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"tankh99"},"content":"[[github](http://github.com/tankh99)]","lastModifiedDate":"2024-03-05"},{"lineNumber":56,"author":{"gitId":"tankh99"},"content":"[[portfolio](team/tankh99.md)]","lastModifiedDate":"2024-03-05"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":58,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":59,"author":{"gitId":"tankh99"},"content":"* Responsibilities: Code quality","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"caitlyntang":4,"Jerome-j":4,"tankh99":5,"-":46}},{"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":"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":"Jerome-j"},"content":"|-----------|------------------|-------------------------------------------|-------------------------------------------------------------|","lastModifiedDate":"2024-03-05"},{"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":"Jerome-j"},"content":"| `* * *` | Counsellor | to categorise / tag my patients | patients with more serious issues can be attended to first. |","lastModifiedDate":"2024-03-05"},{"lineNumber":299,"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":300,"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":301,"author":{"gitId":"Jerome-j"},"content":"| `*` | Experienced User | mass delete patient data | patient data is not compromised. |","lastModifiedDate":"2024-03-05"},{"lineNumber":302,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":303,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":304,"author":{"gitId":"-"},"content":"### Use cases","lastModifiedDate":"2020-06-07"},{"lineNumber":305,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":306,"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":307,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":308,"author":{"gitId":"Jerome-j"},"content":"**Use case: Search a student**","lastModifiedDate":"2024-03-05"},{"lineNumber":309,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":310,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2020-05-23"},{"lineNumber":311,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":312,"author":{"gitId":"Jerome-j"},"content":"1. User requests to list persons using the specified constraints","lastModifiedDate":"2024-03-05"},{"lineNumber":313,"author":{"gitId":"Jerome-j"},"content":"2. CogniCare shows a list of persons that meets the criteria","lastModifiedDate":"2024-03-05"},{"lineNumber":314,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":315,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":316,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":317,"author":{"gitId":"-"},"content":"**Extensions**","lastModifiedDate":"2020-05-23"},{"lineNumber":318,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":319,"author":{"gitId":"Jerome-j"},"content":"* 1a. The query has missing parameters","lastModifiedDate":"2024-03-05"},{"lineNumber":320,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":321,"author":{"gitId":"Jerome-j"},"content":" * 1a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-05"},{"lineNumber":322,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":323,"author":{"gitId":"Jerome-j"},"content":" * 1a2. CogniCare returns all information about a patient.","lastModifiedDate":"2024-03-05"},{"lineNumber":324,"author":{"gitId":"Jerome-j"},"content":" ","lastModifiedDate":"2024-03-05"},{"lineNumber":325,"author":{"gitId":"Jerome-j"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":326,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":327,"author":{"gitId":"-"},"content":"* 2a. The list is empty.","lastModifiedDate":"2020-05-23"},{"lineNumber":328,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":329,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":330,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":331,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":332,"author":{"gitId":"Jerome-j"},"content":"**Use case: Delete a student**","lastModifiedDate":"2024-03-05"},{"lineNumber":333,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":334,"author":{"gitId":"Jerome-j"},"content":"**MSS**","lastModifiedDate":"2024-03-05"},{"lineNumber":335,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":336,"author":{"gitId":"Jerome-j"},"content":"1. User requests to delete a patient at the given index.","lastModifiedDate":"2024-03-05"},{"lineNumber":337,"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":338,"author":{"gitId":"Jerome-j"},"content":"3. CogniCare deletes the patient.","lastModifiedDate":"2024-03-05"},{"lineNumber":339,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":340,"author":{"gitId":"Jerome-j"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":341,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":342,"author":{"gitId":"Jerome-j"},"content":"**Extensions**","lastModifiedDate":"2024-03-05"},{"lineNumber":343,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":344,"author":{"gitId":"Jerome-j"},"content":"* 1a. The query has missing parameters","lastModifiedDate":"2024-03-05"},{"lineNumber":345,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":346,"author":{"gitId":"Jerome-j"},"content":" * 1a1. CogniCare shows an error message that the index is invalid.","lastModifiedDate":"2024-03-05"},{"lineNumber":347,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":348,"author":{"gitId":"Jerome-j"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":349,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":350,"author":{"gitId":"Jerome-j"},"content":"* 2a. User does not want to delete.","lastModifiedDate":"2024-03-05"},{"lineNumber":351,"author":{"gitId":"Jerome-j"},"content":" * 1a1. CogniCare shows an error message that the user cancelled the delete operation.","lastModifiedDate":"2024-03-05"},{"lineNumber":352,"author":{"gitId":"Jerome-j"},"content":" ","lastModifiedDate":"2024-03-05"},{"lineNumber":353,"author":{"gitId":"Jerome-j"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"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":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":358,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":359,"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":360,"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":361,"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":362,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":363,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":364,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":365,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":366,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":367,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":368,"author":{"gitId":"Jerome-j"},"content":"* **Mainstream OS**: Windows, Linux, Unix, macOS","lastModifiedDate":"2024-03-05"},{"lineNumber":369,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":370,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":371,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":372,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":373,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":374,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":375,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":376,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":377,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":378,"author":{"gitId":"-"},"content":"**Note:** These instructions only provide a starting point for testers to work on;","lastModifiedDate":"2023-09-12"},{"lineNumber":379,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":380,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":381,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":382,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":383,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":384,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":385,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":386,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":387,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":388,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":389,"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":390,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":391,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":392,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":393,"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":394,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":395,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":396,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","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"},{"lineNumber":399,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":400,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":401,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":402,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":403,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":404,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":405,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":406,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":407,"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":408,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":409,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":410,"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":411,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":412,"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":413,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":414,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":415,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":416,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":417,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":418,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":419,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":420,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":421,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":422,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":423,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"Jerome-j":51,"-":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":"-"},"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":"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,"-":17}},{"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":".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/new-feature.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"tankh99"},"content":"---","lastModifiedDate":"2024-02-26"},{"lineNumber":2,"author":{"gitId":"tankh99"},"content":"name: New feature","lastModifiedDate":"2024-02-26"},{"lineNumber":3,"author":{"gitId":"tankh99"},"content":"about: Atomic features by module","lastModifiedDate":"2024-02-26"},{"lineNumber":4,"author":{"gitId":"tankh99"},"content":"title: \"[Module] Feature\"","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":"### Feature description","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"tankh99"},"content":"### Acceptance criteria**","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":14,"author":{"gitId":"tankh99"},"content":"### Proposed implementation","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"tankh99"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":16,"author":{"gitId":"tankh99"},"content":"### Additional information","lastModifiedDate":"2024-02-26"}],"authorContributionMap":{"tankh99":16}},{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"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-02-17"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-17"},{"lineNumber":3,"author":{"gitId":"tankh99"},"content":"[![CI Status](https://https://github.com/AY2324S2-CS2103-F08-2/tp/workflows/Java%20CI/badge.svg)](https://https://github.com/AY2324S2-CS2103-F08-2/tp/actions)","lastModifiedDate":"2024-03-05"},{"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":1,"-":15}},{"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":"-"},"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":"-"},"content":"### Jane Doe","lastModifiedDate":"2020-06-17"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/johndoe.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2020-06-17"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"-"},"content":"[[github](http://github.com/johndoe)]","lastModifiedDate":"2020-06-17"},{"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":"-"},"content":"* Role: Team Lead","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":"* Responsibilities: UI","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"Jerome-j"},"content":"### Jerome Chua","lastModifiedDate":"2024-03-01"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"Jerome-j"},"content":"\u003cimg src\u003d\"images/jerome-j.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-01"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"Jerome-j"},"content":"[[github](http://github.com/Jerome-j] [[portfolio](team/jerome-j.md)]","lastModifiedDate":"2024-03-01"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"Jerome-j"},"content":"* Responsibilities: Integration","lastModifiedDate":"2024-03-01"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":41,"author":{"gitId":"caitlyntang"},"content":"### Caitlyn Tang","lastModifiedDate":"2024-03-04"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"caitlyntang"},"content":"\u003cimg src\u003d\"images/caitlyntang.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"caitlyntang"},"content":"[[github](http://github.com/caitlyntang)]","lastModifiedDate":"2024-03-04"},{"lineNumber":46,"author":{"gitId":"caitlyntang"},"content":"[[portfolio](team/caitlyntang.md)]","lastModifiedDate":"2024-03-04"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"-"},"content":"* Responsibilities: Dev Ops + Threading","lastModifiedDate":"2020-05-23"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"tankh99"},"content":"### Tan Khang Hou","lastModifiedDate":"2024-03-05"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"tankh99"},"content":"\u003cimg src\u003d\"images/tankh99.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"tankh99"},"content":"[[github](http://github.com/tankh99)]","lastModifiedDate":"2024-03-05"},{"lineNumber":56,"author":{"gitId":"tankh99"},"content":"[[portfolio](team/tankh99.md)]","lastModifiedDate":"2024-03-05"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":58,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":59,"author":{"gitId":"tankh99"},"content":"* Responsibilities: Code quality","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"caitlyntang":4,"Jerome-j":4,"tankh99":5,"-":46}},{"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":"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":"Jerome-j"},"content":"|-----------|------------------|-------------------------------------------|-------------------------------------------------------------|","lastModifiedDate":"2024-03-05"},{"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":"Jerome-j"},"content":"| `* * *` | Counsellor | to categorise / tag my patients | patients with more serious issues can be attended to first. |","lastModifiedDate":"2024-03-05"},{"lineNumber":299,"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":300,"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":301,"author":{"gitId":"Jerome-j"},"content":"| `*` | Experienced User | mass delete patient data | patient data is not compromised. |","lastModifiedDate":"2024-03-05"},{"lineNumber":302,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":303,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":304,"author":{"gitId":"-"},"content":"### Use cases","lastModifiedDate":"2020-06-07"},{"lineNumber":305,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":306,"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":307,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":308,"author":{"gitId":"Jerome-j"},"content":"**Use case: Search a student**","lastModifiedDate":"2024-03-05"},{"lineNumber":309,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":310,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2020-05-23"},{"lineNumber":311,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":312,"author":{"gitId":"Jerome-j"},"content":"1. User requests to list persons using the specified constraints","lastModifiedDate":"2024-03-05"},{"lineNumber":313,"author":{"gitId":"Jerome-j"},"content":"2. CogniCare shows a list of persons that meets the criteria","lastModifiedDate":"2024-03-05"},{"lineNumber":314,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":315,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":316,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":317,"author":{"gitId":"-"},"content":"**Extensions**","lastModifiedDate":"2020-05-23"},{"lineNumber":318,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":319,"author":{"gitId":"Jerome-j"},"content":"* 1a. The query has missing parameters","lastModifiedDate":"2024-03-05"},{"lineNumber":320,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":321,"author":{"gitId":"Jerome-j"},"content":" * 1a1. CogniCare shows an error message.","lastModifiedDate":"2024-03-05"},{"lineNumber":322,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":323,"author":{"gitId":"Jerome-j"},"content":" * 1a2. CogniCare returns all information about a patient.","lastModifiedDate":"2024-03-05"},{"lineNumber":324,"author":{"gitId":"Jerome-j"},"content":" ","lastModifiedDate":"2024-03-05"},{"lineNumber":325,"author":{"gitId":"Jerome-j"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":326,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":327,"author":{"gitId":"-"},"content":"* 2a. The list is empty.","lastModifiedDate":"2020-05-23"},{"lineNumber":328,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":329,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":330,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":331,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":332,"author":{"gitId":"Jerome-j"},"content":"**Use case: Delete a student**","lastModifiedDate":"2024-03-05"},{"lineNumber":333,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":334,"author":{"gitId":"Jerome-j"},"content":"**MSS**","lastModifiedDate":"2024-03-05"},{"lineNumber":335,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":336,"author":{"gitId":"Jerome-j"},"content":"1. User requests to delete a patient at the given index.","lastModifiedDate":"2024-03-05"},{"lineNumber":337,"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":338,"author":{"gitId":"Jerome-j"},"content":"3. CogniCare deletes the patient.","lastModifiedDate":"2024-03-05"},{"lineNumber":339,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":340,"author":{"gitId":"Jerome-j"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":341,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":342,"author":{"gitId":"Jerome-j"},"content":"**Extensions**","lastModifiedDate":"2024-03-05"},{"lineNumber":343,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":344,"author":{"gitId":"Jerome-j"},"content":"* 1a. The query has missing parameters","lastModifiedDate":"2024-03-05"},{"lineNumber":345,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":346,"author":{"gitId":"Jerome-j"},"content":" * 1a1. CogniCare shows an error message that the index is invalid.","lastModifiedDate":"2024-03-05"},{"lineNumber":347,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":348,"author":{"gitId":"Jerome-j"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":349,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":350,"author":{"gitId":"Jerome-j"},"content":"* 2a. User does not want to delete.","lastModifiedDate":"2024-03-05"},{"lineNumber":351,"author":{"gitId":"Jerome-j"},"content":" * 1a1. CogniCare shows an error message that the user cancelled the delete operation.","lastModifiedDate":"2024-03-05"},{"lineNumber":352,"author":{"gitId":"Jerome-j"},"content":" ","lastModifiedDate":"2024-03-05"},{"lineNumber":353,"author":{"gitId":"Jerome-j"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"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":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":358,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":359,"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":360,"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":361,"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":362,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":363,"author":{"gitId":"Jerome-j"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":364,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":365,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":366,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":367,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":368,"author":{"gitId":"Jerome-j"},"content":"* **Mainstream OS**: Windows, Linux, Unix, macOS","lastModifiedDate":"2024-03-05"},{"lineNumber":369,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":370,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":371,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":372,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":373,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":374,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":375,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":376,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":377,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":378,"author":{"gitId":"-"},"content":"**Note:** These instructions only provide a starting point for testers to work on;","lastModifiedDate":"2023-09-12"},{"lineNumber":379,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":380,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":381,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":382,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":383,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":384,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":385,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":386,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":387,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":388,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":389,"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":390,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":391,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":392,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":393,"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":394,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":395,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":396,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","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"},{"lineNumber":399,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":400,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":401,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":402,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":403,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":404,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":405,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":406,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":407,"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":408,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":409,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":410,"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":411,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":412,"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":413,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":414,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":415,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":416,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":417,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":418,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":419,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":420,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":421,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":422,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":423,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"Jerome-j":51,"-":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://https://github.com/AY2324S2-CS2103-F08-2/tp/workflows/Java%20CI/badge.svg)](https://https://github.com/AY2324S2-CS2103-F08-2/tp/actions)","lastModifiedDate":"2024-03-05"},{"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}}] diff --git a/AY2324S2-CS2103-F08-2_tp_master/commits.json b/AY2324S2-CS2103-F08-2_tp_master/commits.json index 903ed0ae..0208b42e 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":{}}]}],"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":{}}]}],"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":{}}]}],"vnnamng":[]},"authorFileTypeContributionMap":{"caitlyntang":{"docs":50,"functional-code":0,"test-code":0},"Jerome-j":{"docs":107,"functional-code":0,"test-code":0},"tankh99":{"docs":94,"functional-code":0,"test-code":0},"vnnamng":{"docs":0,"functional-code":0,"test-code":0}},"authorContributionVariance":{"caitlyntang":222.75,"Jerome-j":752.3542,"tankh99":412.90967,"vnnamng":0.0},"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":{}}]}],"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":{}}]}],"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":{}}]}],"vnnamng":[]},"authorFileTypeContributionMap":{"caitlyntang":{"docs":50,"functional-code":0,"test-code":0},"Jerome-j":{"docs":107,"functional-code":0,"test-code":0},"tankh99":{"docs":97,"functional-code":0,"test-code":0},"vnnamng":{"docs":0,"functional-code":0,"test-code":0}},"authorContributionVariance":{"caitlyntang":207.05324,"Jerome-j":705.13605,"tankh99":433.51477,"vnnamng":0.0},"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-3_tp_master/authorship.json b/AY2324S2-CS2103-F08-3_tp_master/authorship.json index 64c3e0fd..b145bf15 100644 --- a/AY2324S2-CS2103-F08-3_tp_master/authorship.json +++ b/AY2324S2-CS2103-F08-3_tp_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"Pluiexo"},"content":"# StaffConnect","lastModifiedDate":"2024-02-24"},{"lineNumber":2,"author":{"gitId":"Pluiexo"},"content":"","lastModifiedDate":"2024-02-24"},{"lineNumber":3,"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":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**.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"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":{"Pluiexo":2,"-":14}}] +[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"Pluiexo"},"content":"# StaffConnect","lastModifiedDate":"2024-02-24"},{"lineNumber":2,"author":{"gitId":"Pluiexo"},"content":"","lastModifiedDate":"2024-02-24"},{"lineNumber":3,"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":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**.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"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":{"Pluiexo":2,"-":14}},{"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":"whitesnowx"},"content":"### Calista Wong","lastModifiedDate":"2024-03-06"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"whitesnowx"},"content":"\u003cimg src\u003d\"images/calistaWong.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-06"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"whitesnowx"},"content":"[[github](https://github.com/whitesnowx)]","lastModifiedDate":"2024-03-06"},{"lineNumber":27,"author":{"gitId":"whitesnowx"},"content":"[[portfolio](team/calistaWong.md)]","lastModifiedDate":"2024-03-06"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":29,"author":{"gitId":"whitesnowx"},"content":"* Role: Developer","lastModifiedDate":"2024-03-06"},{"lineNumber":30,"author":{"gitId":"whitesnowx"},"content":"* Responsibilities: Documentation and organisation","lastModifiedDate":"2024-03-06"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"iynixil"},"content":"### Li Xinyi ","lastModifiedDate":"2024-03-06"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"iynixil"},"content":"\u003cimg src\u003d\"images/iynixil.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-06"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"iynixil"},"content":"[[github](http://github.com/iynixil)] [[portfolio](team/iynixil.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":"iynixil"},"content":"* Responsibilities: Documentation Quality Assurance","lastModifiedDate":"2024-03-06"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":41,"author":{"gitId":"-"},"content":"### Jean Doe","lastModifiedDate":"2020-06-17"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/johndoe.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2020-06-17"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":"[[github](http://github.com/johndoe)]","lastModifiedDate":"2020-06-17"},{"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":"-"},"content":"* Responsibilities: Dev Ops + Threading","lastModifiedDate":"2020-05-23"},{"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":{"iynixil":4,"whitesnowx":6,"-":49}},{"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":"iynixil"},"content":"* This developer guide is adapted from [AB-3 Developer Guide](https://se-education.org/addressbook-level3/DeveloperGuide.html).","lastModifiedDate":"2024-03-06"},{"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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"content":"Classes used by multiple components are in the `seedu.addressbook.commons` package.","lastModifiedDate":"2020-05-23"},{"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":"-"},"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":163,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":164,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#commit()` — Saves the current address book state in its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":165,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#undo()` — Restores the previous address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":166,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#redo()` — Restores a previously undone address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":167,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":168,"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":210,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":211,"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":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":"-"},"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":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":"-"},"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":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":"iynixil"},"content":"Bob is a 22 year old NUS SOC student who often struggles with finding details about his professors\u0027 and tutors\u0027 consultation hours.","lastModifiedDate":"2024-03-06"},{"lineNumber":266,"author":{"gitId":"iynixil"},"content":"He prefers certain professors and tutors but often misplaces their contact information","lastModifiedDate":"2024-03-06"},{"lineNumber":267,"author":{"gitId":"iynixil"},"content":"as such information can be hard to find online. He also has difficulty identifying his professors and changing tutors.","lastModifiedDate":"2024-03-06"},{"lineNumber":268,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":269,"author":{"gitId":"iynixil"},"content":"**Value proposition**:","lastModifiedDate":"2024-03-06"},{"lineNumber":270,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":271,"author":{"gitId":"iynixil"},"content":"StaffConnect offers convenience and efficiency for a forgetful tech-savvy student.","lastModifiedDate":"2024-03-06"},{"lineNumber":272,"author":{"gitId":"iynixil"},"content":"StaffConnect allows users to easily identify and connect with educators by providing visual cues alongside their contact details, supported by an easy-to-use filtering system.","lastModifiedDate":"2024-03-06"},{"lineNumber":273,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":274,"author":{"gitId":"-"},"content":"### User stories","lastModifiedDate":"2020-06-07"},{"lineNumber":275,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":276,"author":{"gitId":"-"},"content":"Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unlikely to have) - `*`","lastModifiedDate":"2020-05-23"},{"lineNumber":277,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":278,"author":{"gitId":"-"},"content":"| Priority | As a …​ | I want to …​ | So that I can…​ |","lastModifiedDate":"2020-05-23"},{"lineNumber":279,"author":{"gitId":"-"},"content":"| -------- | ------------------------------------------ | ------------------------------ | ---------------------------------------------------------------------- |","lastModifiedDate":"2020-05-23"},{"lineNumber":280,"author":{"gitId":"iynixil"},"content":"| `* * *` | sociable user | save a contact\u0027s name, email, phone number, title in one line | save time per entry |","lastModifiedDate":"2024-03-06"},{"lineNumber":281,"author":{"gitId":"iynixil"},"content":"| `* * *` | disorganised student | store a professor\u0027s name | recall how to address the professor |","lastModifiedDate":"2024-03-06"},{"lineNumber":282,"author":{"gitId":"iynixil"},"content":"| `* * *` | forgetful user | store a professor\u0027s faculty | see the faculty that a professor belongs to |","lastModifiedDate":"2024-03-06"},{"lineNumber":283,"author":{"gitId":"iynixil"},"content":"| `* * *` | student who get lost easily | view the locations of my meetings/classes | search the locations for my meetings easily |","lastModifiedDate":"2024-03-06"},{"lineNumber":284,"author":{"gitId":"iynixil"},"content":"| `* * *` | disorganised student | store a professor\u0027s consultation hours | arrange times to meet my professor for consultation |","lastModifiedDate":"2024-03-06"},{"lineNumber":285,"author":{"gitId":"iynixil"},"content":"| `* * *` | slow reader | filter through contact entry by their name | not waste time in finding a specific contact/s and access their info easily |","lastModifiedDate":"2024-03-06"},{"lineNumber":286,"author":{"gitId":"iynixil"},"content":"| `* * *` | slow reader | filter through contact entry by their availability | not waste time in finding a specific contact/s and access their info easily |","lastModifiedDate":"2024-03-06"},{"lineNumber":287,"author":{"gitId":"iynixil"},"content":"| `* * *` | slow reader | filter through contact entry by their module | not waste time in finding a specific contact/s and access their info easily |","lastModifiedDate":"2024-03-06"},{"lineNumber":288,"author":{"gitId":"iynixil"},"content":"| `* * *` | disorganised student | store the modules a professor is teaching | contact the professors who teach a module which I am currently taking |","lastModifiedDate":"2024-03-06"},{"lineNumber":289,"author":{"gitId":"iynixil"},"content":"| `* * *` | slow reader | filter through contact entry by their module | not waste time in finding a specific contact/s and access their info easily |","lastModifiedDate":"2024-03-06"},{"lineNumber":290,"author":{"gitId":"iynixil"},"content":"| `* * *` | forgetful user | filter the professors by their faculty or the course they teach | not waste time in finding a specific contact/s and access their info easily |","lastModifiedDate":"2024-03-06"},{"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":"-"},"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":297,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":298,"author":{"gitId":"-"},"content":"**Use case: Delete a person**","lastModifiedDate":"2020-05-23"},{"lineNumber":299,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":300,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2020-05-23"},{"lineNumber":301,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":302,"author":{"gitId":"-"},"content":"1. User requests to list persons","lastModifiedDate":"2020-05-23"},{"lineNumber":303,"author":{"gitId":"-"},"content":"2. AddressBook shows a list of persons","lastModifiedDate":"2020-05-23"},{"lineNumber":304,"author":{"gitId":"-"},"content":"3. User requests to delete a specific person in the list","lastModifiedDate":"2020-05-23"},{"lineNumber":305,"author":{"gitId":"-"},"content":"4. AddressBook deletes the person","lastModifiedDate":"2020-05-23"},{"lineNumber":306,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":307,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":308,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":309,"author":{"gitId":"-"},"content":"**Extensions**","lastModifiedDate":"2020-05-23"},{"lineNumber":310,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":311,"author":{"gitId":"-"},"content":"* 2a. The list is empty.","lastModifiedDate":"2020-05-23"},{"lineNumber":312,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":313,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":314,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":315,"author":{"gitId":"-"},"content":"* 3a. The given index is invalid.","lastModifiedDate":"2020-05-23"},{"lineNumber":316,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":317,"author":{"gitId":"-"},"content":" * 3a1. AddressBook shows an error message.","lastModifiedDate":"2020-05-23"},{"lineNumber":318,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":319,"author":{"gitId":"-"},"content":" Use case resumes at step 2.","lastModifiedDate":"2020-05-23"},{"lineNumber":320,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":321,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":322,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":323,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":324,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":325,"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":326,"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":327,"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":328,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":329,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":330,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":331,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":332,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":333,"author":{"gitId":"-"},"content":"* **Mainstream OS**: Windows, Linux, Unix, MacOS","lastModifiedDate":"2024-02-09"},{"lineNumber":334,"author":{"gitId":"-"},"content":"* **Private contact detail**: A contact detail that is not meant to be shared with others","lastModifiedDate":"2020-05-23"},{"lineNumber":335,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":336,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":337,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":338,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":339,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":340,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":341,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":342,"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":343,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":344,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":345,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":346,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":347,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":348,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":349,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":350,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":351,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":352,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":353,"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":354,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":355,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":356,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":357,"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":358,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":359,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":360,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","lastModifiedDate":"2020-05-23"},{"lineNumber":361,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":362,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":363,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":364,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":365,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":366,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":367,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":368,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":369,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":370,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":371,"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":372,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":373,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":374,"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":375,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":376,"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":377,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":378,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":379,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":380,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":381,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":382,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":383,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":384,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":385,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":386,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":387,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"iynixil":18,"-":369}},{"path":"docs/Documentation.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: Documentation guide","lastModifiedDate":"2020-06-07"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"whitesnowx"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":7,"author":{"gitId":"whitesnowx"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":8,"author":{"gitId":"-"},"content":"**Setting up and maintaining the project website:**","lastModifiedDate":"2020-06-17"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":10,"author":{"gitId":"-"},"content":"* We use [**Jekyll**](https://jekyllrb.com/) to manage documentation.","lastModifiedDate":"2020-06-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":"* The `docs/` folder is used for documentation.","lastModifiedDate":"2020-06-17"},{"lineNumber":12,"author":{"gitId":"-"},"content":"* To learn how set it up and maintain the project website, follow the guide [_[se-edu/guides] **Using Jekyll for project documentation**_](https://se-education.org/guides/tutorials/jekyll.html).","lastModifiedDate":"2020-06-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":"* Note these points when adapting the documentation to a different project/product:","lastModifiedDate":"2021-07-30"},{"lineNumber":14,"author":{"gitId":"-"},"content":" * The \u0027Site-wide settings\u0027 section of the page linked above has information on how to update site-wide elements such as the top navigation bar.","lastModifiedDate":"2021-07-30"},{"lineNumber":15,"author":{"gitId":"-"},"content":" * :bulb: In addition to updating content files, you might have to update the config files `docs\\_config.yml` and `docs\\_sass\\minima\\_base.scss` (which contains a reference to `AB-3` that comes into play when converting documentation pages to PDF format).","lastModifiedDate":"2021-07-30"},{"lineNumber":16,"author":{"gitId":"-"},"content":"* If you are using Intellij for editing documentation files, you can consider enabling \u0027soft wrapping\u0027 for `*.md` files, as explained in [_[se-edu/guides] **Intellij IDEA: Useful settings**_](https://se-education.org/guides/tutorials/intellijUsefulSettings.html#enabling-soft-wrapping)","lastModifiedDate":"2021-07-30"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"**Style guidance:**","lastModifiedDate":"2020-06-17"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"* Follow the [**_Google developer documentation style guide_**](https://developers.google.com/style).","lastModifiedDate":"2020-06-17"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"-"},"content":"* Also relevant is the [_[se-edu/guides] **Markdown coding standard**_](https://se-education.org/guides/conventions/markdown.html)","lastModifiedDate":"2020-06-17"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":25,"author":{"gitId":"-"},"content":"**Diagrams:**","lastModifiedDate":"2020-06-17"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":27,"author":{"gitId":"-"},"content":"* See the [_[se-edu/guides] **Using PlantUML**_](https://se-education.org/guides/tutorials/plantUml.html)","lastModifiedDate":"2020-06-17"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":29,"author":{"gitId":"-"},"content":"**Converting a document to the PDF format:**","lastModifiedDate":"2020-06-07"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"-"},"content":"* See the guide [_[se-edu/guides] **Saving web documents as PDF files**_](https://se-education.org/guides/tutorials/savingPdf.html)","lastModifiedDate":"2020-06-07"}],"authorContributionMap":{"whitesnowx":2,"-":29}},{"path":"docs/team/calistaWong.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"whitesnowx"},"content":"---","lastModifiedDate":"2024-03-06"},{"lineNumber":2,"author":{"gitId":"whitesnowx"},"content":"layout: page","lastModifiedDate":"2024-03-06"},{"lineNumber":3,"author":{"gitId":"whitesnowx"},"content":"title: John Doe\u0027s Project Portfolio Page","lastModifiedDate":"2024-03-06"},{"lineNumber":4,"author":{"gitId":"whitesnowx"},"content":"---","lastModifiedDate":"2024-03-06"},{"lineNumber":5,"author":{"gitId":"whitesnowx"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":6,"author":{"gitId":"whitesnowx"},"content":"### Project: AddressBook Level 3","lastModifiedDate":"2024-03-06"},{"lineNumber":7,"author":{"gitId":"whitesnowx"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":8,"author":{"gitId":"whitesnowx"},"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":"whitesnowx"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":10,"author":{"gitId":"whitesnowx"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-03-06"},{"lineNumber":11,"author":{"gitId":"whitesnowx"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":12,"author":{"gitId":"whitesnowx"},"content":"* **New Feature**: Added the ability to undo/redo previous commands.","lastModifiedDate":"2024-03-06"},{"lineNumber":13,"author":{"gitId":"whitesnowx"},"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":"whitesnowx"},"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":"whitesnowx"},"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":"whitesnowx"},"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":"whitesnowx"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":18,"author":{"gitId":"whitesnowx"},"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":"whitesnowx"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":20,"author":{"gitId":"whitesnowx"},"content":"* **Code contributed**: [RepoSense link]()","lastModifiedDate":"2024-03-06"},{"lineNumber":21,"author":{"gitId":"whitesnowx"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":22,"author":{"gitId":"whitesnowx"},"content":"* **Project management**:","lastModifiedDate":"2024-03-06"},{"lineNumber":23,"author":{"gitId":"whitesnowx"},"content":" * Managed releases `v1.3` - `v1.5rc` (3 releases) on GitHub","lastModifiedDate":"2024-03-06"},{"lineNumber":24,"author":{"gitId":"whitesnowx"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":25,"author":{"gitId":"whitesnowx"},"content":"* **Enhancements to existing features**:","lastModifiedDate":"2024-03-06"},{"lineNumber":26,"author":{"gitId":"whitesnowx"},"content":" * Updated the GUI color scheme (Pull requests [\\#33](), [\\#34]())","lastModifiedDate":"2024-03-06"},{"lineNumber":27,"author":{"gitId":"whitesnowx"},"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":"whitesnowx"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":29,"author":{"gitId":"whitesnowx"},"content":"* **Documentation**:","lastModifiedDate":"2024-03-06"},{"lineNumber":30,"author":{"gitId":"whitesnowx"},"content":" * User Guide:","lastModifiedDate":"2024-03-06"},{"lineNumber":31,"author":{"gitId":"whitesnowx"},"content":" * Added documentation for the features `delete` and `find` [\\#72]()","lastModifiedDate":"2024-03-06"},{"lineNumber":32,"author":{"gitId":"whitesnowx"},"content":" * Did cosmetic tweaks to existing documentation of features `clear`, `exit`: [\\#74]()","lastModifiedDate":"2024-03-06"},{"lineNumber":33,"author":{"gitId":"whitesnowx"},"content":" * Developer Guide:","lastModifiedDate":"2024-03-06"},{"lineNumber":34,"author":{"gitId":"whitesnowx"},"content":" * Added implementation details of the `delete` feature.","lastModifiedDate":"2024-03-06"},{"lineNumber":35,"author":{"gitId":"whitesnowx"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":36,"author":{"gitId":"whitesnowx"},"content":"* **Community**:","lastModifiedDate":"2024-03-06"},{"lineNumber":37,"author":{"gitId":"whitesnowx"},"content":" * PRs reviewed (with non-trivial review comments): [\\#12](), [\\#32](), [\\#19](), [\\#42]()","lastModifiedDate":"2024-03-06"},{"lineNumber":38,"author":{"gitId":"whitesnowx"},"content":" * Contributed to forum discussions (examples: [1](), [2](), [3](), [4]())","lastModifiedDate":"2024-03-06"},{"lineNumber":39,"author":{"gitId":"whitesnowx"},"content":" * Reported bugs and suggestions for other teams in the class (examples: [1](), [2](), [3]())","lastModifiedDate":"2024-03-06"},{"lineNumber":40,"author":{"gitId":"whitesnowx"},"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":"whitesnowx"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":42,"author":{"gitId":"whitesnowx"},"content":"* **Tools**:","lastModifiedDate":"2024-03-06"},{"lineNumber":43,"author":{"gitId":"whitesnowx"},"content":" * Integrated a third party library (Natty) to the project ([\\#42]())","lastModifiedDate":"2024-03-06"},{"lineNumber":44,"author":{"gitId":"whitesnowx"},"content":" * Integrated a new Github plugin (CircleCI) to the team repo","lastModifiedDate":"2024-03-06"},{"lineNumber":45,"author":{"gitId":"whitesnowx"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":46,"author":{"gitId":"whitesnowx"},"content":"* _{you can add/remove categories in the list above}_","lastModifiedDate":"2024-03-06"}],"authorContributionMap":{"whitesnowx":46}},{"path":"docs/team/iynixil.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"iynixil"},"content":"---","lastModifiedDate":"2024-03-06"},{"lineNumber":2,"author":{"gitId":"iynixil"},"content":"layout: page","lastModifiedDate":"2024-03-06"},{"lineNumber":3,"author":{"gitId":"iynixil"},"content":"title: John Doe\u0027s Project Portfolio Page","lastModifiedDate":"2024-03-06"},{"lineNumber":4,"author":{"gitId":"iynixil"},"content":"---","lastModifiedDate":"2024-03-06"},{"lineNumber":5,"author":{"gitId":"iynixil"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":6,"author":{"gitId":"iynixil"},"content":"### Project: AddressBook Level 3","lastModifiedDate":"2024-03-06"},{"lineNumber":7,"author":{"gitId":"iynixil"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":8,"author":{"gitId":"iynixil"},"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":"iynixil"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":10,"author":{"gitId":"iynixil"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-03-06"},{"lineNumber":11,"author":{"gitId":"iynixil"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":12,"author":{"gitId":"iynixil"},"content":"* **New Feature**: Added the ability to undo/redo previous commands.","lastModifiedDate":"2024-03-06"},{"lineNumber":13,"author":{"gitId":"iynixil"},"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":"iynixil"},"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":"iynixil"},"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":"iynixil"},"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":"iynixil"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":18,"author":{"gitId":"iynixil"},"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":"iynixil"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":20,"author":{"gitId":"iynixil"},"content":"* **Code contributed**: [RepoSense link]()","lastModifiedDate":"2024-03-06"},{"lineNumber":21,"author":{"gitId":"iynixil"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":22,"author":{"gitId":"iynixil"},"content":"* **Project management**:","lastModifiedDate":"2024-03-06"},{"lineNumber":23,"author":{"gitId":"iynixil"},"content":" * Managed releases `v1.3` - `v1.5rc` (3 releases) on GitHub","lastModifiedDate":"2024-03-06"},{"lineNumber":24,"author":{"gitId":"iynixil"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":25,"author":{"gitId":"iynixil"},"content":"* **Enhancements to existing features**:","lastModifiedDate":"2024-03-06"},{"lineNumber":26,"author":{"gitId":"iynixil"},"content":" * Updated the GUI color scheme (Pull requests [\\#33](), [\\#34]())","lastModifiedDate":"2024-03-06"},{"lineNumber":27,"author":{"gitId":"iynixil"},"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":"iynixil"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":29,"author":{"gitId":"iynixil"},"content":"* **Documentation**:","lastModifiedDate":"2024-03-06"},{"lineNumber":30,"author":{"gitId":"iynixil"},"content":" * User Guide:","lastModifiedDate":"2024-03-06"},{"lineNumber":31,"author":{"gitId":"iynixil"},"content":" * Added documentation for the features `delete` and `find` [\\#72]()","lastModifiedDate":"2024-03-06"},{"lineNumber":32,"author":{"gitId":"iynixil"},"content":" * Did cosmetic tweaks to existing documentation of features `clear`, `exit`: [\\#74]()","lastModifiedDate":"2024-03-06"},{"lineNumber":33,"author":{"gitId":"iynixil"},"content":" * Developer Guide:","lastModifiedDate":"2024-03-06"},{"lineNumber":34,"author":{"gitId":"iynixil"},"content":" * Added implementation details of the `delete` feature.","lastModifiedDate":"2024-03-06"},{"lineNumber":35,"author":{"gitId":"iynixil"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":36,"author":{"gitId":"iynixil"},"content":"* **Community**:","lastModifiedDate":"2024-03-06"},{"lineNumber":37,"author":{"gitId":"iynixil"},"content":" * PRs reviewed (with non-trivial review comments): [\\#12](), [\\#32](), [\\#19](), [\\#42]()","lastModifiedDate":"2024-03-06"},{"lineNumber":38,"author":{"gitId":"iynixil"},"content":" * Contributed to forum discussions (examples: [1](), [2](), [3](), [4]())","lastModifiedDate":"2024-03-06"},{"lineNumber":39,"author":{"gitId":"iynixil"},"content":" * Reported bugs and suggestions for other teams in the class (examples: [1](), [2](), [3]())","lastModifiedDate":"2024-03-06"},{"lineNumber":40,"author":{"gitId":"iynixil"},"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":"iynixil"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":42,"author":{"gitId":"iynixil"},"content":"* **Tools**:","lastModifiedDate":"2024-03-06"},{"lineNumber":43,"author":{"gitId":"iynixil"},"content":" * Integrated a third party library (Natty) to the project ([\\#42]())","lastModifiedDate":"2024-03-06"},{"lineNumber":44,"author":{"gitId":"iynixil"},"content":" * Integrated a new Github plugin (CircleCI) to the team repo","lastModifiedDate":"2024-03-06"},{"lineNumber":45,"author":{"gitId":"iynixil"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":46,"author":{"gitId":"iynixil"},"content":"* _{you can add/remove categories in the list above}_","lastModifiedDate":"2024-03-06"}],"authorContributionMap":{"iynixil":46}}] diff --git a/AY2324S2-CS2103-F08-3_tp_master/commits.json b/AY2324S2-CS2103-F08-3_tp_master/commits.json index 35e5bf69..b6dde111 100644 --- a/AY2324S2-CS2103-F08-3_tp_master/commits.json +++ b/AY2324S2-CS2103-F08-3_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"tsulim":[],"iynixil":[],"JerryWang0000":[],"Pluiexo":[{"date":"2024-02-24","commitResults":[{"hash":"1b288a389a0e1f55e25dd452836bb805c77fa4a2","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":0}}},{"hash":"0924dab2e37221f49e3959f250a1b22c8ab7011d","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":1}}}]}],"whitesnowx":[]},"authorFileTypeContributionMap":{"tsulim":{"docs":0,"functional-code":0,"test-code":0},"iynixil":{"docs":0,"functional-code":0,"test-code":0},"JerryWang0000":{"docs":0,"functional-code":0,"test-code":0},"Pluiexo":{"docs":2,"functional-code":0,"test-code":0},"whitesnowx":{"docs":0,"functional-code":0,"test-code":0}},"authorContributionVariance":{"tsulim":0.0,"iynixil":0.0,"JerryWang0000":0.0,"Pluiexo":4.0,"whitesnowx":0.0},"authorDisplayNameMap":{"tsulim":"CS2103-F08-3 LIM .. JIA","iynixil":"CS2103-F08-3 LI X..INYI","JerryWang0000":"CS2103-F08-3 WANG..HUAI","Pluiexo":"CS2103-F08-3 NORT.. XUN","whitesnowx":"CS2103-F08-3 CALI..PING"}} +{"authorDailyContributionsMap":{"tsulim":[{"date":"2024-03-06","commitResults":[{"hash":"496b682de95e9697ae65e6b6b4263ec8f8386974","isMergeCommit":true,"messageTitle":"Merge pull request #30 from iynixil/update-aboutus","messageBody":"","fileTypesAndContributionMap":{}}]}],"iynixil":[{"date":"2024-03-06","commitResults":[{"hash":"b69e5d7a0a4211e83bb7a59bc9067b548f1c690c","isMergeCommit":false,"messageTitle":"Update DG: Target user profile, value proposition, user stories","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":19,"deletions":14}}},{"hash":"46a6c5a2e602258f9ebc30e40bc4c66d11366619","isMergeCommit":true,"messageTitle":"Merge pull request #29 from whitesnowx/add-calistaWong-info","messageBody":"add calistawong information into about us","fileTypesAndContributionMap":{}},{"hash":"28d30e307842f7cae25a6b05730d82dbff822e32","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"df4173e5996779ec0b3a1ecf59a7904e4f6d93bf","isMergeCommit":false,"messageTitle":"Update AboutUs: Add iynixil","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":50,"deletions":4}}}]}],"JerryWang0000":[],"Pluiexo":[{"date":"2024-02-24","commitResults":[{"hash":"1b288a389a0e1f55e25dd452836bb805c77fa4a2","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":0}}},{"hash":"0924dab2e37221f49e3959f250a1b22c8ab7011d","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":1}}}]}],"whitesnowx":[{"date":"2024-03-06","commitResults":[{"hash":"089a34f600f78b52b02650fd7d490561c10aad61","isMergeCommit":true,"messageTitle":"Merge pull request #28 from iynixil/update-dg","messageBody":"Update DG: Target user profile, value proposition, user stories","fileTypesAndContributionMap":{}},{"hash":"fa5c7a7fd22078d75fb2bb45a69495c1b2644ef4","isMergeCommit":false,"messageTitle":"add calistawong information into about us","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":54,"deletions":6}}}]}]},"authorFileTypeContributionMap":{"tsulim":{"docs":0,"functional-code":0,"test-code":0},"iynixil":{"docs":68,"functional-code":0,"test-code":0},"JerryWang0000":{"docs":0,"functional-code":0,"test-code":0},"Pluiexo":{"docs":2,"functional-code":0,"test-code":0},"whitesnowx":{"docs":54,"functional-code":0,"test-code":0}},"authorContributionVariance":{"tsulim":0.0,"iynixil":537.4438,"JerryWang0000":0.0,"Pluiexo":1.1360943,"whitesnowx":255.62132},"authorDisplayNameMap":{"tsulim":"CS2103-F08-3 LIM .. JIA","iynixil":"CS2103-F08-3 LI X..INYI","JerryWang0000":"CS2103-F08-3 WANG..HUAI","Pluiexo":"CS2103-F08-3 NORT.. XUN","whitesnowx":"CS2103-F08-3 CALI..PING"}} diff --git a/AY2324S2-CS2103-F09-2_tp_master/authorship.json b/AY2324S2-CS2103-F09-2_tp_master/authorship.json index 34b9a39e..3451d2fd 100644 --- a/AY2324S2-CS2103-F09-2_tp_master/authorship.json +++ b/AY2324S2-CS2103-F09-2_tp_master/authorship.json @@ -1 +1 @@ -[{"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":"-"},"content":"### Johnny Doe","lastModifiedDate":"2020-05-23"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/johndoe.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2020-06-17"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":"[[github](http://github.com/johndoe)] [[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-06-17"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"-"},"content":"* Responsibilities: Data","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":33,"author":{"gitId":"guohuang88"},"content":"### Li Guohuang","lastModifiedDate":"2024-03-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":35,"author":{"gitId":"guohuang88"},"content":"\u003cimg src\u003d\"images/guohuang88.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":37,"author":{"gitId":"guohuang88"},"content":"[[github](http://github.com/guohuang88)]","lastModifiedDate":"2024-03-05"},{"lineNumber":38,"author":{"gitId":"guohuang88"},"content":"[[portfolio](https://ay2324s2-cs2103-f09-2.github.io/tp/)]","lastModifiedDate":"2024-03-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":40,"author":{"gitId":"guohuang88"},"content":"* Role: Testing","lastModifiedDate":"2024-03-05"},{"lineNumber":41,"author":{"gitId":"guohuang88"},"content":"* Responsibilities: Ensure project is tested properly and on time.","lastModifiedDate":"2024-03-05"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"ZhiWei1010"},"content":"### Tan Zhi Wei","lastModifiedDate":"2024-03-04"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"ZhiWei1010"},"content":"\u003cimg src\u003d\"images/zhiwei1010.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"ZhiWei1010"},"content":"[[github](http://github.com/ZhiWei1010)]","lastModifiedDate":"2024-03-04"},{"lineNumber":48,"author":{"gitId":"ZhiWei1010"},"content":"[[portfolio](https://ay2324s2-cs2103-f09-2.github.io/tp/)]","lastModifiedDate":"2024-03-04"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":50,"author":{"gitId":"ZhiWei1010"},"content":"* Role: Deliverables and deadlines","lastModifiedDate":"2024-03-04"},{"lineNumber":51,"author":{"gitId":"ZhiWei1010"},"content":"* Responsibilities: Ensure project deliverables are done on time and in the right format.","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"guohuang88":6,"ZhiWei1010":6,"NeoHW":5,"-":34}},{"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":"NeoHW"},"content":"* If you are interested in using PatientSync, head over to the [_Quick Start_ section of the **User Guide**](UserGuide.html#quick-start).","lastModifiedDate":"2024-03-06"},{"lineNumber":17,"author":{"gitId":"NeoHW"},"content":"* If you are interested about developing PatientSync, the [**Developer Guide**](DeveloperGuide.html) is a good place to start.","lastModifiedDate":"2024-03-06"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"-"},"content":"**Acknowledgements**","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"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":5,"-":17}}] +[{"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":"-"},"content":"### Johnny Doe","lastModifiedDate":"2020-05-23"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/johndoe.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2020-06-17"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":"[[github](http://github.com/johndoe)] [[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-06-17"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"-"},"content":"* Responsibilities: Data","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":33,"author":{"gitId":"guohuang88"},"content":"### Li Guohuang","lastModifiedDate":"2024-03-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":35,"author":{"gitId":"guohuang88"},"content":"\u003cimg src\u003d\"images/guohuang88.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":37,"author":{"gitId":"guohuang88"},"content":"[[github](http://github.com/guohuang88)]","lastModifiedDate":"2024-03-05"},{"lineNumber":38,"author":{"gitId":"guohuang88"},"content":"[[portfolio](https://ay2324s2-cs2103-f09-2.github.io/tp/)]","lastModifiedDate":"2024-03-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":40,"author":{"gitId":"guohuang88"},"content":"* Role: Testing","lastModifiedDate":"2024-03-05"},{"lineNumber":41,"author":{"gitId":"guohuang88"},"content":"* Responsibilities: Ensure project is tested properly and on time.","lastModifiedDate":"2024-03-05"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"ZhiWei1010"},"content":"### Tan Zhi Wei","lastModifiedDate":"2024-03-04"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"ZhiWei1010"},"content":"\u003cimg src\u003d\"images/zhiwei1010.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"ZhiWei1010"},"content":"[[github](http://github.com/ZhiWei1010)]","lastModifiedDate":"2024-03-04"},{"lineNumber":48,"author":{"gitId":"ZhiWei1010"},"content":"[[portfolio](https://ay2324s2-cs2103-f09-2.github.io/tp/)]","lastModifiedDate":"2024-03-04"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":50,"author":{"gitId":"ZhiWei1010"},"content":"* Role: Deliverables and deadlines","lastModifiedDate":"2024-03-04"},{"lineNumber":51,"author":{"gitId":"ZhiWei1010"},"content":"* Responsibilities: Ensure project deliverables are done on time and in the right format.","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"guohuang88":6,"ZhiWei1010":6,"NeoHW":5,"-":34}},{"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 28014da4..9ce421c7 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}}}]}],"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":{}}]}],"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}}}]}],"choowengyan":[],"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":{}}]}]},"authorFileTypeContributionMap":{"guohuang88":{"docs":6,"functional-code":0,"test-code":0},"SherisseTJW":{"docs":0,"functional-code":0,"test-code":0},"ZhiWei1010":{"docs":6,"functional-code":0,"test-code":0},"choowengyan":{"docs":0,"functional-code":0,"test-code":0},"NeoHW":{"docs":11,"functional-code":0,"test-code":0}},"authorContributionVariance":{"guohuang88":10.224853,"SherisseTJW":0.0,"ZhiWei1010":10.224852,"choowengyan":0.0,"NeoHW":31.6213},"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}}}]}],"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":{}}]}],"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}}}]}],"choowengyan":[],"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":{}}]}]},"authorFileTypeContributionMap":{"guohuang88":{"docs":6,"functional-code":0,"test-code":0},"SherisseTJW":{"docs":0,"functional-code":0,"test-code":0},"ZhiWei1010":{"docs":6,"functional-code":0,"test-code":0},"choowengyan":{"docs":0,"functional-code":0,"test-code":0},"NeoHW":{"docs":16,"functional-code":0,"test-code":0}},"authorContributionVariance":{"guohuang88":10.224853,"SherisseTJW":0.0,"ZhiWei1010":10.224852,"choowengyan":0.0,"NeoHW":54.059177},"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-F15-3_tp_master/authorship.json b/AY2324S2-CS2103-F15-3_tp_master/authorship.json index 175c13aa..148ed9bc 100644 --- a/AY2324S2-CS2103-F15-3_tp_master/authorship.json +++ b/AY2324S2-CS2103-F15-3_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) [![codecov](https://codecov.io/gh/AY2324S2-CS2103-F15-3/tp/graph/badge.svg?token\u003dNYM3SACDB7)](https://codecov.io/gh/AY2324S2-CS2103-F15-3/tp)","lastModifiedDate":"2024-02-19"},{"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":"-"},"content":"## HRConnect","lastModifiedDate":"2024-02-19"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-19"},{"lineNumber":7,"author":{"gitId":"lihaoquan"},"content":"HRConnect is designed for HR officers in tech startups, streamlining the management of external contacts.","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"lihaoquan"},"content":"It efficiently organizes contacts for potential hires, hiring agencies, and legal consultants, significantly","lastModifiedDate":"2024-02-26"},{"lineNumber":9,"author":{"gitId":"lihaoquan"},"content":"reducing the time spent searching for contact information, thereby optimizing the recruiting process.","lastModifiedDate":"2024-02-26"},{"lineNumber":10,"author":{"gitId":"lihaoquan"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"lihaoquan"},"content":"This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-02-26"}],"authorContributionMap":{"lihaoquan":5,"-":6}},{"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":"lihaoquan"},"content":"### Yong Yu Sian","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":14,"author":{"gitId":"lihaoquan"},"content":"\u003cimg src\u003d\"images/ys112.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"lihaoquan"},"content":"[[github](https://github.com/ys112)]","lastModifiedDate":"2024-02-26"},{"lineNumber":17,"author":{"gitId":"lihaoquan"},"content":"[[portfolio](team/ys112.md)]","lastModifiedDate":"2024-02-26"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"lihaoquan"},"content":"* Role: Software Engineer","lastModifiedDate":"2024-02-26"},{"lineNumber":20,"author":{"gitId":"lihaoquan"},"content":"* Responsibilities: Backend development","lastModifiedDate":"2024-02-26"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"YuvBindal"},"content":"### Yuv Bindal","lastModifiedDate":"2024-02-26"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"lihaoquan"},"content":"\u003cimg src\u003d\"images/yuvbindal.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"lihaoquan"},"content":"[[github](http://github.com/YuvBindal)]","lastModifiedDate":"2024-02-26"},{"lineNumber":27,"author":{"gitId":"lihaoquan"},"content":"[[portfolio](team/yuvbindal.md)]","lastModifiedDate":"2024-02-26"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":29,"author":{"gitId":"YuvBindal"},"content":"* Role: Software Engineer","lastModifiedDate":"2024-02-26"},{"lineNumber":30,"author":{"gitId":"lihaoquan"},"content":"* Responsibilities: Backend development","lastModifiedDate":"2024-02-26"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"lihaoquan"},"content":"### Lee Xin En","lastModifiedDate":"2024-02-26"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"lihaoquan"},"content":"\u003cimg src\u003d\"images/xinen26.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"lihaoquan"},"content":"[[github](http://github.com/xinen26)]","lastModifiedDate":"2024-02-26"},{"lineNumber":37,"author":{"gitId":"lihaoquan"},"content":"[[portfolio](team/xinen26.md)]","lastModifiedDate":"2024-02-26"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"lihaoquan"},"content":"* Role: Software Engineer","lastModifiedDate":"2024-02-26"},{"lineNumber":40,"author":{"gitId":"lihaoquan"},"content":"* Responsibilities: Backend development","lastModifiedDate":"2024-02-26"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"lihaoquan"},"content":"### Ho Wei Herng, Christopher","lastModifiedDate":"2024-02-26"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"lihaoquan"},"content":"\u003cimg src\u003d\"images/chrisho1341.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"lihaoquan"},"content":"[[github](http://github.com/ChrisHo1341)]","lastModifiedDate":"2024-02-26"},{"lineNumber":47,"author":{"gitId":"lihaoquan"},"content":"[[portfolio](team/chrisho1341.md)]","lastModifiedDate":"2024-02-26"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"lihaoquan"},"content":"* Role: Software Engineer","lastModifiedDate":"2024-02-26"},{"lineNumber":50,"author":{"gitId":"lihaoquan"},"content":"* Responsibilities: Backend development","lastModifiedDate":"2024-02-26"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"lihaoquan"},"content":"### Li Haoquan","lastModifiedDate":"2024-02-26"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"lihaoquan"},"content":"\u003cimg src\u003d\"images/lihaoquan.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":56,"author":{"gitId":"lihaoquan"},"content":"[[github](http://github.com/lihaoquan)]","lastModifiedDate":"2024-02-26"},{"lineNumber":57,"author":{"gitId":"lihaoquan"},"content":"[[portfolio](team/lihaoquan.md)]","lastModifiedDate":"2024-02-26"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":59,"author":{"gitId":"lihaoquan"},"content":"* Role: Software Engineer","lastModifiedDate":"2024-02-26"},{"lineNumber":60,"author":{"gitId":"lihaoquan"},"content":"* Responsibilities: Backend development, UI","lastModifiedDate":"2024-02-26"}],"authorContributionMap":{"lihaoquan":28,"YuvBindal":2,"-":30}},{"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":"ys112"},"content":"* This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-02-26"},{"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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"content":"Classes used by multiple components are in the `seedu.addressbook.commons` package.","lastModifiedDate":"2020-05-23"},{"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":"-"},"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":163,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":164,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#commit()` — Saves the current address book state in its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":165,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#undo()` — Restores the previous address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":166,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#redo()` — Restores a previously undone address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":167,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":168,"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":210,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":211,"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":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":"-"},"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":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":"-"},"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":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":"ys112"},"content":"**Target user profile**: HR officer for tech-related startup","lastModifiedDate":"2024-02-26"},{"lineNumber":264,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":265,"author":{"gitId":"ys112"},"content":"**Value proposition**:","lastModifiedDate":"2024-02-26"},{"lineNumber":266,"author":{"gitId":"ys112"},"content":"* Managing contacts for three main types of external liaisons: ","lastModifiedDate":"2024-02-26"},{"lineNumber":267,"author":{"gitId":"ys112"},"content":" * potential hires","lastModifiedDate":"2024-02-26"},{"lineNumber":268,"author":{"gitId":"ys112"},"content":" * hiring agencies","lastModifiedDate":"2024-02-26"},{"lineNumber":269,"author":{"gitId":"ys112"},"content":" * legal consultants","lastModifiedDate":"2024-02-26"},{"lineNumber":270,"author":{"gitId":"ys112"},"content":"* Reduce time spent on searching for relevant contacts for liaisons.","lastModifiedDate":"2024-02-26"},{"lineNumber":271,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":272,"author":{"gitId":"-"},"content":"### User stories","lastModifiedDate":"2020-06-07"},{"lineNumber":273,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":274,"author":{"gitId":"ys112"},"content":"Priorities: Essential (needed for basic functionality) - `Essential`, Typical (common needs) - `Typical`, Novel (good to have but not a need) - `Novel`, Out of Scope (not needed) - `Out of Scope`","lastModifiedDate":"2024-02-26"},{"lineNumber":275,"author":{"gitId":"ys112"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":276,"author":{"gitId":"ys112"},"content":"| As a/an ... | I can ... | So that ... | Priority (Essential, Typical, Novel, Out of Scope) |","lastModifiedDate":"2024-02-26"},{"lineNumber":277,"author":{"gitId":"ys112"},"content":"| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------- |----------------------------------------------------|","lastModifiedDate":"2024-02-26"},{"lineNumber":278,"author":{"gitId":"ys112"},"content":"| User | add new contacts | | Essential |","lastModifiedDate":"2024-02-26"},{"lineNumber":279,"author":{"gitId":"ys112"},"content":"| User | delete existing contacts | | Essential |","lastModifiedDate":"2024-02-26"},{"lineNumber":280,"author":{"gitId":"ys112"},"content":"| User | view existing contacts | | Essential |","lastModifiedDate":"2024-02-26"},{"lineNumber":281,"author":{"gitId":"ys112"},"content":"| HR professional | manage all my work contacts in one place, | I can efficiently communicate with recruitment agencies, candidates and other stakeholders | Essential |","lastModifiedDate":"2024-02-26"},{"lineNumber":282,"author":{"gitId":"ys112"},"content":"| User | update existing contacts | | Typical |","lastModifiedDate":"2024-02-26"},{"lineNumber":283,"author":{"gitId":"ys112"},"content":"| User | purge all curent data | I can get rid of sample/experimental data I while exploring the app | Typical |","lastModifiedDate":"2024-02-26"},{"lineNumber":284,"author":{"gitId":"ys112"},"content":"| HR Recruiter | filter through my contact list based on what stage of the hiring process the applicants are in | I can contact those who are shortlisted | Typical |","lastModifiedDate":"2024-02-26"},{"lineNumber":285,"author":{"gitId":"ys112"},"content":"| HR Recruiter | add tags to contacts to specify which roles they are applying for | I can keep them organized | Typical |","lastModifiedDate":"2024-02-26"},{"lineNumber":286,"author":{"gitId":"ys112"},"content":"| HR personnel | add notes or comments to individual contact entries | I can keep track of important additional information/interactions | Typical |","lastModifiedDate":"2024-02-26"},{"lineNumber":287,"author":{"gitId":"ys112"},"content":"| experienced HR professional | filter and identify candidates by tags | I can follow up with them promptly | Typical |","lastModifiedDate":"2024-02-26"},{"lineNumber":288,"author":{"gitId":"ys112"},"content":"| User | search through my contacts based on specific criteria | I can quickly find any information I need | Typical |","lastModifiedDate":"2024-02-26"},{"lineNumber":289,"author":{"gitId":"ys112"},"content":"| HR Recruiter | extract contacts into a separate address book | I can import them to the company database easily | Typical |","lastModifiedDate":"2024-02-26"},{"lineNumber":290,"author":{"gitId":"ys112"},"content":"| HR Recruiter | upload images to set profile pictures for my contacts | I can identify them when face to face | Typical |","lastModifiedDate":"2024-02-26"},{"lineNumber":291,"author":{"gitId":"ys112"},"content":"| first-time user | have an intuitive experience and can quickly understand its features and functionalities | I can start using it effectively without wasting time | Typical |","lastModifiedDate":"2024-02-26"},{"lineNumber":292,"author":{"gitId":"ys112"},"content":"| first-time user | can find clear instructions on how to use HRConnect | I can easily start managing my contacts using HRConnect | Typical |","lastModifiedDate":"2024-02-26"},{"lineNumber":293,"author":{"gitId":"ys112"},"content":"| HR Recruiter | Create new contacts with templates based on person (employees, intern, interviewee etc.) | | Novel |","lastModifiedDate":"2024-02-26"},{"lineNumber":294,"author":{"gitId":"ys112"},"content":"| long-time user | create shortcuts for tasks | I can save time on frequenty used functions | Novel |","lastModifiedDate":"2024-02-26"},{"lineNumber":295,"author":{"gitId":"ys112"},"content":"| User | receive notifications or reminders from HRConnect | I can be kept up to date with upcoming interviews, deadlines or follow-up tasks | Novel |","lastModifiedDate":"2024-02-26"},{"lineNumber":296,"author":{"gitId":"ys112"},"content":"| User | can conduct background checks on potential hires directly within HRConnect | I can find out the suitability of a candidate easily | Novel |","lastModifiedDate":"2024-02-26"},{"lineNumber":297,"author":{"gitId":"ys112"},"content":"| first-time user | easily import my data | it won\u0027t be intimidating and I won\u0027t give up on using it after my first use | Novel |","lastModifiedDate":"2024-02-26"},{"lineNumber":298,"author":{"gitId":"ys112"},"content":"| HR personnel | sync any information changes across different devices | I can update information efficiently and ensure that all data is up to date for my coworkers as well | Novel |","lastModifiedDate":"2024-02-26"},{"lineNumber":299,"author":{"gitId":"ys112"},"content":"| long-time user. | archive/hide unused contacts | I am not distracted by irrelevant data | Novel |","lastModifiedDate":"2024-02-26"},{"lineNumber":300,"author":{"gitId":"ys112"},"content":"| HR Recruiter | create custom automated processes for repetitive tasks | I can save time on such tasks | Novel |","lastModifiedDate":"2024-02-26"},{"lineNumber":301,"author":{"gitId":"ys112"},"content":"| potential user exploring the app | see the app populated with sample data | I can easily see the benefits of the app when frequently used | Novel |","lastModifiedDate":"2024-02-26"},{"lineNumber":302,"author":{"gitId":"ys112"},"content":"| HR personnel | keep track of the status of job applications or recruitment processes for each candidate | I can monitor progress and follow up as needed | Novel |","lastModifiedDate":"2024-02-26"},{"lineNumber":303,"author":{"gitId":"ys112"},"content":"| User | track the status of each potential hire in the recruitment process | I can take action as needed | Novel |","lastModifiedDate":"2024-02-26"},{"lineNumber":304,"author":{"gitId":"ys112"},"content":"| User | conduct surveys and collect feedback from specific groups within my contacts | I can easily conduct surveys as needed | Novel |","lastModifiedDate":"2024-02-26"},{"lineNumber":305,"author":{"gitId":"ys112"},"content":"| first-time user | access a brief tutorial on how to navigate HRConnect | I can quickly familiarize myself with its features and functions | Out of scope |","lastModifiedDate":"2024-02-26"},{"lineNumber":306,"author":{"gitId":"ys112"},"content":"| User | generate reports or analytics on hiring activities such as time-to-fill metrics, source of hire, and diversity statistics | I can easily access such information as needed | Out of scope |","lastModifiedDate":"2024-02-26"},{"lineNumber":307,"author":{"gitId":"ys112"},"content":"| User | integrate HRConnect with other HR systems or tools such as applicant tracking systems or payroll software | data exchange and workflows can be streamlined | Out of scope |","lastModifiedDate":"2024-02-26"},{"lineNumber":308,"author":{"gitId":"ys112"},"content":"| User | schedule and conduct virtual interviews directly within HRConnect, including video conferencing and interview notes | | Out of scope |","lastModifiedDate":"2024-02-26"},{"lineNumber":309,"author":{"gitId":"ys112"},"content":"| User | track and manage employee referrals and incentives programs within HRConnect, including tracking referral bonuses and monitoring the effectiveness of referral campaigns | | Out of scope |","lastModifiedDate":"2024-02-26"},{"lineNumber":310,"author":{"gitId":"ys112"},"content":"| User | generate customizable offer letters and employment contracts directly within HRConnect, including integrating e-signature solutions | I can perform these tasks more efficiently | Out of scope |","lastModifiedDate":"2024-02-26"},{"lineNumber":311,"author":{"gitId":"ys112"},"content":"| User | create and manage employee development plans with HRConnect | | Out of scope |","lastModifiedDate":"2024-02-26"},{"lineNumber":312,"author":{"gitId":"ys112"},"content":"| User | create and manage succession plans with HRConnect, including identifying high-potential employees, mapping career paths and planning for leadership transitions | | Out of scope |","lastModifiedDate":"2024-02-26"},{"lineNumber":313,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":314,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":315,"author":{"gitId":"-"},"content":"### Use cases","lastModifiedDate":"2020-06-07"},{"lineNumber":316,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":317,"author":{"gitId":"xinen26"},"content":"(For all use cases below, the **System** is the `HRConnect` and the **Actor** is the `user`, unless specified otherwise)","lastModifiedDate":"2024-02-27"},{"lineNumber":318,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":319,"author":{"gitId":"xinen26"},"content":"**Use case: Add a contact**","lastModifiedDate":"2024-02-27"},{"lineNumber":320,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":321,"author":{"gitId":"xinen26"},"content":"**MSS**","lastModifiedDate":"2024-02-27"},{"lineNumber":322,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":323,"author":{"gitId":"xinen26"},"content":"1. User requests to list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":324,"author":{"gitId":"xinen26"},"content":"2. HRConnect shows a list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":325,"author":{"gitId":"xinen26"},"content":"3. User requests to add a specific contact to the list","lastModifiedDate":"2024-02-27"},{"lineNumber":326,"author":{"gitId":"xinen26"},"content":"4. HRConnect adds the contact","lastModifiedDate":"2024-02-27"},{"lineNumber":327,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":328,"author":{"gitId":"xinen26"},"content":" Use case ends.","lastModifiedDate":"2024-02-27"},{"lineNumber":329,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":330,"author":{"gitId":"xinen26"},"content":"**Extensions**","lastModifiedDate":"2024-02-27"},{"lineNumber":331,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":332,"author":{"gitId":"xinen26"},"content":"* 3a. The given format is invalid.","lastModifiedDate":"2024-02-27"},{"lineNumber":333,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":334,"author":{"gitId":"xinen26"},"content":" * 3a1. HRConnect shows an error message.","lastModifiedDate":"2024-02-27"},{"lineNumber":335,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":336,"author":{"gitId":"xinen26"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-02-27"},{"lineNumber":337,"author":{"gitId":"xinen26"},"content":" ","lastModifiedDate":"2024-02-27"},{"lineNumber":338,"author":{"gitId":"xinen26"},"content":"* 3b. The contact details have been added before.","lastModifiedDate":"2024-02-27"},{"lineNumber":339,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":340,"author":{"gitId":"xinen26"},"content":" * 3b1. HRConnect shows an error message.","lastModifiedDate":"2024-02-27"},{"lineNumber":341,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":342,"author":{"gitId":"xinen26"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-02-27"},{"lineNumber":343,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":344,"author":{"gitId":"xinen26"},"content":"**Use case: Clear**","lastModifiedDate":"2024-02-27"},{"lineNumber":345,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":346,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2024-02-27"},{"lineNumber":347,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":348,"author":{"gitId":"xinen26"},"content":"1. User requests to list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":349,"author":{"gitId":"xinen26"},"content":"2. HRConnect shows a list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":350,"author":{"gitId":"xinen26"},"content":"3. User requests to clear the list","lastModifiedDate":"2024-02-27"},{"lineNumber":351,"author":{"gitId":"xinen26"},"content":"4. HRConnect deletes all entries in list","lastModifiedDate":"2024-02-27"},{"lineNumber":352,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":353,"author":{"gitId":"xinen26"},"content":" Use case ends.","lastModifiedDate":"2024-02-27"},{"lineNumber":354,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":355,"author":{"gitId":"xinen26"},"content":"**Extensions**","lastModifiedDate":"2024-02-27"},{"lineNumber":356,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":357,"author":{"gitId":"xinen26"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-02-27"},{"lineNumber":358,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":359,"author":{"gitId":"xinen26"},"content":" Use case ends.","lastModifiedDate":"2024-02-27"},{"lineNumber":360,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":361,"author":{"gitId":"xinen26"},"content":" ","lastModifiedDate":"2024-02-27"},{"lineNumber":362,"author":{"gitId":"xinen26"},"content":"**Use case: Add comment to contact**","lastModifiedDate":"2024-02-27"},{"lineNumber":363,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":364,"author":{"gitId":"xinen26"},"content":"**MSS**","lastModifiedDate":"2024-02-27"},{"lineNumber":365,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":366,"author":{"gitId":"xinen26"},"content":"1. User requests to list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":367,"author":{"gitId":"xinen26"},"content":"2. HRConnect shows a list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":368,"author":{"gitId":"xinen26"},"content":"3. User requests to add a comment to a specific person in the list","lastModifiedDate":"2024-02-27"},{"lineNumber":369,"author":{"gitId":"xinen26"},"content":"4. HRConnect adds comment to the person","lastModifiedDate":"2024-02-27"},{"lineNumber":370,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":371,"author":{"gitId":"xinen26"},"content":" Use case ends.","lastModifiedDate":"2024-02-27"},{"lineNumber":372,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":373,"author":{"gitId":"xinen26"},"content":"**Extensions**","lastModifiedDate":"2024-02-27"},{"lineNumber":374,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":375,"author":{"gitId":"xinen26"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-02-27"},{"lineNumber":376,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":377,"author":{"gitId":"xinen26"},"content":" Use case ends.","lastModifiedDate":"2024-02-27"},{"lineNumber":378,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":379,"author":{"gitId":"xinen26"},"content":"* 3a. The given Application ID is invalid.","lastModifiedDate":"2024-02-27"},{"lineNumber":380,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":381,"author":{"gitId":"xinen26"},"content":" * 3a1. HRConnect shows an error message.","lastModifiedDate":"2024-02-27"},{"lineNumber":382,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":383,"author":{"gitId":"xinen26"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-02-27"},{"lineNumber":384,"author":{"gitId":"xinen26"},"content":" ","lastModifiedDate":"2024-02-27"},{"lineNumber":385,"author":{"gitId":"xinen26"},"content":"* 3b. The comment is empty.","lastModifiedDate":"2024-02-27"},{"lineNumber":386,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":387,"author":{"gitId":"xinen26"},"content":" * 3b1. HRConnect shows an error message.","lastModifiedDate":"2024-02-27"},{"lineNumber":388,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":389,"author":{"gitId":"xinen26"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-02-27"},{"lineNumber":390,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":391,"author":{"gitId":"xinen26"},"content":"* 3c. The comment is a duplicate of a previous comment assigned to the same contact.","lastModifiedDate":"2024-02-27"},{"lineNumber":392,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":393,"author":{"gitId":"xinen26"},"content":" * 3c1. HRConnect shows an error message.","lastModifiedDate":"2024-02-27"},{"lineNumber":394,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":395,"author":{"gitId":"xinen26"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-02-27"},{"lineNumber":396,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":397,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":398,"author":{"gitId":"xinen26"},"content":"**Use case: Delete a contact**","lastModifiedDate":"2024-02-27"},{"lineNumber":399,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":400,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2020-05-23"},{"lineNumber":401,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":402,"author":{"gitId":"xinen26"},"content":"1. User requests to list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":403,"author":{"gitId":"xinen26"},"content":"2. HRConnect shows a list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":404,"author":{"gitId":"xinen26"},"content":"3. User requests to delete a specific contact on the list","lastModifiedDate":"2024-02-27"},{"lineNumber":405,"author":{"gitId":"xinen26"},"content":"4. HRConnect deletes the person","lastModifiedDate":"2024-02-27"},{"lineNumber":406,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":407,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":408,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":409,"author":{"gitId":"-"},"content":"**Extensions**","lastModifiedDate":"2020-05-23"},{"lineNumber":410,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":411,"author":{"gitId":"-"},"content":"* 2a. The list is empty.","lastModifiedDate":"2020-05-23"},{"lineNumber":412,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":413,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":414,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":415,"author":{"gitId":"-"},"content":"* 3a. The given index is invalid.","lastModifiedDate":"2020-05-23"},{"lineNumber":416,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":417,"author":{"gitId":"xinen26"},"content":" * 3a1. HRConnect shows an error message.","lastModifiedDate":"2024-02-27"},{"lineNumber":418,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":419,"author":{"gitId":"-"},"content":" Use case resumes at step 2.","lastModifiedDate":"2020-05-23"},{"lineNumber":420,"author":{"gitId":"-"},"content":" ","lastModifiedDate":"2020-05-23"},{"lineNumber":421,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":422,"author":{"gitId":"xinen26"},"content":"**Use case: Edit a person**","lastModifiedDate":"2024-02-27"},{"lineNumber":423,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":424,"author":{"gitId":"xinen26"},"content":"**MSS**","lastModifiedDate":"2024-02-27"},{"lineNumber":425,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":426,"author":{"gitId":"xinen26"},"content":"1. User requests to list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":427,"author":{"gitId":"xinen26"},"content":"2. HRConnect shows a list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":428,"author":{"gitId":"xinen26"},"content":"3. User requests to edit a specific person\u0027s details in the list","lastModifiedDate":"2024-02-27"},{"lineNumber":429,"author":{"gitId":"xinen26"},"content":"4. HRConnect edits the details belonging to the person","lastModifiedDate":"2024-02-27"},{"lineNumber":430,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":431,"author":{"gitId":"xinen26"},"content":" Use case ends.","lastModifiedDate":"2024-02-27"},{"lineNumber":432,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":433,"author":{"gitId":"xinen26"},"content":"**Extensions**","lastModifiedDate":"2024-02-27"},{"lineNumber":434,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":435,"author":{"gitId":"xinen26"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-02-27"},{"lineNumber":436,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":437,"author":{"gitId":"xinen26"},"content":" Use case ends.","lastModifiedDate":"2024-02-27"},{"lineNumber":438,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":439,"author":{"gitId":"xinen26"},"content":"* 3a. The given index of the person is invalid.","lastModifiedDate":"2024-02-27"},{"lineNumber":440,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":441,"author":{"gitId":"xinen26"},"content":" * 3a1. HRConnect shows an error message.","lastModifiedDate":"2024-02-27"},{"lineNumber":442,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":443,"author":{"gitId":"-"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-02-27"},{"lineNumber":444,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":445,"author":{"gitId":"xinen26"},"content":"* 3b. The given format of the command is invalid.","lastModifiedDate":"2024-02-27"},{"lineNumber":446,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":447,"author":{"gitId":"xinen26"},"content":" * 3b1. HRConnect shows an error message.","lastModifiedDate":"2024-02-27"},{"lineNumber":448,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":449,"author":{"gitId":"xinen26"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-02-27"},{"lineNumber":450,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":451,"author":{"gitId":"xinen26"},"content":"**Use case: Export contacts**","lastModifiedDate":"2024-02-27"},{"lineNumber":452,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":453,"author":{"gitId":"xinen26"},"content":"**MSS**","lastModifiedDate":"2024-02-27"},{"lineNumber":454,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":455,"author":{"gitId":"xinen26"},"content":"1. User requests to list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":456,"author":{"gitId":"xinen26"},"content":"2. HRConnect shows a list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":457,"author":{"gitId":"xinen26"},"content":"3. User requests to export contacts into a separate address book section.","lastModifiedDate":"2024-02-27"},{"lineNumber":458,"author":{"gitId":"xinen26"},"content":"4. HRConnect exports the specified range of contacts to the designated page.","lastModifiedDate":"2024-02-27"},{"lineNumber":459,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":460,"author":{"gitId":"xinen26"},"content":" Use case ends.","lastModifiedDate":"2024-02-27"},{"lineNumber":461,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":462,"author":{"gitId":"xinen26"},"content":"**Extensions**","lastModifiedDate":"2024-02-27"},{"lineNumber":463,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":464,"author":{"gitId":"xinen26"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-02-27"},{"lineNumber":465,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":466,"author":{"gitId":"xinen26"},"content":" Use case ends","lastModifiedDate":"2024-02-27"},{"lineNumber":467,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":468,"author":{"gitId":"xinen26"},"content":"* 3a. The given format of the command is invalid.","lastModifiedDate":"2024-02-27"},{"lineNumber":469,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":470,"author":{"gitId":"xinen26"},"content":" * 3a1. HRConnect shows an error message.","lastModifiedDate":"2024-02-27"},{"lineNumber":471,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":472,"author":{"gitId":"xinen26"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-02-27"},{"lineNumber":473,"author":{"gitId":"xinen26"},"content":" ","lastModifiedDate":"2024-02-27"},{"lineNumber":474,"author":{"gitId":"xinen26"},"content":"* 3b. The given range is invalid.","lastModifiedDate":"2024-02-27"},{"lineNumber":475,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":476,"author":{"gitId":"xinen26"},"content":" * 3b1. HRConnect shows an error message.","lastModifiedDate":"2024-02-27"},{"lineNumber":477,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":478,"author":{"gitId":"xinen26"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-02-27"},{"lineNumber":479,"author":{"gitId":"xinen26"},"content":" ","lastModifiedDate":"2024-02-27"},{"lineNumber":480,"author":{"gitId":"xinen26"},"content":" ","lastModifiedDate":"2024-02-27"},{"lineNumber":481,"author":{"gitId":"xinen26"},"content":"**Use case: Filter Tag**","lastModifiedDate":"2024-02-27"},{"lineNumber":482,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":483,"author":{"gitId":"xinen26"},"content":"**MSS**","lastModifiedDate":"2024-02-27"},{"lineNumber":484,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":485,"author":{"gitId":"xinen26"},"content":"1. User requests to list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":486,"author":{"gitId":"xinen26"},"content":"2. HRConnect shows a list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":487,"author":{"gitId":"xinen26"},"content":"3. User requests to filter through the contact list based on what stage the interviewee is in","lastModifiedDate":"2024-02-27"},{"lineNumber":488,"author":{"gitId":"xinen26"},"content":"4. HRConnect returns entries only for interviewees in that particular stage. ","lastModifiedDate":"2024-02-27"},{"lineNumber":489,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":490,"author":{"gitId":"xinen26"},"content":" Use case ends.","lastModifiedDate":"2024-02-27"},{"lineNumber":491,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":492,"author":{"gitId":"xinen26"},"content":"**Extensions**","lastModifiedDate":"2024-02-27"},{"lineNumber":493,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":494,"author":{"gitId":"xinen26"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-02-27"},{"lineNumber":495,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":496,"author":{"gitId":"xinen26"},"content":" Use case ends","lastModifiedDate":"2024-02-27"},{"lineNumber":497,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":498,"author":{"gitId":"xinen26"},"content":"* 3a. The given format of the command is invalid.","lastModifiedDate":"2024-02-27"},{"lineNumber":499,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":500,"author":{"gitId":"xinen26"},"content":" * 3a1. HRConnect shows an error message.","lastModifiedDate":"2024-02-27"},{"lineNumber":501,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":502,"author":{"gitId":"xinen26"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-02-27"},{"lineNumber":503,"author":{"gitId":"xinen26"},"content":" ","lastModifiedDate":"2024-02-27"},{"lineNumber":504,"author":{"gitId":"xinen26"},"content":"* 3b. The tag does not exist.","lastModifiedDate":"2024-02-27"},{"lineNumber":505,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":506,"author":{"gitId":"xinen26"},"content":" * 3b1. HRConnect shows an error message.","lastModifiedDate":"2024-02-27"},{"lineNumber":507,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":508,"author":{"gitId":"xinen26"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-02-27"},{"lineNumber":509,"author":{"gitId":"xinen26"},"content":" ","lastModifiedDate":"2024-02-27"},{"lineNumber":510,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":511,"author":{"gitId":"xinen26"},"content":"**Use case: Find keyword**","lastModifiedDate":"2024-02-27"},{"lineNumber":512,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":513,"author":{"gitId":"xinen26"},"content":"**MSS**","lastModifiedDate":"2024-02-27"},{"lineNumber":514,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":515,"author":{"gitId":"xinen26"},"content":"1. User requests to list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":516,"author":{"gitId":"xinen26"},"content":"2. HRConnect shows a list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":517,"author":{"gitId":"xinen26"},"content":"3. User requests to find entries that match the keyword in the list","lastModifiedDate":"2024-02-27"},{"lineNumber":518,"author":{"gitId":"xinen26"},"content":"4. HRConnect returns entries that match the keyword","lastModifiedDate":"2024-02-27"},{"lineNumber":519,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":520,"author":{"gitId":"xinen26"},"content":" Use case ends.","lastModifiedDate":"2024-02-27"},{"lineNumber":521,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":522,"author":{"gitId":"xinen26"},"content":"**Extensions**","lastModifiedDate":"2024-02-27"},{"lineNumber":523,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":524,"author":{"gitId":"xinen26"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-02-27"},{"lineNumber":525,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":526,"author":{"gitId":"xinen26"},"content":" Use case ends","lastModifiedDate":"2024-02-27"},{"lineNumber":527,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":528,"author":{"gitId":"xinen26"},"content":"**Use case: List**","lastModifiedDate":"2024-02-27"},{"lineNumber":529,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":530,"author":{"gitId":"xinen26"},"content":"**MSS**","lastModifiedDate":"2024-02-27"},{"lineNumber":531,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":532,"author":{"gitId":"xinen26"},"content":"1. User requests to list persons","lastModifiedDate":"2024-02-27"},{"lineNumber":533,"author":{"gitId":"xinen26"},"content":"2. AddressBook shows a list of persons","lastModifiedDate":"2024-02-27"},{"lineNumber":534,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":535,"author":{"gitId":"xinen26"},"content":" Use case ends.","lastModifiedDate":"2024-02-27"},{"lineNumber":536,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":537,"author":{"gitId":"xinen26"},"content":"**Extensions**","lastModifiedDate":"2024-02-27"},{"lineNumber":538,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":539,"author":{"gitId":"xinen26"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-02-27"},{"lineNumber":540,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":541,"author":{"gitId":"xinen26"},"content":" Use case ends","lastModifiedDate":"2024-02-27"},{"lineNumber":542,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":543,"author":{"gitId":"xinen26"},"content":"**Use case: Add tag**","lastModifiedDate":"2024-02-27"},{"lineNumber":544,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":545,"author":{"gitId":"xinen26"},"content":"**MSS**","lastModifiedDate":"2024-02-27"},{"lineNumber":546,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":547,"author":{"gitId":"xinen26"},"content":"1. User requests to list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":548,"author":{"gitId":"xinen26"},"content":"2. HRConnect shows a list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":549,"author":{"gitId":"xinen26"},"content":"3. User requests to add specific tags to specific contacts for easy filtering later.","lastModifiedDate":"2024-02-27"},{"lineNumber":550,"author":{"gitId":"xinen26"},"content":"4. HRConnect adds the specified tag to the designated contact.","lastModifiedDate":"2024-02-27"},{"lineNumber":551,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":552,"author":{"gitId":"xinen26"},"content":" Use case ends.","lastModifiedDate":"2024-02-27"},{"lineNumber":553,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":554,"author":{"gitId":"xinen26"},"content":"**Extensions**","lastModifiedDate":"2024-02-27"},{"lineNumber":555,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":556,"author":{"gitId":"xinen26"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-02-27"},{"lineNumber":557,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":558,"author":{"gitId":"xinen26"},"content":"* 3a. The application ID does not exist.","lastModifiedDate":"2024-02-27"},{"lineNumber":559,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":560,"author":{"gitId":"xinen26"},"content":" * 3a1. HRConnect shows an error message.","lastModifiedDate":"2024-02-27"},{"lineNumber":561,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":562,"author":{"gitId":"xinen26"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-02-27"},{"lineNumber":563,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":564,"author":{"gitId":"xinen26"},"content":"* 3b. The tag does not exist.","lastModifiedDate":"2024-02-27"},{"lineNumber":565,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":566,"author":{"gitId":"xinen26"},"content":" * 3b1. HRConnect shows an error message.","lastModifiedDate":"2024-02-27"},{"lineNumber":567,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":568,"author":{"gitId":"xinen26"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-02-27"},{"lineNumber":569,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":570,"author":{"gitId":"xinen26"},"content":" Use case ends","lastModifiedDate":"2024-02-27"},{"lineNumber":571,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":572,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":573,"author":{"gitId":"xinen26"},"content":" ","lastModifiedDate":"2024-02-27"},{"lineNumber":574,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":575,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":576,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":577,"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":578,"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":579,"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":580,"author":{"gitId":"YuvBindal"},"content":"4. Searches, additions, and updates to contacts should be processed within 2 seconds under normal operational conditions.","lastModifiedDate":"2024-03-04"},{"lineNumber":581,"author":{"gitId":"YuvBindal"},"content":"5. HRConnect should feature an intuitive user interface for easy management of contacts without prior training.","lastModifiedDate":"2024-03-04"},{"lineNumber":582,"author":{"gitId":"YuvBindal"},"content":"6. The system should provide clear error messages and guidance for correcting invalid inputs.","lastModifiedDate":"2024-03-04"},{"lineNumber":583,"author":{"gitId":"YuvBindal"},"content":"7. User data, including contacts, notes, and tags, must be securely handled both in transit and at rest.","lastModifiedDate":"2024-03-04"},{"lineNumber":584,"author":{"gitId":"YuvBindal"},"content":"8. The system should be designed to scale horizontally to accommodate growing numbers of users and contacts.","lastModifiedDate":"2024-03-04"},{"lineNumber":585,"author":{"gitId":"YuvBindal"},"content":"9. It should maintain performance and usability as data volume and number of concurrent users increase.","lastModifiedDate":"2024-03-04"},{"lineNumber":586,"author":{"gitId":"YuvBindal"},"content":"10. HRConnect should be available 24/7 with a target uptime of 99.9%, excluding scheduled maintenance.","lastModifiedDate":"2024-03-04"},{"lineNumber":587,"author":{"gitId":"YuvBindal"},"content":"11. It should include mechanisms for data backup and recovery to prevent data loss.","lastModifiedDate":"2024-03-04"},{"lineNumber":588,"author":{"gitId":"YuvBindal"},"content":"12. The system should be compatible with major operating systems (Windows, macOS, Linux) and browsers (Chrome, Firefox, Safari).","lastModifiedDate":"2024-03-04"},{"lineNumber":589,"author":{"gitId":"YuvBindal"},"content":"13. The application should be built using modular, well-documented code to facilitate maintenance and future updates.","lastModifiedDate":"2024-03-04"},{"lineNumber":590,"author":{"gitId":"YuvBindal"},"content":"14. It should allow for the easy addition of new features without significant restructuring of the existing codebase.","lastModifiedDate":"2024-03-04"},{"lineNumber":591,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":592,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":593,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":594,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":595,"author":{"gitId":"-"},"content":"* **Mainstream OS**: Windows, Linux, Unix, MacOS","lastModifiedDate":"2024-02-09"},{"lineNumber":596,"author":{"gitId":"-"},"content":"* **Private contact detail**: A contact detail that is not meant to be shared with others","lastModifiedDate":"2020-05-23"},{"lineNumber":597,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":598,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":599,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":600,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":601,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":602,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":603,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":604,"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":605,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":606,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":607,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":608,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":609,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":610,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":611,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":612,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":613,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":614,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":615,"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":616,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":617,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":618,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":619,"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":620,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":621,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":622,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","lastModifiedDate":"2020-05-23"},{"lineNumber":623,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":624,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":625,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":626,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":627,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":628,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":629,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":630,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":631,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":632,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":633,"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":634,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":635,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":636,"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":637,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":638,"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":639,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":640,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":641,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":642,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":643,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":644,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":645,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":646,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":647,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":648,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":649,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"YuvBindal":11,"ys112":47,"xinen26":229,"-":362}},{"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":"ys112"},"content":"**HRConnect is a Command Line Interface (CLI) optimized desktop application designed for storing contacts of potential hires, hiring agencies, and legal consultants.**","lastModifiedDate":"2024-03-05"},{"lineNumber":7,"author":{"gitId":"ys112"},"content":"By using commands, HR officers can efficiently organize contacts for their recruiting process.","lastModifiedDate":"2024-03-05"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"* Table of Contents","lastModifiedDate":"2020-05-23"},{"lineNumber":10,"author":{"gitId":"-"},"content":"{:toc}","lastModifiedDate":"2020-05-23"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":14,"author":{"gitId":"-"},"content":"## Quick start","lastModifiedDate":"2020-05-23"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"-"},"content":"1. Ensure you have Java `11` or above installed in your Computer.","lastModifiedDate":"2020-05-23"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"1. Download the latest `addressbook.jar` from [here](https://github.com/se-edu/addressbook-level3/releases).","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"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":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"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":23,"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":24,"author":{"gitId":"-"},"content":" ![Ui](images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"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":27,"author":{"gitId":"-"},"content":" Some example commands you can try:","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * `list` : Lists all contacts.","lastModifiedDate":"2023-01-01"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"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":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * `delete 3` : Deletes the 3rd contact shown in the current list.","lastModifiedDate":"2023-01-01"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * `clear` : Deletes all contacts.","lastModifiedDate":"2023-01-01"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * `exit` : Exits the app.","lastModifiedDate":"2023-01-01"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"-"},"content":"1. Refer to the [Features](#features) below for details of each command.","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":"","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"-"},"content":"## Features","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"block\" class\u003d\"alert alert-info\"\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":"**:information_source: Notes about the command format:**\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"-"},"content":"* Words in `UPPER_CASE` are the parameters to be supplied by the user.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":50,"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":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"-"},"content":"* Items in square brackets are optional.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"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":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":"* Items with `…`​ after them can be used multiple times including zero times.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":56,"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":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":"-"},"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":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/div\u003e","lastModifiedDate":"2020-05-23"},{"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":"ys112"},"content":"Shows a message explaining how to access the help page.","lastModifiedDate":"2024-02-26"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":71,"author":{"gitId":"-"},"content":"Format: `help`","lastModifiedDate":"2020-05-23"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":73,"author":{"gitId":"ys112"},"content":"### Add an interviewee: `add`","lastModifiedDate":"2024-02-26"},{"lineNumber":74,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":75,"author":{"gitId":"ys112"},"content":"Adds an interviewee to the address book.","lastModifiedDate":"2024-02-26"},{"lineNumber":76,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":77,"author":{"gitId":"ys112"},"content":"Format: `add /n Name /p Phone_Number e/Email a/Address [/t Tag]…​`","lastModifiedDate":"2024-02-26"},{"lineNumber":78,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":79,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-primary\"\u003e:bulb: **Tip:**","lastModifiedDate":"2020-05-23"},{"lineNumber":80,"author":{"gitId":"ys112"},"content":"A interviewee can have any number of tags (including 0)","lastModifiedDate":"2024-02-26"},{"lineNumber":81,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":82,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":83,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":84,"author":{"gitId":"ys112"},"content":"* `add /n John Doe /p 98765432 /e johnDoegmail.com /a John street, block 123, #01-01 /t friend`","lastModifiedDate":"2024-02-26"},{"lineNumber":85,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":86,"author":{"gitId":"ys112"},"content":"### Listing all interviewees : `list`","lastModifiedDate":"2024-02-26"},{"lineNumber":87,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":88,"author":{"gitId":"-"},"content":"Shows a list of all persons in the address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":89,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":90,"author":{"gitId":"-"},"content":"Format: `list`","lastModifiedDate":"2020-05-23"},{"lineNumber":91,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":92,"author":{"gitId":"ys112"},"content":"### Editing an interviewee : `edit`","lastModifiedDate":"2024-02-26"},{"lineNumber":93,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":94,"author":{"gitId":"ys112"},"content":"Edits an existing interviewee in the address book.","lastModifiedDate":"2024-02-26"},{"lineNumber":95,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":96,"author":{"gitId":"ys112"},"content":"Format: `edit Index [/n Name] [/p Phone] [/e Email] [/a Address] [/t Tag]…​`","lastModifiedDate":"2024-02-26"},{"lineNumber":97,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":98,"author":{"gitId":"ys112"},"content":"* Edits the interviewee at the specified `Index`. The index refers to the index number shown in the displayed interviewee list. The index **must be a positive integer** 1, 2, 3, …​","lastModifiedDate":"2024-02-26"},{"lineNumber":99,"author":{"gitId":"-"},"content":"* At least one of the optional fields must be provided.","lastModifiedDate":"2020-05-23"},{"lineNumber":100,"author":{"gitId":"-"},"content":"* Existing values will be updated to the input values.","lastModifiedDate":"2020-05-23"},{"lineNumber":101,"author":{"gitId":"ys112"},"content":"* When editing tags, the existing tags of the interviewee will be removed i.e adding of tags is not cumulative.","lastModifiedDate":"2024-02-26"},{"lineNumber":102,"author":{"gitId":"ys112"},"content":"* You can remove all the interviewee’s tags by typing `/t` without","lastModifiedDate":"2024-02-26"},{"lineNumber":103,"author":{"gitId":"-"},"content":" specifying any tags after it.","lastModifiedDate":"2020-05-23"},{"lineNumber":104,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":105,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":106,"author":{"gitId":"ys112"},"content":"* `edit 1 /n 91234567 /e johndoe@example.com` Edits the phone number and email address of the 1st interviewee to be `91234567` and `johndoe@example.com` respectively.","lastModifiedDate":"2024-02-26"},{"lineNumber":107,"author":{"gitId":"ys112"},"content":"* `edit 2 /n Betsy Crower /t` Edits the name of the 2nd interviewee to be `Betsy Crower` and clears all existing tags.","lastModifiedDate":"2024-02-26"},{"lineNumber":108,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":109,"author":{"gitId":"ys112"},"content":"### Locating interviewees by name: `find`","lastModifiedDate":"2024-02-26"},{"lineNumber":110,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":111,"author":{"gitId":"-"},"content":"Finds persons whose names contain any of the given keywords.","lastModifiedDate":"2020-05-23"},{"lineNumber":112,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":113,"author":{"gitId":"ys112"},"content":"Format: `find Keyword [More_Keywords]`","lastModifiedDate":"2024-02-26"},{"lineNumber":114,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":115,"author":{"gitId":"-"},"content":"* The search is case-insensitive. e.g `hans` will match `Hans`","lastModifiedDate":"2020-05-23"},{"lineNumber":116,"author":{"gitId":"-"},"content":"* The order of the keywords does not matter. e.g. `Hans Bo` will match `Bo Hans`","lastModifiedDate":"2020-05-23"},{"lineNumber":117,"author":{"gitId":"-"},"content":"* Only the name is searched.","lastModifiedDate":"2020-05-23"},{"lineNumber":118,"author":{"gitId":"-"},"content":"* Only full words will be matched e.g. `Han` will not match `Hans`","lastModifiedDate":"2020-05-23"},{"lineNumber":119,"author":{"gitId":"-"},"content":"* Persons matching at least one keyword will be returned (i.e. `OR` search).","lastModifiedDate":"2020-05-23"},{"lineNumber":120,"author":{"gitId":"-"},"content":" e.g. `Hans Bo` will return `Hans Gruber`, `Bo Yang`","lastModifiedDate":"2020-05-23"},{"lineNumber":121,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":122,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":123,"author":{"gitId":"-"},"content":"* `find John` returns `john` and `John Doe`","lastModifiedDate":"2020-05-23"},{"lineNumber":124,"author":{"gitId":"-"},"content":"* `find alex david` returns `Alex Yeoh`, `David Li`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":125,"author":{"gitId":"-"},"content":" ![result for \u0027find alex david\u0027](images/findAlexDavidResult.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":126,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":127,"author":{"gitId":"ys112"},"content":"### Deleting an interviewee : `delete`","lastModifiedDate":"2024-02-26"},{"lineNumber":128,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":129,"author":{"gitId":"ys112"},"content":"Deletes the specified interviewee from the address book.","lastModifiedDate":"2024-02-26"},{"lineNumber":130,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":131,"author":{"gitId":"ys112"},"content":"Format: `delete Index`","lastModifiedDate":"2024-02-26"},{"lineNumber":132,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":133,"author":{"gitId":"ys112"},"content":"* Deletes the interviewee at the specified `Index`.","lastModifiedDate":"2024-02-26"},{"lineNumber":134,"author":{"gitId":"ys112"},"content":"* The index refers to the index number shown in the displayed interviewee list.","lastModifiedDate":"2024-02-26"},{"lineNumber":135,"author":{"gitId":"-"},"content":"* The index **must be a positive integer** 1, 2, 3, …​","lastModifiedDate":"2020-05-23"},{"lineNumber":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":137,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":138,"author":{"gitId":"ys112"},"content":"* `list` followed by `delete 2` deletes the 2nd interviewee in the address book.","lastModifiedDate":"2024-02-26"},{"lineNumber":139,"author":{"gitId":"ys112"},"content":"* `find Betsy` followed by `delete 1` deletes the 1st interviewee in the results of the `find` command.","lastModifiedDate":"2024-02-26"},{"lineNumber":140,"author":{"gitId":"ys112"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":141,"author":{"gitId":"ys112"},"content":"### Filtering interviewees by tag : `/filter`","lastModifiedDate":"2024-02-26"},{"lineNumber":142,"author":{"gitId":"ys112"},"content":"Filter through contact list based on what stage the interviewee is in.","lastModifiedDate":"2024-02-26"},{"lineNumber":143,"author":{"gitId":"ys112"},"content":"Format: `/filter \u003cTag\u003e`","lastModifiedDate":"2024-02-26"},{"lineNumber":144,"author":{"gitId":"ys112"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":145,"author":{"gitId":"ys112"},"content":"* Filters the contact list based on the `\u003cTag\u003e` provided.","lastModifiedDate":"2024-02-26"},{"lineNumber":146,"author":{"gitId":"ys112"},"content":"* Possible values for `\u003cTag\u003e` are `initial_application`, `technical_assessment`, `interview`, `decision_and_offer`.","lastModifiedDate":"2024-02-26"},{"lineNumber":147,"author":{"gitId":"ys112"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":148,"author":{"gitId":"ys112"},"content":"Examples:","lastModifiedDate":"2024-02-26"},{"lineNumber":149,"author":{"gitId":"ys112"},"content":"* `/filter initial_application` filters the contact list to show only interviewees in the initial application stage.","lastModifiedDate":"2024-02-26"},{"lineNumber":150,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":151,"author":{"gitId":"xinen26"},"content":"### Adding notes to interviewees by tag : `/comment`","lastModifiedDate":"2024-02-27"},{"lineNumber":152,"author":{"gitId":"xinen26"},"content":"Facilitates the addition of notes or comments to individual interviewee entries.","lastModifiedDate":"2024-02-27"},{"lineNumber":153,"author":{"gitId":"xinen26"},"content":"Format: `/comment \u003cApplicationId\u003e \u003cNote\u003e`","lastModifiedDate":"2024-02-27"},{"lineNumber":154,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":155,"author":{"gitId":"xinen26"},"content":"* Incorporate supplementary notes to enrich the interviewee\u0027s profile.","lastModifiedDate":"2024-02-27"},{"lineNumber":156,"author":{"gitId":"xinen26"},"content":"* Possible values for `\u003cApplicationId\u003e` are integers.","lastModifiedDate":"2024-02-27"},{"lineNumber":157,"author":{"gitId":"xinen26"},"content":"* Possible values for `\u003cNote\u003e` are any non-empty string that provides relevant commentary.","lastModifiedDate":"2024-02-27"},{"lineNumber":158,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":159,"author":{"gitId":"xinen26"},"content":"Examples:","lastModifiedDate":"2024-02-27"},{"lineNumber":160,"author":{"gitId":"xinen26"},"content":"* `/comment 10 “S/Pass Holder”` will add the note “S/Pass Holder” to the applicant identified by ID 10.","lastModifiedDate":"2024-02-27"},{"lineNumber":161,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":162,"author":{"gitId":"YuvBindal"},"content":"### Exporting interviewees contacts by pageId : `/export`","lastModifiedDate":"2024-03-04"},{"lineNumber":163,"author":{"gitId":"YuvBindal"},"content":"Extracts interviewees contacts into a separate address book identified by a pageId","lastModifiedDate":"2024-03-04"},{"lineNumber":164,"author":{"gitId":"YuvBindal"},"content":"Format: /export \u003cContactRange\u003e \u003cpageId\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":165,"author":{"gitId":"YuvBindal"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":166,"author":{"gitId":"YuvBindal"},"content":"* Achieve an additional layer of organisation to properly arrange contacts","lastModifiedDate":"2024-03-04"},{"lineNumber":167,"author":{"gitId":"YuvBindal"},"content":"* Possible values for `\u003cpageId\u003e` are integers.","lastModifiedDate":"2024-03-04"},{"lineNumber":168,"author":{"gitId":"YuvBindal"},"content":"* Possible values for ContactRange are two integers denoting start:end indices.","lastModifiedDate":"2024-03-04"},{"lineNumber":169,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":170,"author":{"gitId":"YuvBindal"},"content":"Examples:","lastModifiedDate":"2024-03-04"},{"lineNumber":171,"author":{"gitId":"YuvBindal"},"content":"* `/export [0:10] 1` will append contacts 0 to 10 inclusive onto page identified by ID 1.","lastModifiedDate":"2024-03-04"},{"lineNumber":172,"author":{"gitId":"YuvBindal"},"content":" ","lastModifiedDate":"2024-03-04"},{"lineNumber":173,"author":{"gitId":"-"},"content":"### Clearing all entries : `clear`","lastModifiedDate":"2020-05-23"},{"lineNumber":174,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":175,"author":{"gitId":"-"},"content":"Clears all entries from the address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":176,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":177,"author":{"gitId":"-"},"content":"Format: `clear`","lastModifiedDate":"2020-05-23"},{"lineNumber":178,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":179,"author":{"gitId":"-"},"content":"### Exiting the program : `exit`","lastModifiedDate":"2020-05-23"},{"lineNumber":180,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":181,"author":{"gitId":"-"},"content":"Exits the program.","lastModifiedDate":"2020-05-23"},{"lineNumber":182,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":183,"author":{"gitId":"-"},"content":"Format: `exit`","lastModifiedDate":"2020-05-23"},{"lineNumber":184,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":185,"author":{"gitId":"-"},"content":"### Saving the data","lastModifiedDate":"2020-05-23"},{"lineNumber":186,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":187,"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":188,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":189,"author":{"gitId":"-"},"content":"### Editing the data file","lastModifiedDate":"2021-02-04"},{"lineNumber":190,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-02-04"},{"lineNumber":191,"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":192,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-02-04"},{"lineNumber":193,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-warning\"\u003e:exclamation: **Caution:**","lastModifiedDate":"2021-02-04"},{"lineNumber":194,"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":195,"author":{"gitId":"-"},"content":"Furthermore, certain edits can cause the AddressBook 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-09"},{"lineNumber":196,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2021-02-04"},{"lineNumber":197,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-02-04"},{"lineNumber":198,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":199,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":200,"author":{"gitId":"-"},"content":"## Command summary","lastModifiedDate":"2020-05-23"},{"lineNumber":201,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":202,"author":{"gitId":"-"},"content":"Action | Format, Examples","lastModifiedDate":"2020-05-23"},{"lineNumber":203,"author":{"gitId":"-"},"content":"--------|------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":204,"author":{"gitId":"ys112"},"content":"**Add** | `add /n Name /p Phone_Number e/Email a/Address [/t Tag]…​`\u003cbr\u003e e.g., `add /n John Doe /p 98765432 /e johnDoe@gmail.com /a John street, block 123, #01-01 /t friend`","lastModifiedDate":"2024-02-26"},{"lineNumber":205,"author":{"gitId":"-"},"content":"**Clear** | `clear`","lastModifiedDate":"2020-05-23"},{"lineNumber":206,"author":{"gitId":"-"},"content":"**Delete** | `delete INDEX`\u003cbr\u003e e.g., `delete 3`","lastModifiedDate":"2020-05-23"},{"lineNumber":207,"author":{"gitId":"ys112"},"content":"**Edit** | `edit Index [/n Name] [/p Phone] [/e Email] [/a Address] [/t Tag]…​`\u003cbr\u003e e.g., `edit 2 /n Betsy Crower /t friend`","lastModifiedDate":"2024-02-26"},{"lineNumber":208,"author":{"gitId":"ys112"},"content":"**Find** | `find Keyword [More_Keywords]`\u003cbr\u003e e.g., `find alice bob charlie`","lastModifiedDate":"2024-02-26"},{"lineNumber":209,"author":{"gitId":"-"},"content":"**List** | `list`","lastModifiedDate":"2020-05-23"},{"lineNumber":210,"author":{"gitId":"-"},"content":"**Help** | `help`","lastModifiedDate":"2020-05-23"},{"lineNumber":211,"author":{"gitId":"ys112"},"content":"**Exit** | `exit`","lastModifiedDate":"2024-02-26"},{"lineNumber":212,"author":{"gitId":"ys112"},"content":"**Filter** | `/filter \u003cTag\u003e` \u003cbr\u003e e.g., `/filter initial_application`","lastModifiedDate":"2024-02-26"},{"lineNumber":213,"author":{"gitId":"xinen26"},"content":"**Comment** | `/comment \u003cApplicationId\u003e \u003cNote\u003e` \u003cbr\u003e e.g., `/comment 10 “S/Pass Holder”`","lastModifiedDate":"2024-02-27"},{"lineNumber":214,"author":{"gitId":"YuvBindal"},"content":"**Export** | `/export \u003cContactRange\u003e \u003cpageId\u003e` \u003cbr\u003e e.g., `/export [0:10] 1`","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"YuvBindal":11,"ys112":41,"xinen26":12,"-":150}},{"path":"docs/team/lihaoquan.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"lihaoquan"},"content":"---","lastModifiedDate":"2024-02-26"},{"lineNumber":2,"author":{"gitId":"lihaoquan"},"content":"layout: page","lastModifiedDate":"2024-02-26"},{"lineNumber":3,"author":{"gitId":"lihaoquan"},"content":"title: John Doe\u0027s Project Portfolio Page","lastModifiedDate":"2024-02-26"},{"lineNumber":4,"author":{"gitId":"lihaoquan"},"content":"---","lastModifiedDate":"2024-02-26"},{"lineNumber":5,"author":{"gitId":"lihaoquan"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":6,"author":{"gitId":"lihaoquan"},"content":"### Project: AddressBook Level 3","lastModifiedDate":"2024-02-26"},{"lineNumber":7,"author":{"gitId":"lihaoquan"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"lihaoquan"},"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-26"},{"lineNumber":9,"author":{"gitId":"lihaoquan"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":10,"author":{"gitId":"lihaoquan"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"lihaoquan"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"lihaoquan"},"content":"* **New Feature**: Added the ability to undo/redo previous commands.","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"lihaoquan"},"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-02-26"},{"lineNumber":14,"author":{"gitId":"lihaoquan"},"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-02-26"},{"lineNumber":15,"author":{"gitId":"lihaoquan"},"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-02-26"},{"lineNumber":16,"author":{"gitId":"lihaoquan"},"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-02-26"},{"lineNumber":17,"author":{"gitId":"lihaoquan"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":18,"author":{"gitId":"lihaoquan"},"content":"* **New Feature**: Added a history command that allows the user to navigate to previous commands using up/down keys.","lastModifiedDate":"2024-02-26"},{"lineNumber":19,"author":{"gitId":"lihaoquan"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":20,"author":{"gitId":"lihaoquan"},"content":"* **Code contributed**: [RepoSense link]()","lastModifiedDate":"2024-02-26"},{"lineNumber":21,"author":{"gitId":"lihaoquan"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":22,"author":{"gitId":"lihaoquan"},"content":"* **Project management**:","lastModifiedDate":"2024-02-26"},{"lineNumber":23,"author":{"gitId":"lihaoquan"},"content":" * Managed releases `v1.3` - `v1.5rc` (3 releases) on GitHub","lastModifiedDate":"2024-02-26"},{"lineNumber":24,"author":{"gitId":"lihaoquan"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":25,"author":{"gitId":"lihaoquan"},"content":"* **Enhancements to existing features**:","lastModifiedDate":"2024-02-26"},{"lineNumber":26,"author":{"gitId":"lihaoquan"},"content":" * Updated the GUI color scheme (Pull requests [\\#33](), [\\#34]())","lastModifiedDate":"2024-02-26"},{"lineNumber":27,"author":{"gitId":"lihaoquan"},"content":" * Wrote additional tests for existing features to increase coverage from 88% to 92% (Pull requests [\\#36](), [\\#38]())","lastModifiedDate":"2024-02-26"},{"lineNumber":28,"author":{"gitId":"lihaoquan"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":29,"author":{"gitId":"lihaoquan"},"content":"* **Documentation**:","lastModifiedDate":"2024-02-26"},{"lineNumber":30,"author":{"gitId":"lihaoquan"},"content":" * User Guide:","lastModifiedDate":"2024-02-26"},{"lineNumber":31,"author":{"gitId":"lihaoquan"},"content":" * Added documentation for the features `delete` and `find` [\\#72]()","lastModifiedDate":"2024-02-26"},{"lineNumber":32,"author":{"gitId":"lihaoquan"},"content":" * Did cosmetic tweaks to existing documentation of features `clear`, `exit`: [\\#74]()","lastModifiedDate":"2024-02-26"},{"lineNumber":33,"author":{"gitId":"lihaoquan"},"content":" * Developer Guide:","lastModifiedDate":"2024-02-26"},{"lineNumber":34,"author":{"gitId":"lihaoquan"},"content":" * Added implementation details of the `delete` feature.","lastModifiedDate":"2024-02-26"},{"lineNumber":35,"author":{"gitId":"lihaoquan"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":36,"author":{"gitId":"lihaoquan"},"content":"* **Community**:","lastModifiedDate":"2024-02-26"},{"lineNumber":37,"author":{"gitId":"lihaoquan"},"content":" * PRs reviewed (with non-trivial review comments): [\\#12](), [\\#32](), [\\#19](), [\\#42]()","lastModifiedDate":"2024-02-26"},{"lineNumber":38,"author":{"gitId":"lihaoquan"},"content":" * Contributed to forum discussions (examples: [1](), [2](), [3](), [4]())","lastModifiedDate":"2024-02-26"},{"lineNumber":39,"author":{"gitId":"lihaoquan"},"content":" * Reported bugs and suggestions for other teams in the class (examples: [1](), [2](), [3]())","lastModifiedDate":"2024-02-26"},{"lineNumber":40,"author":{"gitId":"lihaoquan"},"content":" * Some parts of the history feature I added was adopted by several other class mates ([1](), [2]())","lastModifiedDate":"2024-02-26"},{"lineNumber":41,"author":{"gitId":"lihaoquan"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":42,"author":{"gitId":"lihaoquan"},"content":"* **Tools**:","lastModifiedDate":"2024-02-26"},{"lineNumber":43,"author":{"gitId":"lihaoquan"},"content":" * Integrated a third party library (Natty) to the project ([\\#42]())","lastModifiedDate":"2024-02-26"},{"lineNumber":44,"author":{"gitId":"lihaoquan"},"content":" * Integrated a new Github plugin (CircleCI) to the team repo","lastModifiedDate":"2024-02-26"},{"lineNumber":45,"author":{"gitId":"lihaoquan"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":46,"author":{"gitId":"lihaoquan"},"content":"* _{you can add/remove categories in the list above}_","lastModifiedDate":"2024-02-26"}],"authorContributionMap":{"lihaoquan":46}}] +[{"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) [![codecov](https://codecov.io/gh/AY2324S2-CS2103-F15-3/tp/graph/badge.svg?token\u003dNYM3SACDB7)](https://codecov.io/gh/AY2324S2-CS2103-F15-3/tp)","lastModifiedDate":"2024-02-19"},{"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":"-"},"content":"## HRConnect","lastModifiedDate":"2024-02-19"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-19"},{"lineNumber":7,"author":{"gitId":"lihaoquan"},"content":"HRConnect is designed for HR officers in tech startups, streamlining the management of external contacts.","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"lihaoquan"},"content":"It efficiently organizes contacts for potential hires, hiring agencies, and legal consultants, significantly","lastModifiedDate":"2024-02-26"},{"lineNumber":9,"author":{"gitId":"lihaoquan"},"content":"reducing the time spent searching for contact information, thereby optimizing the recruiting process.","lastModifiedDate":"2024-02-26"},{"lineNumber":10,"author":{"gitId":"lihaoquan"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"lihaoquan"},"content":"This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-02-26"}],"authorContributionMap":{"lihaoquan":5,"-":6}},{"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":"lihaoquan"},"content":"### Yong Yu Sian","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":14,"author":{"gitId":"lihaoquan"},"content":"\u003cimg src\u003d\"images/ys112.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"lihaoquan"},"content":"[[github](https://github.com/ys112)]","lastModifiedDate":"2024-02-26"},{"lineNumber":17,"author":{"gitId":"lihaoquan"},"content":"[[portfolio](team/ys112.md)]","lastModifiedDate":"2024-02-26"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"lihaoquan"},"content":"* Role: Software Engineer","lastModifiedDate":"2024-02-26"},{"lineNumber":20,"author":{"gitId":"lihaoquan"},"content":"* Responsibilities: Backend development","lastModifiedDate":"2024-02-26"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"YuvBindal"},"content":"### Yuv Bindal","lastModifiedDate":"2024-02-26"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"lihaoquan"},"content":"\u003cimg src\u003d\"images/yuvbindal.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"lihaoquan"},"content":"[[github](http://github.com/YuvBindal)]","lastModifiedDate":"2024-02-26"},{"lineNumber":27,"author":{"gitId":"lihaoquan"},"content":"[[portfolio](team/yuvbindal.md)]","lastModifiedDate":"2024-02-26"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":29,"author":{"gitId":"YuvBindal"},"content":"* Role: Software Engineer","lastModifiedDate":"2024-02-26"},{"lineNumber":30,"author":{"gitId":"lihaoquan"},"content":"* Responsibilities: Backend development","lastModifiedDate":"2024-02-26"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"lihaoquan"},"content":"### Lee Xin En","lastModifiedDate":"2024-02-26"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"lihaoquan"},"content":"\u003cimg src\u003d\"images/xinen26.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"lihaoquan"},"content":"[[github](http://github.com/xinen26)]","lastModifiedDate":"2024-02-26"},{"lineNumber":37,"author":{"gitId":"lihaoquan"},"content":"[[portfolio](team/xinen26.md)]","lastModifiedDate":"2024-02-26"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"lihaoquan"},"content":"* Role: Software Engineer","lastModifiedDate":"2024-02-26"},{"lineNumber":40,"author":{"gitId":"lihaoquan"},"content":"* Responsibilities: Backend development","lastModifiedDate":"2024-02-26"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"lihaoquan"},"content":"### Ho Wei Herng, Christopher","lastModifiedDate":"2024-02-26"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"lihaoquan"},"content":"\u003cimg src\u003d\"images/chrisho1341.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"lihaoquan"},"content":"[[github](http://github.com/ChrisHo1341)]","lastModifiedDate":"2024-02-26"},{"lineNumber":47,"author":{"gitId":"lihaoquan"},"content":"[[portfolio](team/chrisho1341.md)]","lastModifiedDate":"2024-02-26"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"lihaoquan"},"content":"* Role: Software Engineer","lastModifiedDate":"2024-02-26"},{"lineNumber":50,"author":{"gitId":"lihaoquan"},"content":"* Responsibilities: Backend development","lastModifiedDate":"2024-02-26"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"lihaoquan"},"content":"### Li Haoquan","lastModifiedDate":"2024-02-26"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"lihaoquan"},"content":"\u003cimg src\u003d\"images/lihaoquan.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-26"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":56,"author":{"gitId":"lihaoquan"},"content":"[[github](http://github.com/lihaoquan)]","lastModifiedDate":"2024-02-26"},{"lineNumber":57,"author":{"gitId":"lihaoquan"},"content":"[[portfolio](team/lihaoquan.md)]","lastModifiedDate":"2024-02-26"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":59,"author":{"gitId":"lihaoquan"},"content":"* Role: Software Engineer","lastModifiedDate":"2024-02-26"},{"lineNumber":60,"author":{"gitId":"lihaoquan"},"content":"* Responsibilities: Backend development, UI","lastModifiedDate":"2024-02-26"}],"authorContributionMap":{"lihaoquan":28,"YuvBindal":2,"-":30}},{"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":"ys112"},"content":"* This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-02-26"},{"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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"content":"Classes used by multiple components are in the `seedu.addressbook.commons` package.","lastModifiedDate":"2020-05-23"},{"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":"-"},"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":163,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":164,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#commit()` — Saves the current address book state in its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":165,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#undo()` — Restores the previous address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":166,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#redo()` — Restores a previously undone address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":167,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":168,"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":210,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":211,"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":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":"-"},"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":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":"-"},"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":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":"ys112"},"content":"**Target user profile**: HR officer for tech-related startup","lastModifiedDate":"2024-02-26"},{"lineNumber":264,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":265,"author":{"gitId":"ys112"},"content":"**Value proposition**:","lastModifiedDate":"2024-02-26"},{"lineNumber":266,"author":{"gitId":"ys112"},"content":"* Managing contacts for three main types of external liaisons: ","lastModifiedDate":"2024-02-26"},{"lineNumber":267,"author":{"gitId":"ys112"},"content":" * potential hires","lastModifiedDate":"2024-02-26"},{"lineNumber":268,"author":{"gitId":"ys112"},"content":" * hiring agencies","lastModifiedDate":"2024-02-26"},{"lineNumber":269,"author":{"gitId":"ys112"},"content":" * legal consultants","lastModifiedDate":"2024-02-26"},{"lineNumber":270,"author":{"gitId":"ys112"},"content":"* Reduce time spent on searching for relevant contacts for liaisons.","lastModifiedDate":"2024-02-26"},{"lineNumber":271,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":272,"author":{"gitId":"-"},"content":"### User stories","lastModifiedDate":"2020-06-07"},{"lineNumber":273,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":274,"author":{"gitId":"ys112"},"content":"Priorities: Essential (needed for basic functionality) - `Essential`, Typical (common needs) - `Typical`, Novel (good to have but not a need) - `Novel`, Out of Scope (not needed) - `Out of Scope`","lastModifiedDate":"2024-02-26"},{"lineNumber":275,"author":{"gitId":"ys112"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":276,"author":{"gitId":"ys112"},"content":"| As a/an ... | I can ... | So that ... | Priority (Essential, Typical, Novel, Out of Scope) |","lastModifiedDate":"2024-02-26"},{"lineNumber":277,"author":{"gitId":"ys112"},"content":"| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------- |----------------------------------------------------|","lastModifiedDate":"2024-02-26"},{"lineNumber":278,"author":{"gitId":"ys112"},"content":"| User | add new contacts | | Essential |","lastModifiedDate":"2024-02-26"},{"lineNumber":279,"author":{"gitId":"ys112"},"content":"| User | delete existing contacts | | Essential |","lastModifiedDate":"2024-02-26"},{"lineNumber":280,"author":{"gitId":"ys112"},"content":"| User | view existing contacts | | Essential |","lastModifiedDate":"2024-02-26"},{"lineNumber":281,"author":{"gitId":"ys112"},"content":"| HR professional | manage all my work contacts in one place, | I can efficiently communicate with recruitment agencies, candidates and other stakeholders | Essential |","lastModifiedDate":"2024-02-26"},{"lineNumber":282,"author":{"gitId":"ys112"},"content":"| User | update existing contacts | | Typical |","lastModifiedDate":"2024-02-26"},{"lineNumber":283,"author":{"gitId":"ys112"},"content":"| User | purge all curent data | I can get rid of sample/experimental data I while exploring the app | Typical |","lastModifiedDate":"2024-02-26"},{"lineNumber":284,"author":{"gitId":"ys112"},"content":"| HR Recruiter | filter through my contact list based on what stage of the hiring process the applicants are in | I can contact those who are shortlisted | Typical |","lastModifiedDate":"2024-02-26"},{"lineNumber":285,"author":{"gitId":"ys112"},"content":"| HR Recruiter | add tags to contacts to specify which roles they are applying for | I can keep them organized | Typical |","lastModifiedDate":"2024-02-26"},{"lineNumber":286,"author":{"gitId":"ys112"},"content":"| HR personnel | add notes or comments to individual contact entries | I can keep track of important additional information/interactions | Typical |","lastModifiedDate":"2024-02-26"},{"lineNumber":287,"author":{"gitId":"ys112"},"content":"| experienced HR professional | filter and identify candidates by tags | I can follow up with them promptly | Typical |","lastModifiedDate":"2024-02-26"},{"lineNumber":288,"author":{"gitId":"ys112"},"content":"| User | search through my contacts based on specific criteria | I can quickly find any information I need | Typical |","lastModifiedDate":"2024-02-26"},{"lineNumber":289,"author":{"gitId":"ys112"},"content":"| HR Recruiter | extract contacts into a separate address book | I can import them to the company database easily | Typical |","lastModifiedDate":"2024-02-26"},{"lineNumber":290,"author":{"gitId":"ys112"},"content":"| HR Recruiter | upload images to set profile pictures for my contacts | I can identify them when face to face | Typical |","lastModifiedDate":"2024-02-26"},{"lineNumber":291,"author":{"gitId":"ys112"},"content":"| first-time user | have an intuitive experience and can quickly understand its features and functionalities | I can start using it effectively without wasting time | Typical |","lastModifiedDate":"2024-02-26"},{"lineNumber":292,"author":{"gitId":"ys112"},"content":"| first-time user | can find clear instructions on how to use HRConnect | I can easily start managing my contacts using HRConnect | Typical |","lastModifiedDate":"2024-02-26"},{"lineNumber":293,"author":{"gitId":"ys112"},"content":"| HR Recruiter | Create new contacts with templates based on person (employees, intern, interviewee etc.) | | Novel |","lastModifiedDate":"2024-02-26"},{"lineNumber":294,"author":{"gitId":"ys112"},"content":"| long-time user | create shortcuts for tasks | I can save time on frequenty used functions | Novel |","lastModifiedDate":"2024-02-26"},{"lineNumber":295,"author":{"gitId":"ys112"},"content":"| User | receive notifications or reminders from HRConnect | I can be kept up to date with upcoming interviews, deadlines or follow-up tasks | Novel |","lastModifiedDate":"2024-02-26"},{"lineNumber":296,"author":{"gitId":"ys112"},"content":"| User | can conduct background checks on potential hires directly within HRConnect | I can find out the suitability of a candidate easily | Novel |","lastModifiedDate":"2024-02-26"},{"lineNumber":297,"author":{"gitId":"ys112"},"content":"| first-time user | easily import my data | it won\u0027t be intimidating and I won\u0027t give up on using it after my first use | Novel |","lastModifiedDate":"2024-02-26"},{"lineNumber":298,"author":{"gitId":"ys112"},"content":"| HR personnel | sync any information changes across different devices | I can update information efficiently and ensure that all data is up to date for my coworkers as well | Novel |","lastModifiedDate":"2024-02-26"},{"lineNumber":299,"author":{"gitId":"ys112"},"content":"| long-time user. | archive/hide unused contacts | I am not distracted by irrelevant data | Novel |","lastModifiedDate":"2024-02-26"},{"lineNumber":300,"author":{"gitId":"ys112"},"content":"| HR Recruiter | create custom automated processes for repetitive tasks | I can save time on such tasks | Novel |","lastModifiedDate":"2024-02-26"},{"lineNumber":301,"author":{"gitId":"ys112"},"content":"| potential user exploring the app | see the app populated with sample data | I can easily see the benefits of the app when frequently used | Novel |","lastModifiedDate":"2024-02-26"},{"lineNumber":302,"author":{"gitId":"ys112"},"content":"| HR personnel | keep track of the status of job applications or recruitment processes for each candidate | I can monitor progress and follow up as needed | Novel |","lastModifiedDate":"2024-02-26"},{"lineNumber":303,"author":{"gitId":"ys112"},"content":"| User | track the status of each potential hire in the recruitment process | I can take action as needed | Novel |","lastModifiedDate":"2024-02-26"},{"lineNumber":304,"author":{"gitId":"ys112"},"content":"| User | conduct surveys and collect feedback from specific groups within my contacts | I can easily conduct surveys as needed | Novel |","lastModifiedDate":"2024-02-26"},{"lineNumber":305,"author":{"gitId":"ys112"},"content":"| first-time user | access a brief tutorial on how to navigate HRConnect | I can quickly familiarize myself with its features and functions | Out of scope |","lastModifiedDate":"2024-02-26"},{"lineNumber":306,"author":{"gitId":"ys112"},"content":"| User | generate reports or analytics on hiring activities such as time-to-fill metrics, source of hire, and diversity statistics | I can easily access such information as needed | Out of scope |","lastModifiedDate":"2024-02-26"},{"lineNumber":307,"author":{"gitId":"ys112"},"content":"| User | integrate HRConnect with other HR systems or tools such as applicant tracking systems or payroll software | data exchange and workflows can be streamlined | Out of scope |","lastModifiedDate":"2024-02-26"},{"lineNumber":308,"author":{"gitId":"ys112"},"content":"| User | schedule and conduct virtual interviews directly within HRConnect, including video conferencing and interview notes | | Out of scope |","lastModifiedDate":"2024-02-26"},{"lineNumber":309,"author":{"gitId":"ys112"},"content":"| User | track and manage employee referrals and incentives programs within HRConnect, including tracking referral bonuses and monitoring the effectiveness of referral campaigns | | Out of scope |","lastModifiedDate":"2024-02-26"},{"lineNumber":310,"author":{"gitId":"ys112"},"content":"| User | generate customizable offer letters and employment contracts directly within HRConnect, including integrating e-signature solutions | I can perform these tasks more efficiently | Out of scope |","lastModifiedDate":"2024-02-26"},{"lineNumber":311,"author":{"gitId":"ys112"},"content":"| User | create and manage employee development plans with HRConnect | | Out of scope |","lastModifiedDate":"2024-02-26"},{"lineNumber":312,"author":{"gitId":"ys112"},"content":"| User | create and manage succession plans with HRConnect, including identifying high-potential employees, mapping career paths and planning for leadership transitions | | Out of scope |","lastModifiedDate":"2024-02-26"},{"lineNumber":313,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":314,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":315,"author":{"gitId":"-"},"content":"### Use cases","lastModifiedDate":"2020-06-07"},{"lineNumber":316,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":317,"author":{"gitId":"xinen26"},"content":"(For all use cases below, the **System** is the `HRConnect` and the **Actor** is the `user`, unless specified otherwise)","lastModifiedDate":"2024-02-27"},{"lineNumber":318,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":319,"author":{"gitId":"xinen26"},"content":"**Use case: Add a contact**","lastModifiedDate":"2024-02-27"},{"lineNumber":320,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":321,"author":{"gitId":"xinen26"},"content":"**MSS**","lastModifiedDate":"2024-02-27"},{"lineNumber":322,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":323,"author":{"gitId":"xinen26"},"content":"1. User requests to list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":324,"author":{"gitId":"xinen26"},"content":"2. HRConnect shows a list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":325,"author":{"gitId":"xinen26"},"content":"3. User requests to add a specific contact to the list","lastModifiedDate":"2024-02-27"},{"lineNumber":326,"author":{"gitId":"xinen26"},"content":"4. HRConnect adds the contact","lastModifiedDate":"2024-02-27"},{"lineNumber":327,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":328,"author":{"gitId":"xinen26"},"content":" Use case ends.","lastModifiedDate":"2024-02-27"},{"lineNumber":329,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":330,"author":{"gitId":"xinen26"},"content":"**Extensions**","lastModifiedDate":"2024-02-27"},{"lineNumber":331,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":332,"author":{"gitId":"xinen26"},"content":"* 3a. The given format is invalid.","lastModifiedDate":"2024-02-27"},{"lineNumber":333,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":334,"author":{"gitId":"xinen26"},"content":" * 3a1. HRConnect shows an error message.","lastModifiedDate":"2024-02-27"},{"lineNumber":335,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":336,"author":{"gitId":"xinen26"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-02-27"},{"lineNumber":337,"author":{"gitId":"xinen26"},"content":" ","lastModifiedDate":"2024-02-27"},{"lineNumber":338,"author":{"gitId":"xinen26"},"content":"* 3b. The contact details have been added before.","lastModifiedDate":"2024-02-27"},{"lineNumber":339,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":340,"author":{"gitId":"xinen26"},"content":" * 3b1. HRConnect shows an error message.","lastModifiedDate":"2024-02-27"},{"lineNumber":341,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":342,"author":{"gitId":"xinen26"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-02-27"},{"lineNumber":343,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":344,"author":{"gitId":"xinen26"},"content":"**Use case: Clear**","lastModifiedDate":"2024-02-27"},{"lineNumber":345,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":346,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2024-02-27"},{"lineNumber":347,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":348,"author":{"gitId":"xinen26"},"content":"1. User requests to list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":349,"author":{"gitId":"xinen26"},"content":"2. HRConnect shows a list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":350,"author":{"gitId":"xinen26"},"content":"3. User requests to clear the list","lastModifiedDate":"2024-02-27"},{"lineNumber":351,"author":{"gitId":"xinen26"},"content":"4. HRConnect deletes all entries in list","lastModifiedDate":"2024-02-27"},{"lineNumber":352,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":353,"author":{"gitId":"xinen26"},"content":" Use case ends.","lastModifiedDate":"2024-02-27"},{"lineNumber":354,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":355,"author":{"gitId":"xinen26"},"content":"**Extensions**","lastModifiedDate":"2024-02-27"},{"lineNumber":356,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":357,"author":{"gitId":"xinen26"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-02-27"},{"lineNumber":358,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":359,"author":{"gitId":"xinen26"},"content":" Use case ends.","lastModifiedDate":"2024-02-27"},{"lineNumber":360,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":361,"author":{"gitId":"xinen26"},"content":" ","lastModifiedDate":"2024-02-27"},{"lineNumber":362,"author":{"gitId":"xinen26"},"content":"**Use case: Add comment to contact**","lastModifiedDate":"2024-02-27"},{"lineNumber":363,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":364,"author":{"gitId":"xinen26"},"content":"**MSS**","lastModifiedDate":"2024-02-27"},{"lineNumber":365,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":366,"author":{"gitId":"xinen26"},"content":"1. User requests to list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":367,"author":{"gitId":"xinen26"},"content":"2. HRConnect shows a list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":368,"author":{"gitId":"xinen26"},"content":"3. User requests to add a comment to a specific person in the list","lastModifiedDate":"2024-02-27"},{"lineNumber":369,"author":{"gitId":"xinen26"},"content":"4. HRConnect adds comment to the person","lastModifiedDate":"2024-02-27"},{"lineNumber":370,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":371,"author":{"gitId":"xinen26"},"content":" Use case ends.","lastModifiedDate":"2024-02-27"},{"lineNumber":372,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":373,"author":{"gitId":"xinen26"},"content":"**Extensions**","lastModifiedDate":"2024-02-27"},{"lineNumber":374,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":375,"author":{"gitId":"xinen26"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-02-27"},{"lineNumber":376,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":377,"author":{"gitId":"xinen26"},"content":" Use case ends.","lastModifiedDate":"2024-02-27"},{"lineNumber":378,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":379,"author":{"gitId":"xinen26"},"content":"* 3a. The given Application ID is invalid.","lastModifiedDate":"2024-02-27"},{"lineNumber":380,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":381,"author":{"gitId":"xinen26"},"content":" * 3a1. HRConnect shows an error message.","lastModifiedDate":"2024-02-27"},{"lineNumber":382,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":383,"author":{"gitId":"xinen26"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-02-27"},{"lineNumber":384,"author":{"gitId":"xinen26"},"content":" ","lastModifiedDate":"2024-02-27"},{"lineNumber":385,"author":{"gitId":"xinen26"},"content":"* 3b. The comment is empty.","lastModifiedDate":"2024-02-27"},{"lineNumber":386,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":387,"author":{"gitId":"xinen26"},"content":" * 3b1. HRConnect shows an error message.","lastModifiedDate":"2024-02-27"},{"lineNumber":388,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":389,"author":{"gitId":"xinen26"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-02-27"},{"lineNumber":390,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":391,"author":{"gitId":"xinen26"},"content":"* 3c. The comment is a duplicate of a previous comment assigned to the same contact.","lastModifiedDate":"2024-02-27"},{"lineNumber":392,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":393,"author":{"gitId":"xinen26"},"content":" * 3c1. HRConnect shows an error message.","lastModifiedDate":"2024-02-27"},{"lineNumber":394,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":395,"author":{"gitId":"xinen26"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-02-27"},{"lineNumber":396,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":397,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":398,"author":{"gitId":"xinen26"},"content":"**Use case: Delete a contact**","lastModifiedDate":"2024-02-27"},{"lineNumber":399,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":400,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2020-05-23"},{"lineNumber":401,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":402,"author":{"gitId":"xinen26"},"content":"1. User requests to list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":403,"author":{"gitId":"xinen26"},"content":"2. HRConnect shows a list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":404,"author":{"gitId":"xinen26"},"content":"3. User requests to delete a specific contact on the list","lastModifiedDate":"2024-02-27"},{"lineNumber":405,"author":{"gitId":"xinen26"},"content":"4. HRConnect deletes the person","lastModifiedDate":"2024-02-27"},{"lineNumber":406,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":407,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":408,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":409,"author":{"gitId":"-"},"content":"**Extensions**","lastModifiedDate":"2020-05-23"},{"lineNumber":410,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":411,"author":{"gitId":"-"},"content":"* 2a. The list is empty.","lastModifiedDate":"2020-05-23"},{"lineNumber":412,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":413,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":414,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":415,"author":{"gitId":"-"},"content":"* 3a. The given index is invalid.","lastModifiedDate":"2020-05-23"},{"lineNumber":416,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":417,"author":{"gitId":"xinen26"},"content":" * 3a1. HRConnect shows an error message.","lastModifiedDate":"2024-02-27"},{"lineNumber":418,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":419,"author":{"gitId":"-"},"content":" Use case resumes at step 2.","lastModifiedDate":"2020-05-23"},{"lineNumber":420,"author":{"gitId":"-"},"content":" ","lastModifiedDate":"2020-05-23"},{"lineNumber":421,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":422,"author":{"gitId":"xinen26"},"content":"**Use case: Edit a person**","lastModifiedDate":"2024-02-27"},{"lineNumber":423,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":424,"author":{"gitId":"xinen26"},"content":"**MSS**","lastModifiedDate":"2024-02-27"},{"lineNumber":425,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":426,"author":{"gitId":"xinen26"},"content":"1. User requests to list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":427,"author":{"gitId":"xinen26"},"content":"2. HRConnect shows a list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":428,"author":{"gitId":"xinen26"},"content":"3. User requests to edit a specific person\u0027s details in the list","lastModifiedDate":"2024-02-27"},{"lineNumber":429,"author":{"gitId":"xinen26"},"content":"4. HRConnect edits the details belonging to the person","lastModifiedDate":"2024-02-27"},{"lineNumber":430,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":431,"author":{"gitId":"xinen26"},"content":" Use case ends.","lastModifiedDate":"2024-02-27"},{"lineNumber":432,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":433,"author":{"gitId":"xinen26"},"content":"**Extensions**","lastModifiedDate":"2024-02-27"},{"lineNumber":434,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":435,"author":{"gitId":"xinen26"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-02-27"},{"lineNumber":436,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":437,"author":{"gitId":"xinen26"},"content":" Use case ends.","lastModifiedDate":"2024-02-27"},{"lineNumber":438,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":439,"author":{"gitId":"xinen26"},"content":"* 3a. The given index of the person is invalid.","lastModifiedDate":"2024-02-27"},{"lineNumber":440,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":441,"author":{"gitId":"xinen26"},"content":" * 3a1. HRConnect shows an error message.","lastModifiedDate":"2024-02-27"},{"lineNumber":442,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":443,"author":{"gitId":"-"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-02-27"},{"lineNumber":444,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":445,"author":{"gitId":"xinen26"},"content":"* 3b. The given format of the command is invalid.","lastModifiedDate":"2024-02-27"},{"lineNumber":446,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":447,"author":{"gitId":"xinen26"},"content":" * 3b1. HRConnect shows an error message.","lastModifiedDate":"2024-02-27"},{"lineNumber":448,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":449,"author":{"gitId":"xinen26"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-02-27"},{"lineNumber":450,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":451,"author":{"gitId":"xinen26"},"content":"**Use case: Export contacts**","lastModifiedDate":"2024-02-27"},{"lineNumber":452,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":453,"author":{"gitId":"xinen26"},"content":"**MSS**","lastModifiedDate":"2024-02-27"},{"lineNumber":454,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":455,"author":{"gitId":"xinen26"},"content":"1. User requests to list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":456,"author":{"gitId":"xinen26"},"content":"2. HRConnect shows a list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":457,"author":{"gitId":"xinen26"},"content":"3. User requests to export contacts into a separate address book section.","lastModifiedDate":"2024-02-27"},{"lineNumber":458,"author":{"gitId":"xinen26"},"content":"4. HRConnect exports the specified range of contacts to the designated page.","lastModifiedDate":"2024-02-27"},{"lineNumber":459,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":460,"author":{"gitId":"xinen26"},"content":" Use case ends.","lastModifiedDate":"2024-02-27"},{"lineNumber":461,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":462,"author":{"gitId":"xinen26"},"content":"**Extensions**","lastModifiedDate":"2024-02-27"},{"lineNumber":463,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":464,"author":{"gitId":"xinen26"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-02-27"},{"lineNumber":465,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":466,"author":{"gitId":"xinen26"},"content":" Use case ends","lastModifiedDate":"2024-02-27"},{"lineNumber":467,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":468,"author":{"gitId":"xinen26"},"content":"* 3a. The given format of the command is invalid.","lastModifiedDate":"2024-02-27"},{"lineNumber":469,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":470,"author":{"gitId":"xinen26"},"content":" * 3a1. HRConnect shows an error message.","lastModifiedDate":"2024-02-27"},{"lineNumber":471,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":472,"author":{"gitId":"xinen26"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-02-27"},{"lineNumber":473,"author":{"gitId":"xinen26"},"content":" ","lastModifiedDate":"2024-02-27"},{"lineNumber":474,"author":{"gitId":"xinen26"},"content":"* 3b. The given range is invalid.","lastModifiedDate":"2024-02-27"},{"lineNumber":475,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":476,"author":{"gitId":"xinen26"},"content":" * 3b1. HRConnect shows an error message.","lastModifiedDate":"2024-02-27"},{"lineNumber":477,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":478,"author":{"gitId":"xinen26"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-02-27"},{"lineNumber":479,"author":{"gitId":"xinen26"},"content":" ","lastModifiedDate":"2024-02-27"},{"lineNumber":480,"author":{"gitId":"xinen26"},"content":" ","lastModifiedDate":"2024-02-27"},{"lineNumber":481,"author":{"gitId":"xinen26"},"content":"**Use case: Filter Tag**","lastModifiedDate":"2024-02-27"},{"lineNumber":482,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":483,"author":{"gitId":"xinen26"},"content":"**MSS**","lastModifiedDate":"2024-02-27"},{"lineNumber":484,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":485,"author":{"gitId":"xinen26"},"content":"1. User requests to list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":486,"author":{"gitId":"xinen26"},"content":"2. HRConnect shows a list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":487,"author":{"gitId":"xinen26"},"content":"3. User requests to filter through the contact list based on what stage the interviewee is in","lastModifiedDate":"2024-02-27"},{"lineNumber":488,"author":{"gitId":"xinen26"},"content":"4. HRConnect returns entries only for interviewees in that particular stage. ","lastModifiedDate":"2024-02-27"},{"lineNumber":489,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":490,"author":{"gitId":"xinen26"},"content":" Use case ends.","lastModifiedDate":"2024-02-27"},{"lineNumber":491,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":492,"author":{"gitId":"xinen26"},"content":"**Extensions**","lastModifiedDate":"2024-02-27"},{"lineNumber":493,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":494,"author":{"gitId":"xinen26"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-02-27"},{"lineNumber":495,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":496,"author":{"gitId":"xinen26"},"content":" Use case ends","lastModifiedDate":"2024-02-27"},{"lineNumber":497,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":498,"author":{"gitId":"xinen26"},"content":"* 3a. The given format of the command is invalid.","lastModifiedDate":"2024-02-27"},{"lineNumber":499,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":500,"author":{"gitId":"xinen26"},"content":" * 3a1. HRConnect shows an error message.","lastModifiedDate":"2024-02-27"},{"lineNumber":501,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":502,"author":{"gitId":"xinen26"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-02-27"},{"lineNumber":503,"author":{"gitId":"xinen26"},"content":" ","lastModifiedDate":"2024-02-27"},{"lineNumber":504,"author":{"gitId":"xinen26"},"content":"* 3b. The tag does not exist.","lastModifiedDate":"2024-02-27"},{"lineNumber":505,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":506,"author":{"gitId":"xinen26"},"content":" * 3b1. HRConnect shows an error message.","lastModifiedDate":"2024-02-27"},{"lineNumber":507,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":508,"author":{"gitId":"xinen26"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-02-27"},{"lineNumber":509,"author":{"gitId":"xinen26"},"content":" ","lastModifiedDate":"2024-02-27"},{"lineNumber":510,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":511,"author":{"gitId":"xinen26"},"content":"**Use case: Find keyword**","lastModifiedDate":"2024-02-27"},{"lineNumber":512,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":513,"author":{"gitId":"xinen26"},"content":"**MSS**","lastModifiedDate":"2024-02-27"},{"lineNumber":514,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":515,"author":{"gitId":"xinen26"},"content":"1. User requests to list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":516,"author":{"gitId":"xinen26"},"content":"2. HRConnect shows a list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":517,"author":{"gitId":"xinen26"},"content":"3. User requests to find entries that match the keyword in the list","lastModifiedDate":"2024-02-27"},{"lineNumber":518,"author":{"gitId":"xinen26"},"content":"4. HRConnect returns entries that match the keyword","lastModifiedDate":"2024-02-27"},{"lineNumber":519,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":520,"author":{"gitId":"xinen26"},"content":" Use case ends.","lastModifiedDate":"2024-02-27"},{"lineNumber":521,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":522,"author":{"gitId":"xinen26"},"content":"**Extensions**","lastModifiedDate":"2024-02-27"},{"lineNumber":523,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":524,"author":{"gitId":"xinen26"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-02-27"},{"lineNumber":525,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":526,"author":{"gitId":"xinen26"},"content":" Use case ends","lastModifiedDate":"2024-02-27"},{"lineNumber":527,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":528,"author":{"gitId":"xinen26"},"content":"**Use case: List**","lastModifiedDate":"2024-02-27"},{"lineNumber":529,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":530,"author":{"gitId":"xinen26"},"content":"**MSS**","lastModifiedDate":"2024-02-27"},{"lineNumber":531,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":532,"author":{"gitId":"xinen26"},"content":"1. User requests to list persons","lastModifiedDate":"2024-02-27"},{"lineNumber":533,"author":{"gitId":"xinen26"},"content":"2. AddressBook shows a list of persons","lastModifiedDate":"2024-02-27"},{"lineNumber":534,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":535,"author":{"gitId":"xinen26"},"content":" Use case ends.","lastModifiedDate":"2024-02-27"},{"lineNumber":536,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":537,"author":{"gitId":"xinen26"},"content":"**Extensions**","lastModifiedDate":"2024-02-27"},{"lineNumber":538,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":539,"author":{"gitId":"xinen26"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-02-27"},{"lineNumber":540,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":541,"author":{"gitId":"xinen26"},"content":" Use case ends","lastModifiedDate":"2024-02-27"},{"lineNumber":542,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":543,"author":{"gitId":"xinen26"},"content":"**Use case: Add tag**","lastModifiedDate":"2024-02-27"},{"lineNumber":544,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":545,"author":{"gitId":"xinen26"},"content":"**MSS**","lastModifiedDate":"2024-02-27"},{"lineNumber":546,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":547,"author":{"gitId":"xinen26"},"content":"1. User requests to list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":548,"author":{"gitId":"xinen26"},"content":"2. HRConnect shows a list of contacts","lastModifiedDate":"2024-02-27"},{"lineNumber":549,"author":{"gitId":"xinen26"},"content":"3. User requests to add specific tags to specific contacts for easy filtering later.","lastModifiedDate":"2024-02-27"},{"lineNumber":550,"author":{"gitId":"xinen26"},"content":"4. HRConnect adds the specified tag to the designated contact.","lastModifiedDate":"2024-02-27"},{"lineNumber":551,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":552,"author":{"gitId":"xinen26"},"content":" Use case ends.","lastModifiedDate":"2024-02-27"},{"lineNumber":553,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":554,"author":{"gitId":"xinen26"},"content":"**Extensions**","lastModifiedDate":"2024-02-27"},{"lineNumber":555,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":556,"author":{"gitId":"xinen26"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-02-27"},{"lineNumber":557,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":558,"author":{"gitId":"xinen26"},"content":"* 3a. The application ID does not exist.","lastModifiedDate":"2024-02-27"},{"lineNumber":559,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":560,"author":{"gitId":"xinen26"},"content":" * 3a1. HRConnect shows an error message.","lastModifiedDate":"2024-02-27"},{"lineNumber":561,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":562,"author":{"gitId":"xinen26"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-02-27"},{"lineNumber":563,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":564,"author":{"gitId":"xinen26"},"content":"* 3b. The tag does not exist.","lastModifiedDate":"2024-02-27"},{"lineNumber":565,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":566,"author":{"gitId":"xinen26"},"content":" * 3b1. HRConnect shows an error message.","lastModifiedDate":"2024-02-27"},{"lineNumber":567,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":568,"author":{"gitId":"xinen26"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-02-27"},{"lineNumber":569,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":570,"author":{"gitId":"xinen26"},"content":" Use case ends","lastModifiedDate":"2024-02-27"},{"lineNumber":571,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":572,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":573,"author":{"gitId":"xinen26"},"content":" ","lastModifiedDate":"2024-02-27"},{"lineNumber":574,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":575,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":576,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":577,"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":578,"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":579,"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":580,"author":{"gitId":"YuvBindal"},"content":"4. Searches, additions, and updates to contacts should be processed within 2 seconds under normal operational conditions.","lastModifiedDate":"2024-03-04"},{"lineNumber":581,"author":{"gitId":"YuvBindal"},"content":"5. HRConnect should feature an intuitive user interface for easy management of contacts without prior training.","lastModifiedDate":"2024-03-04"},{"lineNumber":582,"author":{"gitId":"YuvBindal"},"content":"6. The system should provide clear error messages and guidance for correcting invalid inputs.","lastModifiedDate":"2024-03-04"},{"lineNumber":583,"author":{"gitId":"YuvBindal"},"content":"7. User data, including contacts, notes, and tags, must be securely handled both in transit and at rest.","lastModifiedDate":"2024-03-04"},{"lineNumber":584,"author":{"gitId":"YuvBindal"},"content":"8. The system should be designed to scale horizontally to accommodate growing numbers of users and contacts.","lastModifiedDate":"2024-03-04"},{"lineNumber":585,"author":{"gitId":"YuvBindal"},"content":"9. It should maintain performance and usability as data volume and number of concurrent users increase.","lastModifiedDate":"2024-03-04"},{"lineNumber":586,"author":{"gitId":"YuvBindal"},"content":"10. HRConnect should be available 24/7 with a target uptime of 99.9%, excluding scheduled maintenance.","lastModifiedDate":"2024-03-04"},{"lineNumber":587,"author":{"gitId":"YuvBindal"},"content":"11. It should include mechanisms for data backup and recovery to prevent data loss.","lastModifiedDate":"2024-03-04"},{"lineNumber":588,"author":{"gitId":"YuvBindal"},"content":"12. The system should be compatible with major operating systems (Windows, macOS, Linux) and browsers (Chrome, Firefox, Safari).","lastModifiedDate":"2024-03-04"},{"lineNumber":589,"author":{"gitId":"YuvBindal"},"content":"13. The application should be built using modular, well-documented code to facilitate maintenance and future updates.","lastModifiedDate":"2024-03-04"},{"lineNumber":590,"author":{"gitId":"YuvBindal"},"content":"14. It should allow for the easy addition of new features without significant restructuring of the existing codebase.","lastModifiedDate":"2024-03-04"},{"lineNumber":591,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":592,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":593,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":594,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":595,"author":{"gitId":"-"},"content":"* **Mainstream OS**: Windows, Linux, Unix, MacOS","lastModifiedDate":"2024-02-09"},{"lineNumber":596,"author":{"gitId":"-"},"content":"* **Private contact detail**: A contact detail that is not meant to be shared with others","lastModifiedDate":"2020-05-23"},{"lineNumber":597,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":598,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":599,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":600,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":601,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":602,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":603,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":604,"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":605,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":606,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":607,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":608,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":609,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":610,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":611,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":612,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":613,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":614,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":615,"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":616,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":617,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":618,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":619,"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":620,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":621,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":622,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","lastModifiedDate":"2020-05-23"},{"lineNumber":623,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":624,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":625,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":626,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":627,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":628,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":629,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":630,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":631,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":632,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":633,"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":634,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":635,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":636,"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":637,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":638,"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":639,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":640,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":641,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":642,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":643,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":644,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":645,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":646,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":647,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":648,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":649,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"YuvBindal":11,"ys112":47,"xinen26":229,"-":362}},{"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":"ys112"},"content":"**HRConnect is a Command Line Interface (CLI) optimized desktop application designed for storing contacts of potential hires, hiring agencies, and legal consultants.**","lastModifiedDate":"2024-03-05"},{"lineNumber":7,"author":{"gitId":"ys112"},"content":"By using commands, HR officers can efficiently organize contacts for their recruiting process.","lastModifiedDate":"2024-03-05"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"* Table of Contents","lastModifiedDate":"2020-05-23"},{"lineNumber":10,"author":{"gitId":"-"},"content":"{:toc}","lastModifiedDate":"2020-05-23"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":14,"author":{"gitId":"-"},"content":"## Quick start","lastModifiedDate":"2020-05-23"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"-"},"content":"1. Ensure you have Java `11` or above installed in your Computer.","lastModifiedDate":"2020-05-23"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"1. Download the latest `addressbook.jar` from [here](https://github.com/se-edu/addressbook-level3/releases).","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"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":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"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":23,"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":24,"author":{"gitId":"-"},"content":" ![Ui](images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"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":27,"author":{"gitId":"-"},"content":" Some example commands you can try:","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":29,"author":{"gitId":"-"},"content":" * `list` : Lists all contacts.","lastModifiedDate":"2023-01-01"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"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":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * `delete 3` : Deletes the 3rd contact shown in the current list.","lastModifiedDate":"2023-01-01"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":35,"author":{"gitId":"-"},"content":" * `clear` : Deletes all contacts.","lastModifiedDate":"2023-01-01"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * `exit` : Exits the app.","lastModifiedDate":"2023-01-01"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"-"},"content":"1. Refer to the [Features](#features) below for details of each command.","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":"","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"-"},"content":"## Features","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"block\" class\u003d\"alert alert-info\"\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":"**:information_source: Notes about the command format:**\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"lihaoquan"},"content":"* When users input a command along with its arguments, it will be trimmed (remove leading whitespace, trailing whitespace, and whitespace in between words when there are more than one space) and converted to lowercase for parsing.","lastModifiedDate":"2024-03-06"},{"lineNumber":50,"author":{"gitId":"lihaoquan"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":51,"author":{"gitId":"lihaoquan"},"content":"* When parsing arguments: “John Doe “, “John Doe”, and “ John Doe” will all be converted to “john doe”.","lastModifiedDate":"2024-03-06"},{"lineNumber":52,"author":{"gitId":"lihaoquan"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":53,"author":{"gitId":"lihaoquan"},"content":"* When parsing commands: “/FILTER”, “/FILTER stage_one ”, “ /FILTER STAGE_ONE ” will all be converted to “/filter stage_one”.","lastModifiedDate":"2024-03-06"},{"lineNumber":54,"author":{"gitId":"lihaoquan"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":55,"author":{"gitId":"lihaoquan"},"content":"* Words in angle brackets `\u003c\u003e` are the parameters to be supplied by the user.\u003cbr\u003e","lastModifiedDate":"2024-03-06"},{"lineNumber":56,"author":{"gitId":"lihaoquan"},"content":" e.g. in `/filter \u003cTag\u003e`, `\u003cTag\u003e` is a parameter which can be used as `/filter initial_application`.","lastModifiedDate":"2024-03-06"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":58,"author":{"gitId":"-"},"content":"* Items in square brackets are optional.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":59,"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":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":61,"author":{"gitId":"lihaoquan"},"content":"* Parameters can be in any order for `add` and `edit` commands.\u003cbr\u003e","lastModifiedDate":"2024-03-06"},{"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":"lihaoquan"},"content":"* Parameters must be in strict order for `filter`, `comment`, `export`, and `tag` command.","lastModifiedDate":"2024-03-06"},{"lineNumber":65,"author":{"gitId":"lihaoquan"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":66,"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":67,"author":{"gitId":"-"},"content":" e.g. if the command specifies `help 123`, it will be interpreted as `help`.","lastModifiedDate":"2021-02-03"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-02-03"},{"lineNumber":69,"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":70,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":72,"author":{"gitId":"-"},"content":"### Viewing help : `help`","lastModifiedDate":"2020-05-23"},{"lineNumber":73,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":74,"author":{"gitId":"ys112"},"content":"Shows a message explaining how to access the help page.","lastModifiedDate":"2024-02-26"},{"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":"ys112"},"content":"### Add an interviewee: `add`","lastModifiedDate":"2024-02-26"},{"lineNumber":79,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":80,"author":{"gitId":"ys112"},"content":"Adds an interviewee to the address book.","lastModifiedDate":"2024-02-26"},{"lineNumber":81,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":82,"author":{"gitId":"ys112"},"content":"Format: `add /n Name /p Phone_Number e/Email a/Address [/t Tag]…​`","lastModifiedDate":"2024-02-26"},{"lineNumber":83,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":84,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-primary\"\u003e:bulb: **Tip:**","lastModifiedDate":"2020-05-23"},{"lineNumber":85,"author":{"gitId":"ys112"},"content":"A interviewee can have any number of tags (including 0)","lastModifiedDate":"2024-02-26"},{"lineNumber":86,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":87,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":88,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":89,"author":{"gitId":"ys112"},"content":"* `add /n John Doe /p 98765432 /e johnDoegmail.com /a John street, block 123, #01-01 /t friend`","lastModifiedDate":"2024-02-26"},{"lineNumber":90,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":91,"author":{"gitId":"ys112"},"content":"### Listing all interviewees : `list`","lastModifiedDate":"2024-02-26"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":93,"author":{"gitId":"-"},"content":"Shows a list of all persons in the address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":94,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":95,"author":{"gitId":"-"},"content":"Format: `list`","lastModifiedDate":"2020-05-23"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":97,"author":{"gitId":"ys112"},"content":"### Editing an interviewee : `edit`","lastModifiedDate":"2024-02-26"},{"lineNumber":98,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":99,"author":{"gitId":"ys112"},"content":"Edits an existing interviewee in the address book.","lastModifiedDate":"2024-02-26"},{"lineNumber":100,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":101,"author":{"gitId":"ys112"},"content":"Format: `edit Index [/n Name] [/p Phone] [/e Email] [/a Address] [/t Tag]…​`","lastModifiedDate":"2024-02-26"},{"lineNumber":102,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":103,"author":{"gitId":"ys112"},"content":"* Edits the interviewee at the specified `Index`. The index refers to the index number shown in the displayed interviewee list. The index **must be a positive integer** 1, 2, 3, …​","lastModifiedDate":"2024-02-26"},{"lineNumber":104,"author":{"gitId":"-"},"content":"* At least one of the optional fields must be provided.","lastModifiedDate":"2020-05-23"},{"lineNumber":105,"author":{"gitId":"-"},"content":"* Existing values will be updated to the input values.","lastModifiedDate":"2020-05-23"},{"lineNumber":106,"author":{"gitId":"ys112"},"content":"* When editing tags, the existing tags of the interviewee will be removed i.e adding of tags is not cumulative.","lastModifiedDate":"2024-02-26"},{"lineNumber":107,"author":{"gitId":"ys112"},"content":"* You can remove all the interviewee’s tags by typing `/t` without","lastModifiedDate":"2024-02-26"},{"lineNumber":108,"author":{"gitId":"-"},"content":" specifying any tags after it.","lastModifiedDate":"2020-05-23"},{"lineNumber":109,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":110,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":111,"author":{"gitId":"ys112"},"content":"* `edit 1 /n 91234567 /e johndoe@example.com` Edits the phone number and email address of the 1st interviewee to be `91234567` and `johndoe@example.com` respectively.","lastModifiedDate":"2024-02-26"},{"lineNumber":112,"author":{"gitId":"ys112"},"content":"* `edit 2 /n Betsy Crower /t` Edits the name of the 2nd interviewee to be `Betsy Crower` and clears all existing tags.","lastModifiedDate":"2024-02-26"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":114,"author":{"gitId":"ys112"},"content":"### Locating interviewees by name: `find`","lastModifiedDate":"2024-02-26"},{"lineNumber":115,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":116,"author":{"gitId":"-"},"content":"Finds persons whose names contain any of the given keywords.","lastModifiedDate":"2020-05-23"},{"lineNumber":117,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":118,"author":{"gitId":"ys112"},"content":"Format: `find Keyword [More_Keywords]`","lastModifiedDate":"2024-02-26"},{"lineNumber":119,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":120,"author":{"gitId":"-"},"content":"* The search is case-insensitive. e.g `hans` will match `Hans`","lastModifiedDate":"2020-05-23"},{"lineNumber":121,"author":{"gitId":"-"},"content":"* The order of the keywords does not matter. e.g. `Hans Bo` will match `Bo Hans`","lastModifiedDate":"2020-05-23"},{"lineNumber":122,"author":{"gitId":"-"},"content":"* Only the name is searched.","lastModifiedDate":"2020-05-23"},{"lineNumber":123,"author":{"gitId":"-"},"content":"* Only full words will be matched e.g. `Han` will not match `Hans`","lastModifiedDate":"2020-05-23"},{"lineNumber":124,"author":{"gitId":"-"},"content":"* Persons matching at least one keyword will be returned (i.e. `OR` search).","lastModifiedDate":"2020-05-23"},{"lineNumber":125,"author":{"gitId":"-"},"content":" e.g. `Hans Bo` will return `Hans Gruber`, `Bo Yang`","lastModifiedDate":"2020-05-23"},{"lineNumber":126,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":127,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":128,"author":{"gitId":"-"},"content":"* `find John` returns `john` and `John Doe`","lastModifiedDate":"2020-05-23"},{"lineNumber":129,"author":{"gitId":"-"},"content":"* `find alex david` returns `Alex Yeoh`, `David Li`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":130,"author":{"gitId":"-"},"content":" ![result for \u0027find alex david\u0027](images/findAlexDavidResult.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":131,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":132,"author":{"gitId":"ys112"},"content":"### Deleting an interviewee : `delete`","lastModifiedDate":"2024-02-26"},{"lineNumber":133,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":134,"author":{"gitId":"ys112"},"content":"Deletes the specified interviewee from the address book.","lastModifiedDate":"2024-02-26"},{"lineNumber":135,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":136,"author":{"gitId":"ys112"},"content":"Format: `delete Index`","lastModifiedDate":"2024-02-26"},{"lineNumber":137,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":138,"author":{"gitId":"ys112"},"content":"* Deletes the interviewee at the specified `Index`.","lastModifiedDate":"2024-02-26"},{"lineNumber":139,"author":{"gitId":"ys112"},"content":"* The index refers to the index number shown in the displayed interviewee list.","lastModifiedDate":"2024-02-26"},{"lineNumber":140,"author":{"gitId":"-"},"content":"* The index **must be a positive integer** 1, 2, 3, …​","lastModifiedDate":"2020-05-23"},{"lineNumber":141,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":142,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":143,"author":{"gitId":"ys112"},"content":"* `list` followed by `delete 2` deletes the 2nd interviewee in the address book.","lastModifiedDate":"2024-02-26"},{"lineNumber":144,"author":{"gitId":"ys112"},"content":"* `find Betsy` followed by `delete 1` deletes the 1st interviewee in the results of the `find` command.","lastModifiedDate":"2024-02-26"},{"lineNumber":145,"author":{"gitId":"ys112"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":146,"author":{"gitId":"ys112"},"content":"### Filtering interviewees by tag : `/filter`","lastModifiedDate":"2024-02-26"},{"lineNumber":147,"author":{"gitId":"ys112"},"content":"Filter through contact list based on what stage the interviewee is in.","lastModifiedDate":"2024-02-26"},{"lineNumber":148,"author":{"gitId":"ys112"},"content":"Format: `/filter \u003cTag\u003e`","lastModifiedDate":"2024-02-26"},{"lineNumber":149,"author":{"gitId":"ys112"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":150,"author":{"gitId":"ys112"},"content":"* Filters the contact list based on the `\u003cTag\u003e` provided.","lastModifiedDate":"2024-02-26"},{"lineNumber":151,"author":{"gitId":"ys112"},"content":"* Possible values for `\u003cTag\u003e` are `initial_application`, `technical_assessment`, `interview`, `decision_and_offer`.","lastModifiedDate":"2024-02-26"},{"lineNumber":152,"author":{"gitId":"ys112"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":153,"author":{"gitId":"ys112"},"content":"Examples:","lastModifiedDate":"2024-02-26"},{"lineNumber":154,"author":{"gitId":"ys112"},"content":"* `/filter initial_application` filters the contact list to show only interviewees in the initial application stage.","lastModifiedDate":"2024-02-26"},{"lineNumber":155,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":156,"author":{"gitId":"xinen26"},"content":"### Adding notes to interviewees by tag : `/comment`","lastModifiedDate":"2024-02-27"},{"lineNumber":157,"author":{"gitId":"xinen26"},"content":"Facilitates the addition of notes or comments to individual interviewee entries.","lastModifiedDate":"2024-02-27"},{"lineNumber":158,"author":{"gitId":"xinen26"},"content":"Format: `/comment \u003cApplicationId\u003e \u003cNote\u003e`","lastModifiedDate":"2024-02-27"},{"lineNumber":159,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":160,"author":{"gitId":"xinen26"},"content":"* Incorporate supplementary notes to enrich the interviewee\u0027s profile.","lastModifiedDate":"2024-02-27"},{"lineNumber":161,"author":{"gitId":"xinen26"},"content":"* Possible values for `\u003cApplicationId\u003e` are integers.","lastModifiedDate":"2024-02-27"},{"lineNumber":162,"author":{"gitId":"xinen26"},"content":"* Possible values for `\u003cNote\u003e` are any non-empty string that provides relevant commentary.","lastModifiedDate":"2024-02-27"},{"lineNumber":163,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":164,"author":{"gitId":"xinen26"},"content":"Examples:","lastModifiedDate":"2024-02-27"},{"lineNumber":165,"author":{"gitId":"xinen26"},"content":"* `/comment 10 “S/Pass Holder”` will add the note “S/Pass Holder” to the applicant identified by ID 10.","lastModifiedDate":"2024-02-27"},{"lineNumber":166,"author":{"gitId":"xinen26"},"content":"","lastModifiedDate":"2024-02-27"},{"lineNumber":167,"author":{"gitId":"YuvBindal"},"content":"### Exporting interviewees contacts by pageId : `/export`","lastModifiedDate":"2024-03-04"},{"lineNumber":168,"author":{"gitId":"YuvBindal"},"content":"Extracts interviewees contacts into a separate address book identified by a pageId","lastModifiedDate":"2024-03-04"},{"lineNumber":169,"author":{"gitId":"YuvBindal"},"content":"Format: /export \u003cContactRange\u003e \u003cpageId\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":170,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":171,"author":{"gitId":"YuvBindal"},"content":"* Achieve an additional layer of organisation to properly arrange contacts","lastModifiedDate":"2024-03-04"},{"lineNumber":172,"author":{"gitId":"YuvBindal"},"content":"* Possible values for `\u003cpageId\u003e` are integers.","lastModifiedDate":"2024-03-04"},{"lineNumber":173,"author":{"gitId":"YuvBindal"},"content":"* Possible values for ContactRange are two integers denoting start:end indices.","lastModifiedDate":"2024-03-04"},{"lineNumber":174,"author":{"gitId":"YuvBindal"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":175,"author":{"gitId":"YuvBindal"},"content":"Examples:","lastModifiedDate":"2024-03-04"},{"lineNumber":176,"author":{"gitId":"YuvBindal"},"content":"* `/export [0:10] 1` will append contacts 0 to 10 inclusive onto page identified by ID 1.","lastModifiedDate":"2024-03-04"},{"lineNumber":177,"author":{"gitId":"YuvBindal"},"content":" ","lastModifiedDate":"2024-03-04"},{"lineNumber":178,"author":{"gitId":"-"},"content":"### Clearing all entries : `clear`","lastModifiedDate":"2020-05-23"},{"lineNumber":179,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":180,"author":{"gitId":"-"},"content":"Clears all entries from the address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":181,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":182,"author":{"gitId":"-"},"content":"Format: `clear`","lastModifiedDate":"2020-05-23"},{"lineNumber":183,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":184,"author":{"gitId":"-"},"content":"### Exiting the program : `exit`","lastModifiedDate":"2020-05-23"},{"lineNumber":185,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":186,"author":{"gitId":"-"},"content":"Exits the program.","lastModifiedDate":"2020-05-23"},{"lineNumber":187,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":188,"author":{"gitId":"-"},"content":"Format: `exit`","lastModifiedDate":"2020-05-23"},{"lineNumber":189,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":190,"author":{"gitId":"-"},"content":"### Saving the data","lastModifiedDate":"2020-05-23"},{"lineNumber":191,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":192,"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":193,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":194,"author":{"gitId":"-"},"content":"### Editing the data file","lastModifiedDate":"2021-02-04"},{"lineNumber":195,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-02-04"},{"lineNumber":196,"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":197,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-02-04"},{"lineNumber":198,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-warning\"\u003e:exclamation: **Caution:**","lastModifiedDate":"2021-02-04"},{"lineNumber":199,"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":200,"author":{"gitId":"-"},"content":"Furthermore, certain edits can cause the AddressBook 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-09"},{"lineNumber":201,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2021-02-04"},{"lineNumber":202,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-02-04"},{"lineNumber":203,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":204,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":205,"author":{"gitId":"-"},"content":"## Command summary","lastModifiedDate":"2020-05-23"},{"lineNumber":206,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":207,"author":{"gitId":"-"},"content":"Action | Format, Examples","lastModifiedDate":"2020-05-23"},{"lineNumber":208,"author":{"gitId":"-"},"content":"--------|------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":209,"author":{"gitId":"ys112"},"content":"**Add** | `add /n Name /p Phone_Number e/Email a/Address [/t Tag]…​`\u003cbr\u003e e.g., `add /n John Doe /p 98765432 /e johnDoe@gmail.com /a John street, block 123, #01-01 /t friend`","lastModifiedDate":"2024-02-26"},{"lineNumber":210,"author":{"gitId":"-"},"content":"**Clear** | `clear`","lastModifiedDate":"2020-05-23"},{"lineNumber":211,"author":{"gitId":"-"},"content":"**Delete** | `delete INDEX`\u003cbr\u003e e.g., `delete 3`","lastModifiedDate":"2020-05-23"},{"lineNumber":212,"author":{"gitId":"ys112"},"content":"**Edit** | `edit Index [/n Name] [/p Phone] [/e Email] [/a Address] [/t Tag]…​`\u003cbr\u003e e.g., `edit 2 /n Betsy Crower /t friend`","lastModifiedDate":"2024-02-26"},{"lineNumber":213,"author":{"gitId":"ys112"},"content":"**Find** | `find Keyword [More_Keywords]`\u003cbr\u003e e.g., `find alice bob charlie`","lastModifiedDate":"2024-02-26"},{"lineNumber":214,"author":{"gitId":"-"},"content":"**List** | `list`","lastModifiedDate":"2020-05-23"},{"lineNumber":215,"author":{"gitId":"-"},"content":"**Help** | `help`","lastModifiedDate":"2020-05-23"},{"lineNumber":216,"author":{"gitId":"ys112"},"content":"**Exit** | `exit`","lastModifiedDate":"2024-02-26"},{"lineNumber":217,"author":{"gitId":"ys112"},"content":"**Filter** | `/filter \u003cTag\u003e` \u003cbr\u003e e.g., `/filter initial_application`","lastModifiedDate":"2024-02-26"},{"lineNumber":218,"author":{"gitId":"xinen26"},"content":"**Comment** | `/comment \u003cApplicationId\u003e \u003cNote\u003e` \u003cbr\u003e e.g., `/comment 10 “S/Pass Holder”`","lastModifiedDate":"2024-02-27"},{"lineNumber":219,"author":{"gitId":"YuvBindal"},"content":"**Export** | `/export \u003cContactRange\u003e \u003cpageId\u003e` \u003cbr\u003e e.g., `/export [0:10] 1`","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"lihaoquan":11,"YuvBindal":11,"ys112":41,"xinen26":12,"-":144}},{"path":"docs/team/lihaoquan.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"lihaoquan"},"content":"---","lastModifiedDate":"2024-02-26"},{"lineNumber":2,"author":{"gitId":"lihaoquan"},"content":"layout: page","lastModifiedDate":"2024-02-26"},{"lineNumber":3,"author":{"gitId":"lihaoquan"},"content":"title: John Doe\u0027s Project Portfolio Page","lastModifiedDate":"2024-02-26"},{"lineNumber":4,"author":{"gitId":"lihaoquan"},"content":"---","lastModifiedDate":"2024-02-26"},{"lineNumber":5,"author":{"gitId":"lihaoquan"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":6,"author":{"gitId":"lihaoquan"},"content":"### Project: AddressBook Level 3","lastModifiedDate":"2024-02-26"},{"lineNumber":7,"author":{"gitId":"lihaoquan"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":8,"author":{"gitId":"lihaoquan"},"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-26"},{"lineNumber":9,"author":{"gitId":"lihaoquan"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":10,"author":{"gitId":"lihaoquan"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-02-26"},{"lineNumber":11,"author":{"gitId":"lihaoquan"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":12,"author":{"gitId":"lihaoquan"},"content":"* **New Feature**: Added the ability to undo/redo previous commands.","lastModifiedDate":"2024-02-26"},{"lineNumber":13,"author":{"gitId":"lihaoquan"},"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-02-26"},{"lineNumber":14,"author":{"gitId":"lihaoquan"},"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-02-26"},{"lineNumber":15,"author":{"gitId":"lihaoquan"},"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-02-26"},{"lineNumber":16,"author":{"gitId":"lihaoquan"},"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-02-26"},{"lineNumber":17,"author":{"gitId":"lihaoquan"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":18,"author":{"gitId":"lihaoquan"},"content":"* **New Feature**: Added a history command that allows the user to navigate to previous commands using up/down keys.","lastModifiedDate":"2024-02-26"},{"lineNumber":19,"author":{"gitId":"lihaoquan"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":20,"author":{"gitId":"lihaoquan"},"content":"* **Code contributed**: [RepoSense link]()","lastModifiedDate":"2024-02-26"},{"lineNumber":21,"author":{"gitId":"lihaoquan"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":22,"author":{"gitId":"lihaoquan"},"content":"* **Project management**:","lastModifiedDate":"2024-02-26"},{"lineNumber":23,"author":{"gitId":"lihaoquan"},"content":" * Managed releases `v1.3` - `v1.5rc` (3 releases) on GitHub","lastModifiedDate":"2024-02-26"},{"lineNumber":24,"author":{"gitId":"lihaoquan"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":25,"author":{"gitId":"lihaoquan"},"content":"* **Enhancements to existing features**:","lastModifiedDate":"2024-02-26"},{"lineNumber":26,"author":{"gitId":"lihaoquan"},"content":" * Updated the GUI color scheme (Pull requests [\\#33](), [\\#34]())","lastModifiedDate":"2024-02-26"},{"lineNumber":27,"author":{"gitId":"lihaoquan"},"content":" * Wrote additional tests for existing features to increase coverage from 88% to 92% (Pull requests [\\#36](), [\\#38]())","lastModifiedDate":"2024-02-26"},{"lineNumber":28,"author":{"gitId":"lihaoquan"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":29,"author":{"gitId":"lihaoquan"},"content":"* **Documentation**:","lastModifiedDate":"2024-02-26"},{"lineNumber":30,"author":{"gitId":"lihaoquan"},"content":" * User Guide:","lastModifiedDate":"2024-02-26"},{"lineNumber":31,"author":{"gitId":"lihaoquan"},"content":" * Added documentation for the features `delete` and `find` [\\#72]()","lastModifiedDate":"2024-02-26"},{"lineNumber":32,"author":{"gitId":"lihaoquan"},"content":" * Did cosmetic tweaks to existing documentation of features `clear`, `exit`: [\\#74]()","lastModifiedDate":"2024-02-26"},{"lineNumber":33,"author":{"gitId":"lihaoquan"},"content":" * Developer Guide:","lastModifiedDate":"2024-02-26"},{"lineNumber":34,"author":{"gitId":"lihaoquan"},"content":" * Added implementation details of the `delete` feature.","lastModifiedDate":"2024-02-26"},{"lineNumber":35,"author":{"gitId":"lihaoquan"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":36,"author":{"gitId":"lihaoquan"},"content":"* **Community**:","lastModifiedDate":"2024-02-26"},{"lineNumber":37,"author":{"gitId":"lihaoquan"},"content":" * PRs reviewed (with non-trivial review comments): [\\#12](), [\\#32](), [\\#19](), [\\#42]()","lastModifiedDate":"2024-02-26"},{"lineNumber":38,"author":{"gitId":"lihaoquan"},"content":" * Contributed to forum discussions (examples: [1](), [2](), [3](), [4]())","lastModifiedDate":"2024-02-26"},{"lineNumber":39,"author":{"gitId":"lihaoquan"},"content":" * Reported bugs and suggestions for other teams in the class (examples: [1](), [2](), [3]())","lastModifiedDate":"2024-02-26"},{"lineNumber":40,"author":{"gitId":"lihaoquan"},"content":" * Some parts of the history feature I added was adopted by several other class mates ([1](), [2]())","lastModifiedDate":"2024-02-26"},{"lineNumber":41,"author":{"gitId":"lihaoquan"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":42,"author":{"gitId":"lihaoquan"},"content":"* **Tools**:","lastModifiedDate":"2024-02-26"},{"lineNumber":43,"author":{"gitId":"lihaoquan"},"content":" * Integrated a third party library (Natty) to the project ([\\#42]())","lastModifiedDate":"2024-02-26"},{"lineNumber":44,"author":{"gitId":"lihaoquan"},"content":" * Integrated a new Github plugin (CircleCI) to the team repo","lastModifiedDate":"2024-02-26"},{"lineNumber":45,"author":{"gitId":"lihaoquan"},"content":"","lastModifiedDate":"2024-02-26"},{"lineNumber":46,"author":{"gitId":"lihaoquan"},"content":"* _{you can add/remove categories in the list above}_","lastModifiedDate":"2024-02-26"}],"authorContributionMap":{"lihaoquan":46}}] diff --git a/AY2324S2-CS2103-F15-3_tp_master/commits.json b/AY2324S2-CS2103-F15-3_tp_master/commits.json index 2ad40d08..3b7a3f4c 100644 --- a/AY2324S2-CS2103-F15-3_tp_master/commits.json +++ b/AY2324S2-CS2103-F15-3_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"lihaoquan":[{"date":"2024-02-26","commitResults":[{"hash":"485ac0c4113bf20d43f0fca4ff662b8aba5b3ee2","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"Add information for v1.1 milestone\n\nUpdate AboutUs.md\n","fileTypesAndContributionMap":{"docs":{"insertions":212,"deletions":27}}},{"hash":"6c664a71e6c4b72120c5e6a7a16cc1605d28515f","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"1ec5d5d6d8af6d120888c7757c72f39a8c1b429e","isMergeCommit":true,"messageTitle":"Merge pull request #7 from lihaoquan/master","messageBody":"Update AboutUs.md","fileTypesAndContributionMap":{}},{"hash":"bf5316242a1401fdb2ec816b420c97a5437279d3","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":0}}},{"hash":"56ff13c87311150d1af07425c78ee56ed2a382ae","isMergeCommit":false,"messageTitle":"Update product description","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":2}}},{"hash":"e86191d0624fe932970c2a8f640367ff49617af4","isMergeCommit":false,"messageTitle":"Update product description","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":4}}},{"hash":"1626bfbc53b5591addf9d9807b6b36876fb8e5e5","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":2}}},{"hash":"06394c043c03d51d5de5d0614be6300926ce7852","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-project-website\u0027 into branch-project-website","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f9044080cec6a83c2baa9bae1cb4eb49d3b43116","isMergeCommit":false,"messageTitle":"Fix trailing white-space for MarkDown","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"66bdc2b5851941971355fc43f2099f30ce10ae1c","isMergeCommit":false,"messageTitle":"Update AboutUs.md to comply with format","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"ad8adf7170fb1b87401d88eb0f6fdd8ee777f38b","isMergeCommit":true,"messageTitle":"Merge pull request #8 from lihaoquan/branch-project-website","messageBody":"Update README.md","fileTypesAndContributionMap":{}}]},{"date":"2024-02-28","commitResults":[{"hash":"31337eed46eabd4d571c1be687d11b596f490a20","isMergeCommit":true,"messageTitle":"Merge pull request #14 from lihaoquan/branch-project-website","messageBody":"Update _config.yml","fileTypesAndContributionMap":{}},{"hash":"1d7af863793c8e6fd88c63355890d4ea96b4bf21","isMergeCommit":true,"messageTitle":"Merge pull request #15 from AY2324S2-CS2103-F15-3/branch-project-website","messageBody":"Merge Branch project website","fileTypesAndContributionMap":{}}]},{"date":"2024-02-29","commitResults":[{"hash":"ec78385a1e0fa488881d90dc6fac3e5202aaa88c","isMergeCommit":true,"messageTitle":"Merge pull request #16 from lihaoquan/branch-project-website","messageBody":"Update Ui.png","fileTypesAndContributionMap":{}},{"hash":"1306441f5fa982963694dbdc7be8b005cb8e8db3","isMergeCommit":true,"messageTitle":"Merge pull request #17 from AY2324S2-CS2103-F15-3/branch-project-website","messageBody":"Update Ui.png","fileTypesAndContributionMap":{}}]}],"YuvBindal":[{"date":"2024-02-26","commitResults":[{"hash":"cad3283eb64ab9924b482ec1eb972b333e8cc7b7","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}},{"hash":"17893fbc0e06f7de60a7b11fd99cc713f9c2dc28","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2024-03-04","commitResults":[{"hash":"9472907511f9aa2ba2b2fe7f5ba35362d152d794","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":11,"deletions":0}}},{"hash":"e9df6f839cf980bf531134d1589c60a624dfeb38","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":0}}},{"hash":"d2d5784ef9d3ab7816c67bc57b3c3463dc2f6242","isMergeCommit":true,"messageTitle":"Merge pull request #18 from YuvBindal/master","messageBody":"Update UserGuide.md","fileTypesAndContributionMap":{}},{"hash":"eb97cc9ce66282a7301f1e60d6aca0f268421bca","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":11,"deletions":1}}},{"hash":"7771e618340605e2fbf1c91abaa88f3a7d4f3413","isMergeCommit":true,"messageTitle":"Merge pull request #19 from YuvBindal/master","messageBody":"Update DeveloperGuide.md","fileTypesAndContributionMap":{}}]}],"ys112":[{"date":"2024-02-26","commitResults":[{"hash":"cf39008a185c1b65e8f5fcd91acc41645e556235","isMergeCommit":false,"messageTitle":"Add filter feature into user guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":39,"deletions":48}}},{"hash":"e428f29178e1f9be3b504bcd6fe0ac0b95826030","isMergeCommit":false,"messageTitle":"Fix checkstyle issues for guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}},{"hash":"80f9104113349f551c4cd0d1b24cc4eb90919ee4","isMergeCommit":true,"messageTitle":"Merge pull request #10 from ys112/update-UG","messageBody":"Add filter feature into user guide","fileTypesAndContributionMap":{}},{"hash":"aafe1cd941fd4c30a1e367fe27290b3a71accfa5","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-project-website","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a5b8585298d96f0dfb928979d558c025e1b69a57","isMergeCommit":true,"messageTitle":"Merge pull request #9 from AY2324S2-CS2103-F15-3/branch-project-website","messageBody":"Merge Branch project website","fileTypesAndContributionMap":{}},{"hash":"1868195dbfc4c08505d8d20ba1b4529cb8385b52","isMergeCommit":false,"messageTitle":"Add target user profile, value proposition, and user stories","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":47,"deletions":21}}},{"hash":"8f53d0087a6121d02bf018c2aa4fda706f805c92","isMergeCommit":true,"messageTitle":"Merge pull request #11 from ys112/update-DG","messageBody":"Add target user profile, value proposition, and user stories","fileTypesAndContributionMap":{}}]},{"date":"2024-03-05","commitResults":[{"hash":"29ff1bc75eda17631acf0f4fcd613ed418cda960","isMergeCommit":false,"messageTitle":"Clean up traces of AB3 in user guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":1}}},{"hash":"225fd34ab68ba2f6deb209cfc900fbc33054f2b2","isMergeCommit":true,"messageTitle":"Merge pull request #20 from ys112/update-UG","messageBody":"Clean up traces of AB3 in user guide","fileTypesAndContributionMap":{}}]}],"xinen26":[{"date":"2024-02-27","commitResults":[{"hash":"e719870711d0cf4277bad8363f4c0c3f3eb371ff","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":11,"deletions":0}}},{"hash":"d21645e77f9bf150bb382400ba992af001fbd894","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":0}}},{"hash":"daec8e73f3b0687ad3fa13de2e5e58d16bbeca3d","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}},{"hash":"6132eba6bcb853aadcd0cad6a98341704e4a2140","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}},{"hash":"0f27c787414747a2f33e77f55537a1e7797f2c5a","isMergeCommit":true,"messageTitle":"Merge pull request #12 from xinen26/Update-UG","messageBody":"Add Comment function into user guide","fileTypesAndContributionMap":{}},{"hash":"3188f83f6eff5a9a308eeea6c43c1d60c1831e49","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":84,"deletions":3}}},{"hash":"d2767249122c205d57f7dbe1e55732ef50618d01","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":154,"deletions":0}}},{"hash":"8adc30cdaf1644a32eddaf0cb1524619d35b7ab4","isMergeCommit":false,"messageTitle":"Change names for use cases","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":46,"deletions":50}}},{"hash":"608a70e29abbcfa9580fc25d5922b72751a18e15","isMergeCommit":true,"messageTitle":"Merge pull request #13 from xinen26/Update-DG","messageBody":"Update developer guide for use case","fileTypesAndContributionMap":{}}]}],"ChrisHo1341":[]},"authorFileTypeContributionMap":{"lihaoquan":{"docs":79,"functional-code":0,"test-code":0},"YuvBindal":{"docs":24,"functional-code":0,"test-code":0},"ys112":{"docs":88,"functional-code":0,"test-code":0},"xinen26":{"docs":241,"functional-code":0,"test-code":0},"ChrisHo1341":{"docs":0,"functional-code":0,"test-code":0}},"authorContributionVariance":{"lihaoquan":5527.5767,"YuvBindal":46.222225,"ys112":1974.0552,"xinen26":9955.076,"ChrisHo1341":0.0},"authorDisplayNameMap":{"lihaoquan":"CS2103-F15-3 LI H..QUAN","YuvBindal":"CS2103-F15-3 BIND.. YUV","ys112":"CS2103-F15-3 YONG..SIAN","xinen26":"CS2103-F15-3 LEE ..N EN","ChrisHo1341":"CS2103-F15-3 HO W..PHER"}} +{"authorDailyContributionsMap":{"lihaoquan":[{"date":"2024-02-26","commitResults":[{"hash":"485ac0c4113bf20d43f0fca4ff662b8aba5b3ee2","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"Add information for v1.1 milestone\n\nUpdate AboutUs.md\n","fileTypesAndContributionMap":{"docs":{"insertions":212,"deletions":27}}},{"hash":"6c664a71e6c4b72120c5e6a7a16cc1605d28515f","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"1ec5d5d6d8af6d120888c7757c72f39a8c1b429e","isMergeCommit":true,"messageTitle":"Merge pull request #7 from lihaoquan/master","messageBody":"Update AboutUs.md","fileTypesAndContributionMap":{}},{"hash":"bf5316242a1401fdb2ec816b420c97a5437279d3","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":0}}},{"hash":"56ff13c87311150d1af07425c78ee56ed2a382ae","isMergeCommit":false,"messageTitle":"Update product description","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":2}}},{"hash":"e86191d0624fe932970c2a8f640367ff49617af4","isMergeCommit":false,"messageTitle":"Update product description","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":4}}},{"hash":"1626bfbc53b5591addf9d9807b6b36876fb8e5e5","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":2}}},{"hash":"06394c043c03d51d5de5d0614be6300926ce7852","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-project-website\u0027 into branch-project-website","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f9044080cec6a83c2baa9bae1cb4eb49d3b43116","isMergeCommit":false,"messageTitle":"Fix trailing white-space for MarkDown","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"66bdc2b5851941971355fc43f2099f30ce10ae1c","isMergeCommit":false,"messageTitle":"Update AboutUs.md to comply with format","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"ad8adf7170fb1b87401d88eb0f6fdd8ee777f38b","isMergeCommit":true,"messageTitle":"Merge pull request #8 from lihaoquan/branch-project-website","messageBody":"Update README.md","fileTypesAndContributionMap":{}}]},{"date":"2024-02-28","commitResults":[{"hash":"31337eed46eabd4d571c1be687d11b596f490a20","isMergeCommit":true,"messageTitle":"Merge pull request #14 from lihaoquan/branch-project-website","messageBody":"Update _config.yml","fileTypesAndContributionMap":{}},{"hash":"1d7af863793c8e6fd88c63355890d4ea96b4bf21","isMergeCommit":true,"messageTitle":"Merge pull request #15 from AY2324S2-CS2103-F15-3/branch-project-website","messageBody":"Merge Branch project website","fileTypesAndContributionMap":{}}]},{"date":"2024-02-29","commitResults":[{"hash":"ec78385a1e0fa488881d90dc6fac3e5202aaa88c","isMergeCommit":true,"messageTitle":"Merge pull request #16 from lihaoquan/branch-project-website","messageBody":"Update Ui.png","fileTypesAndContributionMap":{}},{"hash":"1306441f5fa982963694dbdc7be8b005cb8e8db3","isMergeCommit":true,"messageTitle":"Merge pull request #17 from AY2324S2-CS2103-F15-3/branch-project-website","messageBody":"Update Ui.png","fileTypesAndContributionMap":{}}]},{"date":"2024-03-06","commitResults":[{"hash":"0b48fcbadfe6801e2ded7e5ec09c52ae659ee192","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":11,"deletions":6}}},{"hash":"7d9f0180b535d9795338072cdf98e06ea18a2b82","isMergeCommit":true,"messageTitle":"Merge pull request #21 from lihaoquan/branch-project-website","messageBody":"Update UserGuide.md for \"In General / Features\"","fileTypesAndContributionMap":{}},{"hash":"15556c623b136885ca384b70ac8d3df6c0191942","isMergeCommit":true,"messageTitle":"Merge pull request #22 from AY2324S2-CS2103-F15-3/branch-project-website","messageBody":"Merge Branch project website ","fileTypesAndContributionMap":{}},{"hash":"3b44f1591abb3cffc48fd640b2b398109f5313fb","isMergeCommit":false,"messageTitle":"Remove extra bullet point","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"f4f3afc19a99b338670bd339e844d898b2326ff4","isMergeCommit":true,"messageTitle":"Merge pull request #23 from lihaoquan/branch-project-website","messageBody":"Remove extra bullet point for UserGuide.md","fileTypesAndContributionMap":{}}]}],"YuvBindal":[{"date":"2024-02-26","commitResults":[{"hash":"cad3283eb64ab9924b482ec1eb972b333e8cc7b7","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}},{"hash":"17893fbc0e06f7de60a7b11fd99cc713f9c2dc28","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2024-03-04","commitResults":[{"hash":"9472907511f9aa2ba2b2fe7f5ba35362d152d794","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":11,"deletions":0}}},{"hash":"e9df6f839cf980bf531134d1589c60a624dfeb38","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":0}}},{"hash":"d2d5784ef9d3ab7816c67bc57b3c3463dc2f6242","isMergeCommit":true,"messageTitle":"Merge pull request #18 from YuvBindal/master","messageBody":"Update UserGuide.md","fileTypesAndContributionMap":{}},{"hash":"eb97cc9ce66282a7301f1e60d6aca0f268421bca","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":11,"deletions":1}}},{"hash":"7771e618340605e2fbf1c91abaa88f3a7d4f3413","isMergeCommit":true,"messageTitle":"Merge pull request #19 from YuvBindal/master","messageBody":"Update DeveloperGuide.md","fileTypesAndContributionMap":{}}]}],"ys112":[{"date":"2024-02-26","commitResults":[{"hash":"cf39008a185c1b65e8f5fcd91acc41645e556235","isMergeCommit":false,"messageTitle":"Add filter feature into user guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":39,"deletions":48}}},{"hash":"e428f29178e1f9be3b504bcd6fe0ac0b95826030","isMergeCommit":false,"messageTitle":"Fix checkstyle issues for guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}},{"hash":"80f9104113349f551c4cd0d1b24cc4eb90919ee4","isMergeCommit":true,"messageTitle":"Merge pull request #10 from ys112/update-UG","messageBody":"Add filter feature into user guide","fileTypesAndContributionMap":{}},{"hash":"aafe1cd941fd4c30a1e367fe27290b3a71accfa5","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-project-website","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a5b8585298d96f0dfb928979d558c025e1b69a57","isMergeCommit":true,"messageTitle":"Merge pull request #9 from AY2324S2-CS2103-F15-3/branch-project-website","messageBody":"Merge Branch project website","fileTypesAndContributionMap":{}},{"hash":"1868195dbfc4c08505d8d20ba1b4529cb8385b52","isMergeCommit":false,"messageTitle":"Add target user profile, value proposition, and user stories","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":47,"deletions":21}}},{"hash":"8f53d0087a6121d02bf018c2aa4fda706f805c92","isMergeCommit":true,"messageTitle":"Merge pull request #11 from ys112/update-DG","messageBody":"Add target user profile, value proposition, and user stories","fileTypesAndContributionMap":{}}]},{"date":"2024-03-05","commitResults":[{"hash":"29ff1bc75eda17631acf0f4fcd613ed418cda960","isMergeCommit":false,"messageTitle":"Clean up traces of AB3 in user guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":1}}},{"hash":"225fd34ab68ba2f6deb209cfc900fbc33054f2b2","isMergeCommit":true,"messageTitle":"Merge pull request #20 from ys112/update-UG","messageBody":"Clean up traces of AB3 in user guide","fileTypesAndContributionMap":{}}]}],"xinen26":[{"date":"2024-02-27","commitResults":[{"hash":"e719870711d0cf4277bad8363f4c0c3f3eb371ff","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":11,"deletions":0}}},{"hash":"d21645e77f9bf150bb382400ba992af001fbd894","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":0}}},{"hash":"daec8e73f3b0687ad3fa13de2e5e58d16bbeca3d","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}},{"hash":"6132eba6bcb853aadcd0cad6a98341704e4a2140","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}},{"hash":"0f27c787414747a2f33e77f55537a1e7797f2c5a","isMergeCommit":true,"messageTitle":"Merge pull request #12 from xinen26/Update-UG","messageBody":"Add Comment function into user guide","fileTypesAndContributionMap":{}},{"hash":"3188f83f6eff5a9a308eeea6c43c1d60c1831e49","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":84,"deletions":3}}},{"hash":"d2767249122c205d57f7dbe1e55732ef50618d01","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":154,"deletions":0}}},{"hash":"8adc30cdaf1644a32eddaf0cb1524619d35b7ab4","isMergeCommit":false,"messageTitle":"Change names for use cases","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":46,"deletions":50}}},{"hash":"608a70e29abbcfa9580fc25d5922b72751a18e15","isMergeCommit":true,"messageTitle":"Merge pull request #13 from xinen26/Update-DG","messageBody":"Update developer guide for use case","fileTypesAndContributionMap":{}}]}],"ChrisHo1341":[]},"authorFileTypeContributionMap":{"lihaoquan":{"docs":90,"functional-code":0,"test-code":0},"YuvBindal":{"docs":24,"functional-code":0,"test-code":0},"ys112":{"docs":88,"functional-code":0,"test-code":0},"xinen26":{"docs":241,"functional-code":0,"test-code":0},"ChrisHo1341":{"docs":0,"functional-code":0,"test-code":0}},"authorContributionVariance":{"lihaoquan":5103.2065,"YuvBindal":43.171593,"ys112":1835.4677,"xinen26":9253.563,"ChrisHo1341":0.0},"authorDisplayNameMap":{"lihaoquan":"CS2103-F15-3 LI H..QUAN","YuvBindal":"CS2103-F15-3 BIND.. YUV","ys112":"CS2103-F15-3 YONG..SIAN","xinen26":"CS2103-F15-3 LEE ..N EN","ChrisHo1341":"CS2103-F15-3 HO W..PHER"}} diff --git a/AY2324S2-CS2103T-T13-3_tp_master/authorship.json b/AY2324S2-CS2103T-T13-3_tp_master/authorship.json index eef7f9e2..f33d02b8 100644 --- a/AY2324S2-CS2103T-T13-3_tp_master/authorship.json +++ b/AY2324S2-CS2103T-T13-3_tp_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"ibnu2651"},"content":"[![CI Status](https://github.com/AY2324S2-CS2103T-T13-3/tp/workflows/Java%20CI/badge.svg)](https://github.com/AY2324S2-CS2103T-T13-3/tp/actions)","lastModifiedDate":"2024-03-03"},{"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":"-"},"content":"* This is **a sample project for Software Engineering (SE) students**.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":" Example usages:","lastModifiedDate":"2020-05-23"},{"lineNumber":7,"author":{"gitId":"-"},"content":" * as a starting point of a course project (as opposed to writing everything from scratch)","lastModifiedDate":"2020-05-23"},{"lineNumber":8,"author":{"gitId":"-"},"content":" * as a case study","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"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":10,"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":11,"author":{"gitId":"-"},"content":" * It comes with a **reasonable level of user and developer documentation**.","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"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":13,"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":14,"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"},{"lineNumber":15,"author":{"gitId":"ibnu2651"},"content":"* This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-03-03"}],"authorContributionMap":{"ibnu2651":2,"-":13}},{"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":"kaiyi27"},"content":"### Teoh Kai Yi","lastModifiedDate":"2024-03-02"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"kaiyi27"},"content":"\u003cimg src\u003d\"images/kaiyi27.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-02"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"[[homepage](http://www.comp.nus.edu.sg/~damithch)]","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"kaiyi27"},"content":"[[github](https://github.com/kaiyi27)]","lastModifiedDate":"2024-03-02"},{"lineNumber":20,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2024-03-02"},{"lineNumber":23,"author":{"gitId":"kaiyi27"},"content":"* Responsibilities: ","lastModifiedDate":"2024-03-02"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":25,"author":{"gitId":"ibnu2651"},"content":"### Ibnu Taimiyyah Bin Adam","lastModifiedDate":"2024-03-03"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":27,"author":{"gitId":"ibnu2651"},"content":"\u003cimg src\u003d\"images/ibnu2651.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-03"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":29,"author":{"gitId":"ibnu2651"},"content":"[[github](https://github.com/ibnu2651)]","lastModifiedDate":"2024-03-03"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"ibnu2651"},"content":"* Responsibilities:","lastModifiedDate":"2024-03-03"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"Shauryan123"},"content":"### Shauryan Agrawal","lastModifiedDate":"2024-03-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"Shauryan123"},"content":"\u003cimg src\u003d\"images/Shauryan.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":"[[github](http://github.com/johndoe)]","lastModifiedDate":"2020-06-17"},{"lineNumber":39,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":41,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2024-03-05"},{"lineNumber":42,"author":{"gitId":"Shauryan123"},"content":"* Responsibilities:","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"Shauryan123":3,"kaiyi27":4,"ibnu2651":4,"-":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":"ibnu2651"},"content":"# Insura-Connect Developer Guide","lastModifiedDate":"2024-03-03"},{"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":"-"},"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":"kaiyi27"},"content":"|----------|-------------------------------------------|---------------------------------|-------------------------------------------------------------------------|","lastModifiedDate":"2024-03-02"},{"lineNumber":292,"author":{"gitId":"kaiyi27"},"content":"| `* * *` | fast typing user | have a CLI | use the app more efficiently |","lastModifiedDate":"2024-03-02"},{"lineNumber":293,"author":{"gitId":"kaiyi27"},"content":"| `* * *` | busy user | clear all my data quickly | quickly restart a new list of contacts |","lastModifiedDate":"2024-03-02"},{"lineNumber":294,"author":{"gitId":"kaiyi27"},"content":"| `* * *` | intermediate user | see my relationship with my contacts | know who they are |","lastModifiedDate":"2024-03-02"},{"lineNumber":295,"author":{"gitId":"kaiyi27"},"content":"| `* * *` | intermediate user | find a certain client based on a keyword | easier to find the client |","lastModifiedDate":"2024-03-02"},{"lineNumber":296,"author":{"gitId":"kaiyi27"},"content":"| `* * *` | intermediate user | save and retrieve information | use the app in multiple sessions |","lastModifiedDate":"2024-03-02"},{"lineNumber":297,"author":{"gitId":"kaiyi27"},"content":"| `* * *` | intermediate user | add data about clients to the application | record information about my client |","lastModifiedDate":"2024-03-02"},{"lineNumber":298,"author":{"gitId":"kaiyi27"},"content":"| `* *` | exploring the app | see what the app will look like with sample data | more easily understand the potential features |","lastModifiedDate":"2024-03-02"},{"lineNumber":299,"author":{"gitId":"kaiyi27"},"content":"| `* *` | exploring the app | have a tutorial of the basic features | get started with using the app |","lastModifiedDate":"2024-03-02"},{"lineNumber":300,"author":{"gitId":"kaiyi27"},"content":"| `* *` | exploring the app | access a help page with basic commands | familiarize myself with how to use the app |","lastModifiedDate":"2024-03-02"},{"lineNumber":301,"author":{"gitId":"kaiyi27"},"content":"| `* *` | exploring the app | track my client information | manage my work using the app more efficiently |","lastModifiedDate":"2024-03-02"},{"lineNumber":302,"author":{"gitId":"kaiyi27"},"content":"| `* *` | exploring the app | access past activity since app installation | see my current progress |","lastModifiedDate":"2024-03-02"},{"lineNumber":303,"author":{"gitId":"kaiyi27"},"content":"| `* *` | intermediate user | save similar client information data into a group | manage them easily |","lastModifiedDate":"2024-03-02"},{"lineNumber":304,"author":{"gitId":"kaiyi27"},"content":"| `* *` | intermediate user | reorganize my list of contacts | access them more clearly and efficiently |","lastModifiedDate":"2024-03-02"},{"lineNumber":305,"author":{"gitId":"kaiyi27"},"content":"| `* *` | intermediate user | edit my contacts as a group | easier to implement changes if something in common in the group changes |","lastModifiedDate":"2024-03-02"},{"lineNumber":306,"author":{"gitId":"kaiyi27"},"content":"| `* *` | careless user | have an undo command | prevent doing some mistake |","lastModifiedDate":"2024-03-02"},{"lineNumber":307,"author":{"gitId":"kaiyi27"},"content":"| `* *` | intermediate user | filter client information | sort my client information according to some condition |","lastModifiedDate":"2024-03-02"},{"lineNumber":308,"author":{"gitId":"kaiyi27"},"content":"| `*` | intermediate user | record if I am successful in securing an agreement | know I have succeeded at my job |","lastModifiedDate":"2024-03-02"},{"lineNumber":309,"author":{"gitId":"kaiyi27"},"content":"| `*` | busy user | autocomplete my commands | type commands faster |","lastModifiedDate":"2024-03-02"},{"lineNumber":310,"author":{"gitId":"kaiyi27"},"content":"| `*` | intermediate user | tag my clients | classify common groups |","lastModifiedDate":"2024-03-02"},{"lineNumber":311,"author":{"gitId":"kaiyi27"},"content":"| `*` | intermediate user | have common use shortcut keys command | access the app more efficiently |","lastModifiedDate":"2024-03-02"},{"lineNumber":312,"author":{"gitId":"kaiyi27"},"content":"| `*` | intermediate user | track progress of engagements via tags | monitor the progress of different engagements with clients |","lastModifiedDate":"2024-03-02"},{"lineNumber":313,"author":{"gitId":"kaiyi27"},"content":"| `*` | intermediate user | copy information/features to another client | reduce the time used |","lastModifiedDate":"2024-03-02"},{"lineNumber":314,"author":{"gitId":"kaiyi27"},"content":"| `*` | intermediate user | quickly differentiate between clients and business partners | differentiate between them |","lastModifiedDate":"2024-03-02"},{"lineNumber":315,"author":{"gitId":"kaiyi27"},"content":"| `*` | intermediate user | rate clients for effective feedback | provide feedback efficiently |","lastModifiedDate":"2024-03-02"},{"lineNumber":316,"author":{"gitId":"kaiyi27"},"content":"| `*` | intermediate user | customize the app’s theme | better suits my preferences |","lastModifiedDate":"2024-03-02"},{"lineNumber":317,"author":{"gitId":"kaiyi27"},"content":"| `*` | expert user | create shortcuts for tasks | save time on frequently performed tasks |","lastModifiedDate":"2024-03-02"},{"lineNumber":318,"author":{"gitId":"kaiyi27"},"content":"| `*` | long-time user | archive/hide unused data | not distracted by irrelevant data |","lastModifiedDate":"2024-03-02"},{"lineNumber":319,"author":{"gitId":"kaiyi27"},"content":"| `*` | frequent user | have templates for adding contacts | contacts are standardized and easier to read |","lastModifiedDate":"2024-03-02"},{"lineNumber":320,"author":{"gitId":"kaiyi27"},"content":"| `*` | frequent user | schedule weekly check-ins with clients | do not forget about them |","lastModifiedDate":"2024-03-02"},{"lineNumber":321,"author":{"gitId":"kaiyi27"},"content":"| `*` | expert user | have reminders for meetings with clients | organize and plan my time well |","lastModifiedDate":"2024-03-02"},{"lineNumber":322,"author":{"gitId":"kaiyi27"},"content":"| `*` | expert user | create automated task workflows | save time on performing repeated tasks |","lastModifiedDate":"2024-03-02"},{"lineNumber":323,"author":{"gitId":"kaiyi27"},"content":"| `*` | expert user | see a competency rating based on past successes | know if I need to improve |","lastModifiedDate":"2024-03-02"},{"lineNumber":324,"author":{"gitId":"kaiyi27"},"content":"| `*` | expert user | find clients based on different filters | better focus on one particular group |","lastModifiedDate":"2024-03-02"},{"lineNumber":325,"author":{"gitId":"kaiyi27"},"content":"| `*` | expert user | disable unnecessary features | the application is more customized and simpler to use |","lastModifiedDate":"2024-03-02"},{"lineNumber":326,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":327,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":328,"author":{"gitId":"-"},"content":"### Use cases","lastModifiedDate":"2020-06-07"},{"lineNumber":329,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":330,"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":331,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":332,"author":{"gitId":"-"},"content":"**Use case: Delete a person**","lastModifiedDate":"2020-05-23"},{"lineNumber":333,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":334,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2020-05-23"},{"lineNumber":335,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":336,"author":{"gitId":"-"},"content":"1. User requests to list persons","lastModifiedDate":"2020-05-23"},{"lineNumber":337,"author":{"gitId":"-"},"content":"2. AddressBook shows a list of persons","lastModifiedDate":"2020-05-23"},{"lineNumber":338,"author":{"gitId":"-"},"content":"3. User requests to delete a specific person in the list","lastModifiedDate":"2020-05-23"},{"lineNumber":339,"author":{"gitId":"-"},"content":"4. AddressBook deletes the person","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":"**Extensions**","lastModifiedDate":"2020-05-23"},{"lineNumber":344,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":345,"author":{"gitId":"-"},"content":"* 2a. The list is empty.","lastModifiedDate":"2020-05-23"},{"lineNumber":346,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":347,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":348,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":349,"author":{"gitId":"-"},"content":"* 3a. The given index is invalid.","lastModifiedDate":"2020-05-23"},{"lineNumber":350,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":351,"author":{"gitId":"-"},"content":" * 3a1. AddressBook shows an error message.","lastModifiedDate":"2020-05-23"},{"lineNumber":352,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":353,"author":{"gitId":"-"},"content":" Use case resumes at step 2.","lastModifiedDate":"2020-05-23"},{"lineNumber":354,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":355,"author":{"gitId":"kaiyi27"},"content":"**Use case: List out the contact information**","lastModifiedDate":"2024-03-03"},{"lineNumber":356,"author":{"gitId":"kaiyi27"},"content":"","lastModifiedDate":"2024-03-03"},{"lineNumber":357,"author":{"gitId":"kaiyi27"},"content":"**MSS**","lastModifiedDate":"2024-03-03"},{"lineNumber":358,"author":{"gitId":"kaiyi27"},"content":"","lastModifiedDate":"2024-03-03"},{"lineNumber":359,"author":{"gitId":"kaiyi27"},"content":"1. User requests to list persons","lastModifiedDate":"2024-03-03"},{"lineNumber":360,"author":{"gitId":"kaiyi27"},"content":"2. AddressBook shows a list of persons","lastModifiedDate":"2024-03-03"},{"lineNumber":361,"author":{"gitId":"kaiyi27"},"content":"","lastModifiedDate":"2024-03-03"},{"lineNumber":362,"author":{"gitId":"kaiyi27"},"content":" Use case ends.","lastModifiedDate":"2024-03-03"},{"lineNumber":363,"author":{"gitId":"kaiyi27"},"content":"","lastModifiedDate":"2024-03-03"},{"lineNumber":364,"author":{"gitId":"kaiyi27"},"content":"**Extensions**","lastModifiedDate":"2024-03-03"},{"lineNumber":365,"author":{"gitId":"kaiyi27"},"content":"","lastModifiedDate":"2024-03-03"},{"lineNumber":366,"author":{"gitId":"ibnu2651"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-03-03"},{"lineNumber":367,"author":{"gitId":"ibnu2651"},"content":"","lastModifiedDate":"2024-03-03"},{"lineNumber":368,"author":{"gitId":"ibnu2651"},"content":" Use case ends.","lastModifiedDate":"2024-03-03"},{"lineNumber":369,"author":{"gitId":"ibnu2651"},"content":"","lastModifiedDate":"2024-03-03"},{"lineNumber":370,"author":{"gitId":"ibnu2651"},"content":"**Use case: Filter the list of clients**","lastModifiedDate":"2024-03-03"},{"lineNumber":371,"author":{"gitId":"ibnu2651"},"content":"","lastModifiedDate":"2024-03-03"},{"lineNumber":372,"author":{"gitId":"ibnu2651"},"content":"**MSS**","lastModifiedDate":"2024-03-03"},{"lineNumber":373,"author":{"gitId":"ibnu2651"},"content":"","lastModifiedDate":"2024-03-03"},{"lineNumber":374,"author":{"gitId":"ibnu2651"},"content":"1. User requests to filter list of persons","lastModifiedDate":"2024-03-03"},{"lineNumber":375,"author":{"gitId":"ibnu2651"},"content":"2. AddressBook shows a list of persons that satisfy the filter","lastModifiedDate":"2024-03-03"},{"lineNumber":376,"author":{"gitId":"ibnu2651"},"content":"","lastModifiedDate":"2024-03-03"},{"lineNumber":377,"author":{"gitId":"ibnu2651"},"content":" Use case ends.","lastModifiedDate":"2024-03-03"},{"lineNumber":378,"author":{"gitId":"ibnu2651"},"content":"","lastModifiedDate":"2024-03-03"},{"lineNumber":379,"author":{"gitId":"ibnu2651"},"content":"**Extensions**","lastModifiedDate":"2024-03-03"},{"lineNumber":380,"author":{"gitId":"ibnu2651"},"content":"","lastModifiedDate":"2024-03-03"},{"lineNumber":381,"author":{"gitId":"kaiyi27"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-03-03"},{"lineNumber":382,"author":{"gitId":"kaiyi27"},"content":"","lastModifiedDate":"2024-03-03"},{"lineNumber":383,"author":{"gitId":"kaiyi27"},"content":" Use case ends.","lastModifiedDate":"2024-03-03"},{"lineNumber":384,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":385,"author":{"gitId":"Shauryan123"},"content":"**Use case: Add a new person**","lastModifiedDate":"2024-03-05"},{"lineNumber":386,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":387,"author":{"gitId":"Shauryan123"},"content":"**MSS**","lastModifiedDate":"2024-03-05"},{"lineNumber":388,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":389,"author":{"gitId":"Shauryan123"},"content":"1. User requests to add a new person.","lastModifiedDate":"2024-03-05"},{"lineNumber":390,"author":{"gitId":"Shauryan123"},"content":"2. AddressBook prompts the user to enter the details of the person.","lastModifiedDate":"2024-03-05"},{"lineNumber":391,"author":{"gitId":"Shauryan123"},"content":"3. User enters the details of the person.","lastModifiedDate":"2024-03-05"},{"lineNumber":392,"author":{"gitId":"Shauryan123"},"content":"4. AddressBook adds the new person to the list.","lastModifiedDate":"2024-03-05"},{"lineNumber":393,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":394,"author":{"gitId":"Shauryan123"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":395,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":396,"author":{"gitId":"Shauryan123"},"content":"**Extensions**","lastModifiedDate":"2024-03-05"},{"lineNumber":397,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":398,"author":{"gitId":"Shauryan123"},"content":"* 3a. The user enters invalid details.","lastModifiedDate":"2024-03-05"},{"lineNumber":399,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":400,"author":{"gitId":"Shauryan123"},"content":" * 3a1. AddressBook shows an error message.","lastModifiedDate":"2024-03-05"},{"lineNumber":401,"author":{"gitId":"Shauryan123"},"content":" * 3a2. AddressBook prompts the user to enter the details again.","lastModifiedDate":"2024-03-05"},{"lineNumber":402,"author":{"gitId":"Shauryan123"},"content":" ","lastModifiedDate":"2024-03-05"},{"lineNumber":403,"author":{"gitId":"Shauryan123"},"content":" Use case resumes at step 3.","lastModifiedDate":"2024-03-05"},{"lineNumber":404,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":405,"author":{"gitId":"Shauryan123"},"content":"**Use case: Update a person\u0027s details**","lastModifiedDate":"2024-03-05"},{"lineNumber":406,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":407,"author":{"gitId":"Shauryan123"},"content":"**MSS**","lastModifiedDate":"2024-03-05"},{"lineNumber":408,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":409,"author":{"gitId":"Shauryan123"},"content":"1. User requests to list persons..","lastModifiedDate":"2024-03-05"},{"lineNumber":410,"author":{"gitId":"Shauryan123"},"content":"2. AddressBook shows a list of persons.","lastModifiedDate":"2024-03-05"},{"lineNumber":411,"author":{"gitId":"Shauryan123"},"content":"3. User requests to update the details of a specific person in the list.","lastModifiedDate":"2024-03-05"},{"lineNumber":412,"author":{"gitId":"Shauryan123"},"content":"4. AddressBook prompts the user to enter the new details.","lastModifiedDate":"2024-03-05"},{"lineNumber":413,"author":{"gitId":"Shauryan123"},"content":"5. User enters the new details.","lastModifiedDate":"2024-03-05"},{"lineNumber":414,"author":{"gitId":"Shauryan123"},"content":"6. AddressBook updates the person\u0027s details.","lastModifiedDate":"2024-03-05"},{"lineNumber":415,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":416,"author":{"gitId":"Shauryan123"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":417,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":418,"author":{"gitId":"Shauryan123"},"content":"**Extensions**","lastModifiedDate":"2024-03-05"},{"lineNumber":419,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":420,"author":{"gitId":"Shauryan123"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-03-05"},{"lineNumber":421,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":422,"author":{"gitId":"Shauryan123"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":423,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":424,"author":{"gitId":"Shauryan123"},"content":"* 3a. The given index is invalid..","lastModifiedDate":"2024-03-05"},{"lineNumber":425,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":426,"author":{"gitId":"Shauryan123"},"content":" * 3a1. AddressBook shows an error message.","lastModifiedDate":"2024-03-05"},{"lineNumber":427,"author":{"gitId":"Shauryan123"},"content":" ","lastModifiedDate":"2024-03-05"},{"lineNumber":428,"author":{"gitId":"Shauryan123"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-03-05"},{"lineNumber":429,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":430,"author":{"gitId":"Shauryan123"},"content":"* 5a. The user enters invalid details.","lastModifiedDate":"2024-03-05"},{"lineNumber":431,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":432,"author":{"gitId":"Shauryan123"},"content":" * 5a1. AddressBook shows an error message.","lastModifiedDate":"2024-03-05"},{"lineNumber":433,"author":{"gitId":"Shauryan123"},"content":" * 5a2. AddressBook prompts the user to enter the details again.","lastModifiedDate":"2024-03-05"},{"lineNumber":434,"author":{"gitId":"Shauryan123"},"content":" ","lastModifiedDate":"2024-03-05"},{"lineNumber":435,"author":{"gitId":"Shauryan123"},"content":" Use case resumes at step 4.","lastModifiedDate":"2024-03-05"},{"lineNumber":436,"author":{"gitId":"Shauryan123"},"content":" ","lastModifiedDate":"2024-03-05"},{"lineNumber":437,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":438,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":439,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":440,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":441,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":442,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":443,"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":444,"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":445,"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":446,"author":{"gitId":"ibnu2651"},"content":"4. The response to any use action should become visible within 5 seconds.","lastModifiedDate":"2024-03-03"},{"lineNumber":447,"author":{"gitId":"ibnu2651"},"content":"5. Should have a user-friendly interface that is easy to navigate and understand.","lastModifiedDate":"2024-03-03"},{"lineNumber":448,"author":{"gitId":"ibnu2651"},"content":"6. Should be stable and not crash or lose data under normal use.","lastModifiedDate":"2024-03-03"},{"lineNumber":449,"author":{"gitId":"Shauryan123"},"content":"7. Should be able to handle increasing amounts of data and users without significant degradation in performance (Scalability).","lastModifiedDate":"2024-03-05"},{"lineNumber":450,"author":{"gitId":"Shauryan123"},"content":"8. Should protect sensitive data and prevent unauthorized access, ensuring data integrity and confidentiality (Security).","lastModifiedDate":"2024-03-05"},{"lineNumber":451,"author":{"gitId":"Shauryan123"},"content":"9. Should be easy to maintain, with clear documentation and a modular design that allows for easy updates and fixes .","lastModifiedDate":"2024-03-05"},{"lineNumber":452,"author":{"gitId":"Shauryan123"},"content":"10. Should be accessible to users with disabilities, following guidelines such as the Web Content Accessibility Guidelines (WCAG).","lastModifiedDate":"2024-03-05"},{"lineNumber":453,"author":{"gitId":"ibnu2651"},"content":"","lastModifiedDate":"2024-03-03"},{"lineNumber":454,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":455,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":456,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":457,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":458,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":459,"author":{"gitId":"-"},"content":"* **Mainstream OS**: Windows, Linux, Unix, MacOS","lastModifiedDate":"2024-02-09"},{"lineNumber":460,"author":{"gitId":"-"},"content":"* **Private contact detail**: A contact detail that is not meant to be shared with others","lastModifiedDate":"2020-05-23"},{"lineNumber":461,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":462,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":463,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":464,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":465,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":466,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":467,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":468,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":469,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":470,"author":{"gitId":"-"},"content":"**Note:** These instructions only provide a starting point for testers to work on;","lastModifiedDate":"2023-09-12"},{"lineNumber":471,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":472,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":473,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":474,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":475,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":476,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":477,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":478,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":479,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":480,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":481,"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":482,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":483,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":484,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":485,"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":486,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":487,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":488,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","lastModifiedDate":"2020-05-23"},{"lineNumber":489,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":490,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":491,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":492,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":493,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":494,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":495,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":496,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":497,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":498,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":499,"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":500,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":501,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":502,"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":503,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":504,"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":505,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":506,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":507,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":508,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":509,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":510,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":511,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":512,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":513,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":514,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":515,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"Shauryan123":59,"kaiyi27":49,"ibnu2651":20,"-":387}},{"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\"\u003eInsura-Connect\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":"ibnu2651"},"content":" \u003cli\u003e\u003ca href\u003d\"https://github.com/AY2324S2-CS2103T-T13-3/tp\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003e\u003cmd\u003e:fab-github:\u003c/md\u003e\u003c/a\u003e","lastModifiedDate":"2024-03-03"},{"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":{"ibnu2651":1,"-":66}}] +[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"ibnu2651"},"content":"[![CI Status](https://github.com/AY2324S2-CS2103T-T13-3/tp/workflows/Java%20CI/badge.svg)](https://github.com/AY2324S2-CS2103T-T13-3/tp/actions)","lastModifiedDate":"2024-03-03"},{"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":"ibnu2651"},"content":"* Insura-Connect is an enhanced version of the AddressBook-Level3 project, which serves as a personal contact management tool for insurance agents.","lastModifiedDate":"2024-03-06"},{"lineNumber":6,"author":{"gitId":"ibnu2651"},"content":"* It provides fast access to client contact details, easily manage client relationships, collaborate with industry partners, and stay organised in a fast-paced industry","lastModifiedDate":"2024-03-06"},{"lineNumber":7,"author":{"gitId":"ibnu2651"},"content":"* For the detailed documentation of this project, see the **[Insura-Connect Product Website](https://ay2324s2-cs2103t-t13-3.github.io/tp/)**.","lastModifiedDate":"2024-03-06"},{"lineNumber":8,"author":{"gitId":"ibnu2651"},"content":"* This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-03-03"}],"authorContributionMap":{"ibnu2651":5,"-":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":"kaiyi27"},"content":"### Teoh Kai Yi","lastModifiedDate":"2024-03-02"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"kaiyi27"},"content":"\u003cimg src\u003d\"images/kaiyi27.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-02"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"[[homepage](http://www.comp.nus.edu.sg/~damithch)]","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"kaiyi27"},"content":"[[github](https://github.com/kaiyi27)]","lastModifiedDate":"2024-03-02"},{"lineNumber":20,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2024-03-02"},{"lineNumber":23,"author":{"gitId":"kaiyi27"},"content":"* Responsibilities: ","lastModifiedDate":"2024-03-02"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":25,"author":{"gitId":"ibnu2651"},"content":"### Ibnu Taimiyyah Bin Adam","lastModifiedDate":"2024-03-03"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":27,"author":{"gitId":"ibnu2651"},"content":"\u003cimg src\u003d\"images/ibnu2651.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-03"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":29,"author":{"gitId":"ibnu2651"},"content":"[[github](https://github.com/ibnu2651)]","lastModifiedDate":"2024-03-03"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"ibnu2651"},"content":"* Responsibilities:","lastModifiedDate":"2024-03-03"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"Shauryan123"},"content":"### Shauryan Agrawal","lastModifiedDate":"2024-03-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"Shauryan123"},"content":"\u003cimg src\u003d\"images/Shauryan.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":"[[github](http://github.com/johndoe)]","lastModifiedDate":"2020-06-17"},{"lineNumber":39,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":41,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2024-03-05"},{"lineNumber":42,"author":{"gitId":"Shauryan123"},"content":"* Responsibilities:","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"Shauryan123":3,"kaiyi27":4,"ibnu2651":4,"-":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":"ibnu2651"},"content":"# Insura-Connect Developer Guide","lastModifiedDate":"2024-03-03"},{"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":"-"},"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":"kaiyi27"},"content":"|----------|-------------------------------------------|---------------------------------|-------------------------------------------------------------------------|","lastModifiedDate":"2024-03-02"},{"lineNumber":292,"author":{"gitId":"kaiyi27"},"content":"| `* * *` | fast typing user | have a CLI | use the app more efficiently |","lastModifiedDate":"2024-03-02"},{"lineNumber":293,"author":{"gitId":"kaiyi27"},"content":"| `* * *` | busy user | clear all my data quickly | quickly restart a new list of contacts |","lastModifiedDate":"2024-03-02"},{"lineNumber":294,"author":{"gitId":"kaiyi27"},"content":"| `* * *` | intermediate user | see my relationship with my contacts | know who they are |","lastModifiedDate":"2024-03-02"},{"lineNumber":295,"author":{"gitId":"kaiyi27"},"content":"| `* * *` | intermediate user | find a certain client based on a keyword | easier to find the client |","lastModifiedDate":"2024-03-02"},{"lineNumber":296,"author":{"gitId":"kaiyi27"},"content":"| `* * *` | intermediate user | save and retrieve information | use the app in multiple sessions |","lastModifiedDate":"2024-03-02"},{"lineNumber":297,"author":{"gitId":"kaiyi27"},"content":"| `* * *` | intermediate user | add data about clients to the application | record information about my client |","lastModifiedDate":"2024-03-02"},{"lineNumber":298,"author":{"gitId":"kaiyi27"},"content":"| `* *` | exploring the app | see what the app will look like with sample data | more easily understand the potential features |","lastModifiedDate":"2024-03-02"},{"lineNumber":299,"author":{"gitId":"kaiyi27"},"content":"| `* *` | exploring the app | have a tutorial of the basic features | get started with using the app |","lastModifiedDate":"2024-03-02"},{"lineNumber":300,"author":{"gitId":"kaiyi27"},"content":"| `* *` | exploring the app | access a help page with basic commands | familiarize myself with how to use the app |","lastModifiedDate":"2024-03-02"},{"lineNumber":301,"author":{"gitId":"kaiyi27"},"content":"| `* *` | exploring the app | track my client information | manage my work using the app more efficiently |","lastModifiedDate":"2024-03-02"},{"lineNumber":302,"author":{"gitId":"kaiyi27"},"content":"| `* *` | exploring the app | access past activity since app installation | see my current progress |","lastModifiedDate":"2024-03-02"},{"lineNumber":303,"author":{"gitId":"kaiyi27"},"content":"| `* *` | intermediate user | save similar client information data into a group | manage them easily |","lastModifiedDate":"2024-03-02"},{"lineNumber":304,"author":{"gitId":"kaiyi27"},"content":"| `* *` | intermediate user | reorganize my list of contacts | access them more clearly and efficiently |","lastModifiedDate":"2024-03-02"},{"lineNumber":305,"author":{"gitId":"kaiyi27"},"content":"| `* *` | intermediate user | edit my contacts as a group | easier to implement changes if something in common in the group changes |","lastModifiedDate":"2024-03-02"},{"lineNumber":306,"author":{"gitId":"kaiyi27"},"content":"| `* *` | careless user | have an undo command | prevent doing some mistake |","lastModifiedDate":"2024-03-02"},{"lineNumber":307,"author":{"gitId":"kaiyi27"},"content":"| `* *` | intermediate user | filter client information | sort my client information according to some condition |","lastModifiedDate":"2024-03-02"},{"lineNumber":308,"author":{"gitId":"kaiyi27"},"content":"| `*` | intermediate user | record if I am successful in securing an agreement | know I have succeeded at my job |","lastModifiedDate":"2024-03-02"},{"lineNumber":309,"author":{"gitId":"kaiyi27"},"content":"| `*` | busy user | autocomplete my commands | type commands faster |","lastModifiedDate":"2024-03-02"},{"lineNumber":310,"author":{"gitId":"kaiyi27"},"content":"| `*` | intermediate user | tag my clients | classify common groups |","lastModifiedDate":"2024-03-02"},{"lineNumber":311,"author":{"gitId":"kaiyi27"},"content":"| `*` | intermediate user | have common use shortcut keys command | access the app more efficiently |","lastModifiedDate":"2024-03-02"},{"lineNumber":312,"author":{"gitId":"kaiyi27"},"content":"| `*` | intermediate user | track progress of engagements via tags | monitor the progress of different engagements with clients |","lastModifiedDate":"2024-03-02"},{"lineNumber":313,"author":{"gitId":"kaiyi27"},"content":"| `*` | intermediate user | copy information/features to another client | reduce the time used |","lastModifiedDate":"2024-03-02"},{"lineNumber":314,"author":{"gitId":"kaiyi27"},"content":"| `*` | intermediate user | quickly differentiate between clients and business partners | differentiate between them |","lastModifiedDate":"2024-03-02"},{"lineNumber":315,"author":{"gitId":"kaiyi27"},"content":"| `*` | intermediate user | rate clients for effective feedback | provide feedback efficiently |","lastModifiedDate":"2024-03-02"},{"lineNumber":316,"author":{"gitId":"kaiyi27"},"content":"| `*` | intermediate user | customize the app’s theme | better suits my preferences |","lastModifiedDate":"2024-03-02"},{"lineNumber":317,"author":{"gitId":"kaiyi27"},"content":"| `*` | expert user | create shortcuts for tasks | save time on frequently performed tasks |","lastModifiedDate":"2024-03-02"},{"lineNumber":318,"author":{"gitId":"kaiyi27"},"content":"| `*` | long-time user | archive/hide unused data | not distracted by irrelevant data |","lastModifiedDate":"2024-03-02"},{"lineNumber":319,"author":{"gitId":"kaiyi27"},"content":"| `*` | frequent user | have templates for adding contacts | contacts are standardized and easier to read |","lastModifiedDate":"2024-03-02"},{"lineNumber":320,"author":{"gitId":"kaiyi27"},"content":"| `*` | frequent user | schedule weekly check-ins with clients | do not forget about them |","lastModifiedDate":"2024-03-02"},{"lineNumber":321,"author":{"gitId":"kaiyi27"},"content":"| `*` | expert user | have reminders for meetings with clients | organize and plan my time well |","lastModifiedDate":"2024-03-02"},{"lineNumber":322,"author":{"gitId":"kaiyi27"},"content":"| `*` | expert user | create automated task workflows | save time on performing repeated tasks |","lastModifiedDate":"2024-03-02"},{"lineNumber":323,"author":{"gitId":"kaiyi27"},"content":"| `*` | expert user | see a competency rating based on past successes | know if I need to improve |","lastModifiedDate":"2024-03-02"},{"lineNumber":324,"author":{"gitId":"kaiyi27"},"content":"| `*` | expert user | find clients based on different filters | better focus on one particular group |","lastModifiedDate":"2024-03-02"},{"lineNumber":325,"author":{"gitId":"kaiyi27"},"content":"| `*` | expert user | disable unnecessary features | the application is more customized and simpler to use |","lastModifiedDate":"2024-03-02"},{"lineNumber":326,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":327,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":328,"author":{"gitId":"-"},"content":"### Use cases","lastModifiedDate":"2020-06-07"},{"lineNumber":329,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":330,"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":331,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":332,"author":{"gitId":"-"},"content":"**Use case: Delete a person**","lastModifiedDate":"2020-05-23"},{"lineNumber":333,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":334,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2020-05-23"},{"lineNumber":335,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":336,"author":{"gitId":"-"},"content":"1. User requests to list persons","lastModifiedDate":"2020-05-23"},{"lineNumber":337,"author":{"gitId":"-"},"content":"2. AddressBook shows a list of persons","lastModifiedDate":"2020-05-23"},{"lineNumber":338,"author":{"gitId":"-"},"content":"3. User requests to delete a specific person in the list","lastModifiedDate":"2020-05-23"},{"lineNumber":339,"author":{"gitId":"-"},"content":"4. AddressBook deletes the person","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":"**Extensions**","lastModifiedDate":"2020-05-23"},{"lineNumber":344,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":345,"author":{"gitId":"-"},"content":"* 2a. The list is empty.","lastModifiedDate":"2020-05-23"},{"lineNumber":346,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":347,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":348,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":349,"author":{"gitId":"-"},"content":"* 3a. The given index is invalid.","lastModifiedDate":"2020-05-23"},{"lineNumber":350,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":351,"author":{"gitId":"-"},"content":" * 3a1. AddressBook shows an error message.","lastModifiedDate":"2020-05-23"},{"lineNumber":352,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":353,"author":{"gitId":"-"},"content":" Use case resumes at step 2.","lastModifiedDate":"2020-05-23"},{"lineNumber":354,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":355,"author":{"gitId":"kaiyi27"},"content":"**Use case: List out the contact information**","lastModifiedDate":"2024-03-03"},{"lineNumber":356,"author":{"gitId":"kaiyi27"},"content":"","lastModifiedDate":"2024-03-03"},{"lineNumber":357,"author":{"gitId":"kaiyi27"},"content":"**MSS**","lastModifiedDate":"2024-03-03"},{"lineNumber":358,"author":{"gitId":"kaiyi27"},"content":"","lastModifiedDate":"2024-03-03"},{"lineNumber":359,"author":{"gitId":"kaiyi27"},"content":"1. User requests to list persons","lastModifiedDate":"2024-03-03"},{"lineNumber":360,"author":{"gitId":"kaiyi27"},"content":"2. AddressBook shows a list of persons","lastModifiedDate":"2024-03-03"},{"lineNumber":361,"author":{"gitId":"kaiyi27"},"content":"","lastModifiedDate":"2024-03-03"},{"lineNumber":362,"author":{"gitId":"kaiyi27"},"content":" Use case ends.","lastModifiedDate":"2024-03-03"},{"lineNumber":363,"author":{"gitId":"kaiyi27"},"content":"","lastModifiedDate":"2024-03-03"},{"lineNumber":364,"author":{"gitId":"kaiyi27"},"content":"**Extensions**","lastModifiedDate":"2024-03-03"},{"lineNumber":365,"author":{"gitId":"kaiyi27"},"content":"","lastModifiedDate":"2024-03-03"},{"lineNumber":366,"author":{"gitId":"ibnu2651"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-03-03"},{"lineNumber":367,"author":{"gitId":"ibnu2651"},"content":"","lastModifiedDate":"2024-03-03"},{"lineNumber":368,"author":{"gitId":"ibnu2651"},"content":" Use case ends.","lastModifiedDate":"2024-03-03"},{"lineNumber":369,"author":{"gitId":"ibnu2651"},"content":"","lastModifiedDate":"2024-03-03"},{"lineNumber":370,"author":{"gitId":"ibnu2651"},"content":"**Use case: Filter the list of clients**","lastModifiedDate":"2024-03-03"},{"lineNumber":371,"author":{"gitId":"ibnu2651"},"content":"","lastModifiedDate":"2024-03-03"},{"lineNumber":372,"author":{"gitId":"ibnu2651"},"content":"**MSS**","lastModifiedDate":"2024-03-03"},{"lineNumber":373,"author":{"gitId":"ibnu2651"},"content":"","lastModifiedDate":"2024-03-03"},{"lineNumber":374,"author":{"gitId":"ibnu2651"},"content":"1. User requests to filter list of persons","lastModifiedDate":"2024-03-03"},{"lineNumber":375,"author":{"gitId":"ibnu2651"},"content":"2. AddressBook shows a list of persons that satisfy the filter","lastModifiedDate":"2024-03-03"},{"lineNumber":376,"author":{"gitId":"ibnu2651"},"content":"","lastModifiedDate":"2024-03-03"},{"lineNumber":377,"author":{"gitId":"ibnu2651"},"content":" Use case ends.","lastModifiedDate":"2024-03-03"},{"lineNumber":378,"author":{"gitId":"ibnu2651"},"content":"","lastModifiedDate":"2024-03-03"},{"lineNumber":379,"author":{"gitId":"ibnu2651"},"content":"**Extensions**","lastModifiedDate":"2024-03-03"},{"lineNumber":380,"author":{"gitId":"ibnu2651"},"content":"","lastModifiedDate":"2024-03-03"},{"lineNumber":381,"author":{"gitId":"kaiyi27"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-03-03"},{"lineNumber":382,"author":{"gitId":"kaiyi27"},"content":"","lastModifiedDate":"2024-03-03"},{"lineNumber":383,"author":{"gitId":"kaiyi27"},"content":" Use case ends.","lastModifiedDate":"2024-03-03"},{"lineNumber":384,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":385,"author":{"gitId":"Shauryan123"},"content":"**Use case: Add a new person**","lastModifiedDate":"2024-03-05"},{"lineNumber":386,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":387,"author":{"gitId":"Shauryan123"},"content":"**MSS**","lastModifiedDate":"2024-03-05"},{"lineNumber":388,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":389,"author":{"gitId":"Shauryan123"},"content":"1. User requests to add a new person.","lastModifiedDate":"2024-03-05"},{"lineNumber":390,"author":{"gitId":"Shauryan123"},"content":"2. AddressBook prompts the user to enter the details of the person.","lastModifiedDate":"2024-03-05"},{"lineNumber":391,"author":{"gitId":"Shauryan123"},"content":"3. User enters the details of the person.","lastModifiedDate":"2024-03-05"},{"lineNumber":392,"author":{"gitId":"Shauryan123"},"content":"4. AddressBook adds the new person to the list.","lastModifiedDate":"2024-03-05"},{"lineNumber":393,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":394,"author":{"gitId":"Shauryan123"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":395,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":396,"author":{"gitId":"Shauryan123"},"content":"**Extensions**","lastModifiedDate":"2024-03-05"},{"lineNumber":397,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":398,"author":{"gitId":"Shauryan123"},"content":"* 3a. The user enters invalid details.","lastModifiedDate":"2024-03-05"},{"lineNumber":399,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":400,"author":{"gitId":"Shauryan123"},"content":" * 3a1. AddressBook shows an error message.","lastModifiedDate":"2024-03-05"},{"lineNumber":401,"author":{"gitId":"Shauryan123"},"content":" * 3a2. AddressBook prompts the user to enter the details again.","lastModifiedDate":"2024-03-05"},{"lineNumber":402,"author":{"gitId":"Shauryan123"},"content":" ","lastModifiedDate":"2024-03-05"},{"lineNumber":403,"author":{"gitId":"Shauryan123"},"content":" Use case resumes at step 3.","lastModifiedDate":"2024-03-05"},{"lineNumber":404,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":405,"author":{"gitId":"Shauryan123"},"content":"**Use case: Update a person\u0027s details**","lastModifiedDate":"2024-03-05"},{"lineNumber":406,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":407,"author":{"gitId":"Shauryan123"},"content":"**MSS**","lastModifiedDate":"2024-03-05"},{"lineNumber":408,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":409,"author":{"gitId":"Shauryan123"},"content":"1. User requests to list persons..","lastModifiedDate":"2024-03-05"},{"lineNumber":410,"author":{"gitId":"Shauryan123"},"content":"2. AddressBook shows a list of persons.","lastModifiedDate":"2024-03-05"},{"lineNumber":411,"author":{"gitId":"Shauryan123"},"content":"3. User requests to update the details of a specific person in the list.","lastModifiedDate":"2024-03-05"},{"lineNumber":412,"author":{"gitId":"Shauryan123"},"content":"4. AddressBook prompts the user to enter the new details.","lastModifiedDate":"2024-03-05"},{"lineNumber":413,"author":{"gitId":"Shauryan123"},"content":"5. User enters the new details.","lastModifiedDate":"2024-03-05"},{"lineNumber":414,"author":{"gitId":"Shauryan123"},"content":"6. AddressBook updates the person\u0027s details.","lastModifiedDate":"2024-03-05"},{"lineNumber":415,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":416,"author":{"gitId":"Shauryan123"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":417,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":418,"author":{"gitId":"Shauryan123"},"content":"**Extensions**","lastModifiedDate":"2024-03-05"},{"lineNumber":419,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":420,"author":{"gitId":"Shauryan123"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-03-05"},{"lineNumber":421,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":422,"author":{"gitId":"Shauryan123"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":423,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":424,"author":{"gitId":"Shauryan123"},"content":"* 3a. The given index is invalid..","lastModifiedDate":"2024-03-05"},{"lineNumber":425,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":426,"author":{"gitId":"Shauryan123"},"content":" * 3a1. AddressBook shows an error message.","lastModifiedDate":"2024-03-05"},{"lineNumber":427,"author":{"gitId":"Shauryan123"},"content":" ","lastModifiedDate":"2024-03-05"},{"lineNumber":428,"author":{"gitId":"Shauryan123"},"content":" Use case resumes at step 2.","lastModifiedDate":"2024-03-05"},{"lineNumber":429,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":430,"author":{"gitId":"Shauryan123"},"content":"* 5a. The user enters invalid details.","lastModifiedDate":"2024-03-05"},{"lineNumber":431,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":432,"author":{"gitId":"Shauryan123"},"content":" * 5a1. AddressBook shows an error message.","lastModifiedDate":"2024-03-05"},{"lineNumber":433,"author":{"gitId":"Shauryan123"},"content":" * 5a2. AddressBook prompts the user to enter the details again.","lastModifiedDate":"2024-03-05"},{"lineNumber":434,"author":{"gitId":"Shauryan123"},"content":" ","lastModifiedDate":"2024-03-05"},{"lineNumber":435,"author":{"gitId":"Shauryan123"},"content":" Use case resumes at step 4.","lastModifiedDate":"2024-03-05"},{"lineNumber":436,"author":{"gitId":"Shauryan123"},"content":" ","lastModifiedDate":"2024-03-05"},{"lineNumber":437,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":438,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":439,"author":{"gitId":"Shauryan123"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":440,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":441,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":442,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":443,"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":444,"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":445,"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":446,"author":{"gitId":"ibnu2651"},"content":"4. The response to any use action should become visible within 5 seconds.","lastModifiedDate":"2024-03-03"},{"lineNumber":447,"author":{"gitId":"ibnu2651"},"content":"5. Should have a user-friendly interface that is easy to navigate and understand.","lastModifiedDate":"2024-03-03"},{"lineNumber":448,"author":{"gitId":"ibnu2651"},"content":"6. Should be stable and not crash or lose data under normal use.","lastModifiedDate":"2024-03-03"},{"lineNumber":449,"author":{"gitId":"Shauryan123"},"content":"7. Should be able to handle increasing amounts of data and users without significant degradation in performance (Scalability).","lastModifiedDate":"2024-03-05"},{"lineNumber":450,"author":{"gitId":"Shauryan123"},"content":"8. Should protect sensitive data and prevent unauthorized access, ensuring data integrity and confidentiality (Security).","lastModifiedDate":"2024-03-05"},{"lineNumber":451,"author":{"gitId":"Shauryan123"},"content":"9. Should be easy to maintain, with clear documentation and a modular design that allows for easy updates and fixes .","lastModifiedDate":"2024-03-05"},{"lineNumber":452,"author":{"gitId":"Shauryan123"},"content":"10. Should be accessible to users with disabilities, following guidelines such as the Web Content Accessibility Guidelines (WCAG).","lastModifiedDate":"2024-03-05"},{"lineNumber":453,"author":{"gitId":"ibnu2651"},"content":"","lastModifiedDate":"2024-03-03"},{"lineNumber":454,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":455,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":456,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":457,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":458,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":459,"author":{"gitId":"-"},"content":"* **Mainstream OS**: Windows, Linux, Unix, MacOS","lastModifiedDate":"2024-02-09"},{"lineNumber":460,"author":{"gitId":"-"},"content":"* **Private contact detail**: A contact detail that is not meant to be shared with others","lastModifiedDate":"2020-05-23"},{"lineNumber":461,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":462,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":463,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":464,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":465,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":466,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":467,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":468,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":469,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":470,"author":{"gitId":"-"},"content":"**Note:** These instructions only provide a starting point for testers to work on;","lastModifiedDate":"2023-09-12"},{"lineNumber":471,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":472,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":473,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":474,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":475,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":476,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":477,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":478,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":479,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":480,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":481,"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":482,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":483,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":484,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":485,"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":486,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":487,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":488,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","lastModifiedDate":"2020-05-23"},{"lineNumber":489,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":490,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":491,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":492,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":493,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":494,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":495,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":496,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":497,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":498,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":499,"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":500,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":501,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":502,"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":503,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":504,"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":505,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":506,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":507,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":508,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":509,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":510,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":511,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":512,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":513,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":514,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":515,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"Shauryan123":59,"kaiyi27":49,"ibnu2651":20,"-":387}},{"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\"\u003eInsura-Connect\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":"ibnu2651"},"content":" \u003cli\u003e\u003ca href\u003d\"https://github.com/AY2324S2-CS2103T-T13-3/tp\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003e\u003cmd\u003e:fab-github:\u003c/md\u003e\u003c/a\u003e","lastModifiedDate":"2024-03-03"},{"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":{"ibnu2651":1,"-":66}}] diff --git a/AY2324S2-CS2103T-T13-3_tp_master/commits.json b/AY2324S2-CS2103T-T13-3_tp_master/commits.json index 3c4aeb4b..6a9c4049 100644 --- a/AY2324S2-CS2103T-T13-3_tp_master/commits.json +++ b/AY2324S2-CS2103T-T13-3_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Shauryan123":[{"date":"2024-03-05","commitResults":[{"hash":"e1a2a39cacb0e720e3ad334bbe26deeadb1a70f0","isMergeCommit":false,"messageTitle":"Update Shauryan\u0027s Details in AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":4}}},{"hash":"1d05c2fda6e1f6be4af0cc0a8f4952f56d6a778b","isMergeCommit":false,"messageTitle":"Update NFRs for DG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":0}}},{"hash":"ccaff0de905fee27e17894e4f65c41522ab4dbcc","isMergeCommit":false,"messageTitle":"Add use cases for DG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":56,"deletions":0}}}]}],"kaiyi27":[{"date":"2024-03-02","commitResults":[{"hash":"2b709c27cdc0e467935fab1c304ae051db9460b4","isMergeCommit":false,"messageTitle":"Update the information in AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}},{"hash":"684854fd649bd41c769dac772c157a435c64aa3c","isMergeCommit":false,"messageTitle":"Update the role in AboutUs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":1}}},{"hash":"33ba8c517ca9bf95e514edd7bff76ee59ec3fdea","isMergeCommit":false,"messageTitle":"Update User Stories in DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":36,"deletions":9}}}]},{"date":"2024-03-03","commitResults":[{"hash":"ba193c6471d9428566087a7aa3533551937a708c","isMergeCommit":false,"messageTitle":"Add list use case into DeveloperGuide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":14,"deletions":1}}},{"hash":"8cab7ca2a32c8f2a049f6d0546caf879c318fb4d","isMergeCommit":true,"messageTitle":"Merge pull request #11 from ibnu2651/branch-v1.1","messageBody":"Branch v1.1","fileTypesAndContributionMap":{}}]}],"ibnu2651":[{"date":"2024-03-03","commitResults":[{"hash":"332f64d287ee64b1cebb86e021ce954e3020482d","isMergeCommit":true,"messageTitle":"Merge pull request #8 from kaiyi27/branch-v1.1","messageBody":"Merge Branch v1.1","fileTypesAndContributionMap":{}},{"hash":"c084f1ee4ed2c7f1ceba0373852f3e3de87e8b1c","isMergeCommit":false,"messageTitle":"Add Ibnu\u0027s details to AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":26}}},{"hash":"a7908bdb075a4686c142535b04ea8ae0121044f3","isMergeCommit":false,"messageTitle":"Update README","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":1}}},{"hash":"66a785617d6e30c9c5ca2be74f9f242324f5ba89","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-README\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5d069e37e88e4930db97f644654f6157ee0b6884","isMergeCommit":false,"messageTitle":"Update site-wide settings","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"47a6255e56b86124d2b3ebd9d38b904fb6478ed9","isMergeCommit":false,"messageTitle":"Update NFR for DG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":1}}},{"hash":"743be88c300f7b9de1589b26cc814d63d42ae318","isMergeCommit":false,"messageTitle":"Add use case for DG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":16,"deletions":1}}}]},{"date":"2024-03-05","commitResults":[{"hash":"02649cf841f03825e98dd4a6a87a0d38f74c9881","isMergeCommit":true,"messageTitle":"Merge pull request #13 from Shauryan123/branch-v1.1","messageBody":"Merge Branch v1.1","fileTypesAndContributionMap":{}}]}],"justincred":[]},"authorFileTypeContributionMap":{"Shauryan123":{"docs":62,"functional-code":0,"test-code":0},"kaiyi27":{"docs":53,"functional-code":0,"test-code":0},"ibnu2651":{"docs":27,"functional-code":0,"test-code":0},"justincred":{"docs":0,"functional-code":0,"test-code":0}},"authorContributionVariance":{"Shauryan123":353.2222,"kaiyi27":228.6875,"ibnu2651":275.0,"justincred":0.0},"authorDisplayNameMap":{"Shauryan123":"CS2103T-T13-3 AGRA..RYAN","kaiyi27":"CS2103T-T13-3 TEOH..I YI","ibnu2651":"CS2103T-T13-3 IBNU..ADAM","justincred":"CS2103T-T13-3 JUST..HWEI"}} +{"authorDailyContributionsMap":{"Shauryan123":[{"date":"2024-03-05","commitResults":[{"hash":"e1a2a39cacb0e720e3ad334bbe26deeadb1a70f0","isMergeCommit":false,"messageTitle":"Update Shauryan\u0027s Details in AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":4}}},{"hash":"1d05c2fda6e1f6be4af0cc0a8f4952f56d6a778b","isMergeCommit":false,"messageTitle":"Update NFRs for DG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":0}}},{"hash":"ccaff0de905fee27e17894e4f65c41522ab4dbcc","isMergeCommit":false,"messageTitle":"Add use cases for DG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":56,"deletions":0}}}]}],"kaiyi27":[{"date":"2024-03-02","commitResults":[{"hash":"2b709c27cdc0e467935fab1c304ae051db9460b4","isMergeCommit":false,"messageTitle":"Update the information in AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}},{"hash":"684854fd649bd41c769dac772c157a435c64aa3c","isMergeCommit":false,"messageTitle":"Update the role in AboutUs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":1}}},{"hash":"33ba8c517ca9bf95e514edd7bff76ee59ec3fdea","isMergeCommit":false,"messageTitle":"Update User Stories in DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":36,"deletions":9}}}]},{"date":"2024-03-03","commitResults":[{"hash":"ba193c6471d9428566087a7aa3533551937a708c","isMergeCommit":false,"messageTitle":"Add list use case into DeveloperGuide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":14,"deletions":1}}},{"hash":"8cab7ca2a32c8f2a049f6d0546caf879c318fb4d","isMergeCommit":true,"messageTitle":"Merge pull request #11 from ibnu2651/branch-v1.1","messageBody":"Branch v1.1","fileTypesAndContributionMap":{}}]},{"date":"2024-03-06","commitResults":[{"hash":"d23177206affb4837bc6ea4486b0ce55655bc301","isMergeCommit":true,"messageTitle":"Merge pull request #14 from ibnu2651/branch-v1.1","messageBody":"Branch v1.1","fileTypesAndContributionMap":{}}]}],"ibnu2651":[{"date":"2024-03-03","commitResults":[{"hash":"332f64d287ee64b1cebb86e021ce954e3020482d","isMergeCommit":true,"messageTitle":"Merge pull request #8 from kaiyi27/branch-v1.1","messageBody":"Merge Branch v1.1","fileTypesAndContributionMap":{}},{"hash":"c084f1ee4ed2c7f1ceba0373852f3e3de87e8b1c","isMergeCommit":false,"messageTitle":"Add Ibnu\u0027s details to AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":26}}},{"hash":"a7908bdb075a4686c142535b04ea8ae0121044f3","isMergeCommit":false,"messageTitle":"Update README","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":1}}},{"hash":"66a785617d6e30c9c5ca2be74f9f242324f5ba89","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-README\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5d069e37e88e4930db97f644654f6157ee0b6884","isMergeCommit":false,"messageTitle":"Update site-wide settings","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"47a6255e56b86124d2b3ebd9d38b904fb6478ed9","isMergeCommit":false,"messageTitle":"Update NFR for DG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":1}}},{"hash":"743be88c300f7b9de1589b26cc814d63d42ae318","isMergeCommit":false,"messageTitle":"Add use case for DG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":16,"deletions":1}}}]},{"date":"2024-03-05","commitResults":[{"hash":"02649cf841f03825e98dd4a6a87a0d38f74c9881","isMergeCommit":true,"messageTitle":"Merge pull request #13 from Shauryan123/branch-v1.1","messageBody":"Merge Branch v1.1","fileTypesAndContributionMap":{}}]},{"date":"2024-03-06","commitResults":[{"hash":"2c69811450922ebed9c6bee757926198580729f6","isMergeCommit":false,"messageTitle":"Update README contents","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":10}}}]}],"justincred":[]},"authorFileTypeContributionMap":{"Shauryan123":{"docs":62,"functional-code":0,"test-code":0},"kaiyi27":{"docs":53,"functional-code":0,"test-code":0},"ibnu2651":{"docs":30,"functional-code":0,"test-code":0},"justincred":{"docs":0,"functional-code":0,"test-code":0}},"authorContributionVariance":{"Shauryan123":328.33136,"kaiyi27":213.44379,"ibnu2651":258.39053,"justincred":0.0},"authorDisplayNameMap":{"Shauryan123":"CS2103T-T13-3 AGRA..RYAN","kaiyi27":"CS2103T-T13-3 TEOH..I YI","ibnu2651":"CS2103T-T13-3 IBNU..ADAM","justincred":"CS2103T-T13-3 JUST..HWEI"}} diff --git a/AY2324S2-CS2103T-T16-1_tp_master/authorship.json b/AY2324S2-CS2103T-T16-1_tp_master/authorship.json index 30fb8e43..bc64a84c 100644 --- a/AY2324S2-CS2103T-T16-1_tp_master/authorship.json +++ b/AY2324S2-CS2103T-T16-1_tp_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"dedsecrattle"},"content":"[![CI Status](https://github.com/AY2324S2-CS2103T-T16-1/tp/workflows/Java%20CI/badge.svg)](https://github.com/AY2324S2-CS2103T-T16-1/tp/actions)","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"dedsecrattle"},"content":"[![codecov](https://codecov.io/gh/AY2324S2-CS2103T-T16-1/tp/graph/badge.svg?token\u003d1QYSJLU0BI)](https://codecov.io/gh/AY2324S2-CS2103T-T16-1/tp)","lastModifiedDate":"2024-03-04"},{"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":"dedsecrattle"},"content":"* This is **an App for Academic Instructors to Keep track of their Past students**.\u003cbr\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":" Example usages:","lastModifiedDate":"2020-05-23"},{"lineNumber":8,"author":{"gitId":"dedsecrattle"},"content":" * create/read/update/delete students in the student list","lastModifiedDate":"2024-03-05"},{"lineNumber":9,"author":{"gitId":"dedsecrattle"},"content":" * find and filter students from the database as per requirements","lastModifiedDate":"2024-03-05"},{"lineNumber":10,"author":{"gitId":"dedsecrattle"},"content":" * load/save students from local storage (JSON,CSV)","lastModifiedDate":"2024-03-05"},{"lineNumber":11,"author":{"gitId":"dedsecrattle"},"content":"* The project simulates an ongoing software project for a desktop application (called _EduLink NUS_) used for managing contact details of Students.","lastModifiedDate":"2024-03-05"},{"lineNumber":12,"author":{"gitId":"dedsecrattle"},"content":" * It is based on the AddressBook-Level3 project, with additional tweaks and features to provide a customised experience for Academic Instructors. ","lastModifiedDate":"2024-03-05"},{"lineNumber":13,"author":{"gitId":"dedsecrattle"},"content":" * From Address-Book Level-3 :- 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":"2024-03-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" * It comes with a **reasonable level of user and developer documentation**.","lastModifiedDate":"2020-05-23"},{"lineNumber":15,"author":{"gitId":"dedsecrattle"},"content":"* It is named `EduLink NUS` because It Links Academic Instructors with their Past Students.","lastModifiedDate":"2024-03-05"},{"lineNumber":16,"author":{"gitId":"dedsecrattle"},"content":"* For the detailed documentation of this project, see the **[EduLink NUS Product Website](https://ay2324s2-cs2103t-t16-1.github.io/tp/)**.","lastModifiedDate":"2024-03-05"},{"lineNumber":17,"author":{"gitId":"dedsecrattle"},"content":"* This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"dedsecrattle":12,"-":5}},{"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":"dedsecrattle"},"content":"### Kumar Prabhat","lastModifiedDate":"2024-03-04"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"dedsecrattle"},"content":"\u003cimg src\u003d\"images/dedsecrattle.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"dedsecrattle"},"content":"[[github](http://github.com/dedsecrattle)]","lastModifiedDate":"2024-03-04"},{"lineNumber":19,"author":{"gitId":"dedsecrattle"},"content":"[[portfolio](http://theprabhat.me)]","lastModifiedDate":"2024-03-04"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"dedsecrattle"},"content":"* Role: Developer","lastModifiedDate":"2024-03-04"},{"lineNumber":22,"author":{"gitId":"dedsecrattle"},"content":"* Responsibilities: Backend, UI, DevOps","lastModifiedDate":"2024-03-04"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"Austintjh19"},"content":"### Tan Jun Heng","lastModifiedDate":"2024-03-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"Austintjh19"},"content":"\u003cimg src\u003d\"images/austintjh19.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"Austintjh19"},"content":"[[github](http://github.com/Austintjh19)] [[portfolio](https://austintanjunheng.netlify.app/)]","lastModifiedDate":"2024-03-05"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"Austintjh19"},"content":"* Responsibilities: Backend, UI, DevOps","lastModifiedDate":"2024-03-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":33,"author":{"gitId":"-"},"content":"### Jean Doe","lastModifiedDate":"2020-06-17"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":35,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/johndoe.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2020-06-17"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":37,"author":{"gitId":"-"},"content":"[[github](http://github.com/johndoe)]","lastModifiedDate":"2020-06-17"},{"lineNumber":38,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":40,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":41,"author":{"gitId":"-"},"content":"* Responsibilities: Dev Ops + Threading","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"-"},"content":"### James Doe","lastModifiedDate":"2020-06-17"},{"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":"-"},"content":"[[github](http://github.com/johndoe)]","lastModifiedDate":"2020-06-17"},{"lineNumber":48,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":50,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"-"},"content":"* Responsibilities: UI","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"dedsecrattle":6,"Austintjh19":4,"-":41}},{"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\"\u003eEduLink NUS\u003c/a\u003e","lastModifiedDate":"2024-02-22"},{"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":"dedsecrattle"},"content":" \u003cli\u003e\u003ca href\u003d\"https://github.com/AY2324S2-CS2103T-T16-1/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":{"dedsecrattle":1,"-":66}}] +[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"dedsecrattle"},"content":"[![CI Status](https://github.com/AY2324S2-CS2103T-T16-1/tp/workflows/Java%20CI/badge.svg)](https://github.com/AY2324S2-CS2103T-T16-1/tp/actions)","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"dedsecrattle"},"content":"[![codecov](https://codecov.io/gh/AY2324S2-CS2103T-T16-1/tp/graph/badge.svg?token\u003d1QYSJLU0BI)](https://codecov.io/gh/AY2324S2-CS2103T-T16-1/tp)","lastModifiedDate":"2024-03-04"},{"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":"dedsecrattle"},"content":"* This is **an App for Academic Instructors to Keep track of their Past students**.\u003cbr\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":7,"author":{"gitId":"-"},"content":" Example usages:","lastModifiedDate":"2020-05-23"},{"lineNumber":8,"author":{"gitId":"dedsecrattle"},"content":" * create/read/update/delete students in the student list","lastModifiedDate":"2024-03-05"},{"lineNumber":9,"author":{"gitId":"dedsecrattle"},"content":" * find and filter students from the database as per requirements","lastModifiedDate":"2024-03-05"},{"lineNumber":10,"author":{"gitId":"dedsecrattle"},"content":" * load/save students from local storage (JSON,CSV)","lastModifiedDate":"2024-03-05"},{"lineNumber":11,"author":{"gitId":"dedsecrattle"},"content":"* The project simulates an ongoing software project for a desktop application (called _EduLink NUS_) used for managing contact details of Students.","lastModifiedDate":"2024-03-05"},{"lineNumber":12,"author":{"gitId":"dedsecrattle"},"content":" * It is based on the AddressBook-Level3 project, with additional tweaks and features to provide a customised experience for Academic Instructors. ","lastModifiedDate":"2024-03-05"},{"lineNumber":13,"author":{"gitId":"dedsecrattle"},"content":" * From Address-Book Level-3 :- 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":"2024-03-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" * It comes with a **reasonable level of user and developer documentation**.","lastModifiedDate":"2020-05-23"},{"lineNumber":15,"author":{"gitId":"dedsecrattle"},"content":"* It is named `EduLink NUS` because It Links Academic Instructors with their Past Students.","lastModifiedDate":"2024-03-05"},{"lineNumber":16,"author":{"gitId":"dedsecrattle"},"content":"* For the detailed documentation of this project, see the **[EduLink NUS Product Website](https://ay2324s2-cs2103t-t16-1.github.io/tp/)**.","lastModifiedDate":"2024-03-05"},{"lineNumber":17,"author":{"gitId":"dedsecrattle"},"content":"* This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"dedsecrattle":12,"-":5}},{"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":"dedsecrattle"},"content":"### Kumar Prabhat","lastModifiedDate":"2024-03-04"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"dedsecrattle"},"content":"\u003cimg src\u003d\"images/dedsecrattle.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"dedsecrattle"},"content":"[[github](http://github.com/dedsecrattle)]","lastModifiedDate":"2024-03-04"},{"lineNumber":19,"author":{"gitId":"dedsecrattle"},"content":"[[portfolio](http://theprabhat.me)]","lastModifiedDate":"2024-03-04"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"dedsecrattle"},"content":"* Role: Developer","lastModifiedDate":"2024-03-04"},{"lineNumber":22,"author":{"gitId":"dedsecrattle"},"content":"* Responsibilities: Backend, UI, DevOps","lastModifiedDate":"2024-03-04"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"Austintjh19"},"content":"### Tan Jun Heng","lastModifiedDate":"2024-03-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"Austintjh19"},"content":"\u003cimg src\u003d\"images/austintjh19.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"Austintjh19"},"content":"[[github](http://github.com/Austintjh19)] [[portfolio](https://austintanjunheng.netlify.app/)]","lastModifiedDate":"2024-03-05"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"Austintjh19"},"content":"* Responsibilities: Backend, UI, DevOps","lastModifiedDate":"2024-03-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":33,"author":{"gitId":"-"},"content":"### Jean Doe","lastModifiedDate":"2020-06-17"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":35,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/johndoe.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2020-06-17"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":37,"author":{"gitId":"-"},"content":"[[github](http://github.com/johndoe)]","lastModifiedDate":"2020-06-17"},{"lineNumber":38,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":40,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":41,"author":{"gitId":"-"},"content":"* Responsibilities: Dev Ops + Threading","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"Li-Zizhen"},"content":"### Li Zizhen","lastModifiedDate":"2024-03-05"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"Li-Zizhen"},"content":"\u003cimg src\u003d\"images/li_zizhen.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"Li-Zizhen"},"content":"[[github](https://github.com/Li-Zizhen)]","lastModifiedDate":"2024-03-05"},{"lineNumber":48,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":50,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"-"},"content":"* Responsibilities: UI","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"dedsecrattle":6,"Li-Zizhen":3,"Austintjh19":4,"-":38}},{"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\"\u003eEduLink NUS\u003c/a\u003e","lastModifiedDate":"2024-02-22"},{"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":"dedsecrattle"},"content":" \u003cli\u003e\u003ca href\u003d\"https://github.com/AY2324S2-CS2103T-T16-1/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":{"dedsecrattle":1,"-":66}}] diff --git a/AY2324S2-CS2103T-T16-1_tp_master/commits.json b/AY2324S2-CS2103T-T16-1_tp_master/commits.json index 1929639f..1c6085a2 100644 --- a/AY2324S2-CS2103T-T16-1_tp_master/commits.json +++ b/AY2324S2-CS2103T-T16-1_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"dedsecrattle":[{"date":"2024-03-04","commitResults":[{"hash":"965314a181165c8f7dc259736df5b719b73d24ce","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":0}}},{"hash":"b088d98f65970f8d23b3ed36d7e962ae5e4e1ef0","isMergeCommit":true,"messageTitle":"Merge pull request #4 from AY2324S2-CS2103T-T16-1/dedsecrattle-patch-1","messageBody":"Update README.md","fileTypesAndContributionMap":{}},{"hash":"91268970f67506fd0db1ef88ec0c8e5b5aba6523","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"925705f1ba84e29db4e08fcc53bf6bb423cb6f26","isMergeCommit":true,"messageTitle":"Merge pull request #7 from AY2324S2-CS2103T-T16-1/dedsecrattle-patch-1","messageBody":"Update README.md","fileTypesAndContributionMap":{}},{"hash":"f0dc5a768545feaea7fa3dd9d78c32764643a076","isMergeCommit":false,"messageTitle":"Update AboutUs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":16}}}]},{"date":"2024-03-05","commitResults":[{"hash":"2970353166be38dea479501a0228390e70a42b37","isMergeCommit":false,"messageTitle":"Update SiteWide Setting","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"2d02a5c9d7b60f5d0454bb9568ebda7513228b54","isMergeCommit":true,"messageTitle":"Merge pull request #8 from dedsecrattle/docs/about-us","messageBody":"Update AboutUs (Kumar Prabhat)","fileTypesAndContributionMap":{}},{"hash":"33b94379ae235c38142e608b65d4f23ab805f623","isMergeCommit":true,"messageTitle":"Merge pull request #9 from dedsecrattle/docs/site-setting","messageBody":"Update Site wide Settings","fileTypesAndContributionMap":{}},{"hash":"69327585afefc140495397f525b4a7ca444363d7","isMergeCommit":true,"messageTitle":"Merge pull request #11 from Austintjh19/docs/about-us","messageBody":"Update About Us (Tan Jun Heng) ","fileTypesAndContributionMap":{}},{"hash":"7289f3ce3ac17c546a87534f46d014aea21bac48","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":10,"deletions":8}}},{"hash":"f406399c9627f12ee493062ab0d15a2ef02059ae","isMergeCommit":true,"messageTitle":"Merge pull request #13 from dedsecrattle/docs/read-me","messageBody":"Update README.md","fileTypesAndContributionMap":{}},{"hash":"3171e058d30a2be7d431a119bd803c5cab113548","isMergeCommit":false,"messageTitle":"Fix Typo","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]}],"Li-Zizhen":[],"Austintjh19":[{"date":"2024-03-05","commitResults":[{"hash":"27703ec1e16f67f7eb92d419e4b6fc6a7b7e1a77","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/Austintjh19/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"638e76adfcd751b0c66216e79f98e01a6a2e51dc","isMergeCommit":true,"messageTitle":"Merge branch \u0027AY2324S2-CS2103T-T16-1:master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"652fdf693cc4e3e1c7c0b3e607d8622e387c8b98","isMergeCommit":false,"messageTitle":"Update About Us","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":4}}},{"hash":"86714d56c368c133e76d9dfda5aac41bcf087bae","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/Austintjh19/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ff484b13c7d64a9cbb9da80b05d8b8fc8af1fdc7","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/Austintjh19/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2429d0aec3545f3fa915052e1c8750d7c631fe18","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into docs/about-us","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"afde696405adda696fe960c16a105e8c040db3fd","isMergeCommit":false,"messageTitle":"Update About Us Image File Format","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"81bc5c243fe8f64857d71361f0cfce7c9d4f71cd","isMergeCommit":true,"messageTitle":"Merge pull request #14 from dedsecrattle/docs/read-me","messageBody":"Fix Typo","fileTypesAndContributionMap":{}},{"hash":"da02450a26e1a1b9870a2c96967851c2feb9cea5","isMergeCommit":true,"messageTitle":"Merge pull request #15 from Austintjh19/docs/about-us","messageBody":"Update About Us Image File Format","fileTypesAndContributionMap":{}}]}],"ValenciaLim":[]},"authorFileTypeContributionMap":{"dedsecrattle":{"docs":19,"functional-code":0,"test-code":0},"Li-Zizhen":{"docs":0,"functional-code":0,"test-code":0},"Austintjh19":{"docs":4,"functional-code":0,"test-code":0},"ValenciaLim":{"docs":0,"functional-code":0,"test-code":0}},"authorContributionVariance":{"dedsecrattle":77.07639,"Li-Zizhen":0.0,"Austintjh19":7.6388893,"ValenciaLim":0.0},"authorDisplayNameMap":{"dedsecrattle":"CS2103T-T16-1 KUMA..BHAT","Li-Zizhen":"CS2103T-T16-1 LI Z..ZHEN","Austintjh19":"CS2103T-T16-1 TAN ..HENG","ValenciaLim":"CS2103T-T16-1 LIM ..NCIA"}} +{"authorDailyContributionsMap":{"dedsecrattle":[{"date":"2024-03-04","commitResults":[{"hash":"965314a181165c8f7dc259736df5b719b73d24ce","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":0}}},{"hash":"b088d98f65970f8d23b3ed36d7e962ae5e4e1ef0","isMergeCommit":true,"messageTitle":"Merge pull request #4 from AY2324S2-CS2103T-T16-1/dedsecrattle-patch-1","messageBody":"Update README.md","fileTypesAndContributionMap":{}},{"hash":"91268970f67506fd0db1ef88ec0c8e5b5aba6523","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"925705f1ba84e29db4e08fcc53bf6bb423cb6f26","isMergeCommit":true,"messageTitle":"Merge pull request #7 from AY2324S2-CS2103T-T16-1/dedsecrattle-patch-1","messageBody":"Update README.md","fileTypesAndContributionMap":{}},{"hash":"f0dc5a768545feaea7fa3dd9d78c32764643a076","isMergeCommit":false,"messageTitle":"Update AboutUs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":16}}}]},{"date":"2024-03-05","commitResults":[{"hash":"2970353166be38dea479501a0228390e70a42b37","isMergeCommit":false,"messageTitle":"Update SiteWide Setting","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"2d02a5c9d7b60f5d0454bb9568ebda7513228b54","isMergeCommit":true,"messageTitle":"Merge pull request #8 from dedsecrattle/docs/about-us","messageBody":"Update AboutUs (Kumar Prabhat)","fileTypesAndContributionMap":{}},{"hash":"33b94379ae235c38142e608b65d4f23ab805f623","isMergeCommit":true,"messageTitle":"Merge pull request #9 from dedsecrattle/docs/site-setting","messageBody":"Update Site wide Settings","fileTypesAndContributionMap":{}},{"hash":"69327585afefc140495397f525b4a7ca444363d7","isMergeCommit":true,"messageTitle":"Merge pull request #11 from Austintjh19/docs/about-us","messageBody":"Update About Us (Tan Jun Heng) ","fileTypesAndContributionMap":{}},{"hash":"7289f3ce3ac17c546a87534f46d014aea21bac48","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":10,"deletions":8}}},{"hash":"f406399c9627f12ee493062ab0d15a2ef02059ae","isMergeCommit":true,"messageTitle":"Merge pull request #13 from dedsecrattle/docs/read-me","messageBody":"Update README.md","fileTypesAndContributionMap":{}},{"hash":"3171e058d30a2be7d431a119bd803c5cab113548","isMergeCommit":false,"messageTitle":"Fix Typo","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2024-03-06","commitResults":[{"hash":"dbec31fc11ca1b226ca307130299f2618a7262ff","isMergeCommit":true,"messageTitle":"Merge pull request #18 from Li-Zizhen/AboutUs","messageBody":"Update AboutUs.md","fileTypesAndContributionMap":{}}]}],"Li-Zizhen":[{"date":"2024-03-05","commitResults":[{"hash":"e66f84129b0f266ebf381f3f4aa5dda455032d83","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}}]}],"Austintjh19":[{"date":"2024-03-05","commitResults":[{"hash":"27703ec1e16f67f7eb92d419e4b6fc6a7b7e1a77","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/Austintjh19/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"638e76adfcd751b0c66216e79f98e01a6a2e51dc","isMergeCommit":true,"messageTitle":"Merge branch \u0027AY2324S2-CS2103T-T16-1:master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"652fdf693cc4e3e1c7c0b3e607d8622e387c8b98","isMergeCommit":false,"messageTitle":"Update About Us","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":4}}},{"hash":"86714d56c368c133e76d9dfda5aac41bcf087bae","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/Austintjh19/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ff484b13c7d64a9cbb9da80b05d8b8fc8af1fdc7","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/Austintjh19/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2429d0aec3545f3fa915052e1c8750d7c631fe18","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into docs/about-us","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"afde696405adda696fe960c16a105e8c040db3fd","isMergeCommit":false,"messageTitle":"Update About Us Image File Format","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"81bc5c243fe8f64857d71361f0cfce7c9d4f71cd","isMergeCommit":true,"messageTitle":"Merge pull request #14 from dedsecrattle/docs/read-me","messageBody":"Fix Typo","fileTypesAndContributionMap":{}},{"hash":"da02450a26e1a1b9870a2c96967851c2feb9cea5","isMergeCommit":true,"messageTitle":"Merge pull request #15 from Austintjh19/docs/about-us","messageBody":"Update About Us Image File Format","fileTypesAndContributionMap":{}}]}],"ValenciaLim":[]},"authorFileTypeContributionMap":{"dedsecrattle":{"docs":19,"functional-code":0,"test-code":0},"Li-Zizhen":{"docs":3,"functional-code":0,"test-code":0},"Austintjh19":{"docs":4,"functional-code":0,"test-code":0},"ValenciaLim":{"docs":0,"functional-code":0,"test-code":0}},"authorContributionVariance":{"dedsecrattle":72.23668,"Li-Zizhen":2.5562131,"Austintjh19":7.100591,"ValenciaLim":0.0},"authorDisplayNameMap":{"dedsecrattle":"CS2103T-T16-1 KUMA..BHAT","Li-Zizhen":"CS2103T-T16-1 LI Z..ZHEN","Austintjh19":"CS2103T-T16-1 TAN ..HENG","ValenciaLim":"CS2103T-T16-1 LIM ..NCIA"}} diff --git a/AY2324S2-CS2103T-W08-2_tp_master/authorship.json b/AY2324S2-CS2103T-W08-2_tp_master/authorship.json index 5f095f04..dfc1123a 100644 --- a/AY2324S2-CS2103T-W08-2_tp_master/authorship.json +++ b/AY2324S2-CS2103T-W08-2_tp_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"MaYuehan"},"content":"# VitalConnect","lastModifiedDate":"2024-02-25"},{"lineNumber":2,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":3,"author":{"gitId":"MaYuehan"},"content":"[![CI Status](https://github.com/AY2324S2-CS2103T-W08-2/tp/workflows/Java%20CI/badge.svg)](https://github.com/AY2324S2-CS2103T-W08-2/tp/actions)","lastModifiedDate":"2024-02-25"},{"lineNumber":4,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":5,"author":{"gitId":"MaYuehan"},"content":"This product is for clinic assistants that have to keep track of a lot of patient information and requires ","lastModifiedDate":"2024-02-25"},{"lineNumber":6,"author":{"gitId":"MaYuehan"},"content":"the information at a fast pace, thus preferring to have a simple UI such as a CLI instead of a complex GUI, ","lastModifiedDate":"2024-02-25"},{"lineNumber":7,"author":{"gitId":"MaYuehan"},"content":"with the added benefit of having typed user commands for an even faster retrieval of information.","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"MaYuehan"},"content":"__Value proposition:__","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"MaYuehan"},"content":"Clinic assistants are required to take note of a multitude of information regarding the patient, ","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"MaYuehan"},"content":"such as their contact number, any existing medical condition, the specific treatment that they are currently undergoing and much more. ","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"MaYuehan"},"content":"With this product, such information will be readily available while also allowing for quality of life features such as scheduling ","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"MaYuehan"},"content":"appointments and managing medication.","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"MaYuehan"},"content":"This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"![Ui](docs/images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"MaYuehan"},"content":"## Features (V1.2)","lastModifiedDate":"2024-02-25"},{"lineNumber":21,"author":{"gitId":"MaYuehan"},"content":"__Saving the data__","lastModifiedDate":"2024-02-25"},{"lineNumber":22,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":23,"author":{"gitId":"MaYuehan"},"content":"* All data is saved in the hard disk automatically after any command that changes the data.","lastModifiedDate":"2024-02-25"},{"lineNumber":24,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":25,"author":{"gitId":"MaYuehan"},"content":"__Clear all existing entries__","lastModifiedDate":"2024-02-25"},{"lineNumber":26,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"MaYuehan"},"content":"* Clear all the existing entries within the local database.","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"MaYuehan"},"content":"__Exit the program__","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":32,"author":{"gitId":"MaYuehan"},"content":"* Exits the program. Any data that is not saved cannot be restored upon exiting.","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"MaYuehan"},"content":"__Viewing help__","lastModifiedDate":"2024-02-25"},{"lineNumber":35,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":36,"author":{"gitId":"MaYuehan"},"content":"* Shows a message explaining the instructions to access the user guide.","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"MaYuehan"},"content":"### Manage Appointments","lastModifiedDate":"2024-02-25"},{"lineNumber":39,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":40,"author":{"gitId":"MaYuehan"},"content":"__Create Appointments__","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"MaYuehan"},"content":"* Create an appointment of a patient, information such as time and name of patient are required when adding.","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":44,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":45,"author":{"gitId":"MaYuehan"},"content":"__Delete Appointments__","lastModifiedDate":"2024-02-25"},{"lineNumber":46,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":47,"author":{"gitId":"MaYuehan"},"content":"* Delete an appointment of a patient.","lastModifiedDate":"2024-02-25"},{"lineNumber":48,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":49,"author":{"gitId":"MaYuehan"},"content":"__List Appointments__","lastModifiedDate":"2024-02-25"},{"lineNumber":50,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":51,"author":{"gitId":"MaYuehan"},"content":"* List all the appointments that have been created, provide information such as the patient’s name and time of the appointments.","lastModifiedDate":"2024-02-25"},{"lineNumber":52,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":53,"author":{"gitId":"MaYuehan"},"content":"### Manage Contact Information","lastModifiedDate":"2024-02-25"},{"lineNumber":54,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":55,"author":{"gitId":"MaYuehan"},"content":"__Add patient contact information__","lastModifiedDate":"2024-02-25"},{"lineNumber":56,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":57,"author":{"gitId":"MaYuehan"},"content":"* Add contact information, including phone number and email address. If a specific field already exists, the command would fail.","lastModifiedDate":"2024-02-25"},{"lineNumber":58,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":59,"author":{"gitId":"MaYuehan"},"content":"__Delete patient contact information__","lastModifiedDate":"2024-02-25"},{"lineNumber":60,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":61,"author":{"gitId":"MaYuehan"},"content":"* Delete specific or all contact information, including phone number and email address.","lastModifiedDate":"2024-02-25"},{"lineNumber":62,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":63,"author":{"gitId":"MaYuehan"},"content":"__List patient contact information__","lastModifiedDate":"2024-02-25"},{"lineNumber":64,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":65,"author":{"gitId":"MaYuehan"},"content":"* List all patient’s contact information.","lastModifiedDate":"2024-02-25"},{"lineNumber":66,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":67,"author":{"gitId":"MaYuehan"},"content":"### Manage Patients","lastModifiedDate":"2024-02-25"},{"lineNumber":68,"author":{"gitId":"MaYuehan"},"content":"__Add patient__","lastModifiedDate":"2024-02-25"},{"lineNumber":69,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":70,"author":{"gitId":"MaYuehan"},"content":"* Add a new patient to the database so further information about their appointment or contact information can be added.","lastModifiedDate":"2024-02-25"},{"lineNumber":71,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":72,"author":{"gitId":"MaYuehan"},"content":"__Delete patient__","lastModifiedDate":"2024-02-25"},{"lineNumber":73,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":74,"author":{"gitId":"MaYuehan"},"content":"* Delete specific or all patients, including their contact and appointment.","lastModifiedDate":"2024-02-25"},{"lineNumber":75,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":76,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":77,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":78,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":79,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":80,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":81,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":82,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":83,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":84,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":85,"author":{"gitId":"-"},"content":"* This is **a sample project for Software Engineering (SE) students**.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":86,"author":{"gitId":"-"},"content":" Example usages:","lastModifiedDate":"2020-05-23"},{"lineNumber":87,"author":{"gitId":"-"},"content":" * as a starting point of a course project (as opposed to writing everything from scratch)","lastModifiedDate":"2020-05-23"},{"lineNumber":88,"author":{"gitId":"-"},"content":" * as a case study","lastModifiedDate":"2020-05-23"},{"lineNumber":89,"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":90,"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":91,"author":{"gitId":"-"},"content":" * It comes with a **reasonable level of user and developer documentation**.","lastModifiedDate":"2020-05-23"},{"lineNumber":92,"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":93,"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":94,"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"},{"lineNumber":95,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":96,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"}],"authorContributionMap":{"MaYuehan":83,"-":13}},{"path":"bin/main/view/CommandBox.fxml","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.layout.StackPane?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"\u003cStackPane styleClass\u003d\"stack-pane\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":" \u003cTextField fx:id\u003d\"commandTextField\" onAction\u003d\"#handleCommandEntered\" promptText\u003d\"Enter command here...\"/\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":"\u003c/StackPane\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"Ella-e":9}},{"path":"bin/main/view/DarkTheme.css","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":".background {","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2024-03-04"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":" background-color: #383838; /* Used in the default.html file */","lastModifiedDate":"2024-03-04"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":".label {","lastModifiedDate":"2024-03-04"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":" -fx-font-size: 11pt;","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":" -fx-font-family: \"Segoe UI Semibold\";","lastModifiedDate":"2024-03-04"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: #555555;","lastModifiedDate":"2024-03-04"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":" -fx-opacity: 0.9;","lastModifiedDate":"2024-03-04"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":".label-bright {","lastModifiedDate":"2024-03-04"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":" -fx-font-size: 11pt;","lastModifiedDate":"2024-03-04"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":" -fx-font-family: \"Segoe UI Semibold\";","lastModifiedDate":"2024-03-04"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":" -fx-opacity: 1;","lastModifiedDate":"2024-03-04"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":20,"author":{"gitId":"Ella-e"},"content":".label-header {","lastModifiedDate":"2024-03-04"},{"lineNumber":21,"author":{"gitId":"Ella-e"},"content":" -fx-font-size: 32pt;","lastModifiedDate":"2024-03-04"},{"lineNumber":22,"author":{"gitId":"Ella-e"},"content":" -fx-font-family: \"Segoe UI Light\";","lastModifiedDate":"2024-03-04"},{"lineNumber":23,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":24,"author":{"gitId":"Ella-e"},"content":" -fx-opacity: 1;","lastModifiedDate":"2024-03-04"},{"lineNumber":25,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":26,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":27,"author":{"gitId":"Ella-e"},"content":".text-field {","lastModifiedDate":"2024-03-04"},{"lineNumber":28,"author":{"gitId":"Ella-e"},"content":" -fx-font-size: 12pt;","lastModifiedDate":"2024-03-04"},{"lineNumber":29,"author":{"gitId":"Ella-e"},"content":" -fx-font-family: \"Segoe UI Semibold\";","lastModifiedDate":"2024-03-04"},{"lineNumber":30,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":31,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":32,"author":{"gitId":"Ella-e"},"content":".tab-pane {","lastModifiedDate":"2024-03-04"},{"lineNumber":33,"author":{"gitId":"Ella-e"},"content":" -fx-padding: 0 0 0 1;","lastModifiedDate":"2024-03-04"},{"lineNumber":34,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":35,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":36,"author":{"gitId":"Ella-e"},"content":".tab-pane .tab-header-area {","lastModifiedDate":"2024-03-04"},{"lineNumber":37,"author":{"gitId":"Ella-e"},"content":" -fx-padding: 0 0 0 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":38,"author":{"gitId":"Ella-e"},"content":" -fx-min-height: 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":39,"author":{"gitId":"Ella-e"},"content":" -fx-max-height: 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":40,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":41,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":42,"author":{"gitId":"Ella-e"},"content":".table-view {","lastModifiedDate":"2024-03-04"},{"lineNumber":43,"author":{"gitId":"Ella-e"},"content":" -fx-base: #1d1d1d;","lastModifiedDate":"2024-03-04"},{"lineNumber":44,"author":{"gitId":"Ella-e"},"content":" -fx-control-inner-background: #1d1d1d;","lastModifiedDate":"2024-03-04"},{"lineNumber":45,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: #1d1d1d;","lastModifiedDate":"2024-03-04"},{"lineNumber":46,"author":{"gitId":"Ella-e"},"content":" -fx-table-cell-border-color: transparent;","lastModifiedDate":"2024-03-04"},{"lineNumber":47,"author":{"gitId":"Ella-e"},"content":" -fx-table-header-border-color: transparent;","lastModifiedDate":"2024-03-04"},{"lineNumber":48,"author":{"gitId":"Ella-e"},"content":" -fx-padding: 5;","lastModifiedDate":"2024-03-04"},{"lineNumber":49,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":50,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":51,"author":{"gitId":"Ella-e"},"content":".table-view .column-header-background {","lastModifiedDate":"2024-03-04"},{"lineNumber":52,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: transparent;","lastModifiedDate":"2024-03-04"},{"lineNumber":53,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":54,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":55,"author":{"gitId":"Ella-e"},"content":".table-view .column-header, .table-view .filler {","lastModifiedDate":"2024-03-04"},{"lineNumber":56,"author":{"gitId":"Ella-e"},"content":" -fx-size: 35;","lastModifiedDate":"2024-03-04"},{"lineNumber":57,"author":{"gitId":"Ella-e"},"content":" -fx-border-width: 0 0 1 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":58,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: transparent;","lastModifiedDate":"2024-03-04"},{"lineNumber":59,"author":{"gitId":"Ella-e"},"content":" -fx-border-color:","lastModifiedDate":"2024-03-04"},{"lineNumber":60,"author":{"gitId":"Ella-e"},"content":" transparent","lastModifiedDate":"2024-03-04"},{"lineNumber":61,"author":{"gitId":"Ella-e"},"content":" transparent","lastModifiedDate":"2024-03-04"},{"lineNumber":62,"author":{"gitId":"Ella-e"},"content":" derive(-fx-base, 80%)","lastModifiedDate":"2024-03-04"},{"lineNumber":63,"author":{"gitId":"Ella-e"},"content":" transparent;","lastModifiedDate":"2024-03-04"},{"lineNumber":64,"author":{"gitId":"Ella-e"},"content":" -fx-border-insets: 0 10 1 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":65,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":66,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":67,"author":{"gitId":"Ella-e"},"content":".table-view .column-header .label {","lastModifiedDate":"2024-03-04"},{"lineNumber":68,"author":{"gitId":"Ella-e"},"content":" -fx-font-size: 20pt;","lastModifiedDate":"2024-03-04"},{"lineNumber":69,"author":{"gitId":"Ella-e"},"content":" -fx-font-family: \"Segoe UI Light\";","lastModifiedDate":"2024-03-04"},{"lineNumber":70,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":71,"author":{"gitId":"Ella-e"},"content":" -fx-alignment: center-left;","lastModifiedDate":"2024-03-04"},{"lineNumber":72,"author":{"gitId":"Ella-e"},"content":" -fx-opacity: 1;","lastModifiedDate":"2024-03-04"},{"lineNumber":73,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":74,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":75,"author":{"gitId":"Ella-e"},"content":".table-view:focused .table-row-cell:filled:focused:selected {","lastModifiedDate":"2024-03-04"},{"lineNumber":76,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: -fx-focus-color;","lastModifiedDate":"2024-03-04"},{"lineNumber":77,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":78,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":79,"author":{"gitId":"Ella-e"},"content":".split-pane:horizontal .split-pane-divider {","lastModifiedDate":"2024-03-04"},{"lineNumber":80,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2024-03-04"},{"lineNumber":81,"author":{"gitId":"Ella-e"},"content":" -fx-border-color: transparent transparent transparent #4d4d4d;","lastModifiedDate":"2024-03-04"},{"lineNumber":82,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":83,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":84,"author":{"gitId":"Ella-e"},"content":".split-pane {","lastModifiedDate":"2024-03-04"},{"lineNumber":85,"author":{"gitId":"Ella-e"},"content":" -fx-border-radius: 1;","lastModifiedDate":"2024-03-04"},{"lineNumber":86,"author":{"gitId":"Ella-e"},"content":" -fx-border-width: 1;","lastModifiedDate":"2024-03-04"},{"lineNumber":87,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2024-03-04"},{"lineNumber":88,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":89,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":90,"author":{"gitId":"Ella-e"},"content":".list-view {","lastModifiedDate":"2024-03-04"},{"lineNumber":91,"author":{"gitId":"Ella-e"},"content":" -fx-background-insets: 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":92,"author":{"gitId":"Ella-e"},"content":" -fx-padding: 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":93,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2024-03-04"},{"lineNumber":94,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":95,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":96,"author":{"gitId":"Ella-e"},"content":".list-cell {","lastModifiedDate":"2024-03-04"},{"lineNumber":97,"author":{"gitId":"Ella-e"},"content":" -fx-label-padding: 0 0 0 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":98,"author":{"gitId":"Ella-e"},"content":" -fx-graphic-text-gap : 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":99,"author":{"gitId":"Ella-e"},"content":" -fx-padding: 0 0 0 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":100,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":101,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":102,"author":{"gitId":"Ella-e"},"content":".list-cell:filled:even {","lastModifiedDate":"2024-03-04"},{"lineNumber":103,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: #3c3e3f;","lastModifiedDate":"2024-03-04"},{"lineNumber":104,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":105,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":106,"author":{"gitId":"Ella-e"},"content":".list-cell:filled:odd {","lastModifiedDate":"2024-03-04"},{"lineNumber":107,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: #515658;","lastModifiedDate":"2024-03-04"},{"lineNumber":108,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":109,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":110,"author":{"gitId":"Ella-e"},"content":".list-cell:filled:selected {","lastModifiedDate":"2024-03-04"},{"lineNumber":111,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: #424d5f;","lastModifiedDate":"2024-03-04"},{"lineNumber":112,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":113,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":114,"author":{"gitId":"Ella-e"},"content":".list-cell:filled:selected #cardPane {","lastModifiedDate":"2024-03-04"},{"lineNumber":115,"author":{"gitId":"Ella-e"},"content":" -fx-border-color: #3e7b91;","lastModifiedDate":"2024-03-04"},{"lineNumber":116,"author":{"gitId":"Ella-e"},"content":" -fx-border-width: 1;","lastModifiedDate":"2024-03-04"},{"lineNumber":117,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":118,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":119,"author":{"gitId":"Ella-e"},"content":".list-cell .label {","lastModifiedDate":"2024-03-04"},{"lineNumber":120,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":121,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":122,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":123,"author":{"gitId":"Ella-e"},"content":".cell_big_label {","lastModifiedDate":"2024-03-04"},{"lineNumber":124,"author":{"gitId":"Ella-e"},"content":" -fx-font-family: \"Segoe UI Semibold\";","lastModifiedDate":"2024-03-04"},{"lineNumber":125,"author":{"gitId":"Ella-e"},"content":" -fx-font-size: 16px;","lastModifiedDate":"2024-03-04"},{"lineNumber":126,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: #010504;","lastModifiedDate":"2024-03-04"},{"lineNumber":127,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":128,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":129,"author":{"gitId":"Ella-e"},"content":".cell_small_label {","lastModifiedDate":"2024-03-04"},{"lineNumber":130,"author":{"gitId":"Ella-e"},"content":" -fx-font-family: \"Segoe UI\";","lastModifiedDate":"2024-03-04"},{"lineNumber":131,"author":{"gitId":"Ella-e"},"content":" -fx-font-size: 13px;","lastModifiedDate":"2024-03-04"},{"lineNumber":132,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: #010504;","lastModifiedDate":"2024-03-04"},{"lineNumber":133,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":134,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":135,"author":{"gitId":"Ella-e"},"content":".stack-pane {","lastModifiedDate":"2024-03-04"},{"lineNumber":136,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2024-03-04"},{"lineNumber":137,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":138,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":139,"author":{"gitId":"Ella-e"},"content":".pane-with-border {","lastModifiedDate":"2024-03-04"},{"lineNumber":140,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2024-03-04"},{"lineNumber":141,"author":{"gitId":"Ella-e"},"content":" -fx-border-color: derive(#1d1d1d, 10%);","lastModifiedDate":"2024-03-04"},{"lineNumber":142,"author":{"gitId":"Ella-e"},"content":" -fx-border-top-width: 1px;","lastModifiedDate":"2024-03-04"},{"lineNumber":143,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":144,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":145,"author":{"gitId":"Ella-e"},"content":".status-bar {","lastModifiedDate":"2024-03-04"},{"lineNumber":146,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(#1d1d1d, 30%);","lastModifiedDate":"2024-03-04"},{"lineNumber":147,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":148,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":149,"author":{"gitId":"Ella-e"},"content":".result-display {","lastModifiedDate":"2024-03-04"},{"lineNumber":150,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: transparent;","lastModifiedDate":"2024-03-04"},{"lineNumber":151,"author":{"gitId":"Ella-e"},"content":" -fx-font-family: \"Segoe UI Light\";","lastModifiedDate":"2024-03-04"},{"lineNumber":152,"author":{"gitId":"Ella-e"},"content":" -fx-font-size: 13pt;","lastModifiedDate":"2024-03-04"},{"lineNumber":153,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":154,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":155,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":156,"author":{"gitId":"Ella-e"},"content":".result-display .label {","lastModifiedDate":"2024-03-04"},{"lineNumber":157,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: black !important;","lastModifiedDate":"2024-03-04"},{"lineNumber":158,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":159,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":160,"author":{"gitId":"Ella-e"},"content":".status-bar .label {","lastModifiedDate":"2024-03-04"},{"lineNumber":161,"author":{"gitId":"Ella-e"},"content":" -fx-font-family: \"Segoe UI Light\";","lastModifiedDate":"2024-03-04"},{"lineNumber":162,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":163,"author":{"gitId":"Ella-e"},"content":" -fx-padding: 4px;","lastModifiedDate":"2024-03-04"},{"lineNumber":164,"author":{"gitId":"Ella-e"},"content":" -fx-pref-height: 30px;","lastModifiedDate":"2024-03-04"},{"lineNumber":165,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":166,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":167,"author":{"gitId":"Ella-e"},"content":".status-bar-with-border {","lastModifiedDate":"2024-03-04"},{"lineNumber":168,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(#1d1d1d, 30%);","lastModifiedDate":"2024-03-04"},{"lineNumber":169,"author":{"gitId":"Ella-e"},"content":" -fx-border-color: derive(#1d1d1d, 25%);","lastModifiedDate":"2024-03-04"},{"lineNumber":170,"author":{"gitId":"Ella-e"},"content":" -fx-border-width: 1px;","lastModifiedDate":"2024-03-04"},{"lineNumber":171,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":172,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":173,"author":{"gitId":"Ella-e"},"content":".status-bar-with-border .label {","lastModifiedDate":"2024-03-04"},{"lineNumber":174,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":175,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":176,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":177,"author":{"gitId":"Ella-e"},"content":".grid-pane {","lastModifiedDate":"2024-03-04"},{"lineNumber":178,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(#1d1d1d, 30%);","lastModifiedDate":"2024-03-04"},{"lineNumber":179,"author":{"gitId":"Ella-e"},"content":" -fx-border-color: derive(#1d1d1d, 30%);","lastModifiedDate":"2024-03-04"},{"lineNumber":180,"author":{"gitId":"Ella-e"},"content":" -fx-border-width: 1px;","lastModifiedDate":"2024-03-04"},{"lineNumber":181,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":182,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":183,"author":{"gitId":"Ella-e"},"content":".grid-pane .stack-pane {","lastModifiedDate":"2024-03-04"},{"lineNumber":184,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(#1d1d1d, 30%);","lastModifiedDate":"2024-03-04"},{"lineNumber":185,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":186,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":187,"author":{"gitId":"Ella-e"},"content":".context-menu {","lastModifiedDate":"2024-03-04"},{"lineNumber":188,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(#1d1d1d, 50%);","lastModifiedDate":"2024-03-04"},{"lineNumber":189,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":190,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":191,"author":{"gitId":"Ella-e"},"content":".context-menu .label {","lastModifiedDate":"2024-03-04"},{"lineNumber":192,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":193,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":194,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":195,"author":{"gitId":"Ella-e"},"content":".menu-bar {","lastModifiedDate":"2024-03-04"},{"lineNumber":196,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2024-03-04"},{"lineNumber":197,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":198,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":199,"author":{"gitId":"Ella-e"},"content":".menu-bar .label {","lastModifiedDate":"2024-03-04"},{"lineNumber":200,"author":{"gitId":"Ella-e"},"content":" -fx-font-size: 14pt;","lastModifiedDate":"2024-03-04"},{"lineNumber":201,"author":{"gitId":"Ella-e"},"content":" -fx-font-family: \"Segoe UI Light\";","lastModifiedDate":"2024-03-04"},{"lineNumber":202,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":203,"author":{"gitId":"Ella-e"},"content":" -fx-opacity: 0.9;","lastModifiedDate":"2024-03-04"},{"lineNumber":204,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":205,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":206,"author":{"gitId":"Ella-e"},"content":".menu .left-container {","lastModifiedDate":"2024-03-04"},{"lineNumber":207,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: black;","lastModifiedDate":"2024-03-04"},{"lineNumber":208,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":209,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":210,"author":{"gitId":"Ella-e"},"content":"/*","lastModifiedDate":"2024-03-04"},{"lineNumber":211,"author":{"gitId":"Ella-e"},"content":" * Metro style Push Button","lastModifiedDate":"2024-03-04"},{"lineNumber":212,"author":{"gitId":"Ella-e"},"content":" * Author: Pedro Duque Vieira","lastModifiedDate":"2024-03-04"},{"lineNumber":213,"author":{"gitId":"Ella-e"},"content":" * http://pixelduke.wordpress.com/2012/10/23/jmetro-windows-8-controls-on-java/","lastModifiedDate":"2024-03-04"},{"lineNumber":214,"author":{"gitId":"Ella-e"},"content":" */","lastModifiedDate":"2024-03-04"},{"lineNumber":215,"author":{"gitId":"Ella-e"},"content":".button {","lastModifiedDate":"2024-03-04"},{"lineNumber":216,"author":{"gitId":"Ella-e"},"content":" -fx-padding: 5 22 5 22;","lastModifiedDate":"2024-03-04"},{"lineNumber":217,"author":{"gitId":"Ella-e"},"content":" -fx-border-color: #e2e2e2;","lastModifiedDate":"2024-03-04"},{"lineNumber":218,"author":{"gitId":"Ella-e"},"content":" -fx-border-width: 2;","lastModifiedDate":"2024-03-04"},{"lineNumber":219,"author":{"gitId":"Ella-e"},"content":" -fx-background-radius: 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":220,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: #1d1d1d;","lastModifiedDate":"2024-03-04"},{"lineNumber":221,"author":{"gitId":"Ella-e"},"content":" -fx-font-family: \"Segoe UI\", Helvetica, Arial, sans-serif;","lastModifiedDate":"2024-03-04"},{"lineNumber":222,"author":{"gitId":"Ella-e"},"content":" -fx-font-size: 11pt;","lastModifiedDate":"2024-03-04"},{"lineNumber":223,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: #d8d8d8;","lastModifiedDate":"2024-03-04"},{"lineNumber":224,"author":{"gitId":"Ella-e"},"content":" -fx-background-insets: 0 0 0 0, 0, 1, 2;","lastModifiedDate":"2024-03-04"},{"lineNumber":225,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":226,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":227,"author":{"gitId":"Ella-e"},"content":".button:hover {","lastModifiedDate":"2024-03-04"},{"lineNumber":228,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: #3a3a3a;","lastModifiedDate":"2024-03-04"},{"lineNumber":229,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":230,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":231,"author":{"gitId":"Ella-e"},"content":".button:pressed, .button:default:hover:pressed {","lastModifiedDate":"2024-03-04"},{"lineNumber":232,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":233,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: #1d1d1d;","lastModifiedDate":"2024-03-04"},{"lineNumber":234,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":235,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":236,"author":{"gitId":"Ella-e"},"content":".button:focused {","lastModifiedDate":"2024-03-04"},{"lineNumber":237,"author":{"gitId":"Ella-e"},"content":" -fx-border-color: white, white;","lastModifiedDate":"2024-03-04"},{"lineNumber":238,"author":{"gitId":"Ella-e"},"content":" -fx-border-width: 1, 1;","lastModifiedDate":"2024-03-04"},{"lineNumber":239,"author":{"gitId":"Ella-e"},"content":" -fx-border-style: solid, segments(1, 1);","lastModifiedDate":"2024-03-04"},{"lineNumber":240,"author":{"gitId":"Ella-e"},"content":" -fx-border-radius: 0, 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":241,"author":{"gitId":"Ella-e"},"content":" -fx-border-insets: 1 1 1 1, 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":242,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":243,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":244,"author":{"gitId":"Ella-e"},"content":".button:disabled, .button:default:disabled {","lastModifiedDate":"2024-03-04"},{"lineNumber":245,"author":{"gitId":"Ella-e"},"content":" -fx-opacity: 0.4;","lastModifiedDate":"2024-03-04"},{"lineNumber":246,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: #1d1d1d;","lastModifiedDate":"2024-03-04"},{"lineNumber":247,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":248,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":249,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":250,"author":{"gitId":"Ella-e"},"content":".button:default {","lastModifiedDate":"2024-03-04"},{"lineNumber":251,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: -fx-focus-color;","lastModifiedDate":"2024-03-04"},{"lineNumber":252,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: #ffffff;","lastModifiedDate":"2024-03-04"},{"lineNumber":253,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":254,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":255,"author":{"gitId":"Ella-e"},"content":".button:default:hover {","lastModifiedDate":"2024-03-04"},{"lineNumber":256,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(-fx-focus-color, 30%);","lastModifiedDate":"2024-03-04"},{"lineNumber":257,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":258,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":259,"author":{"gitId":"Ella-e"},"content":".dialog-pane {","lastModifiedDate":"2024-03-04"},{"lineNumber":260,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: #1d1d1d;","lastModifiedDate":"2024-03-04"},{"lineNumber":261,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":262,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":263,"author":{"gitId":"Ella-e"},"content":".dialog-pane \u003e *.button-bar \u003e *.container {","lastModifiedDate":"2024-03-04"},{"lineNumber":264,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: #1d1d1d;","lastModifiedDate":"2024-03-04"},{"lineNumber":265,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":266,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":267,"author":{"gitId":"Ella-e"},"content":".dialog-pane \u003e *.label.content {","lastModifiedDate":"2024-03-04"},{"lineNumber":268,"author":{"gitId":"Ella-e"},"content":" -fx-font-size: 14px;","lastModifiedDate":"2024-03-04"},{"lineNumber":269,"author":{"gitId":"Ella-e"},"content":" -fx-font-weight: bold;","lastModifiedDate":"2024-03-04"},{"lineNumber":270,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":271,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":272,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":273,"author":{"gitId":"Ella-e"},"content":".dialog-pane:header *.header-panel {","lastModifiedDate":"2024-03-04"},{"lineNumber":274,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(#1d1d1d, 25%);","lastModifiedDate":"2024-03-04"},{"lineNumber":275,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":276,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":277,"author":{"gitId":"Ella-e"},"content":".dialog-pane:header *.header-panel *.label {","lastModifiedDate":"2024-03-04"},{"lineNumber":278,"author":{"gitId":"Ella-e"},"content":" -fx-font-size: 18px;","lastModifiedDate":"2024-03-04"},{"lineNumber":279,"author":{"gitId":"Ella-e"},"content":" -fx-font-style: italic;","lastModifiedDate":"2024-03-04"},{"lineNumber":280,"author":{"gitId":"Ella-e"},"content":" -fx-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":281,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":282,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":283,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":284,"author":{"gitId":"Ella-e"},"content":".scroll-bar {","lastModifiedDate":"2024-03-04"},{"lineNumber":285,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2024-03-04"},{"lineNumber":286,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":287,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":288,"author":{"gitId":"Ella-e"},"content":".scroll-bar .thumb {","lastModifiedDate":"2024-03-04"},{"lineNumber":289,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(#1d1d1d, 50%);","lastModifiedDate":"2024-03-04"},{"lineNumber":290,"author":{"gitId":"Ella-e"},"content":" -fx-background-insets: 3;","lastModifiedDate":"2024-03-04"},{"lineNumber":291,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":292,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":293,"author":{"gitId":"Ella-e"},"content":".scroll-bar .increment-button, .scroll-bar .decrement-button {","lastModifiedDate":"2024-03-04"},{"lineNumber":294,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: transparent;","lastModifiedDate":"2024-03-04"},{"lineNumber":295,"author":{"gitId":"Ella-e"},"content":" -fx-padding: 0 0 0 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":296,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":297,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":298,"author":{"gitId":"Ella-e"},"content":".scroll-bar .increment-arrow, .scroll-bar .decrement-arrow {","lastModifiedDate":"2024-03-04"},{"lineNumber":299,"author":{"gitId":"Ella-e"},"content":" -fx-shape: \" \";","lastModifiedDate":"2024-03-04"},{"lineNumber":300,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":301,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":302,"author":{"gitId":"Ella-e"},"content":".scroll-bar:vertical .increment-arrow, .scroll-bar:vertical .decrement-arrow {","lastModifiedDate":"2024-03-04"},{"lineNumber":303,"author":{"gitId":"Ella-e"},"content":" -fx-padding: 1 8 1 8;","lastModifiedDate":"2024-03-04"},{"lineNumber":304,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":305,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":306,"author":{"gitId":"Ella-e"},"content":".scroll-bar:horizontal .increment-arrow, .scroll-bar:horizontal .decrement-arrow {","lastModifiedDate":"2024-03-04"},{"lineNumber":307,"author":{"gitId":"Ella-e"},"content":" -fx-padding: 8 1 8 1;","lastModifiedDate":"2024-03-04"},{"lineNumber":308,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":309,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":310,"author":{"gitId":"Ella-e"},"content":"#cardPane {","lastModifiedDate":"2024-03-04"},{"lineNumber":311,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: transparent;","lastModifiedDate":"2024-03-04"},{"lineNumber":312,"author":{"gitId":"Ella-e"},"content":" -fx-border-width: 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":313,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":314,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":315,"author":{"gitId":"Ella-e"},"content":"#commandTypeLabel {","lastModifiedDate":"2024-03-04"},{"lineNumber":316,"author":{"gitId":"Ella-e"},"content":" -fx-font-size: 11px;","lastModifiedDate":"2024-03-04"},{"lineNumber":317,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: #F70D1A;","lastModifiedDate":"2024-03-04"},{"lineNumber":318,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":319,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":320,"author":{"gitId":"Ella-e"},"content":"#commandTextField {","lastModifiedDate":"2024-03-04"},{"lineNumber":321,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: transparent #383838 transparent #383838;","lastModifiedDate":"2024-03-04"},{"lineNumber":322,"author":{"gitId":"Ella-e"},"content":" -fx-background-insets: 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":323,"author":{"gitId":"Ella-e"},"content":" -fx-border-color: #383838 #383838 #ffffff #383838;","lastModifiedDate":"2024-03-04"},{"lineNumber":324,"author":{"gitId":"Ella-e"},"content":" -fx-border-insets: 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":325,"author":{"gitId":"Ella-e"},"content":" -fx-border-width: 1;","lastModifiedDate":"2024-03-04"},{"lineNumber":326,"author":{"gitId":"Ella-e"},"content":" -fx-font-family: \"Segoe UI Light\";","lastModifiedDate":"2024-03-04"},{"lineNumber":327,"author":{"gitId":"Ella-e"},"content":" -fx-font-size: 13pt;","lastModifiedDate":"2024-03-04"},{"lineNumber":328,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":329,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":330,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":331,"author":{"gitId":"Ella-e"},"content":"#filterField, #personListPanel, #personWebpage {","lastModifiedDate":"2024-03-04"},{"lineNumber":332,"author":{"gitId":"Ella-e"},"content":" -fx-effect: innershadow(gaussian, black, 10, 0, 0, 0);","lastModifiedDate":"2024-03-04"},{"lineNumber":333,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":334,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":335,"author":{"gitId":"Ella-e"},"content":"#resultDisplay .content {","lastModifiedDate":"2024-03-04"},{"lineNumber":336,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: transparent, #383838, transparent, #383838;","lastModifiedDate":"2024-03-04"},{"lineNumber":337,"author":{"gitId":"Ella-e"},"content":" -fx-background-radius: 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":338,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":339,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":340,"author":{"gitId":"Ella-e"},"content":"#tags {","lastModifiedDate":"2024-03-04"},{"lineNumber":341,"author":{"gitId":"Ella-e"},"content":" -fx-hgap: 7;","lastModifiedDate":"2024-03-04"},{"lineNumber":342,"author":{"gitId":"Ella-e"},"content":" -fx-vgap: 3;","lastModifiedDate":"2024-03-04"},{"lineNumber":343,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":344,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":345,"author":{"gitId":"Ella-e"},"content":"#tags .label {","lastModifiedDate":"2024-03-04"},{"lineNumber":346,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":347,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: #3e7b91;","lastModifiedDate":"2024-03-04"},{"lineNumber":348,"author":{"gitId":"Ella-e"},"content":" -fx-padding: 1 3 1 3;","lastModifiedDate":"2024-03-04"},{"lineNumber":349,"author":{"gitId":"Ella-e"},"content":" -fx-border-radius: 2;","lastModifiedDate":"2024-03-04"},{"lineNumber":350,"author":{"gitId":"Ella-e"},"content":" -fx-background-radius: 2;","lastModifiedDate":"2024-03-04"},{"lineNumber":351,"author":{"gitId":"Ella-e"},"content":" -fx-font-size: 11;","lastModifiedDate":"2024-03-04"},{"lineNumber":352,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"Ella-e":352}},{"path":"bin/main/view/Extensions.css","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":".error {","lastModifiedDate":"2024-03-04"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: #d06651 !important; /* The error class should always override the default text-fill style */","lastModifiedDate":"2024-03-04"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":".list-cell:empty {","lastModifiedDate":"2024-03-04"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":" /* Empty cells will not have alternating colours */","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":" -fx-background: #383838;","lastModifiedDate":"2024-03-04"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":".tag-selector {","lastModifiedDate":"2024-03-04"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":" -fx-border-width: 1;","lastModifiedDate":"2024-03-04"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":" -fx-border-color: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":" -fx-border-radius: 3;","lastModifiedDate":"2024-03-04"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":" -fx-background-radius: 3;","lastModifiedDate":"2024-03-04"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":".tooltip-text {","lastModifiedDate":"2024-03-04"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":20,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"Ella-e":20}},{"path":"bin/main/view/HelpWindow.css","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"#copyButton, #helpMessage {","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"#copyButton {","lastModifiedDate":"2024-03-04"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: dimgray;","lastModifiedDate":"2024-03-04"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":"#copyButton:hover {","lastModifiedDate":"2024-03-04"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: gray;","lastModifiedDate":"2024-03-04"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":"#copyButton:armed {","lastModifiedDate":"2024-03-04"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: darkgray;","lastModifiedDate":"2024-03-04"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":"#helpMessageContainer {","lastModifiedDate":"2024-03-04"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2024-03-04"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"Ella-e":19}},{"path":"bin/main/view/HelpWindow.fxml","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"\u003c?import java.net.URL?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.Scene?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.image.Image?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.stage.Stage?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":"\u003cfx:root resizable\u003d\"false\" title\u003d\"Help\" type\u003d\"javafx.stage.Stage\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":" \u003cicons\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":" \u003cImage url\u003d\"@/images/help_icon.png\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":" \u003c/icons\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":" \u003cscene\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":" \u003cScene\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":" \u003cstylesheets\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":" \u003cURL value\u003d\"@HelpWindow.css\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":20,"author":{"gitId":"Ella-e"},"content":" \u003c/stylesheets\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":21,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":22,"author":{"gitId":"Ella-e"},"content":" \u003cHBox alignment\u003d\"CENTER\" fx:id\u003d\"helpMessageContainer\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":23,"author":{"gitId":"Ella-e"},"content":" \u003cchildren\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":24,"author":{"gitId":"Ella-e"},"content":" \u003cLabel fx:id\u003d\"helpMessage\" text\u003d\"Label\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":25,"author":{"gitId":"Ella-e"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":26,"author":{"gitId":"Ella-e"},"content":" \u003cInsets right\u003d\"5.0\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":27,"author":{"gitId":"Ella-e"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":28,"author":{"gitId":"Ella-e"},"content":" \u003c/Label\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":29,"author":{"gitId":"Ella-e"},"content":" \u003cButton fx:id\u003d\"copyButton\" mnemonicParsing\u003d\"false\" onAction\u003d\"#copyUrl\" text\u003d\"Copy URL\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":30,"author":{"gitId":"Ella-e"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":31,"author":{"gitId":"Ella-e"},"content":" \u003cInsets left\u003d\"5.0\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":32,"author":{"gitId":"Ella-e"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":33,"author":{"gitId":"Ella-e"},"content":" \u003c/Button\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":34,"author":{"gitId":"Ella-e"},"content":" \u003c/children\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":35,"author":{"gitId":"Ella-e"},"content":" \u003copaqueInsets\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":36,"author":{"gitId":"Ella-e"},"content":" \u003cInsets bottom\u003d\"10.0\" left\u003d\"5.0\" right\u003d\"10.0\" top\u003d\"5.0\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":37,"author":{"gitId":"Ella-e"},"content":" \u003c/opaqueInsets\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":38,"author":{"gitId":"Ella-e"},"content":" \u003cpadding\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":39,"author":{"gitId":"Ella-e"},"content":" \u003cInsets bottom\u003d\"10.0\" left\u003d\"5.0\" right\u003d\"10.0\" top\u003d\"5.0\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":40,"author":{"gitId":"Ella-e"},"content":" \u003c/padding\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":41,"author":{"gitId":"Ella-e"},"content":" \u003c/HBox\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":42,"author":{"gitId":"Ella-e"},"content":" \u003c/Scene\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":43,"author":{"gitId":"Ella-e"},"content":" \u003c/scene\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":44,"author":{"gitId":"Ella-e"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"Ella-e":44}},{"path":"bin/main/view/MainWindow.fxml","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"\u003c?import java.net.URL?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.Scene?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.control.Menu?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.control.MenuBar?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.control.MenuItem?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.control.SplitPane?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.image.Image?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.layout.StackPane?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":"\u003cfx:root type\u003d\"javafx.stage.Stage\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"","lastModifiedDate":"2024-03-04"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":" title\u003d\"Address App\" minWidth\u003d\"450\" minHeight\u003d\"600\" onCloseRequest\u003d\"#handleExit\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":" \u003cicons\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":" \u003cImage url\u003d\"@/images/address_book_32.png\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":" \u003c/icons\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":" \u003cscene\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":20,"author":{"gitId":"Ella-e"},"content":" \u003cScene\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":21,"author":{"gitId":"Ella-e"},"content":" \u003cstylesheets\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":22,"author":{"gitId":"Ella-e"},"content":" \u003cURL value\u003d\"@DarkTheme.css\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":23,"author":{"gitId":"Ella-e"},"content":" \u003cURL value\u003d\"@Extensions.css\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":24,"author":{"gitId":"Ella-e"},"content":" \u003c/stylesheets\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":25,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":26,"author":{"gitId":"Ella-e"},"content":" \u003cVBox\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":27,"author":{"gitId":"Ella-e"},"content":" \u003cMenuBar fx:id\u003d\"menuBar\" VBox.vgrow\u003d\"NEVER\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":28,"author":{"gitId":"Ella-e"},"content":" \u003cMenu mnemonicParsing\u003d\"false\" text\u003d\"File\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":29,"author":{"gitId":"Ella-e"},"content":" \u003cMenuItem mnemonicParsing\u003d\"false\" onAction\u003d\"#handleExit\" text\u003d\"Exit\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":30,"author":{"gitId":"Ella-e"},"content":" \u003c/Menu\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":31,"author":{"gitId":"Ella-e"},"content":" \u003cMenu mnemonicParsing\u003d\"false\" text\u003d\"Help\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":32,"author":{"gitId":"Ella-e"},"content":" \u003cMenuItem fx:id\u003d\"helpMenuItem\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleHelp\" text\u003d\"Help\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":33,"author":{"gitId":"Ella-e"},"content":" \u003c/Menu\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":34,"author":{"gitId":"Ella-e"},"content":" \u003c/MenuBar\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":35,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":36,"author":{"gitId":"Ella-e"},"content":" \u003cStackPane VBox.vgrow\u003d\"NEVER\" fx:id\u003d\"commandBoxPlaceholder\" styleClass\u003d\"pane-with-border\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":37,"author":{"gitId":"Ella-e"},"content":" \u003cpadding\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":38,"author":{"gitId":"Ella-e"},"content":" \u003cInsets top\u003d\"5\" right\u003d\"10\" bottom\u003d\"5\" left\u003d\"10\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":39,"author":{"gitId":"Ella-e"},"content":" \u003c/padding\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":40,"author":{"gitId":"Ella-e"},"content":" \u003c/StackPane\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":41,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":42,"author":{"gitId":"Ella-e"},"content":" \u003cStackPane VBox.vgrow\u003d\"NEVER\" fx:id\u003d\"resultDisplayPlaceholder\" styleClass\u003d\"pane-with-border\"","lastModifiedDate":"2024-03-04"},{"lineNumber":43,"author":{"gitId":"Ella-e"},"content":" minHeight\u003d\"100\" prefHeight\u003d\"100\" maxHeight\u003d\"100\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":44,"author":{"gitId":"Ella-e"},"content":" \u003cpadding\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":45,"author":{"gitId":"Ella-e"},"content":" \u003cInsets top\u003d\"5\" right\u003d\"10\" bottom\u003d\"5\" left\u003d\"10\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":46,"author":{"gitId":"Ella-e"},"content":" \u003c/padding\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":47,"author":{"gitId":"Ella-e"},"content":" \u003c/StackPane\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":48,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":49,"author":{"gitId":"Ella-e"},"content":" \u003cVBox fx:id\u003d\"personList\" styleClass\u003d\"pane-with-border\" minWidth\u003d\"340\" prefWidth\u003d\"340\" VBox.vgrow\u003d\"ALWAYS\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":50,"author":{"gitId":"Ella-e"},"content":" \u003cpadding\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":51,"author":{"gitId":"Ella-e"},"content":" \u003cInsets top\u003d\"10\" right\u003d\"10\" bottom\u003d\"10\" left\u003d\"10\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":52,"author":{"gitId":"Ella-e"},"content":" \u003c/padding\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":53,"author":{"gitId":"Ella-e"},"content":" \u003cStackPane fx:id\u003d\"personListPanelPlaceholder\" VBox.vgrow\u003d\"ALWAYS\"/\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":54,"author":{"gitId":"Ella-e"},"content":" \u003c/VBox\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":55,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":56,"author":{"gitId":"Ella-e"},"content":" \u003cStackPane fx:id\u003d\"statusbarPlaceholder\" VBox.vgrow\u003d\"NEVER\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":57,"author":{"gitId":"Ella-e"},"content":" \u003c/VBox\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":58,"author":{"gitId":"Ella-e"},"content":" \u003c/Scene\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":59,"author":{"gitId":"Ella-e"},"content":" \u003c/scene\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":60,"author":{"gitId":"Ella-e"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"Ella-e":60}},{"path":"bin/main/view/PersonListCard.fxml","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.layout.ColumnConstraints?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.layout.FlowPane?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.layout.GridPane?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.layout.Region?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"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":"2024-03-04"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":" \u003cGridPane HBox.hgrow\u003d\"ALWAYS\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":" \u003ccolumnConstraints\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":" \u003cColumnConstraints hgrow\u003d\"SOMETIMES\" minWidth\u003d\"10\" prefWidth\u003d\"150\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":" \u003c/columnConstraints\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":" \u003cVBox alignment\u003d\"CENTER_LEFT\" minHeight\u003d\"105\" GridPane.columnIndex\u003d\"0\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":" \u003cpadding\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":" \u003cInsets top\u003d\"5\" right\u003d\"5\" bottom\u003d\"5\" left\u003d\"15\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":20,"author":{"gitId":"Ella-e"},"content":" \u003c/padding\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":21,"author":{"gitId":"Ella-e"},"content":" \u003cHBox spacing\u003d\"5\" alignment\u003d\"CENTER_LEFT\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":22,"author":{"gitId":"Ella-e"},"content":" \u003cLabel fx:id\u003d\"id\" styleClass\u003d\"cell_big_label\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":23,"author":{"gitId":"Ella-e"},"content":" \u003cminWidth\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":24,"author":{"gitId":"Ella-e"},"content":" \u003c!-- Ensures that the label text is never truncated --\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":25,"author":{"gitId":"Ella-e"},"content":" \u003cRegion fx:constant\u003d\"USE_PREF_SIZE\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":26,"author":{"gitId":"Ella-e"},"content":" \u003c/minWidth\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":27,"author":{"gitId":"Ella-e"},"content":" \u003c/Label\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":28,"author":{"gitId":"Ella-e"},"content":" \u003cLabel fx:id\u003d\"name\" text\u003d\"\\$first\" styleClass\u003d\"cell_big_label\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":29,"author":{"gitId":"Ella-e"},"content":" \u003c/HBox\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":30,"author":{"gitId":"Ella-e"},"content":" \u003cFlowPane fx:id\u003d\"tags\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":31,"author":{"gitId":"Ella-e"},"content":" \u003cLabel fx:id\u003d\"phone\" styleClass\u003d\"cell_small_label\" text\u003d\"\\$phone\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":32,"author":{"gitId":"Ella-e"},"content":" \u003cLabel fx:id\u003d\"address\" styleClass\u003d\"cell_small_label\" text\u003d\"\\$address\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":33,"author":{"gitId":"Ella-e"},"content":" \u003cLabel fx:id\u003d\"email\" styleClass\u003d\"cell_small_label\" text\u003d\"\\$email\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":34,"author":{"gitId":"Ella-e"},"content":" \u003c/VBox\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":35,"author":{"gitId":"Ella-e"},"content":" \u003c/GridPane\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":36,"author":{"gitId":"Ella-e"},"content":"\u003c/HBox\u003e","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"Ella-e":36}},{"path":"bin/main/view/PersonListPanel.fxml","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.control.ListView?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"\u003cVBox xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":" \u003cListView fx:id\u003d\"personListView\" VBox.vgrow\u003d\"ALWAYS\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":"\u003c/VBox\u003e","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"Ella-e":8}},{"path":"bin/main/view/ResultDisplay.fxml","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.control.TextArea?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.layout.StackPane?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"\u003cStackPane fx:id\u003d\"placeHolder\" styleClass\u003d\"pane-with-border\" xmlns\u003d\"http://javafx.com/javafx/17\"","lastModifiedDate":"2024-03-04"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":" \u003cTextArea fx:id\u003d\"resultDisplay\" editable\u003d\"false\" styleClass\u003d\"result-display\"/\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":"\u003c/StackPane\u003e","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"Ella-e":9}},{"path":"bin/main/view/StatusBarFooter.fxml","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.layout.ColumnConstraints?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.layout.GridPane?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"\u003cGridPane styleClass\u003d\"status-bar\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":" \u003ccolumnConstraints\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":" \u003cColumnConstraints hgrow\u003d\"SOMETIMES\" minWidth\u003d\"10\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":" \u003c/columnConstraints\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":" \u003cLabel fx:id\u003d\"saveLocationStatus\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":"\u003c/GridPane\u003e","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"Ella-e":12}},{"path":"bin/test/view/UiPartTest/invalidFile.fxml","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"Not a valid FXML file","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"Ella-e":1}},{"path":"bin/test/view/UiPartTest/validFile.fxml","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"\u003c?import seedu.address.ui.TestFxmlObject?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"\u003cTestFxmlObject xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:id\u003d\"validFileRoot\"\u003eHello World!\u003c/TestFxmlObject\u003e","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"Ella-e":4}},{"path":"bin/test/view/UiPartTest/validFileWithFxRoot.fxml","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"\u003cfx:root type\u003d\"seedu.address.ui.TestFxmlObject\" xmlns\u003d\"http://javafx.com/javafx/17\"","lastModifiedDate":"2024-03-04"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":" \u003ctext\u003eHello World!\u003c/text\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"Ella-e":6}},{"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":"MaYuehan"},"content":"### Ma Yuehan","lastModifiedDate":"2024-02-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/johndoe.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2020-06-17"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"MaYuehan"},"content":"[[github](https://github.com/MaYuehan)]","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"MaYuehan"},"content":"[[portfolio](team/mayuehan.md)]","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":29,"author":{"gitId":"MaYuehan"},"content":"* Role: Developer","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"MaYuehan"},"content":"* Responsibilities: ","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"Ella-e"},"content":"### Mu Zhaoyu","lastModifiedDate":"2024-03-04"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"Ella-e"},"content":"\u003cimg src\u003d\"images/ella-e.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"Ella-e"},"content":"[[github](http://github.com/Ella-e)] ","lastModifiedDate":"2024-03-04"},{"lineNumber":37,"author":{"gitId":"Ella-e"},"content":"[[portfolio](team/ella-e.md)]","lastModifiedDate":"2024-03-04"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":40,"author":{"gitId":"Ella-e"},"content":"* Responsibilities: Command implementation, documentation","lastModifiedDate":"2024-03-04"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":"### Jean Doe","lastModifiedDate":"2020-06-17"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/johndoe.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2020-06-17"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":"[[github](http://github.com/johndoe)]","lastModifiedDate":"2020-06-17"},{"lineNumber":47,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":50,"author":{"gitId":"-"},"content":"* Responsibilities: Dev Ops + Threading","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"-"},"content":"### James Doe","lastModifiedDate":"2020-06-17"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/johndoe.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2020-06-17"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":56,"author":{"gitId":"-"},"content":"[[github](http://github.com/johndoe)]","lastModifiedDate":"2020-06-17"},{"lineNumber":57,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":59,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":60,"author":{"gitId":"-"},"content":"* Responsibilities: UI","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"MaYuehan":5,"Ella-e":5,"-":50}},{"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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"content":"Classes used by multiple components are in the `seedu.addressbook.commons` package.","lastModifiedDate":"2020-05-23"},{"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":"-"},"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":163,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":164,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#commit()` — Saves the current address book state in its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":165,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#undo()` — Restores the previous address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":166,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#redo()` — Restores a previously undone address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":167,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":168,"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":210,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":211,"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":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":"-"},"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":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":"-"},"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":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":"-"},"content":"* has a need to manage a significant number of contacts","lastModifiedDate":"2020-05-23"},{"lineNumber":266,"author":{"gitId":"-"},"content":"* prefer desktop apps over other types","lastModifiedDate":"2020-05-23"},{"lineNumber":267,"author":{"gitId":"-"},"content":"* can type fast","lastModifiedDate":"2020-05-23"},{"lineNumber":268,"author":{"gitId":"-"},"content":"* prefers typing to mouse interactions","lastModifiedDate":"2020-05-26"},{"lineNumber":269,"author":{"gitId":"-"},"content":"* is reasonably comfortable using CLI apps","lastModifiedDate":"2020-05-23"},{"lineNumber":270,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":271,"author":{"gitId":"-"},"content":"**Value proposition**: manage contacts faster than a typical mouse/GUI driven app","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":"### User stories","lastModifiedDate":"2020-06-07"},{"lineNumber":275,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":276,"author":{"gitId":"Ella-e"},"content":"Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (good to but might not have) - `*`","lastModifiedDate":"2024-03-04"},{"lineNumber":277,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":278,"author":{"gitId":"-"},"content":"| Priority | As a …​ | I want to …​ | So that I can…​ |","lastModifiedDate":"2020-05-23"},{"lineNumber":279,"author":{"gitId":"-"},"content":"| -------- | ------------------------------------------ | ------------------------------ | ---------------------------------------------------------------------- |","lastModifiedDate":"2020-05-23"},{"lineNumber":280,"author":{"gitId":"Ella-e"},"content":"| `* * *` | new user | have a comprehensive document that details every possible feature. | learn how to use a particular feature |","lastModifiedDate":"2024-03-04"},{"lineNumber":281,"author":{"gitId":"Ella-e"},"content":"| `* * *` | user | add new patient, either with or without further information about the patient | |","lastModifiedDate":"2024-03-04"},{"lineNumber":282,"author":{"gitId":"Ella-e"},"content":"| `* * *` | user | delete patient | free storage resources |","lastModifiedDate":"2024-03-04"},{"lineNumber":283,"author":{"gitId":"Ella-e"},"content":"| `* * *` | user | be able to add the contact information of my patient into the database | I can get in touch with them when needed or under emergency situation |","lastModifiedDate":"2024-03-04"},{"lineNumber":284,"author":{"gitId":"Ella-e"},"content":"| `* * *` | user | be able to delete the contact information for a particular patient when the information is outdated | I can keep in touch with my patient |","lastModifiedDate":"2024-03-04"},{"lineNumber":285,"author":{"gitId":"Ella-e"},"content":"| `* * *` | user | list all patients and their contacts | |","lastModifiedDate":"2024-03-04"},{"lineNumber":286,"author":{"gitId":"Ella-e"},"content":"| `* * *` | intermediate user | add appointment to free time slot | easily schedule an appointment and find free time slot for it |","lastModifiedDate":"2024-03-04"},{"lineNumber":287,"author":{"gitId":"Ella-e"},"content":"| `* * *` | intermediate user | delete appointment to free time slot | remove reservation if the patient is unable to attend |","lastModifiedDate":"2024-03-04"},{"lineNumber":288,"author":{"gitId":"Ella-e"},"content":"| `* * *` | intermediate user | list appointments | I can see all the appointments. |","lastModifiedDate":"2024-03-04"},{"lineNumber":289,"author":{"gitId":"Ella-e"},"content":"| `* * *` | user | add medication instructions for the patient | have a better understanding of the medication history of my patient |","lastModifiedDate":"2024-03-04"},{"lineNumber":290,"author":{"gitId":"Ella-e"},"content":"| `* * *` | user | list all information about specific patient | see the detail information of the patient |","lastModifiedDate":"2024-03-04"},{"lineNumber":291,"author":{"gitId":"Ella-e"},"content":"| `* *` | user | be able to modify/update the information of a particular patient | I can keep the most-updated information |","lastModifiedDate":"2024-03-04"},{"lineNumber":292,"author":{"gitId":"Ella-e"},"content":"| `* *` | user | be able to modify an appointment details of a patient | I can keep the most-updated appointment information |","lastModifiedDate":"2024-03-04"},{"lineNumber":293,"author":{"gitId":"Ella-e"},"content":"| `* *` | new user | option for undo most precent change | I can quickly fix my mistyped command |","lastModifiedDate":"2024-03-04"},{"lineNumber":294,"author":{"gitId":"Ella-e"},"content":"| `* *` | beginner | set the reminder for an appointment | remind me when Im busy with work |","lastModifiedDate":"2024-03-04"},{"lineNumber":295,"author":{"gitId":"Ella-e"},"content":"| `* *` | user | mark a reminder as done | better track the undo work |","lastModifiedDate":"2024-03-04"},{"lineNumber":296,"author":{"gitId":"Ella-e"},"content":"| `* *` | user | mark some of the patients as the special focus | better track the state of illness of patients who are in a very serious state |","lastModifiedDate":"2024-03-04"},{"lineNumber":297,"author":{"gitId":"Ella-e"},"content":"| `* *` | expert user | have short forms of existing commands | save time on typing the commands |","lastModifiedDate":"2024-03-04"},{"lineNumber":298,"author":{"gitId":"Ella-e"},"content":"| `* *` | new user | interactive guide with sample data | quickly understand app\u0027s capabilities |","lastModifiedDate":"2024-03-04"},{"lineNumber":299,"author":{"gitId":"Ella-e"},"content":"| `* *` | Doctor who is colaborating with other doctor | ability to leave comments or annotations on shared patient records | communicate specific insights or recommendations to my colleague |","lastModifiedDate":"2024-03-04"},{"lineNumber":300,"author":{"gitId":"Ella-e"},"content":"| `* *` | intermediate user | see the previous doage that the patient take in his medical record page | Adjust the dosage for the patient according to his/her state of illness |","lastModifiedDate":"2024-03-04"},{"lineNumber":301,"author":{"gitId":"Ella-e"},"content":"| `* *` | intermediate user | search about the patient\u0027s allergy history | Prescribing safe medication for patients |","lastModifiedDate":"2024-03-04"},{"lineNumber":302,"author":{"gitId":"Ella-e"},"content":"| `* *` | intermediate user | know about the previous illnesses of the patient | help to diagnose causes more accurately |","lastModifiedDate":"2024-03-04"},{"lineNumber":303,"author":{"gitId":"Ella-e"},"content":"| `* *` | intermediate user | be able to update the patient\u0027s condition upon the previous appointment | better track the sate of illness of the patient |","lastModifiedDate":"2024-03-04"},{"lineNumber":304,"author":{"gitId":"Ella-e"},"content":"| `*` | new user | suggestion on correction for mistyped commands | avoid typing wrong comands |","lastModifiedDate":"2024-03-04"},{"lineNumber":305,"author":{"gitId":"Ella-e"},"content":"| `*` | user | have a way to assign specific colors to specific tags | better differentiate the existing tags |","lastModifiedDate":"2024-03-04"},{"lineNumber":306,"author":{"gitId":"Ella-e"},"content":"| `*` | user | have a icon or button beside a feature that shows a tooltip when hovered | quickly find out information about the feature without needing other references |","lastModifiedDate":"2024-03-04"},{"lineNumber":307,"author":{"gitId":"Ella-e"},"content":"| `*` | user | have a method of giving feedback to the developers | share aspects of the product that I would like changes to |","lastModifiedDate":"2024-03-04"},{"lineNumber":308,"author":{"gitId":"Ella-e"},"content":"| `*` | new user | have the ability to switch to a more simplified and beginner friendly UI | more effectively learn the basics |","lastModifiedDate":"2024-03-04"},{"lineNumber":309,"author":{"gitId":"Ella-e"},"content":"| `*` | trainee doctor | be able to refer to similar previous cases | study treatment that helps with this kind of cases |","lastModifiedDate":"2024-03-04"},{"lineNumber":310,"author":{"gitId":"Ella-e"},"content":"| `*` | experienced user | an efficient way to export and backup patient data | ensure the safety and accessibility of important information |","lastModifiedDate":"2024-03-04"},{"lineNumber":311,"author":{"gitId":"Ella-e"},"content":"| `*` | intermediate user | export selected patient\u0027s information | give the patient their personal information after they change their doctors, and delete the patient\u0027s information from the database safely |","lastModifiedDate":"2024-03-04"},{"lineNumber":312,"author":{"gitId":"Ella-e"},"content":"| `*` | intermediate user | export selected medical instructions | The patient can follow my medical instructions closely |","lastModifiedDate":"2024-03-04"},{"lineNumber":313,"author":{"gitId":"Ella-e"},"content":"| `*` | intermediate user | see the list of patients based on the next follow-up meeting/calling time | have a better plan for my time and know which patient needs my attention next |","lastModifiedDate":"2024-03-04"},{"lineNumber":314,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":315,"author":{"gitId":"-"},"content":"### Use cases","lastModifiedDate":"2020-06-07"},{"lineNumber":316,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":317,"author":{"gitId":"Ella-e"},"content":"(For all use cases below, the **System** is the `VitalConnect` and the **Actor** is the `user`, unless specified otherwise)","lastModifiedDate":"2024-03-04"},{"lineNumber":318,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":319,"author":{"gitId":"Ella-e"},"content":"**Use case: UC1 - Add a patient**","lastModifiedDate":"2024-03-04"},{"lineNumber":320,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2020-05-23"},{"lineNumber":321,"author":{"gitId":"Ella-e"},"content":"1. User requests to add a patient by keying the patient\u0027s name and NRIC in the command.","lastModifiedDate":"2024-03-04"},{"lineNumber":322,"author":{"gitId":"Ella-e"},"content":"2. VitalConnect adds the patient\u0027s name and NRIC.","lastModifiedDate":"2024-03-04"},{"lineNumber":323,"author":{"gitId":"-"},"content":"Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":324,"author":{"gitId":"-"},"content":"**Extensions**","lastModifiedDate":"2020-05-23"},{"lineNumber":325,"author":{"gitId":"Ella-e"},"content":"* 1a. The NRIC already exists in the system.","lastModifiedDate":"2024-03-04"},{"lineNumber":326,"author":{"gitId":"Ella-e"},"content":" * 1a1. VitalConnect displays warning message and the existing patient\u0027s information.","lastModifiedDate":"2024-03-04"},{"lineNumber":327,"author":{"gitId":"Ella-e"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":328,"author":{"gitId":"Ella-e"},"content":"* 1b. The NRIC or name entered is invalid.","lastModifiedDate":"2024-03-04"},{"lineNumber":329,"author":{"gitId":"Ella-e"},"content":" * 1b1. VitalConnect shows an error message.","lastModifiedDate":"2024-03-04"},{"lineNumber":330,"author":{"gitId":"Ella-e"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":331,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":332,"author":{"gitId":"Ella-e"},"content":"**Use case: UC2 - Delete a patient**","lastModifiedDate":"2024-03-04"},{"lineNumber":333,"author":{"gitId":"Ella-e"},"content":"**MSS**","lastModifiedDate":"2024-03-04"},{"lineNumber":334,"author":{"gitId":"Ella-e"},"content":"1. User requests to delete a patient by keying the patient\u0027s name or NRIC in the command.","lastModifiedDate":"2024-03-04"},{"lineNumber":335,"author":{"gitId":"Ella-e"},"content":"2. VitalConnect deletes the patient from database.","lastModifiedDate":"2024-03-04"},{"lineNumber":336,"author":{"gitId":"Ella-e"},"content":"Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":337,"author":{"gitId":"Ella-e"},"content":"**Extensions**","lastModifiedDate":"2024-03-04"},{"lineNumber":338,"author":{"gitId":"Ella-e"},"content":"* 1a. The patient doesn\u0027t exist in the system.","lastModifiedDate":"2024-03-04"},{"lineNumber":339,"author":{"gitId":"Ella-e"},"content":" * 1a1. VitalConnect displays an error message.","lastModifiedDate":"2024-03-04"},{"lineNumber":340,"author":{"gitId":"Ella-e"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":341,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":342,"author":{"gitId":"Ella-e"},"content":"**Use case: UC3 - Add an appointment**","lastModifiedDate":"2024-03-04"},{"lineNumber":343,"author":{"gitId":"Ella-e"},"content":"**MSS**","lastModifiedDate":"2024-03-04"},{"lineNumber":344,"author":{"gitId":"Ella-e"},"content":"1. User requests to add an appointment for a patient.","lastModifiedDate":"2024-03-04"},{"lineNumber":345,"author":{"gitId":"Ella-e"},"content":"2. VitalConnect add the appointment to the database under this patient\u0027s NRIC.","lastModifiedDate":"2024-03-04"},{"lineNumber":346,"author":{"gitId":"Ella-e"},"content":"Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":347,"author":{"gitId":"Ella-e"},"content":"**Extensions**","lastModifiedDate":"2024-03-04"},{"lineNumber":348,"author":{"gitId":"Ella-e"},"content":"* 1a. Critical information (time and doctor) missing in the appointment.","lastModifiedDate":"2024-03-04"},{"lineNumber":349,"author":{"gitId":"Ella-e"},"content":" * 1a1. VitalConnect displays a warning message.","lastModifiedDate":"2024-03-04"},{"lineNumber":350,"author":{"gitId":"Ella-e"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":351,"author":{"gitId":"Ella-e"},"content":"* 1b. The assigned patient doesn\u0027t exist in the database.","lastModifiedDate":"2024-03-04"},{"lineNumber":352,"author":{"gitId":"Ella-e"},"content":" * 1b1. VitalConnect displays a warning message.","lastModifiedDate":"2024-03-04"},{"lineNumber":353,"author":{"gitId":"Ella-e"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":354,"author":{"gitId":"Ella-e"},"content":"* 1c. The appointment time crashes with existing time.","lastModifiedDate":"2024-03-04"},{"lineNumber":355,"author":{"gitId":"Ella-e"},"content":" * 1c1. VitalConnect displays a warning message.","lastModifiedDate":"2024-03-04"},{"lineNumber":356,"author":{"gitId":"Ella-e"},"content":" * 1c1. VitalConnect displays the appointment with crashing time.","lastModifiedDate":"2024-03-04"},{"lineNumber":357,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":358,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":359,"author":{"gitId":"Ella-e"},"content":"**Use case: UC4 - Delete an appointment**","lastModifiedDate":"2024-03-04"},{"lineNumber":360,"author":{"gitId":"Ella-e"},"content":"**MSS**","lastModifiedDate":"2024-03-04"},{"lineNumber":361,"author":{"gitId":"Ella-e"},"content":"1. User requests to delete an appointment for a patient.","lastModifiedDate":"2024-03-04"},{"lineNumber":362,"author":{"gitId":"Ella-e"},"content":"2. VitalConnect removes the appointment from the database.","lastModifiedDate":"2024-03-04"},{"lineNumber":363,"author":{"gitId":"Ella-e"},"content":"Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":364,"author":{"gitId":"Ella-e"},"content":"**Extensions**","lastModifiedDate":"2024-03-04"},{"lineNumber":365,"author":{"gitId":"Ella-e"},"content":"* 1a. The assigned patient or the appointment doesn\u0027t exist in the database.","lastModifiedDate":"2024-03-04"},{"lineNumber":366,"author":{"gitId":"Ella-e"},"content":" * 1a1. VitalConnect displays a warning message.","lastModifiedDate":"2024-03-04"},{"lineNumber":367,"author":{"gitId":"Ella-e"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":368,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":369,"author":{"gitId":"Ella-e"},"content":"**Use case: UC5 - Modify an appointment**","lastModifiedDate":"2024-03-04"},{"lineNumber":370,"author":{"gitId":"Ella-e"},"content":"**MSS**","lastModifiedDate":"2024-03-04"},{"lineNumber":371,"author":{"gitId":"Ella-e"},"content":"1. User requests to modify an appointment for a patient by keying the appointment\u0027s id.","lastModifiedDate":"2024-03-04"},{"lineNumber":372,"author":{"gitId":"Ella-e"},"content":"2. VitalConnect displays the detail of the appointment to be modified.","lastModifiedDate":"2024-03-04"},{"lineNumber":373,"author":{"gitId":"Ella-e"},"content":"3. User specify which field to be modified and enters the new information.","lastModifiedDate":"2024-03-04"},{"lineNumber":374,"author":{"gitId":"Ella-e"},"content":"4. VitalConnect saves the new appointment information.","lastModifiedDate":"2024-03-04"},{"lineNumber":375,"author":{"gitId":"Ella-e"},"content":"5. VitalConnect displays the updated detail of the appointment modified.","lastModifiedDate":"2024-03-04"},{"lineNumber":376,"author":{"gitId":"Ella-e"},"content":"Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":377,"author":{"gitId":"Ella-e"},"content":"**Extensions**","lastModifiedDate":"2024-03-04"},{"lineNumber":378,"author":{"gitId":"Ella-e"},"content":"* 1a. The appointment refered by the id doesn\u0027t exist in the database.","lastModifiedDate":"2024-03-04"},{"lineNumber":379,"author":{"gitId":"Ella-e"},"content":" * 1a1. VitalConnect displays an error message.","lastModifiedDate":"2024-03-04"},{"lineNumber":380,"author":{"gitId":"Ella-e"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":381,"author":{"gitId":"Ella-e"},"content":"* 1b. The id is not a valid number.","lastModifiedDate":"2024-03-04"},{"lineNumber":382,"author":{"gitId":"Ella-e"},"content":" * 1b1. VitalConnect displays an error message.","lastModifiedDate":"2024-03-04"},{"lineNumber":383,"author":{"gitId":"Ella-e"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":384,"author":{"gitId":"Ella-e"},"content":"* 3a. The field to be modified is unrecognized.","lastModifiedDate":"2024-03-04"},{"lineNumber":385,"author":{"gitId":"Ella-e"},"content":" * 3a1. VitalConnect displays an error message.","lastModifiedDate":"2024-03-04"},{"lineNumber":386,"author":{"gitId":"Ella-e"},"content":" * 3a2. VitalConnect request for valid field information.","lastModifiedDate":"2024-03-04"},{"lineNumber":387,"author":{"gitId":"Ella-e"},"content":" * 3a3. User enters new field information.","lastModifiedDate":"2024-03-04"},{"lineNumber":388,"author":{"gitId":"Ella-e"},"content":" Steps 3a1-3a3 are repeated until the data entered are correct.","lastModifiedDate":"2024-03-04"},{"lineNumber":389,"author":{"gitId":"Ella-e"},"content":" Use case resumes from step 4.","lastModifiedDate":"2024-03-04"},{"lineNumber":390,"author":{"gitId":"Ella-e"},"content":"* 3b. The new information is in invalid form or contains invalid character.","lastModifiedDate":"2024-03-04"},{"lineNumber":391,"author":{"gitId":"Ella-e"},"content":" * 3b1. VitalConnect displays an error message.","lastModifiedDate":"2024-03-04"},{"lineNumber":392,"author":{"gitId":"Ella-e"},"content":" * 3b2. VitalConnect request for valid data entry.","lastModifiedDate":"2024-03-04"},{"lineNumber":393,"author":{"gitId":"Ella-e"},"content":" * 3b3. User enters new field information.","lastModifiedDate":"2024-03-04"},{"lineNumber":394,"author":{"gitId":"Ella-e"},"content":" Steps 3b1-3b3 are repeated until the data entered are valid.","lastModifiedDate":"2024-03-04"},{"lineNumber":395,"author":{"gitId":"Ella-e"},"content":" Use case resumes from step 4.","lastModifiedDate":"2024-03-04"},{"lineNumber":396,"author":{"gitId":"Ella-e"},"content":"* 3c. The appointment time crashes with existing time.","lastModifiedDate":"2024-03-04"},{"lineNumber":397,"author":{"gitId":"Ella-e"},"content":" * 3c1. VitalConnect displays an error message.","lastModifiedDate":"2024-03-04"},{"lineNumber":398,"author":{"gitId":"Ella-e"},"content":" * 3c2. VitalConnect displays the appointment with crashing time.","lastModifiedDate":"2024-03-04"},{"lineNumber":399,"author":{"gitId":"Ella-e"},"content":" * 3c3. VitalConnect request for valid data entry.","lastModifiedDate":"2024-03-04"},{"lineNumber":400,"author":{"gitId":"Ella-e"},"content":" * 3c4. User enters new field information.","lastModifiedDate":"2024-03-04"},{"lineNumber":401,"author":{"gitId":"Ella-e"},"content":" Steps 3c1-3c4 are repeated until the time doesn\u0027t crash.","lastModifiedDate":"2024-03-04"},{"lineNumber":402,"author":{"gitId":"Ella-e"},"content":" Use case resumes from step 4.","lastModifiedDate":"2024-03-04"},{"lineNumber":403,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":404,"author":{"gitId":"Ella-e"},"content":"**Use case: UC6 - Add contact information**","lastModifiedDate":"2024-03-04"},{"lineNumber":405,"author":{"gitId":"Ella-e"},"content":"**MSS**","lastModifiedDate":"2024-03-04"},{"lineNumber":406,"author":{"gitId":"Ella-e"},"content":"1. User requests to add contact information for a patient.","lastModifiedDate":"2024-03-04"},{"lineNumber":407,"author":{"gitId":"Ella-e"},"content":"2. VitalConnect save the contact information to the database.","lastModifiedDate":"2024-03-04"},{"lineNumber":408,"author":{"gitId":"Ella-e"},"content":"Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":409,"author":{"gitId":"Ella-e"},"content":"**Extensions**","lastModifiedDate":"2024-03-04"},{"lineNumber":410,"author":{"gitId":"Ella-e"},"content":"* 1a. The patient doesn\u0027t exist in the database.","lastModifiedDate":"2024-03-04"},{"lineNumber":411,"author":{"gitId":"Ella-e"},"content":" * 1a1. VitalConnect displays a warning message.","lastModifiedDate":"2024-03-04"},{"lineNumber":412,"author":{"gitId":"Ella-e"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":413,"author":{"gitId":"Ella-e"},"content":"* 1b. The contact information is invalid.","lastModifiedDate":"2024-03-04"},{"lineNumber":414,"author":{"gitId":"Ella-e"},"content":" * 1b1. VitalConnect displays a warning message.","lastModifiedDate":"2024-03-04"},{"lineNumber":415,"author":{"gitId":"Ella-e"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":416,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":417,"author":{"gitId":"Ella-e"},"content":"**Use case: UC7 - Delete contact information**","lastModifiedDate":"2024-03-04"},{"lineNumber":418,"author":{"gitId":"Ella-e"},"content":"**MSS**","lastModifiedDate":"2024-03-04"},{"lineNumber":419,"author":{"gitId":"Ella-e"},"content":"1. User requests to delete contact information for a patient.","lastModifiedDate":"2024-03-04"},{"lineNumber":420,"author":{"gitId":"Ella-e"},"content":"2. VitalConnect remove the contact information to the database.","lastModifiedDate":"2024-03-04"},{"lineNumber":421,"author":{"gitId":"Ella-e"},"content":"Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":422,"author":{"gitId":"Ella-e"},"content":"**Extensions**","lastModifiedDate":"2024-03-04"},{"lineNumber":423,"author":{"gitId":"Ella-e"},"content":"* 1a. The patient or contact information doesn\u0027t exist in the database.","lastModifiedDate":"2024-03-04"},{"lineNumber":424,"author":{"gitId":"Ella-e"},"content":" * 1a1. VitalConnect displays a warning message.","lastModifiedDate":"2024-03-04"},{"lineNumber":425,"author":{"gitId":"Ella-e"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":426,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":427,"author":{"gitId":"Ella-e"},"content":"**Use case: UC8 - Modify contact information**","lastModifiedDate":"2024-03-04"},{"lineNumber":428,"author":{"gitId":"Ella-e"},"content":"**MSS**","lastModifiedDate":"2024-03-04"},{"lineNumber":429,"author":{"gitId":"Ella-e"},"content":"1. User requests to modify contact information for a patient.","lastModifiedDate":"2024-03-04"},{"lineNumber":430,"author":{"gitId":"Ella-e"},"content":"2. VitalConnect displays the updated contact information of the patient.","lastModifiedDate":"2024-03-04"},{"lineNumber":431,"author":{"gitId":"Ella-e"},"content":"Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":432,"author":{"gitId":"Ella-e"},"content":"**Extensions**","lastModifiedDate":"2024-03-04"},{"lineNumber":433,"author":{"gitId":"Ella-e"},"content":"* 1a. The patient or contact information doesn\u0027t exist in the database.","lastModifiedDate":"2024-03-04"},{"lineNumber":434,"author":{"gitId":"Ella-e"},"content":" * 1a1. VitalConnect displays a warning message.","lastModifiedDate":"2024-03-04"},{"lineNumber":435,"author":{"gitId":"Ella-e"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":436,"author":{"gitId":"Ella-e"},"content":"* 1b. The contact information is invalid.","lastModifiedDate":"2024-03-04"},{"lineNumber":437,"author":{"gitId":"Ella-e"},"content":" * 1b1. VitalConnect displays a warning message.","lastModifiedDate":"2024-03-04"},{"lineNumber":438,"author":{"gitId":"Ella-e"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":439,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":440,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":441,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":442,"author":{"gitId":"Ella-e"},"content":"# Technical Requirements","lastModifiedDate":"2024-03-04"},{"lineNumber":443,"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":444,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":445,"author":{"gitId":"Ella-e"},"content":"# Performance Requirements","lastModifiedDate":"2024-03-04"},{"lineNumber":446,"author":{"gitId":"Ella-e"},"content":"1. Should be able to hold up to 100 patients with 1000 appointments without a noticeable sluggishness in performance for typical usage.","lastModifiedDate":"2024-03-04"},{"lineNumber":447,"author":{"gitId":"Ella-e"},"content":"2. The system should respond within 3 seconds.","lastModifiedDate":"2024-03-04"},{"lineNumber":448,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":449,"author":{"gitId":"Ella-e"},"content":"# Quality Requirements","lastModifiedDate":"2024-03-04"},{"lineNumber":450,"author":{"gitId":"Ella-e"},"content":"1. 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-03-04"},{"lineNumber":451,"author":{"gitId":"Ella-e"},"content":"2. System should be robust for any form of data file crashes and invalid user input.","lastModifiedDate":"2024-03-04"},{"lineNumber":452,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":453,"author":{"gitId":"Ella-e"},"content":"# Scope","lastModifiedDate":"2024-03-04"},{"lineNumber":454,"author":{"gitId":"Ella-e"},"content":"1. The product will \u003cstrong\u003eNOT\u003c/strong\u003e enforce any form of protection of the generated data file containing patients\u0027 information. The organization should be responsible for ensuring the safety of their patient\u0027s data.","lastModifiedDate":"2024-03-04"},{"lineNumber":455,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":456,"author":{"gitId":"Ella-e"},"content":"# Process Requirements","lastModifiedDate":"2024-03-04"},{"lineNumber":457,"author":{"gitId":"Ella-e"},"content":"1. The project is expected to grow in breadth-first iterative process.","lastModifiedDate":"2024-03-04"},{"lineNumber":458,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":459,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":460,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":461,"author":{"gitId":"-"},"content":"* **Mainstream OS**: Windows, Linux, Unix, MacOS","lastModifiedDate":"2024-02-09"},{"lineNumber":462,"author":{"gitId":"-"},"content":"* **Private contact detail**: A contact detail that is not meant to be shared with others","lastModifiedDate":"2020-05-23"},{"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":"\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":471,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":472,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":473,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":474,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":475,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":476,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":477,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":478,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":479,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":480,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":481,"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":482,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":483,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":484,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":485,"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":486,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":487,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":488,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","lastModifiedDate":"2020-05-23"},{"lineNumber":489,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":490,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":491,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":492,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":493,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":494,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":495,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":496,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":497,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":498,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":499,"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":500,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":501,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":502,"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":503,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":504,"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":505,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":506,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":507,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":508,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":509,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":510,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":511,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":512,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":513,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":514,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":515,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"Ella-e":157,"-":358}},{"path":"docs/team/ella-e.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"---","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"layout: page","lastModifiedDate":"2024-03-04"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"title: Mu Zhaoyu\u0027s Project Portfolio Page","lastModifiedDate":"2024-03-04"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"---","lastModifiedDate":"2024-03-04"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"## Project: VitalConnect","lastModifiedDate":"2024-03-04"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":"This product is doctors or any healthcare workers that have to keep track of a lot ","lastModifiedDate":"2024-03-04"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":"of patient information and requires the information at a fast pace, ","lastModifiedDate":"2024-03-04"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":"thus preferring to have a simple UI such as a CLI instead of a complex GUI, ","lastModifiedDate":"2024-03-04"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":"with the added benefit of having typed user commands for an even faster retrieval of information.","lastModifiedDate":"2024-03-04"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-03-04"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":"### **New Feature**: ","lastModifiedDate":"2024-03-04"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":"1. __Create an appointment__","lastModifiedDate":"2024-03-04"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":"* What it does: allows the user to create an appointment for a patient with the time and date.","lastModifiedDate":"2024-03-04"},{"lineNumber":20,"author":{"gitId":"Ella-e"},"content":"* Justification: This feature improves the product significantly as it is the fundamental functions for the project.","lastModifiedDate":"2024-03-04"},{"lineNumber":21,"author":{"gitId":"Ella-e"},"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":22,"author":{"gitId":"Ella-e"},"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":23,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":24,"author":{"gitId":"Ella-e"},"content":"2. __Delete an appointment__","lastModifiedDate":"2024-03-04"},{"lineNumber":25,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":26,"author":{"gitId":"Ella-e"},"content":"* What it does: allows the user to delete an appointment by specifying the appointment index and the patient\u0027s name.","lastModifiedDate":"2024-03-04"},{"lineNumber":27,"author":{"gitId":"Ella-e"},"content":"* Justification: This feature improves the product significantly as it is the fundamental functions for the project.","lastModifiedDate":"2024-03-04"},{"lineNumber":28,"author":{"gitId":"Ella-e"},"content":"* Credits:","lastModifiedDate":"2024-03-04"},{"lineNumber":29,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":30,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":31,"author":{"gitId":"Ella-e"},"content":"3. __List appointments__","lastModifiedDate":"2024-03-04"},{"lineNumber":32,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":33,"author":{"gitId":"Ella-e"},"content":"* What it does: allows the user to list out all the upcoming appointments that ordering by time.","lastModifiedDate":"2024-03-04"},{"lineNumber":34,"author":{"gitId":"Ella-e"},"content":"* Justification: This feature improves the product significantly as it is the fundamental functions for the project.","lastModifiedDate":"2024-03-04"},{"lineNumber":35,"author":{"gitId":"Ella-e"},"content":"* Credits:","lastModifiedDate":"2024-03-04"},{"lineNumber":36,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":37,"author":{"gitId":"Ella-e"},"content":"### **Documentation**:","lastModifiedDate":"2024-03-04"},{"lineNumber":38,"author":{"gitId":"Ella-e"},"content":"User Guide:","lastModifiedDate":"2024-03-04"},{"lineNumber":39,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":40,"author":{"gitId":"Ella-e"},"content":"* Added documentation for the features `Create Appointments`, `Delete Appointments` and `List Appointments` [\\#72]()","lastModifiedDate":"2024-03-04"},{"lineNumber":41,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":42,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"Ella-e":42}},{"path":"docs/team/mayuehan.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"MaYuehan"},"content":"---","lastModifiedDate":"2024-02-25"},{"lineNumber":2,"author":{"gitId":"MaYuehan"},"content":"layout: page","lastModifiedDate":"2024-02-25"},{"lineNumber":3,"author":{"gitId":"MaYuehan"},"content":"title: Ma Yuehan\u0027s Project Portfolio Page","lastModifiedDate":"2024-02-25"},{"lineNumber":4,"author":{"gitId":"MaYuehan"},"content":"---","lastModifiedDate":"2024-02-25"},{"lineNumber":5,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":6,"author":{"gitId":"MaYuehan"},"content":"## Project: VitalConnect","lastModifiedDate":"2024-02-25"},{"lineNumber":7,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"MaYuehan"},"content":"This product is doctors or any healthcare workers that have to keep track of a lot ","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"MaYuehan"},"content":"of patient information and requires the information at a fast pace, ","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"MaYuehan"},"content":"thus preferring to have a simple UI such as a CLI instead of a complex GUI, ","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"MaYuehan"},"content":"with the added benefit of having typed user commands for an even faster retrieval of information.","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"MaYuehan"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"MaYuehan"},"content":"### **New Feature**: ","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"MaYuehan"},"content":"1. __Create an appointment__","lastModifiedDate":"2024-02-25"},{"lineNumber":18,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":19,"author":{"gitId":"MaYuehan"},"content":"* What it does: allows the user to create an appointment for a patient with the time and date.","lastModifiedDate":"2024-02-25"},{"lineNumber":20,"author":{"gitId":"MaYuehan"},"content":"* Justification: This feature improves the product significantly as it is the fundamental functions for the project.","lastModifiedDate":"2024-02-25"},{"lineNumber":21,"author":{"gitId":"MaYuehan"},"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-02-25"},{"lineNumber":22,"author":{"gitId":"MaYuehan"},"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-02-25"},{"lineNumber":23,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":24,"author":{"gitId":"MaYuehan"},"content":"2. __Delete an appointment__","lastModifiedDate":"2024-02-25"},{"lineNumber":25,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":26,"author":{"gitId":"MaYuehan"},"content":"* What it does: allows the user to delete an appointment by specifying the appointment index and the patient\u0027s name.","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"MaYuehan"},"content":"* Justification: This feature improves the product significantly as it is the fundamental functions for the project.","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"MaYuehan"},"content":"* Credits:","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"MaYuehan"},"content":"3. __List appointments__","lastModifiedDate":"2024-02-25"},{"lineNumber":32,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"MaYuehan"},"content":"* What it does: allows the user to list out all the upcoming appointments that ordering by time.","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"MaYuehan"},"content":"* Justification: This feature improves the product significantly as it is the fundamental functions for the project.","lastModifiedDate":"2024-02-25"},{"lineNumber":35,"author":{"gitId":"MaYuehan"},"content":"* Credits:","lastModifiedDate":"2024-02-25"},{"lineNumber":36,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"MaYuehan"},"content":"### **Documentation**:","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"MaYuehan"},"content":"User Guide:","lastModifiedDate":"2024-02-25"},{"lineNumber":39,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":40,"author":{"gitId":"MaYuehan"},"content":"* Added documentation for the features `Create Appointments`, `Delete Appointments` and `List Appointments` [\\#72]()","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"}],"authorContributionMap":{"MaYuehan":42}}] +[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"MaYuehan"},"content":"# VitalConnect","lastModifiedDate":"2024-02-25"},{"lineNumber":2,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":3,"author":{"gitId":"MaYuehan"},"content":"[![CI Status](https://github.com/AY2324S2-CS2103T-W08-2/tp/workflows/Java%20CI/badge.svg)](https://github.com/AY2324S2-CS2103T-W08-2/tp/actions)","lastModifiedDate":"2024-02-25"},{"lineNumber":4,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":5,"author":{"gitId":"MaYuehan"},"content":"This product is for clinic assistants that have to keep track of a lot of patient information and requires ","lastModifiedDate":"2024-02-25"},{"lineNumber":6,"author":{"gitId":"MaYuehan"},"content":"the information at a fast pace, thus preferring to have a simple UI such as a CLI instead of a complex GUI, ","lastModifiedDate":"2024-02-25"},{"lineNumber":7,"author":{"gitId":"MaYuehan"},"content":"with the added benefit of having typed user commands for an even faster retrieval of information.","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"MaYuehan"},"content":"__Value proposition:__","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"MaYuehan"},"content":"Clinic assistants are required to take note of a multitude of information regarding the patient, ","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"MaYuehan"},"content":"such as their contact number, any existing medical condition, the specific treatment that they are currently undergoing and much more. ","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"MaYuehan"},"content":"With this product, such information will be readily available while also allowing for quality of life features such as scheduling ","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"MaYuehan"},"content":"appointments and managing medication.","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"MaYuehan"},"content":"This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"![Ui](docs/images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"MaYuehan"},"content":"## Features (V1.2)","lastModifiedDate":"2024-02-25"},{"lineNumber":21,"author":{"gitId":"MaYuehan"},"content":"__Saving the data__","lastModifiedDate":"2024-02-25"},{"lineNumber":22,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":23,"author":{"gitId":"MaYuehan"},"content":"* All data is saved in the hard disk automatically after any command that changes the data.","lastModifiedDate":"2024-02-25"},{"lineNumber":24,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":25,"author":{"gitId":"MaYuehan"},"content":"__Clear all existing entries__","lastModifiedDate":"2024-02-25"},{"lineNumber":26,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"MaYuehan"},"content":"* Clear all the existing entries within the local database.","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"MaYuehan"},"content":"__Exit the program__","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":32,"author":{"gitId":"MaYuehan"},"content":"* Exits the program. Any data that is not saved cannot be restored upon exiting.","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"MaYuehan"},"content":"__Viewing help__","lastModifiedDate":"2024-02-25"},{"lineNumber":35,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":36,"author":{"gitId":"MaYuehan"},"content":"* Shows a message explaining the instructions to access the user guide.","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"MaYuehan"},"content":"### Manage Appointments","lastModifiedDate":"2024-02-25"},{"lineNumber":39,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":40,"author":{"gitId":"MaYuehan"},"content":"__Create Appointments__","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"MaYuehan"},"content":"* Create an appointment of a patient, information such as time and name of patient are required when adding.","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":44,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":45,"author":{"gitId":"MaYuehan"},"content":"__Delete Appointments__","lastModifiedDate":"2024-02-25"},{"lineNumber":46,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":47,"author":{"gitId":"MaYuehan"},"content":"* Delete an appointment of a patient.","lastModifiedDate":"2024-02-25"},{"lineNumber":48,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":49,"author":{"gitId":"MaYuehan"},"content":"__List Appointments__","lastModifiedDate":"2024-02-25"},{"lineNumber":50,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":51,"author":{"gitId":"MaYuehan"},"content":"* List all the appointments that have been created, provide information such as the patient’s name and time of the appointments.","lastModifiedDate":"2024-02-25"},{"lineNumber":52,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":53,"author":{"gitId":"MaYuehan"},"content":"### Manage Contact Information","lastModifiedDate":"2024-02-25"},{"lineNumber":54,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":55,"author":{"gitId":"MaYuehan"},"content":"__Add patient contact information__","lastModifiedDate":"2024-02-25"},{"lineNumber":56,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":57,"author":{"gitId":"MaYuehan"},"content":"* Add contact information, including phone number and email address. If a specific field already exists, the command would fail.","lastModifiedDate":"2024-02-25"},{"lineNumber":58,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":59,"author":{"gitId":"MaYuehan"},"content":"__Delete patient contact information__","lastModifiedDate":"2024-02-25"},{"lineNumber":60,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":61,"author":{"gitId":"MaYuehan"},"content":"* Delete specific or all contact information, including phone number and email address.","lastModifiedDate":"2024-02-25"},{"lineNumber":62,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":63,"author":{"gitId":"MaYuehan"},"content":"__List patient contact information__","lastModifiedDate":"2024-02-25"},{"lineNumber":64,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":65,"author":{"gitId":"MaYuehan"},"content":"* List all patient’s contact information.","lastModifiedDate":"2024-02-25"},{"lineNumber":66,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":67,"author":{"gitId":"MaYuehan"},"content":"### Manage Patients","lastModifiedDate":"2024-02-25"},{"lineNumber":68,"author":{"gitId":"MaYuehan"},"content":"__Add patient__","lastModifiedDate":"2024-02-25"},{"lineNumber":69,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":70,"author":{"gitId":"MaYuehan"},"content":"* Add a new patient to the database so further information about their appointment or contact information can be added.","lastModifiedDate":"2024-02-25"},{"lineNumber":71,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":72,"author":{"gitId":"MaYuehan"},"content":"__Delete patient__","lastModifiedDate":"2024-02-25"},{"lineNumber":73,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":74,"author":{"gitId":"MaYuehan"},"content":"* Delete specific or all patients, including their contact and appointment.","lastModifiedDate":"2024-02-25"},{"lineNumber":75,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":76,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":77,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":78,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":79,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":80,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":81,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":82,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":83,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":84,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":85,"author":{"gitId":"-"},"content":"* This is **a sample project for Software Engineering (SE) students**.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":86,"author":{"gitId":"-"},"content":" Example usages:","lastModifiedDate":"2020-05-23"},{"lineNumber":87,"author":{"gitId":"-"},"content":" * as a starting point of a course project (as opposed to writing everything from scratch)","lastModifiedDate":"2020-05-23"},{"lineNumber":88,"author":{"gitId":"-"},"content":" * as a case study","lastModifiedDate":"2020-05-23"},{"lineNumber":89,"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":90,"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":91,"author":{"gitId":"-"},"content":" * It comes with a **reasonable level of user and developer documentation**.","lastModifiedDate":"2020-05-23"},{"lineNumber":92,"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":93,"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":94,"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"},{"lineNumber":95,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":96,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"}],"authorContributionMap":{"MaYuehan":83,"-":13}},{"path":"bin/main/view/CommandBox.fxml","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.control.TextField?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.layout.StackPane?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"\u003cStackPane styleClass\u003d\"stack-pane\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":" \u003cTextField fx:id\u003d\"commandTextField\" onAction\u003d\"#handleCommandEntered\" promptText\u003d\"Enter command here...\"/\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":"\u003c/StackPane\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"Ella-e":9}},{"path":"bin/main/view/DarkTheme.css","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":".background {","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2024-03-04"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":" background-color: #383838; /* Used in the default.html file */","lastModifiedDate":"2024-03-04"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":".label {","lastModifiedDate":"2024-03-04"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":" -fx-font-size: 11pt;","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":" -fx-font-family: \"Segoe UI Semibold\";","lastModifiedDate":"2024-03-04"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: #555555;","lastModifiedDate":"2024-03-04"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":" -fx-opacity: 0.9;","lastModifiedDate":"2024-03-04"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":".label-bright {","lastModifiedDate":"2024-03-04"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":" -fx-font-size: 11pt;","lastModifiedDate":"2024-03-04"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":" -fx-font-family: \"Segoe UI Semibold\";","lastModifiedDate":"2024-03-04"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":" -fx-opacity: 1;","lastModifiedDate":"2024-03-04"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":20,"author":{"gitId":"Ella-e"},"content":".label-header {","lastModifiedDate":"2024-03-04"},{"lineNumber":21,"author":{"gitId":"Ella-e"},"content":" -fx-font-size: 32pt;","lastModifiedDate":"2024-03-04"},{"lineNumber":22,"author":{"gitId":"Ella-e"},"content":" -fx-font-family: \"Segoe UI Light\";","lastModifiedDate":"2024-03-04"},{"lineNumber":23,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":24,"author":{"gitId":"Ella-e"},"content":" -fx-opacity: 1;","lastModifiedDate":"2024-03-04"},{"lineNumber":25,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":26,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":27,"author":{"gitId":"Ella-e"},"content":".text-field {","lastModifiedDate":"2024-03-04"},{"lineNumber":28,"author":{"gitId":"Ella-e"},"content":" -fx-font-size: 12pt;","lastModifiedDate":"2024-03-04"},{"lineNumber":29,"author":{"gitId":"Ella-e"},"content":" -fx-font-family: \"Segoe UI Semibold\";","lastModifiedDate":"2024-03-04"},{"lineNumber":30,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":31,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":32,"author":{"gitId":"Ella-e"},"content":".tab-pane {","lastModifiedDate":"2024-03-04"},{"lineNumber":33,"author":{"gitId":"Ella-e"},"content":" -fx-padding: 0 0 0 1;","lastModifiedDate":"2024-03-04"},{"lineNumber":34,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":35,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":36,"author":{"gitId":"Ella-e"},"content":".tab-pane .tab-header-area {","lastModifiedDate":"2024-03-04"},{"lineNumber":37,"author":{"gitId":"Ella-e"},"content":" -fx-padding: 0 0 0 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":38,"author":{"gitId":"Ella-e"},"content":" -fx-min-height: 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":39,"author":{"gitId":"Ella-e"},"content":" -fx-max-height: 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":40,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":41,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":42,"author":{"gitId":"Ella-e"},"content":".table-view {","lastModifiedDate":"2024-03-04"},{"lineNumber":43,"author":{"gitId":"Ella-e"},"content":" -fx-base: #1d1d1d;","lastModifiedDate":"2024-03-04"},{"lineNumber":44,"author":{"gitId":"Ella-e"},"content":" -fx-control-inner-background: #1d1d1d;","lastModifiedDate":"2024-03-04"},{"lineNumber":45,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: #1d1d1d;","lastModifiedDate":"2024-03-04"},{"lineNumber":46,"author":{"gitId":"Ella-e"},"content":" -fx-table-cell-border-color: transparent;","lastModifiedDate":"2024-03-04"},{"lineNumber":47,"author":{"gitId":"Ella-e"},"content":" -fx-table-header-border-color: transparent;","lastModifiedDate":"2024-03-04"},{"lineNumber":48,"author":{"gitId":"Ella-e"},"content":" -fx-padding: 5;","lastModifiedDate":"2024-03-04"},{"lineNumber":49,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":50,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":51,"author":{"gitId":"Ella-e"},"content":".table-view .column-header-background {","lastModifiedDate":"2024-03-04"},{"lineNumber":52,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: transparent;","lastModifiedDate":"2024-03-04"},{"lineNumber":53,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":54,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":55,"author":{"gitId":"Ella-e"},"content":".table-view .column-header, .table-view .filler {","lastModifiedDate":"2024-03-04"},{"lineNumber":56,"author":{"gitId":"Ella-e"},"content":" -fx-size: 35;","lastModifiedDate":"2024-03-04"},{"lineNumber":57,"author":{"gitId":"Ella-e"},"content":" -fx-border-width: 0 0 1 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":58,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: transparent;","lastModifiedDate":"2024-03-04"},{"lineNumber":59,"author":{"gitId":"Ella-e"},"content":" -fx-border-color:","lastModifiedDate":"2024-03-04"},{"lineNumber":60,"author":{"gitId":"Ella-e"},"content":" transparent","lastModifiedDate":"2024-03-04"},{"lineNumber":61,"author":{"gitId":"Ella-e"},"content":" transparent","lastModifiedDate":"2024-03-04"},{"lineNumber":62,"author":{"gitId":"Ella-e"},"content":" derive(-fx-base, 80%)","lastModifiedDate":"2024-03-04"},{"lineNumber":63,"author":{"gitId":"Ella-e"},"content":" transparent;","lastModifiedDate":"2024-03-04"},{"lineNumber":64,"author":{"gitId":"Ella-e"},"content":" -fx-border-insets: 0 10 1 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":65,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":66,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":67,"author":{"gitId":"Ella-e"},"content":".table-view .column-header .label {","lastModifiedDate":"2024-03-04"},{"lineNumber":68,"author":{"gitId":"Ella-e"},"content":" -fx-font-size: 20pt;","lastModifiedDate":"2024-03-04"},{"lineNumber":69,"author":{"gitId":"Ella-e"},"content":" -fx-font-family: \"Segoe UI Light\";","lastModifiedDate":"2024-03-04"},{"lineNumber":70,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":71,"author":{"gitId":"Ella-e"},"content":" -fx-alignment: center-left;","lastModifiedDate":"2024-03-04"},{"lineNumber":72,"author":{"gitId":"Ella-e"},"content":" -fx-opacity: 1;","lastModifiedDate":"2024-03-04"},{"lineNumber":73,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":74,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":75,"author":{"gitId":"Ella-e"},"content":".table-view:focused .table-row-cell:filled:focused:selected {","lastModifiedDate":"2024-03-04"},{"lineNumber":76,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: -fx-focus-color;","lastModifiedDate":"2024-03-04"},{"lineNumber":77,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":78,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":79,"author":{"gitId":"Ella-e"},"content":".split-pane:horizontal .split-pane-divider {","lastModifiedDate":"2024-03-04"},{"lineNumber":80,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2024-03-04"},{"lineNumber":81,"author":{"gitId":"Ella-e"},"content":" -fx-border-color: transparent transparent transparent #4d4d4d;","lastModifiedDate":"2024-03-04"},{"lineNumber":82,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":83,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":84,"author":{"gitId":"Ella-e"},"content":".split-pane {","lastModifiedDate":"2024-03-04"},{"lineNumber":85,"author":{"gitId":"Ella-e"},"content":" -fx-border-radius: 1;","lastModifiedDate":"2024-03-04"},{"lineNumber":86,"author":{"gitId":"Ella-e"},"content":" -fx-border-width: 1;","lastModifiedDate":"2024-03-04"},{"lineNumber":87,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2024-03-04"},{"lineNumber":88,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":89,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":90,"author":{"gitId":"Ella-e"},"content":".list-view {","lastModifiedDate":"2024-03-04"},{"lineNumber":91,"author":{"gitId":"Ella-e"},"content":" -fx-background-insets: 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":92,"author":{"gitId":"Ella-e"},"content":" -fx-padding: 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":93,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2024-03-04"},{"lineNumber":94,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":95,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":96,"author":{"gitId":"Ella-e"},"content":".list-cell {","lastModifiedDate":"2024-03-04"},{"lineNumber":97,"author":{"gitId":"Ella-e"},"content":" -fx-label-padding: 0 0 0 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":98,"author":{"gitId":"Ella-e"},"content":" -fx-graphic-text-gap : 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":99,"author":{"gitId":"Ella-e"},"content":" -fx-padding: 0 0 0 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":100,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":101,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":102,"author":{"gitId":"Ella-e"},"content":".list-cell:filled:even {","lastModifiedDate":"2024-03-04"},{"lineNumber":103,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: #3c3e3f;","lastModifiedDate":"2024-03-04"},{"lineNumber":104,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":105,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":106,"author":{"gitId":"Ella-e"},"content":".list-cell:filled:odd {","lastModifiedDate":"2024-03-04"},{"lineNumber":107,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: #515658;","lastModifiedDate":"2024-03-04"},{"lineNumber":108,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":109,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":110,"author":{"gitId":"Ella-e"},"content":".list-cell:filled:selected {","lastModifiedDate":"2024-03-04"},{"lineNumber":111,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: #424d5f;","lastModifiedDate":"2024-03-04"},{"lineNumber":112,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":113,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":114,"author":{"gitId":"Ella-e"},"content":".list-cell:filled:selected #cardPane {","lastModifiedDate":"2024-03-04"},{"lineNumber":115,"author":{"gitId":"Ella-e"},"content":" -fx-border-color: #3e7b91;","lastModifiedDate":"2024-03-04"},{"lineNumber":116,"author":{"gitId":"Ella-e"},"content":" -fx-border-width: 1;","lastModifiedDate":"2024-03-04"},{"lineNumber":117,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":118,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":119,"author":{"gitId":"Ella-e"},"content":".list-cell .label {","lastModifiedDate":"2024-03-04"},{"lineNumber":120,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":121,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":122,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":123,"author":{"gitId":"Ella-e"},"content":".cell_big_label {","lastModifiedDate":"2024-03-04"},{"lineNumber":124,"author":{"gitId":"Ella-e"},"content":" -fx-font-family: \"Segoe UI Semibold\";","lastModifiedDate":"2024-03-04"},{"lineNumber":125,"author":{"gitId":"Ella-e"},"content":" -fx-font-size: 16px;","lastModifiedDate":"2024-03-04"},{"lineNumber":126,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: #010504;","lastModifiedDate":"2024-03-04"},{"lineNumber":127,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":128,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":129,"author":{"gitId":"Ella-e"},"content":".cell_small_label {","lastModifiedDate":"2024-03-04"},{"lineNumber":130,"author":{"gitId":"Ella-e"},"content":" -fx-font-family: \"Segoe UI\";","lastModifiedDate":"2024-03-04"},{"lineNumber":131,"author":{"gitId":"Ella-e"},"content":" -fx-font-size: 13px;","lastModifiedDate":"2024-03-04"},{"lineNumber":132,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: #010504;","lastModifiedDate":"2024-03-04"},{"lineNumber":133,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":134,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":135,"author":{"gitId":"Ella-e"},"content":".stack-pane {","lastModifiedDate":"2024-03-04"},{"lineNumber":136,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2024-03-04"},{"lineNumber":137,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":138,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":139,"author":{"gitId":"Ella-e"},"content":".pane-with-border {","lastModifiedDate":"2024-03-04"},{"lineNumber":140,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2024-03-04"},{"lineNumber":141,"author":{"gitId":"Ella-e"},"content":" -fx-border-color: derive(#1d1d1d, 10%);","lastModifiedDate":"2024-03-04"},{"lineNumber":142,"author":{"gitId":"Ella-e"},"content":" -fx-border-top-width: 1px;","lastModifiedDate":"2024-03-04"},{"lineNumber":143,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":144,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":145,"author":{"gitId":"Ella-e"},"content":".status-bar {","lastModifiedDate":"2024-03-04"},{"lineNumber":146,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(#1d1d1d, 30%);","lastModifiedDate":"2024-03-04"},{"lineNumber":147,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":148,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":149,"author":{"gitId":"Ella-e"},"content":".result-display {","lastModifiedDate":"2024-03-04"},{"lineNumber":150,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: transparent;","lastModifiedDate":"2024-03-04"},{"lineNumber":151,"author":{"gitId":"Ella-e"},"content":" -fx-font-family: \"Segoe UI Light\";","lastModifiedDate":"2024-03-04"},{"lineNumber":152,"author":{"gitId":"Ella-e"},"content":" -fx-font-size: 13pt;","lastModifiedDate":"2024-03-04"},{"lineNumber":153,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":154,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":155,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":156,"author":{"gitId":"Ella-e"},"content":".result-display .label {","lastModifiedDate":"2024-03-04"},{"lineNumber":157,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: black !important;","lastModifiedDate":"2024-03-04"},{"lineNumber":158,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":159,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":160,"author":{"gitId":"Ella-e"},"content":".status-bar .label {","lastModifiedDate":"2024-03-04"},{"lineNumber":161,"author":{"gitId":"Ella-e"},"content":" -fx-font-family: \"Segoe UI Light\";","lastModifiedDate":"2024-03-04"},{"lineNumber":162,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":163,"author":{"gitId":"Ella-e"},"content":" -fx-padding: 4px;","lastModifiedDate":"2024-03-04"},{"lineNumber":164,"author":{"gitId":"Ella-e"},"content":" -fx-pref-height: 30px;","lastModifiedDate":"2024-03-04"},{"lineNumber":165,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":166,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":167,"author":{"gitId":"Ella-e"},"content":".status-bar-with-border {","lastModifiedDate":"2024-03-04"},{"lineNumber":168,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(#1d1d1d, 30%);","lastModifiedDate":"2024-03-04"},{"lineNumber":169,"author":{"gitId":"Ella-e"},"content":" -fx-border-color: derive(#1d1d1d, 25%);","lastModifiedDate":"2024-03-04"},{"lineNumber":170,"author":{"gitId":"Ella-e"},"content":" -fx-border-width: 1px;","lastModifiedDate":"2024-03-04"},{"lineNumber":171,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":172,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":173,"author":{"gitId":"Ella-e"},"content":".status-bar-with-border .label {","lastModifiedDate":"2024-03-04"},{"lineNumber":174,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":175,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":176,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":177,"author":{"gitId":"Ella-e"},"content":".grid-pane {","lastModifiedDate":"2024-03-04"},{"lineNumber":178,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(#1d1d1d, 30%);","lastModifiedDate":"2024-03-04"},{"lineNumber":179,"author":{"gitId":"Ella-e"},"content":" -fx-border-color: derive(#1d1d1d, 30%);","lastModifiedDate":"2024-03-04"},{"lineNumber":180,"author":{"gitId":"Ella-e"},"content":" -fx-border-width: 1px;","lastModifiedDate":"2024-03-04"},{"lineNumber":181,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":182,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":183,"author":{"gitId":"Ella-e"},"content":".grid-pane .stack-pane {","lastModifiedDate":"2024-03-04"},{"lineNumber":184,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(#1d1d1d, 30%);","lastModifiedDate":"2024-03-04"},{"lineNumber":185,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":186,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":187,"author":{"gitId":"Ella-e"},"content":".context-menu {","lastModifiedDate":"2024-03-04"},{"lineNumber":188,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(#1d1d1d, 50%);","lastModifiedDate":"2024-03-04"},{"lineNumber":189,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":190,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":191,"author":{"gitId":"Ella-e"},"content":".context-menu .label {","lastModifiedDate":"2024-03-04"},{"lineNumber":192,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":193,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":194,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":195,"author":{"gitId":"Ella-e"},"content":".menu-bar {","lastModifiedDate":"2024-03-04"},{"lineNumber":196,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2024-03-04"},{"lineNumber":197,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":198,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":199,"author":{"gitId":"Ella-e"},"content":".menu-bar .label {","lastModifiedDate":"2024-03-04"},{"lineNumber":200,"author":{"gitId":"Ella-e"},"content":" -fx-font-size: 14pt;","lastModifiedDate":"2024-03-04"},{"lineNumber":201,"author":{"gitId":"Ella-e"},"content":" -fx-font-family: \"Segoe UI Light\";","lastModifiedDate":"2024-03-04"},{"lineNumber":202,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":203,"author":{"gitId":"Ella-e"},"content":" -fx-opacity: 0.9;","lastModifiedDate":"2024-03-04"},{"lineNumber":204,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":205,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":206,"author":{"gitId":"Ella-e"},"content":".menu .left-container {","lastModifiedDate":"2024-03-04"},{"lineNumber":207,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: black;","lastModifiedDate":"2024-03-04"},{"lineNumber":208,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":209,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":210,"author":{"gitId":"Ella-e"},"content":"/*","lastModifiedDate":"2024-03-04"},{"lineNumber":211,"author":{"gitId":"Ella-e"},"content":" * Metro style Push Button","lastModifiedDate":"2024-03-04"},{"lineNumber":212,"author":{"gitId":"Ella-e"},"content":" * Author: Pedro Duque Vieira","lastModifiedDate":"2024-03-04"},{"lineNumber":213,"author":{"gitId":"Ella-e"},"content":" * http://pixelduke.wordpress.com/2012/10/23/jmetro-windows-8-controls-on-java/","lastModifiedDate":"2024-03-04"},{"lineNumber":214,"author":{"gitId":"Ella-e"},"content":" */","lastModifiedDate":"2024-03-04"},{"lineNumber":215,"author":{"gitId":"Ella-e"},"content":".button {","lastModifiedDate":"2024-03-04"},{"lineNumber":216,"author":{"gitId":"Ella-e"},"content":" -fx-padding: 5 22 5 22;","lastModifiedDate":"2024-03-04"},{"lineNumber":217,"author":{"gitId":"Ella-e"},"content":" -fx-border-color: #e2e2e2;","lastModifiedDate":"2024-03-04"},{"lineNumber":218,"author":{"gitId":"Ella-e"},"content":" -fx-border-width: 2;","lastModifiedDate":"2024-03-04"},{"lineNumber":219,"author":{"gitId":"Ella-e"},"content":" -fx-background-radius: 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":220,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: #1d1d1d;","lastModifiedDate":"2024-03-04"},{"lineNumber":221,"author":{"gitId":"Ella-e"},"content":" -fx-font-family: \"Segoe UI\", Helvetica, Arial, sans-serif;","lastModifiedDate":"2024-03-04"},{"lineNumber":222,"author":{"gitId":"Ella-e"},"content":" -fx-font-size: 11pt;","lastModifiedDate":"2024-03-04"},{"lineNumber":223,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: #d8d8d8;","lastModifiedDate":"2024-03-04"},{"lineNumber":224,"author":{"gitId":"Ella-e"},"content":" -fx-background-insets: 0 0 0 0, 0, 1, 2;","lastModifiedDate":"2024-03-04"},{"lineNumber":225,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":226,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":227,"author":{"gitId":"Ella-e"},"content":".button:hover {","lastModifiedDate":"2024-03-04"},{"lineNumber":228,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: #3a3a3a;","lastModifiedDate":"2024-03-04"},{"lineNumber":229,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":230,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":231,"author":{"gitId":"Ella-e"},"content":".button:pressed, .button:default:hover:pressed {","lastModifiedDate":"2024-03-04"},{"lineNumber":232,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":233,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: #1d1d1d;","lastModifiedDate":"2024-03-04"},{"lineNumber":234,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":235,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":236,"author":{"gitId":"Ella-e"},"content":".button:focused {","lastModifiedDate":"2024-03-04"},{"lineNumber":237,"author":{"gitId":"Ella-e"},"content":" -fx-border-color: white, white;","lastModifiedDate":"2024-03-04"},{"lineNumber":238,"author":{"gitId":"Ella-e"},"content":" -fx-border-width: 1, 1;","lastModifiedDate":"2024-03-04"},{"lineNumber":239,"author":{"gitId":"Ella-e"},"content":" -fx-border-style: solid, segments(1, 1);","lastModifiedDate":"2024-03-04"},{"lineNumber":240,"author":{"gitId":"Ella-e"},"content":" -fx-border-radius: 0, 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":241,"author":{"gitId":"Ella-e"},"content":" -fx-border-insets: 1 1 1 1, 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":242,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":243,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":244,"author":{"gitId":"Ella-e"},"content":".button:disabled, .button:default:disabled {","lastModifiedDate":"2024-03-04"},{"lineNumber":245,"author":{"gitId":"Ella-e"},"content":" -fx-opacity: 0.4;","lastModifiedDate":"2024-03-04"},{"lineNumber":246,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: #1d1d1d;","lastModifiedDate":"2024-03-04"},{"lineNumber":247,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":248,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":249,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":250,"author":{"gitId":"Ella-e"},"content":".button:default {","lastModifiedDate":"2024-03-04"},{"lineNumber":251,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: -fx-focus-color;","lastModifiedDate":"2024-03-04"},{"lineNumber":252,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: #ffffff;","lastModifiedDate":"2024-03-04"},{"lineNumber":253,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":254,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":255,"author":{"gitId":"Ella-e"},"content":".button:default:hover {","lastModifiedDate":"2024-03-04"},{"lineNumber":256,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(-fx-focus-color, 30%);","lastModifiedDate":"2024-03-04"},{"lineNumber":257,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":258,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":259,"author":{"gitId":"Ella-e"},"content":".dialog-pane {","lastModifiedDate":"2024-03-04"},{"lineNumber":260,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: #1d1d1d;","lastModifiedDate":"2024-03-04"},{"lineNumber":261,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":262,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":263,"author":{"gitId":"Ella-e"},"content":".dialog-pane \u003e *.button-bar \u003e *.container {","lastModifiedDate":"2024-03-04"},{"lineNumber":264,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: #1d1d1d;","lastModifiedDate":"2024-03-04"},{"lineNumber":265,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":266,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":267,"author":{"gitId":"Ella-e"},"content":".dialog-pane \u003e *.label.content {","lastModifiedDate":"2024-03-04"},{"lineNumber":268,"author":{"gitId":"Ella-e"},"content":" -fx-font-size: 14px;","lastModifiedDate":"2024-03-04"},{"lineNumber":269,"author":{"gitId":"Ella-e"},"content":" -fx-font-weight: bold;","lastModifiedDate":"2024-03-04"},{"lineNumber":270,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":271,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":272,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":273,"author":{"gitId":"Ella-e"},"content":".dialog-pane:header *.header-panel {","lastModifiedDate":"2024-03-04"},{"lineNumber":274,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(#1d1d1d, 25%);","lastModifiedDate":"2024-03-04"},{"lineNumber":275,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":276,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":277,"author":{"gitId":"Ella-e"},"content":".dialog-pane:header *.header-panel *.label {","lastModifiedDate":"2024-03-04"},{"lineNumber":278,"author":{"gitId":"Ella-e"},"content":" -fx-font-size: 18px;","lastModifiedDate":"2024-03-04"},{"lineNumber":279,"author":{"gitId":"Ella-e"},"content":" -fx-font-style: italic;","lastModifiedDate":"2024-03-04"},{"lineNumber":280,"author":{"gitId":"Ella-e"},"content":" -fx-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":281,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":282,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":283,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":284,"author":{"gitId":"Ella-e"},"content":".scroll-bar {","lastModifiedDate":"2024-03-04"},{"lineNumber":285,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2024-03-04"},{"lineNumber":286,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":287,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":288,"author":{"gitId":"Ella-e"},"content":".scroll-bar .thumb {","lastModifiedDate":"2024-03-04"},{"lineNumber":289,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(#1d1d1d, 50%);","lastModifiedDate":"2024-03-04"},{"lineNumber":290,"author":{"gitId":"Ella-e"},"content":" -fx-background-insets: 3;","lastModifiedDate":"2024-03-04"},{"lineNumber":291,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":292,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":293,"author":{"gitId":"Ella-e"},"content":".scroll-bar .increment-button, .scroll-bar .decrement-button {","lastModifiedDate":"2024-03-04"},{"lineNumber":294,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: transparent;","lastModifiedDate":"2024-03-04"},{"lineNumber":295,"author":{"gitId":"Ella-e"},"content":" -fx-padding: 0 0 0 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":296,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":297,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":298,"author":{"gitId":"Ella-e"},"content":".scroll-bar .increment-arrow, .scroll-bar .decrement-arrow {","lastModifiedDate":"2024-03-04"},{"lineNumber":299,"author":{"gitId":"Ella-e"},"content":" -fx-shape: \" \";","lastModifiedDate":"2024-03-04"},{"lineNumber":300,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":301,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":302,"author":{"gitId":"Ella-e"},"content":".scroll-bar:vertical .increment-arrow, .scroll-bar:vertical .decrement-arrow {","lastModifiedDate":"2024-03-04"},{"lineNumber":303,"author":{"gitId":"Ella-e"},"content":" -fx-padding: 1 8 1 8;","lastModifiedDate":"2024-03-04"},{"lineNumber":304,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":305,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":306,"author":{"gitId":"Ella-e"},"content":".scroll-bar:horizontal .increment-arrow, .scroll-bar:horizontal .decrement-arrow {","lastModifiedDate":"2024-03-04"},{"lineNumber":307,"author":{"gitId":"Ella-e"},"content":" -fx-padding: 8 1 8 1;","lastModifiedDate":"2024-03-04"},{"lineNumber":308,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":309,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":310,"author":{"gitId":"Ella-e"},"content":"#cardPane {","lastModifiedDate":"2024-03-04"},{"lineNumber":311,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: transparent;","lastModifiedDate":"2024-03-04"},{"lineNumber":312,"author":{"gitId":"Ella-e"},"content":" -fx-border-width: 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":313,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":314,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":315,"author":{"gitId":"Ella-e"},"content":"#commandTypeLabel {","lastModifiedDate":"2024-03-04"},{"lineNumber":316,"author":{"gitId":"Ella-e"},"content":" -fx-font-size: 11px;","lastModifiedDate":"2024-03-04"},{"lineNumber":317,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: #F70D1A;","lastModifiedDate":"2024-03-04"},{"lineNumber":318,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":319,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":320,"author":{"gitId":"Ella-e"},"content":"#commandTextField {","lastModifiedDate":"2024-03-04"},{"lineNumber":321,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: transparent #383838 transparent #383838;","lastModifiedDate":"2024-03-04"},{"lineNumber":322,"author":{"gitId":"Ella-e"},"content":" -fx-background-insets: 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":323,"author":{"gitId":"Ella-e"},"content":" -fx-border-color: #383838 #383838 #ffffff #383838;","lastModifiedDate":"2024-03-04"},{"lineNumber":324,"author":{"gitId":"Ella-e"},"content":" -fx-border-insets: 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":325,"author":{"gitId":"Ella-e"},"content":" -fx-border-width: 1;","lastModifiedDate":"2024-03-04"},{"lineNumber":326,"author":{"gitId":"Ella-e"},"content":" -fx-font-family: \"Segoe UI Light\";","lastModifiedDate":"2024-03-04"},{"lineNumber":327,"author":{"gitId":"Ella-e"},"content":" -fx-font-size: 13pt;","lastModifiedDate":"2024-03-04"},{"lineNumber":328,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":329,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":330,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":331,"author":{"gitId":"Ella-e"},"content":"#filterField, #personListPanel, #personWebpage {","lastModifiedDate":"2024-03-04"},{"lineNumber":332,"author":{"gitId":"Ella-e"},"content":" -fx-effect: innershadow(gaussian, black, 10, 0, 0, 0);","lastModifiedDate":"2024-03-04"},{"lineNumber":333,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":334,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":335,"author":{"gitId":"Ella-e"},"content":"#resultDisplay .content {","lastModifiedDate":"2024-03-04"},{"lineNumber":336,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: transparent, #383838, transparent, #383838;","lastModifiedDate":"2024-03-04"},{"lineNumber":337,"author":{"gitId":"Ella-e"},"content":" -fx-background-radius: 0;","lastModifiedDate":"2024-03-04"},{"lineNumber":338,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":339,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":340,"author":{"gitId":"Ella-e"},"content":"#tags {","lastModifiedDate":"2024-03-04"},{"lineNumber":341,"author":{"gitId":"Ella-e"},"content":" -fx-hgap: 7;","lastModifiedDate":"2024-03-04"},{"lineNumber":342,"author":{"gitId":"Ella-e"},"content":" -fx-vgap: 3;","lastModifiedDate":"2024-03-04"},{"lineNumber":343,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":344,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":345,"author":{"gitId":"Ella-e"},"content":"#tags .label {","lastModifiedDate":"2024-03-04"},{"lineNumber":346,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":347,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: #3e7b91;","lastModifiedDate":"2024-03-04"},{"lineNumber":348,"author":{"gitId":"Ella-e"},"content":" -fx-padding: 1 3 1 3;","lastModifiedDate":"2024-03-04"},{"lineNumber":349,"author":{"gitId":"Ella-e"},"content":" -fx-border-radius: 2;","lastModifiedDate":"2024-03-04"},{"lineNumber":350,"author":{"gitId":"Ella-e"},"content":" -fx-background-radius: 2;","lastModifiedDate":"2024-03-04"},{"lineNumber":351,"author":{"gitId":"Ella-e"},"content":" -fx-font-size: 11;","lastModifiedDate":"2024-03-04"},{"lineNumber":352,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"Ella-e":352}},{"path":"bin/main/view/Extensions.css","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":".error {","lastModifiedDate":"2024-03-04"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: #d06651 !important; /* The error class should always override the default text-fill style */","lastModifiedDate":"2024-03-04"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":".list-cell:empty {","lastModifiedDate":"2024-03-04"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":" /* Empty cells will not have alternating colours */","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":" -fx-background: #383838;","lastModifiedDate":"2024-03-04"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":".tag-selector {","lastModifiedDate":"2024-03-04"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":" -fx-border-width: 1;","lastModifiedDate":"2024-03-04"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":" -fx-border-color: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":" -fx-border-radius: 3;","lastModifiedDate":"2024-03-04"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":" -fx-background-radius: 3;","lastModifiedDate":"2024-03-04"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":".tooltip-text {","lastModifiedDate":"2024-03-04"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":20,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"Ella-e":20}},{"path":"bin/main/view/HelpWindow.css","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"#copyButton, #helpMessage {","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":" -fx-text-fill: white;","lastModifiedDate":"2024-03-04"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"#copyButton {","lastModifiedDate":"2024-03-04"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: dimgray;","lastModifiedDate":"2024-03-04"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":"#copyButton:hover {","lastModifiedDate":"2024-03-04"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: gray;","lastModifiedDate":"2024-03-04"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":"#copyButton:armed {","lastModifiedDate":"2024-03-04"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: darkgray;","lastModifiedDate":"2024-03-04"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":"#helpMessageContainer {","lastModifiedDate":"2024-03-04"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":" -fx-background-color: derive(#1d1d1d, 20%);","lastModifiedDate":"2024-03-04"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":"}","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"Ella-e":19}},{"path":"bin/main/view/HelpWindow.fxml","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"\u003c?import java.net.URL?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.Scene?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.control.Button?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.image.Image?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.stage.Stage?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":"\u003cfx:root resizable\u003d\"false\" title\u003d\"Help\" type\u003d\"javafx.stage.Stage\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":" \u003cicons\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":" \u003cImage url\u003d\"@/images/help_icon.png\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":" \u003c/icons\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":" \u003cscene\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":" \u003cScene\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":" \u003cstylesheets\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":" \u003cURL value\u003d\"@HelpWindow.css\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":20,"author":{"gitId":"Ella-e"},"content":" \u003c/stylesheets\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":21,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":22,"author":{"gitId":"Ella-e"},"content":" \u003cHBox alignment\u003d\"CENTER\" fx:id\u003d\"helpMessageContainer\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":23,"author":{"gitId":"Ella-e"},"content":" \u003cchildren\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":24,"author":{"gitId":"Ella-e"},"content":" \u003cLabel fx:id\u003d\"helpMessage\" text\u003d\"Label\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":25,"author":{"gitId":"Ella-e"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":26,"author":{"gitId":"Ella-e"},"content":" \u003cInsets right\u003d\"5.0\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":27,"author":{"gitId":"Ella-e"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":28,"author":{"gitId":"Ella-e"},"content":" \u003c/Label\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":29,"author":{"gitId":"Ella-e"},"content":" \u003cButton fx:id\u003d\"copyButton\" mnemonicParsing\u003d\"false\" onAction\u003d\"#copyUrl\" text\u003d\"Copy URL\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":30,"author":{"gitId":"Ella-e"},"content":" \u003cHBox.margin\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":31,"author":{"gitId":"Ella-e"},"content":" \u003cInsets left\u003d\"5.0\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":32,"author":{"gitId":"Ella-e"},"content":" \u003c/HBox.margin\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":33,"author":{"gitId":"Ella-e"},"content":" \u003c/Button\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":34,"author":{"gitId":"Ella-e"},"content":" \u003c/children\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":35,"author":{"gitId":"Ella-e"},"content":" \u003copaqueInsets\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":36,"author":{"gitId":"Ella-e"},"content":" \u003cInsets bottom\u003d\"10.0\" left\u003d\"5.0\" right\u003d\"10.0\" top\u003d\"5.0\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":37,"author":{"gitId":"Ella-e"},"content":" \u003c/opaqueInsets\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":38,"author":{"gitId":"Ella-e"},"content":" \u003cpadding\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":39,"author":{"gitId":"Ella-e"},"content":" \u003cInsets bottom\u003d\"10.0\" left\u003d\"5.0\" right\u003d\"10.0\" top\u003d\"5.0\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":40,"author":{"gitId":"Ella-e"},"content":" \u003c/padding\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":41,"author":{"gitId":"Ella-e"},"content":" \u003c/HBox\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":42,"author":{"gitId":"Ella-e"},"content":" \u003c/Scene\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":43,"author":{"gitId":"Ella-e"},"content":" \u003c/scene\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":44,"author":{"gitId":"Ella-e"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"Ella-e":44}},{"path":"bin/main/view/MainWindow.fxml","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"\u003c?import java.net.URL?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.Scene?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.control.Menu?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.control.MenuBar?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.control.MenuItem?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.control.SplitPane?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.image.Image?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.layout.StackPane?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":"\u003cfx:root type\u003d\"javafx.stage.Stage\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"","lastModifiedDate":"2024-03-04"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":" title\u003d\"Address App\" minWidth\u003d\"450\" minHeight\u003d\"600\" onCloseRequest\u003d\"#handleExit\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":" \u003cicons\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":" \u003cImage url\u003d\"@/images/address_book_32.png\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":" \u003c/icons\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":" \u003cscene\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":20,"author":{"gitId":"Ella-e"},"content":" \u003cScene\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":21,"author":{"gitId":"Ella-e"},"content":" \u003cstylesheets\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":22,"author":{"gitId":"Ella-e"},"content":" \u003cURL value\u003d\"@DarkTheme.css\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":23,"author":{"gitId":"Ella-e"},"content":" \u003cURL value\u003d\"@Extensions.css\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":24,"author":{"gitId":"Ella-e"},"content":" \u003c/stylesheets\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":25,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":26,"author":{"gitId":"Ella-e"},"content":" \u003cVBox\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":27,"author":{"gitId":"Ella-e"},"content":" \u003cMenuBar fx:id\u003d\"menuBar\" VBox.vgrow\u003d\"NEVER\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":28,"author":{"gitId":"Ella-e"},"content":" \u003cMenu mnemonicParsing\u003d\"false\" text\u003d\"File\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":29,"author":{"gitId":"Ella-e"},"content":" \u003cMenuItem mnemonicParsing\u003d\"false\" onAction\u003d\"#handleExit\" text\u003d\"Exit\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":30,"author":{"gitId":"Ella-e"},"content":" \u003c/Menu\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":31,"author":{"gitId":"Ella-e"},"content":" \u003cMenu mnemonicParsing\u003d\"false\" text\u003d\"Help\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":32,"author":{"gitId":"Ella-e"},"content":" \u003cMenuItem fx:id\u003d\"helpMenuItem\" mnemonicParsing\u003d\"false\" onAction\u003d\"#handleHelp\" text\u003d\"Help\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":33,"author":{"gitId":"Ella-e"},"content":" \u003c/Menu\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":34,"author":{"gitId":"Ella-e"},"content":" \u003c/MenuBar\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":35,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":36,"author":{"gitId":"Ella-e"},"content":" \u003cStackPane VBox.vgrow\u003d\"NEVER\" fx:id\u003d\"commandBoxPlaceholder\" styleClass\u003d\"pane-with-border\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":37,"author":{"gitId":"Ella-e"},"content":" \u003cpadding\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":38,"author":{"gitId":"Ella-e"},"content":" \u003cInsets top\u003d\"5\" right\u003d\"10\" bottom\u003d\"5\" left\u003d\"10\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":39,"author":{"gitId":"Ella-e"},"content":" \u003c/padding\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":40,"author":{"gitId":"Ella-e"},"content":" \u003c/StackPane\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":41,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":42,"author":{"gitId":"Ella-e"},"content":" \u003cStackPane VBox.vgrow\u003d\"NEVER\" fx:id\u003d\"resultDisplayPlaceholder\" styleClass\u003d\"pane-with-border\"","lastModifiedDate":"2024-03-04"},{"lineNumber":43,"author":{"gitId":"Ella-e"},"content":" minHeight\u003d\"100\" prefHeight\u003d\"100\" maxHeight\u003d\"100\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":44,"author":{"gitId":"Ella-e"},"content":" \u003cpadding\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":45,"author":{"gitId":"Ella-e"},"content":" \u003cInsets top\u003d\"5\" right\u003d\"10\" bottom\u003d\"5\" left\u003d\"10\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":46,"author":{"gitId":"Ella-e"},"content":" \u003c/padding\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":47,"author":{"gitId":"Ella-e"},"content":" \u003c/StackPane\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":48,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":49,"author":{"gitId":"Ella-e"},"content":" \u003cVBox fx:id\u003d\"personList\" styleClass\u003d\"pane-with-border\" minWidth\u003d\"340\" prefWidth\u003d\"340\" VBox.vgrow\u003d\"ALWAYS\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":50,"author":{"gitId":"Ella-e"},"content":" \u003cpadding\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":51,"author":{"gitId":"Ella-e"},"content":" \u003cInsets top\u003d\"10\" right\u003d\"10\" bottom\u003d\"10\" left\u003d\"10\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":52,"author":{"gitId":"Ella-e"},"content":" \u003c/padding\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":53,"author":{"gitId":"Ella-e"},"content":" \u003cStackPane fx:id\u003d\"personListPanelPlaceholder\" VBox.vgrow\u003d\"ALWAYS\"/\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":54,"author":{"gitId":"Ella-e"},"content":" \u003c/VBox\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":55,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":56,"author":{"gitId":"Ella-e"},"content":" \u003cStackPane fx:id\u003d\"statusbarPlaceholder\" VBox.vgrow\u003d\"NEVER\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":57,"author":{"gitId":"Ella-e"},"content":" \u003c/VBox\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":58,"author":{"gitId":"Ella-e"},"content":" \u003c/Scene\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":59,"author":{"gitId":"Ella-e"},"content":" \u003c/scene\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":60,"author":{"gitId":"Ella-e"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"Ella-e":60}},{"path":"bin/main/view/PersonListCard.fxml","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.geometry.Insets?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.layout.ColumnConstraints?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.layout.FlowPane?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.layout.GridPane?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.layout.HBox?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.layout.Region?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"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":"2024-03-04"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":" \u003cGridPane HBox.hgrow\u003d\"ALWAYS\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":" \u003ccolumnConstraints\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":" \u003cColumnConstraints hgrow\u003d\"SOMETIMES\" minWidth\u003d\"10\" prefWidth\u003d\"150\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":" \u003c/columnConstraints\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":" \u003cVBox alignment\u003d\"CENTER_LEFT\" minHeight\u003d\"105\" GridPane.columnIndex\u003d\"0\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":" \u003cpadding\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":" \u003cInsets top\u003d\"5\" right\u003d\"5\" bottom\u003d\"5\" left\u003d\"15\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":20,"author":{"gitId":"Ella-e"},"content":" \u003c/padding\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":21,"author":{"gitId":"Ella-e"},"content":" \u003cHBox spacing\u003d\"5\" alignment\u003d\"CENTER_LEFT\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":22,"author":{"gitId":"Ella-e"},"content":" \u003cLabel fx:id\u003d\"id\" styleClass\u003d\"cell_big_label\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":23,"author":{"gitId":"Ella-e"},"content":" \u003cminWidth\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":24,"author":{"gitId":"Ella-e"},"content":" \u003c!-- Ensures that the label text is never truncated --\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":25,"author":{"gitId":"Ella-e"},"content":" \u003cRegion fx:constant\u003d\"USE_PREF_SIZE\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":26,"author":{"gitId":"Ella-e"},"content":" \u003c/minWidth\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":27,"author":{"gitId":"Ella-e"},"content":" \u003c/Label\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":28,"author":{"gitId":"Ella-e"},"content":" \u003cLabel fx:id\u003d\"name\" text\u003d\"\\$first\" styleClass\u003d\"cell_big_label\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":29,"author":{"gitId":"Ella-e"},"content":" \u003c/HBox\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":30,"author":{"gitId":"Ella-e"},"content":" \u003cFlowPane fx:id\u003d\"tags\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":31,"author":{"gitId":"Ella-e"},"content":" \u003cLabel fx:id\u003d\"phone\" styleClass\u003d\"cell_small_label\" text\u003d\"\\$phone\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":32,"author":{"gitId":"Ella-e"},"content":" \u003cLabel fx:id\u003d\"address\" styleClass\u003d\"cell_small_label\" text\u003d\"\\$address\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":33,"author":{"gitId":"Ella-e"},"content":" \u003cLabel fx:id\u003d\"email\" styleClass\u003d\"cell_small_label\" text\u003d\"\\$email\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":34,"author":{"gitId":"Ella-e"},"content":" \u003c/VBox\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":35,"author":{"gitId":"Ella-e"},"content":" \u003c/GridPane\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":36,"author":{"gitId":"Ella-e"},"content":"\u003c/HBox\u003e","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"Ella-e":36}},{"path":"bin/main/view/PersonListPanel.fxml","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.control.ListView?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.layout.VBox?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"\u003cVBox xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":" \u003cListView fx:id\u003d\"personListView\" VBox.vgrow\u003d\"ALWAYS\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":"\u003c/VBox\u003e","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"Ella-e":8}},{"path":"bin/main/view/ResultDisplay.fxml","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.control.TextArea?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.layout.StackPane?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"\u003cStackPane fx:id\u003d\"placeHolder\" styleClass\u003d\"pane-with-border\" xmlns\u003d\"http://javafx.com/javafx/17\"","lastModifiedDate":"2024-03-04"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":" \u003cTextArea fx:id\u003d\"resultDisplay\" editable\u003d\"false\" styleClass\u003d\"result-display\"/\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":"\u003c/StackPane\u003e","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"Ella-e":9}},{"path":"bin/main/view/StatusBarFooter.fxml","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.control.Label?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.layout.ColumnConstraints?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"\u003c?import javafx.scene.layout.GridPane?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"\u003cGridPane styleClass\u003d\"status-bar\" xmlns\u003d\"http://javafx.com/javafx/17\" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":" \u003ccolumnConstraints\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":" \u003cColumnConstraints hgrow\u003d\"SOMETIMES\" minWidth\u003d\"10\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":" \u003c/columnConstraints\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":" \u003cLabel fx:id\u003d\"saveLocationStatus\" /\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":"\u003c/GridPane\u003e","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"Ella-e":12}},{"path":"bin/test/view/UiPartTest/invalidFile.fxml","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"Not a valid FXML file","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"Ella-e":1}},{"path":"bin/test/view/UiPartTest/validFile.fxml","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"\u003c?import seedu.address.ui.TestFxmlObject?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"\u003cTestFxmlObject xmlns:fx\u003d\"http://javafx.com/fxml/1\" fx:id\u003d\"validFileRoot\"\u003eHello World!\u003c/TestFxmlObject\u003e","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"Ella-e":4}},{"path":"bin/test/view/UiPartTest/validFileWithFxRoot.fxml","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"\u003cfx:root type\u003d\"seedu.address.ui.TestFxmlObject\" xmlns\u003d\"http://javafx.com/javafx/17\"","lastModifiedDate":"2024-03-04"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":" xmlns:fx\u003d\"http://javafx.com/fxml/1\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":" \u003ctext\u003eHello World!\u003c/text\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"\u003c/fx:root\u003e","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"Ella-e":6}},{"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":"javierng2knus"},"content":"### Ng Wei Chong Javier","lastModifiedDate":"2024-03-06"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":14,"author":{"gitId":"javierng2knus"},"content":"\u003cimg src\u003d\"images/javierng2knus.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-06"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"javierng2knus"},"content":"[[github](https://github.com/javierng2knus)]","lastModifiedDate":"2024-03-06"},{"lineNumber":17,"author":{"gitId":"javierng2knus"},"content":"[[portfolio](team/javier.md)]","lastModifiedDate":"2024-03-06"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"javierng2knus"},"content":"* Role: Team lead","lastModifiedDate":"2024-03-06"},{"lineNumber":20,"author":{"gitId":"javierng2knus"},"content":"* Responsibilities: \u003cWill be reassigned on a later date\u003e","lastModifiedDate":"2024-03-06"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"MaYuehan"},"content":"### Ma Yuehan","lastModifiedDate":"2024-02-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/johndoe.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2020-06-17"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"MaYuehan"},"content":"[[github](https://github.com/MaYuehan)]","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"MaYuehan"},"content":"[[portfolio](team/mayuehan.md)]","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":29,"author":{"gitId":"MaYuehan"},"content":"* Role: Developer","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"MaYuehan"},"content":"* Responsibilities: ","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"Ella-e"},"content":"### Mu Zhaoyu","lastModifiedDate":"2024-03-04"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"Ella-e"},"content":"\u003cimg src\u003d\"images/ella-e.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"Ella-e"},"content":"[[github](http://github.com/Ella-e)] ","lastModifiedDate":"2024-03-04"},{"lineNumber":37,"author":{"gitId":"Ella-e"},"content":"[[portfolio](team/ella-e.md)]","lastModifiedDate":"2024-03-04"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":40,"author":{"gitId":"Ella-e"},"content":"* Responsibilities: Command implementation, documentation","lastModifiedDate":"2024-03-04"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":"### Jean Doe","lastModifiedDate":"2020-06-17"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/johndoe.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2020-06-17"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":"[[github](http://github.com/johndoe)]","lastModifiedDate":"2020-06-17"},{"lineNumber":47,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":50,"author":{"gitId":"-"},"content":"* Responsibilities: Dev Ops + Threading","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"-"},"content":"### James Doe","lastModifiedDate":"2020-06-17"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/johndoe.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2020-06-17"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":56,"author":{"gitId":"-"},"content":"[[github](http://github.com/johndoe)]","lastModifiedDate":"2020-06-17"},{"lineNumber":57,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":59,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":60,"author":{"gitId":"-"},"content":"* Responsibilities: UI","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"javierng2knus":6,"MaYuehan":5,"Ella-e":5,"-":44}},{"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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"content":"Classes used by multiple components are in the `seedu.addressbook.commons` package.","lastModifiedDate":"2020-05-23"},{"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":"-"},"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":163,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":164,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#commit()` — Saves the current address book state in its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":165,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#undo()` — Restores the previous address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":166,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#redo()` — Restores a previously undone address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":167,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":168,"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":210,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":211,"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":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":"-"},"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":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":"-"},"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":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":"-"},"content":"* has a need to manage a significant number of contacts","lastModifiedDate":"2020-05-23"},{"lineNumber":266,"author":{"gitId":"-"},"content":"* prefer desktop apps over other types","lastModifiedDate":"2020-05-23"},{"lineNumber":267,"author":{"gitId":"-"},"content":"* can type fast","lastModifiedDate":"2020-05-23"},{"lineNumber":268,"author":{"gitId":"-"},"content":"* prefers typing to mouse interactions","lastModifiedDate":"2020-05-26"},{"lineNumber":269,"author":{"gitId":"-"},"content":"* is reasonably comfortable using CLI apps","lastModifiedDate":"2020-05-23"},{"lineNumber":270,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":271,"author":{"gitId":"-"},"content":"**Value proposition**: manage contacts faster than a typical mouse/GUI driven app","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":"### User stories","lastModifiedDate":"2020-06-07"},{"lineNumber":275,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":276,"author":{"gitId":"Ella-e"},"content":"Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (good to but might not have) - `*`","lastModifiedDate":"2024-03-04"},{"lineNumber":277,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":278,"author":{"gitId":"-"},"content":"| Priority | As a …​ | I want to …​ | So that I can…​ |","lastModifiedDate":"2020-05-23"},{"lineNumber":279,"author":{"gitId":"-"},"content":"| -------- | ------------------------------------------ | ------------------------------ | ---------------------------------------------------------------------- |","lastModifiedDate":"2020-05-23"},{"lineNumber":280,"author":{"gitId":"Ella-e"},"content":"| `* * *` | new user | have a comprehensive document that details every possible feature. | learn how to use a particular feature |","lastModifiedDate":"2024-03-04"},{"lineNumber":281,"author":{"gitId":"Ella-e"},"content":"| `* * *` | user | add new patient, either with or without further information about the patient | |","lastModifiedDate":"2024-03-04"},{"lineNumber":282,"author":{"gitId":"Ella-e"},"content":"| `* * *` | user | delete patient | free storage resources |","lastModifiedDate":"2024-03-04"},{"lineNumber":283,"author":{"gitId":"Ella-e"},"content":"| `* * *` | user | be able to add the contact information of my patient into the database | I can get in touch with them when needed or under emergency situation |","lastModifiedDate":"2024-03-04"},{"lineNumber":284,"author":{"gitId":"Ella-e"},"content":"| `* * *` | user | be able to delete the contact information for a particular patient when the information is outdated | I can keep in touch with my patient |","lastModifiedDate":"2024-03-04"},{"lineNumber":285,"author":{"gitId":"Ella-e"},"content":"| `* * *` | user | list all patients and their contacts | |","lastModifiedDate":"2024-03-04"},{"lineNumber":286,"author":{"gitId":"Ella-e"},"content":"| `* * *` | intermediate user | add appointment to free time slot | easily schedule an appointment and find free time slot for it |","lastModifiedDate":"2024-03-04"},{"lineNumber":287,"author":{"gitId":"Ella-e"},"content":"| `* * *` | intermediate user | delete appointment to free time slot | remove reservation if the patient is unable to attend |","lastModifiedDate":"2024-03-04"},{"lineNumber":288,"author":{"gitId":"Ella-e"},"content":"| `* * *` | intermediate user | list appointments | I can see all the appointments. |","lastModifiedDate":"2024-03-04"},{"lineNumber":289,"author":{"gitId":"Ella-e"},"content":"| `* * *` | user | add medication instructions for the patient | have a better understanding of the medication history of my patient |","lastModifiedDate":"2024-03-04"},{"lineNumber":290,"author":{"gitId":"Ella-e"},"content":"| `* * *` | user | list all information about specific patient | see the detail information of the patient |","lastModifiedDate":"2024-03-04"},{"lineNumber":291,"author":{"gitId":"Ella-e"},"content":"| `* *` | user | be able to modify/update the information of a particular patient | I can keep the most-updated information |","lastModifiedDate":"2024-03-04"},{"lineNumber":292,"author":{"gitId":"Ella-e"},"content":"| `* *` | user | be able to modify an appointment details of a patient | I can keep the most-updated appointment information |","lastModifiedDate":"2024-03-04"},{"lineNumber":293,"author":{"gitId":"Ella-e"},"content":"| `* *` | new user | option for undo most precent change | I can quickly fix my mistyped command |","lastModifiedDate":"2024-03-04"},{"lineNumber":294,"author":{"gitId":"Ella-e"},"content":"| `* *` | beginner | set the reminder for an appointment | remind me when Im busy with work |","lastModifiedDate":"2024-03-04"},{"lineNumber":295,"author":{"gitId":"Ella-e"},"content":"| `* *` | user | mark a reminder as done | better track the undo work |","lastModifiedDate":"2024-03-04"},{"lineNumber":296,"author":{"gitId":"Ella-e"},"content":"| `* *` | user | mark some of the patients as the special focus | better track the state of illness of patients who are in a very serious state |","lastModifiedDate":"2024-03-04"},{"lineNumber":297,"author":{"gitId":"Ella-e"},"content":"| `* *` | expert user | have short forms of existing commands | save time on typing the commands |","lastModifiedDate":"2024-03-04"},{"lineNumber":298,"author":{"gitId":"Ella-e"},"content":"| `* *` | new user | interactive guide with sample data | quickly understand app\u0027s capabilities |","lastModifiedDate":"2024-03-04"},{"lineNumber":299,"author":{"gitId":"Ella-e"},"content":"| `* *` | Doctor who is colaborating with other doctor | ability to leave comments or annotations on shared patient records | communicate specific insights or recommendations to my colleague |","lastModifiedDate":"2024-03-04"},{"lineNumber":300,"author":{"gitId":"Ella-e"},"content":"| `* *` | intermediate user | see the previous doage that the patient take in his medical record page | Adjust the dosage for the patient according to his/her state of illness |","lastModifiedDate":"2024-03-04"},{"lineNumber":301,"author":{"gitId":"Ella-e"},"content":"| `* *` | intermediate user | search about the patient\u0027s allergy history | Prescribing safe medication for patients |","lastModifiedDate":"2024-03-04"},{"lineNumber":302,"author":{"gitId":"Ella-e"},"content":"| `* *` | intermediate user | know about the previous illnesses of the patient | help to diagnose causes more accurately |","lastModifiedDate":"2024-03-04"},{"lineNumber":303,"author":{"gitId":"Ella-e"},"content":"| `* *` | intermediate user | be able to update the patient\u0027s condition upon the previous appointment | better track the sate of illness of the patient |","lastModifiedDate":"2024-03-04"},{"lineNumber":304,"author":{"gitId":"Ella-e"},"content":"| `*` | new user | suggestion on correction for mistyped commands | avoid typing wrong comands |","lastModifiedDate":"2024-03-04"},{"lineNumber":305,"author":{"gitId":"Ella-e"},"content":"| `*` | user | have a way to assign specific colors to specific tags | better differentiate the existing tags |","lastModifiedDate":"2024-03-04"},{"lineNumber":306,"author":{"gitId":"Ella-e"},"content":"| `*` | user | have a icon or button beside a feature that shows a tooltip when hovered | quickly find out information about the feature without needing other references |","lastModifiedDate":"2024-03-04"},{"lineNumber":307,"author":{"gitId":"Ella-e"},"content":"| `*` | user | have a method of giving feedback to the developers | share aspects of the product that I would like changes to |","lastModifiedDate":"2024-03-04"},{"lineNumber":308,"author":{"gitId":"Ella-e"},"content":"| `*` | new user | have the ability to switch to a more simplified and beginner friendly UI | more effectively learn the basics |","lastModifiedDate":"2024-03-04"},{"lineNumber":309,"author":{"gitId":"Ella-e"},"content":"| `*` | trainee doctor | be able to refer to similar previous cases | study treatment that helps with this kind of cases |","lastModifiedDate":"2024-03-04"},{"lineNumber":310,"author":{"gitId":"Ella-e"},"content":"| `*` | experienced user | an efficient way to export and backup patient data | ensure the safety and accessibility of important information |","lastModifiedDate":"2024-03-04"},{"lineNumber":311,"author":{"gitId":"Ella-e"},"content":"| `*` | intermediate user | export selected patient\u0027s information | give the patient their personal information after they change their doctors, and delete the patient\u0027s information from the database safely |","lastModifiedDate":"2024-03-04"},{"lineNumber":312,"author":{"gitId":"Ella-e"},"content":"| `*` | intermediate user | export selected medical instructions | The patient can follow my medical instructions closely |","lastModifiedDate":"2024-03-04"},{"lineNumber":313,"author":{"gitId":"Ella-e"},"content":"| `*` | intermediate user | see the list of patients based on the next follow-up meeting/calling time | have a better plan for my time and know which patient needs my attention next |","lastModifiedDate":"2024-03-04"},{"lineNumber":314,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":315,"author":{"gitId":"-"},"content":"### Use cases","lastModifiedDate":"2020-06-07"},{"lineNumber":316,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":317,"author":{"gitId":"Ella-e"},"content":"(For all use cases below, the **System** is the `VitalConnect` and the **Actor** is the `user`, unless specified otherwise)","lastModifiedDate":"2024-03-04"},{"lineNumber":318,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":319,"author":{"gitId":"Ella-e"},"content":"**Use case: UC1 - Add a patient**","lastModifiedDate":"2024-03-04"},{"lineNumber":320,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2020-05-23"},{"lineNumber":321,"author":{"gitId":"Ella-e"},"content":"1. User requests to add a patient by keying the patient\u0027s name and NRIC in the command.","lastModifiedDate":"2024-03-04"},{"lineNumber":322,"author":{"gitId":"Ella-e"},"content":"2. VitalConnect adds the patient\u0027s name and NRIC.","lastModifiedDate":"2024-03-04"},{"lineNumber":323,"author":{"gitId":"-"},"content":"Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":324,"author":{"gitId":"-"},"content":"**Extensions**","lastModifiedDate":"2020-05-23"},{"lineNumber":325,"author":{"gitId":"Ella-e"},"content":"* 1a. The NRIC already exists in the system.","lastModifiedDate":"2024-03-04"},{"lineNumber":326,"author":{"gitId":"Ella-e"},"content":" * 1a1. VitalConnect displays warning message and the existing patient\u0027s information.","lastModifiedDate":"2024-03-04"},{"lineNumber":327,"author":{"gitId":"Ella-e"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":328,"author":{"gitId":"Ella-e"},"content":"* 1b. The NRIC or name entered is invalid.","lastModifiedDate":"2024-03-04"},{"lineNumber":329,"author":{"gitId":"Ella-e"},"content":" * 1b1. VitalConnect shows an error message.","lastModifiedDate":"2024-03-04"},{"lineNumber":330,"author":{"gitId":"Ella-e"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":331,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":332,"author":{"gitId":"Ella-e"},"content":"**Use case: UC2 - Delete a patient**","lastModifiedDate":"2024-03-04"},{"lineNumber":333,"author":{"gitId":"Ella-e"},"content":"**MSS**","lastModifiedDate":"2024-03-04"},{"lineNumber":334,"author":{"gitId":"Ella-e"},"content":"1. User requests to delete a patient by keying the patient\u0027s name or NRIC in the command.","lastModifiedDate":"2024-03-04"},{"lineNumber":335,"author":{"gitId":"Ella-e"},"content":"2. VitalConnect deletes the patient from database.","lastModifiedDate":"2024-03-04"},{"lineNumber":336,"author":{"gitId":"Ella-e"},"content":"Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":337,"author":{"gitId":"Ella-e"},"content":"**Extensions**","lastModifiedDate":"2024-03-04"},{"lineNumber":338,"author":{"gitId":"Ella-e"},"content":"* 1a. The patient doesn\u0027t exist in the system.","lastModifiedDate":"2024-03-04"},{"lineNumber":339,"author":{"gitId":"Ella-e"},"content":" * 1a1. VitalConnect displays an error message.","lastModifiedDate":"2024-03-04"},{"lineNumber":340,"author":{"gitId":"Ella-e"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":341,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":342,"author":{"gitId":"Ella-e"},"content":"**Use case: UC3 - Add an appointment**","lastModifiedDate":"2024-03-04"},{"lineNumber":343,"author":{"gitId":"Ella-e"},"content":"**MSS**","lastModifiedDate":"2024-03-04"},{"lineNumber":344,"author":{"gitId":"Ella-e"},"content":"1. User requests to add an appointment for a patient.","lastModifiedDate":"2024-03-04"},{"lineNumber":345,"author":{"gitId":"Ella-e"},"content":"2. VitalConnect add the appointment to the database under this patient\u0027s NRIC.","lastModifiedDate":"2024-03-04"},{"lineNumber":346,"author":{"gitId":"Ella-e"},"content":"Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":347,"author":{"gitId":"Ella-e"},"content":"**Extensions**","lastModifiedDate":"2024-03-04"},{"lineNumber":348,"author":{"gitId":"Ella-e"},"content":"* 1a. Critical information (time and doctor) missing in the appointment.","lastModifiedDate":"2024-03-04"},{"lineNumber":349,"author":{"gitId":"Ella-e"},"content":" * 1a1. VitalConnect displays a warning message.","lastModifiedDate":"2024-03-04"},{"lineNumber":350,"author":{"gitId":"Ella-e"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":351,"author":{"gitId":"Ella-e"},"content":"* 1b. The assigned patient doesn\u0027t exist in the database.","lastModifiedDate":"2024-03-04"},{"lineNumber":352,"author":{"gitId":"Ella-e"},"content":" * 1b1. VitalConnect displays a warning message.","lastModifiedDate":"2024-03-04"},{"lineNumber":353,"author":{"gitId":"Ella-e"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":354,"author":{"gitId":"Ella-e"},"content":"* 1c. The appointment time crashes with existing time.","lastModifiedDate":"2024-03-04"},{"lineNumber":355,"author":{"gitId":"Ella-e"},"content":" * 1c1. VitalConnect displays a warning message.","lastModifiedDate":"2024-03-04"},{"lineNumber":356,"author":{"gitId":"Ella-e"},"content":" * 1c1. VitalConnect displays the appointment with crashing time.","lastModifiedDate":"2024-03-04"},{"lineNumber":357,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":358,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":359,"author":{"gitId":"Ella-e"},"content":"**Use case: UC4 - Delete an appointment**","lastModifiedDate":"2024-03-04"},{"lineNumber":360,"author":{"gitId":"Ella-e"},"content":"**MSS**","lastModifiedDate":"2024-03-04"},{"lineNumber":361,"author":{"gitId":"Ella-e"},"content":"1. User requests to delete an appointment for a patient.","lastModifiedDate":"2024-03-04"},{"lineNumber":362,"author":{"gitId":"Ella-e"},"content":"2. VitalConnect removes the appointment from the database.","lastModifiedDate":"2024-03-04"},{"lineNumber":363,"author":{"gitId":"Ella-e"},"content":"Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":364,"author":{"gitId":"Ella-e"},"content":"**Extensions**","lastModifiedDate":"2024-03-04"},{"lineNumber":365,"author":{"gitId":"Ella-e"},"content":"* 1a. The assigned patient or the appointment doesn\u0027t exist in the database.","lastModifiedDate":"2024-03-04"},{"lineNumber":366,"author":{"gitId":"Ella-e"},"content":" * 1a1. VitalConnect displays a warning message.","lastModifiedDate":"2024-03-04"},{"lineNumber":367,"author":{"gitId":"Ella-e"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":368,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":369,"author":{"gitId":"Ella-e"},"content":"**Use case: UC5 - Modify an appointment**","lastModifiedDate":"2024-03-04"},{"lineNumber":370,"author":{"gitId":"Ella-e"},"content":"**MSS**","lastModifiedDate":"2024-03-04"},{"lineNumber":371,"author":{"gitId":"Ella-e"},"content":"1. User requests to modify an appointment for a patient by keying the appointment\u0027s id.","lastModifiedDate":"2024-03-04"},{"lineNumber":372,"author":{"gitId":"Ella-e"},"content":"2. VitalConnect displays the detail of the appointment to be modified.","lastModifiedDate":"2024-03-04"},{"lineNumber":373,"author":{"gitId":"Ella-e"},"content":"3. User specify which field to be modified and enters the new information.","lastModifiedDate":"2024-03-04"},{"lineNumber":374,"author":{"gitId":"Ella-e"},"content":"4. VitalConnect saves the new appointment information.","lastModifiedDate":"2024-03-04"},{"lineNumber":375,"author":{"gitId":"Ella-e"},"content":"5. VitalConnect displays the updated detail of the appointment modified.","lastModifiedDate":"2024-03-04"},{"lineNumber":376,"author":{"gitId":"Ella-e"},"content":"Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":377,"author":{"gitId":"Ella-e"},"content":"**Extensions**","lastModifiedDate":"2024-03-04"},{"lineNumber":378,"author":{"gitId":"Ella-e"},"content":"* 1a. The appointment refered by the id doesn\u0027t exist in the database.","lastModifiedDate":"2024-03-04"},{"lineNumber":379,"author":{"gitId":"Ella-e"},"content":" * 1a1. VitalConnect displays an error message.","lastModifiedDate":"2024-03-04"},{"lineNumber":380,"author":{"gitId":"Ella-e"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":381,"author":{"gitId":"Ella-e"},"content":"* 1b. The id is not a valid number.","lastModifiedDate":"2024-03-04"},{"lineNumber":382,"author":{"gitId":"Ella-e"},"content":" * 1b1. VitalConnect displays an error message.","lastModifiedDate":"2024-03-04"},{"lineNumber":383,"author":{"gitId":"Ella-e"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":384,"author":{"gitId":"Ella-e"},"content":"* 3a. The field to be modified is unrecognized.","lastModifiedDate":"2024-03-04"},{"lineNumber":385,"author":{"gitId":"Ella-e"},"content":" * 3a1. VitalConnect displays an error message.","lastModifiedDate":"2024-03-04"},{"lineNumber":386,"author":{"gitId":"Ella-e"},"content":" * 3a2. VitalConnect request for valid field information.","lastModifiedDate":"2024-03-04"},{"lineNumber":387,"author":{"gitId":"Ella-e"},"content":" * 3a3. User enters new field information.","lastModifiedDate":"2024-03-04"},{"lineNumber":388,"author":{"gitId":"Ella-e"},"content":" Steps 3a1-3a3 are repeated until the data entered are correct.","lastModifiedDate":"2024-03-04"},{"lineNumber":389,"author":{"gitId":"Ella-e"},"content":" Use case resumes from step 4.","lastModifiedDate":"2024-03-04"},{"lineNumber":390,"author":{"gitId":"Ella-e"},"content":"* 3b. The new information is in invalid form or contains invalid character.","lastModifiedDate":"2024-03-04"},{"lineNumber":391,"author":{"gitId":"Ella-e"},"content":" * 3b1. VitalConnect displays an error message.","lastModifiedDate":"2024-03-04"},{"lineNumber":392,"author":{"gitId":"Ella-e"},"content":" * 3b2. VitalConnect request for valid data entry.","lastModifiedDate":"2024-03-04"},{"lineNumber":393,"author":{"gitId":"Ella-e"},"content":" * 3b3. User enters new field information.","lastModifiedDate":"2024-03-04"},{"lineNumber":394,"author":{"gitId":"Ella-e"},"content":" Steps 3b1-3b3 are repeated until the data entered are valid.","lastModifiedDate":"2024-03-04"},{"lineNumber":395,"author":{"gitId":"Ella-e"},"content":" Use case resumes from step 4.","lastModifiedDate":"2024-03-04"},{"lineNumber":396,"author":{"gitId":"Ella-e"},"content":"* 3c. The appointment time crashes with existing time.","lastModifiedDate":"2024-03-04"},{"lineNumber":397,"author":{"gitId":"Ella-e"},"content":" * 3c1. VitalConnect displays an error message.","lastModifiedDate":"2024-03-04"},{"lineNumber":398,"author":{"gitId":"Ella-e"},"content":" * 3c2. VitalConnect displays the appointment with crashing time.","lastModifiedDate":"2024-03-04"},{"lineNumber":399,"author":{"gitId":"Ella-e"},"content":" * 3c3. VitalConnect request for valid data entry.","lastModifiedDate":"2024-03-04"},{"lineNumber":400,"author":{"gitId":"Ella-e"},"content":" * 3c4. User enters new field information.","lastModifiedDate":"2024-03-04"},{"lineNumber":401,"author":{"gitId":"Ella-e"},"content":" Steps 3c1-3c4 are repeated until the time doesn\u0027t crash.","lastModifiedDate":"2024-03-04"},{"lineNumber":402,"author":{"gitId":"Ella-e"},"content":" Use case resumes from step 4.","lastModifiedDate":"2024-03-04"},{"lineNumber":403,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":404,"author":{"gitId":"Ella-e"},"content":"**Use case: UC6 - Add contact information**","lastModifiedDate":"2024-03-04"},{"lineNumber":405,"author":{"gitId":"Ella-e"},"content":"**MSS**","lastModifiedDate":"2024-03-04"},{"lineNumber":406,"author":{"gitId":"Ella-e"},"content":"1. User requests to add contact information for a patient.","lastModifiedDate":"2024-03-04"},{"lineNumber":407,"author":{"gitId":"Ella-e"},"content":"2. VitalConnect save the contact information to the database.","lastModifiedDate":"2024-03-04"},{"lineNumber":408,"author":{"gitId":"Ella-e"},"content":"Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":409,"author":{"gitId":"Ella-e"},"content":"**Extensions**","lastModifiedDate":"2024-03-04"},{"lineNumber":410,"author":{"gitId":"Ella-e"},"content":"* 1a. The patient doesn\u0027t exist in the database.","lastModifiedDate":"2024-03-04"},{"lineNumber":411,"author":{"gitId":"Ella-e"},"content":" * 1a1. VitalConnect displays a warning message.","lastModifiedDate":"2024-03-04"},{"lineNumber":412,"author":{"gitId":"Ella-e"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":413,"author":{"gitId":"Ella-e"},"content":"* 1b. The contact information is invalid.","lastModifiedDate":"2024-03-04"},{"lineNumber":414,"author":{"gitId":"Ella-e"},"content":" * 1b1. VitalConnect displays a warning message.","lastModifiedDate":"2024-03-04"},{"lineNumber":415,"author":{"gitId":"Ella-e"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":416,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":417,"author":{"gitId":"Ella-e"},"content":"**Use case: UC7 - Delete contact information**","lastModifiedDate":"2024-03-04"},{"lineNumber":418,"author":{"gitId":"Ella-e"},"content":"**MSS**","lastModifiedDate":"2024-03-04"},{"lineNumber":419,"author":{"gitId":"Ella-e"},"content":"1. User requests to delete contact information for a patient.","lastModifiedDate":"2024-03-04"},{"lineNumber":420,"author":{"gitId":"Ella-e"},"content":"2. VitalConnect remove the contact information to the database.","lastModifiedDate":"2024-03-04"},{"lineNumber":421,"author":{"gitId":"Ella-e"},"content":"Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":422,"author":{"gitId":"Ella-e"},"content":"**Extensions**","lastModifiedDate":"2024-03-04"},{"lineNumber":423,"author":{"gitId":"Ella-e"},"content":"* 1a. The patient or contact information doesn\u0027t exist in the database.","lastModifiedDate":"2024-03-04"},{"lineNumber":424,"author":{"gitId":"Ella-e"},"content":" * 1a1. VitalConnect displays a warning message.","lastModifiedDate":"2024-03-04"},{"lineNumber":425,"author":{"gitId":"Ella-e"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":426,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":427,"author":{"gitId":"Ella-e"},"content":"**Use case: UC8 - Modify contact information**","lastModifiedDate":"2024-03-04"},{"lineNumber":428,"author":{"gitId":"Ella-e"},"content":"**MSS**","lastModifiedDate":"2024-03-04"},{"lineNumber":429,"author":{"gitId":"Ella-e"},"content":"1. User requests to modify contact information for a patient.","lastModifiedDate":"2024-03-04"},{"lineNumber":430,"author":{"gitId":"Ella-e"},"content":"2. VitalConnect displays the updated contact information of the patient.","lastModifiedDate":"2024-03-04"},{"lineNumber":431,"author":{"gitId":"Ella-e"},"content":"Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":432,"author":{"gitId":"Ella-e"},"content":"**Extensions**","lastModifiedDate":"2024-03-04"},{"lineNumber":433,"author":{"gitId":"Ella-e"},"content":"* 1a. The patient or contact information doesn\u0027t exist in the database.","lastModifiedDate":"2024-03-04"},{"lineNumber":434,"author":{"gitId":"Ella-e"},"content":" * 1a1. VitalConnect displays a warning message.","lastModifiedDate":"2024-03-04"},{"lineNumber":435,"author":{"gitId":"Ella-e"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":436,"author":{"gitId":"Ella-e"},"content":"* 1b. The contact information is invalid.","lastModifiedDate":"2024-03-04"},{"lineNumber":437,"author":{"gitId":"Ella-e"},"content":" * 1b1. VitalConnect displays a warning message.","lastModifiedDate":"2024-03-04"},{"lineNumber":438,"author":{"gitId":"Ella-e"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":439,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":440,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":441,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":442,"author":{"gitId":"Ella-e"},"content":"# Technical Requirements","lastModifiedDate":"2024-03-04"},{"lineNumber":443,"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":444,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":445,"author":{"gitId":"Ella-e"},"content":"# Performance Requirements","lastModifiedDate":"2024-03-04"},{"lineNumber":446,"author":{"gitId":"Ella-e"},"content":"1. Should be able to hold up to 100 patients with 1000 appointments without a noticeable sluggishness in performance for typical usage.","lastModifiedDate":"2024-03-04"},{"lineNumber":447,"author":{"gitId":"Ella-e"},"content":"2. The system should respond within 3 seconds.","lastModifiedDate":"2024-03-04"},{"lineNumber":448,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":449,"author":{"gitId":"Ella-e"},"content":"# Quality Requirements","lastModifiedDate":"2024-03-04"},{"lineNumber":450,"author":{"gitId":"Ella-e"},"content":"1. 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-03-04"},{"lineNumber":451,"author":{"gitId":"Ella-e"},"content":"2. System should be robust for any form of data file crashes and invalid user input.","lastModifiedDate":"2024-03-04"},{"lineNumber":452,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":453,"author":{"gitId":"Ella-e"},"content":"# Scope","lastModifiedDate":"2024-03-04"},{"lineNumber":454,"author":{"gitId":"Ella-e"},"content":"1. The product will \u003cstrong\u003eNOT\u003c/strong\u003e enforce any form of protection of the generated data file containing patients\u0027 information. The organization should be responsible for ensuring the safety of their patient\u0027s data.","lastModifiedDate":"2024-03-04"},{"lineNumber":455,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":456,"author":{"gitId":"Ella-e"},"content":"# Process Requirements","lastModifiedDate":"2024-03-04"},{"lineNumber":457,"author":{"gitId":"Ella-e"},"content":"1. The project is expected to grow in breadth-first iterative process.","lastModifiedDate":"2024-03-04"},{"lineNumber":458,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":459,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":460,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":461,"author":{"gitId":"-"},"content":"* **Mainstream OS**: Windows, Linux, Unix, MacOS","lastModifiedDate":"2024-02-09"},{"lineNumber":462,"author":{"gitId":"-"},"content":"* **Private contact detail**: A contact detail that is not meant to be shared with others","lastModifiedDate":"2020-05-23"},{"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":"\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":471,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":472,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":473,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":474,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":475,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":476,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":477,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":478,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":479,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":480,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":481,"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":482,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":483,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":484,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":485,"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":486,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":487,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":488,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","lastModifiedDate":"2020-05-23"},{"lineNumber":489,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":490,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":491,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":492,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":493,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":494,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":495,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":496,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":497,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":498,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":499,"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":500,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":501,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":502,"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":503,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":504,"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":505,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":506,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":507,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":508,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":509,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":510,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":511,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":512,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":513,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":514,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":515,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"Ella-e":157,"-":358}},{"path":"docs/team/ella-e.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"Ella-e"},"content":"---","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"Ella-e"},"content":"layout: page","lastModifiedDate":"2024-03-04"},{"lineNumber":3,"author":{"gitId":"Ella-e"},"content":"title: Mu Zhaoyu\u0027s Project Portfolio Page","lastModifiedDate":"2024-03-04"},{"lineNumber":4,"author":{"gitId":"Ella-e"},"content":"---","lastModifiedDate":"2024-03-04"},{"lineNumber":5,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":6,"author":{"gitId":"Ella-e"},"content":"## Project: VitalConnect","lastModifiedDate":"2024-03-04"},{"lineNumber":7,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"Ella-e"},"content":"This product is doctors or any healthcare workers that have to keep track of a lot ","lastModifiedDate":"2024-03-04"},{"lineNumber":9,"author":{"gitId":"Ella-e"},"content":"of patient information and requires the information at a fast pace, ","lastModifiedDate":"2024-03-04"},{"lineNumber":10,"author":{"gitId":"Ella-e"},"content":"thus preferring to have a simple UI such as a CLI instead of a complex GUI, ","lastModifiedDate":"2024-03-04"},{"lineNumber":11,"author":{"gitId":"Ella-e"},"content":"with the added benefit of having typed user commands for an even faster retrieval of information.","lastModifiedDate":"2024-03-04"},{"lineNumber":12,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":13,"author":{"gitId":"Ella-e"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-03-04"},{"lineNumber":14,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":15,"author":{"gitId":"Ella-e"},"content":"### **New Feature**: ","lastModifiedDate":"2024-03-04"},{"lineNumber":16,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":17,"author":{"gitId":"Ella-e"},"content":"1. __Create an appointment__","lastModifiedDate":"2024-03-04"},{"lineNumber":18,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":19,"author":{"gitId":"Ella-e"},"content":"* What it does: allows the user to create an appointment for a patient with the time and date.","lastModifiedDate":"2024-03-04"},{"lineNumber":20,"author":{"gitId":"Ella-e"},"content":"* Justification: This feature improves the product significantly as it is the fundamental functions for the project.","lastModifiedDate":"2024-03-04"},{"lineNumber":21,"author":{"gitId":"Ella-e"},"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":22,"author":{"gitId":"Ella-e"},"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":23,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":24,"author":{"gitId":"Ella-e"},"content":"2. __Delete an appointment__","lastModifiedDate":"2024-03-04"},{"lineNumber":25,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":26,"author":{"gitId":"Ella-e"},"content":"* What it does: allows the user to delete an appointment by specifying the appointment index and the patient\u0027s name.","lastModifiedDate":"2024-03-04"},{"lineNumber":27,"author":{"gitId":"Ella-e"},"content":"* Justification: This feature improves the product significantly as it is the fundamental functions for the project.","lastModifiedDate":"2024-03-04"},{"lineNumber":28,"author":{"gitId":"Ella-e"},"content":"* Credits:","lastModifiedDate":"2024-03-04"},{"lineNumber":29,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":30,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":31,"author":{"gitId":"Ella-e"},"content":"3. __List appointments__","lastModifiedDate":"2024-03-04"},{"lineNumber":32,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":33,"author":{"gitId":"Ella-e"},"content":"* What it does: allows the user to list out all the upcoming appointments that ordering by time.","lastModifiedDate":"2024-03-04"},{"lineNumber":34,"author":{"gitId":"Ella-e"},"content":"* Justification: This feature improves the product significantly as it is the fundamental functions for the project.","lastModifiedDate":"2024-03-04"},{"lineNumber":35,"author":{"gitId":"Ella-e"},"content":"* Credits:","lastModifiedDate":"2024-03-04"},{"lineNumber":36,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":37,"author":{"gitId":"Ella-e"},"content":"### **Documentation**:","lastModifiedDate":"2024-03-04"},{"lineNumber":38,"author":{"gitId":"Ella-e"},"content":"User Guide:","lastModifiedDate":"2024-03-04"},{"lineNumber":39,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":40,"author":{"gitId":"Ella-e"},"content":"* Added documentation for the features `Create Appointments`, `Delete Appointments` and `List Appointments` [\\#72]()","lastModifiedDate":"2024-03-04"},{"lineNumber":41,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":42,"author":{"gitId":"Ella-e"},"content":"","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"Ella-e":42}},{"path":"docs/team/mayuehan.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"MaYuehan"},"content":"---","lastModifiedDate":"2024-02-25"},{"lineNumber":2,"author":{"gitId":"MaYuehan"},"content":"layout: page","lastModifiedDate":"2024-02-25"},{"lineNumber":3,"author":{"gitId":"MaYuehan"},"content":"title: Ma Yuehan\u0027s Project Portfolio Page","lastModifiedDate":"2024-02-25"},{"lineNumber":4,"author":{"gitId":"MaYuehan"},"content":"---","lastModifiedDate":"2024-02-25"},{"lineNumber":5,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":6,"author":{"gitId":"MaYuehan"},"content":"## Project: VitalConnect","lastModifiedDate":"2024-02-25"},{"lineNumber":7,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"MaYuehan"},"content":"This product is doctors or any healthcare workers that have to keep track of a lot ","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"MaYuehan"},"content":"of patient information and requires the information at a fast pace, ","lastModifiedDate":"2024-02-25"},{"lineNumber":10,"author":{"gitId":"MaYuehan"},"content":"thus preferring to have a simple UI such as a CLI instead of a complex GUI, ","lastModifiedDate":"2024-02-25"},{"lineNumber":11,"author":{"gitId":"MaYuehan"},"content":"with the added benefit of having typed user commands for an even faster retrieval of information.","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"MaYuehan"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"MaYuehan"},"content":"### **New Feature**: ","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"MaYuehan"},"content":"1. __Create an appointment__","lastModifiedDate":"2024-02-25"},{"lineNumber":18,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":19,"author":{"gitId":"MaYuehan"},"content":"* What it does: allows the user to create an appointment for a patient with the time and date.","lastModifiedDate":"2024-02-25"},{"lineNumber":20,"author":{"gitId":"MaYuehan"},"content":"* Justification: This feature improves the product significantly as it is the fundamental functions for the project.","lastModifiedDate":"2024-02-25"},{"lineNumber":21,"author":{"gitId":"MaYuehan"},"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-02-25"},{"lineNumber":22,"author":{"gitId":"MaYuehan"},"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-02-25"},{"lineNumber":23,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":24,"author":{"gitId":"MaYuehan"},"content":"2. __Delete an appointment__","lastModifiedDate":"2024-02-25"},{"lineNumber":25,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":26,"author":{"gitId":"MaYuehan"},"content":"* What it does: allows the user to delete an appointment by specifying the appointment index and the patient\u0027s name.","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"MaYuehan"},"content":"* Justification: This feature improves the product significantly as it is the fundamental functions for the project.","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"MaYuehan"},"content":"* Credits:","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"MaYuehan"},"content":"3. __List appointments__","lastModifiedDate":"2024-02-25"},{"lineNumber":32,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"MaYuehan"},"content":"* What it does: allows the user to list out all the upcoming appointments that ordering by time.","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"MaYuehan"},"content":"* Justification: This feature improves the product significantly as it is the fundamental functions for the project.","lastModifiedDate":"2024-02-25"},{"lineNumber":35,"author":{"gitId":"MaYuehan"},"content":"* Credits:","lastModifiedDate":"2024-02-25"},{"lineNumber":36,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"MaYuehan"},"content":"### **Documentation**:","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"MaYuehan"},"content":"User Guide:","lastModifiedDate":"2024-02-25"},{"lineNumber":39,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":40,"author":{"gitId":"MaYuehan"},"content":"* Added documentation for the features `Create Appointments`, `Delete Appointments` and `List Appointments` [\\#72]()","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"MaYuehan"},"content":"","lastModifiedDate":"2024-02-25"}],"authorContributionMap":{"MaYuehan":42}}] diff --git a/AY2324S2-CS2103T-W08-2_tp_master/commits.json b/AY2324S2-CS2103T-W08-2_tp_master/commits.json index 095c8207..8ee4d065 100644 --- a/AY2324S2-CS2103T-W08-2_tp_master/commits.json +++ b/AY2324S2-CS2103T-W08-2_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"javierng2knus":[],"MaYuehan":[{"date":"2024-02-25","commitResults":[{"hash":"c65d82151bc280716b9fe72527033275eaa16b67","isMergeCommit":false,"messageTitle":"Update Readme and AboutUs Modify the Readme file, add more details about the project and the features we plan to achieve for v1.2. Also modify the AboutUs file, add the information of mine. Create my profile file and link to AboutUs.","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":130,"deletions":6}}}]}],"Ella-e":[{"date":"2024-03-04","commitResults":[{"hash":"88928392b502c29986859c42ae863abd6c573eb0","isMergeCommit":false,"messageTitle":"Update NFRs to the DG","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":580,"deletions":0},"docs":{"insertions":15,"deletions":4}}},{"hash":"9f1b36aa95883a953e163177c02b608df0fc9741","isMergeCommit":true,"messageTitle":"Merge","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"80330bd7de96af545b73b260d978a38b4266f6a6","isMergeCommit":false,"messageTitle":"Update User Story","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":35,"deletions":9}}},{"hash":"8c20a6b890d2562d007f15710a1ea3c12180f395","isMergeCommit":false,"messageTitle":"Update Use case","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":116,"deletions":20}}},{"hash":"ea0a4cfa9b5323ceedb52cbba54a5d32884e0cc3","isMergeCommit":true,"messageTitle":"Merge branch \u0027developer-guide\u0027","messageBody":"Update the User Story and Use case section of the Developer Guide.\n","fileTypesAndContributionMap":{}},{"hash":"c63f5bed507ded44d8db7c5c1629e76f3abdfe27","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027","messageBody":"Update the local fork version.\n","fileTypesAndContributionMap":{}},{"hash":"0eeaf9201a4b1469e3efbcb845059af5d4367e48","isMergeCommit":false,"messageTitle":"Update information into AboutUs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":47,"deletions":4}}},{"hash":"9fbb4d4dc65acefe4ee86a183dd670e9ff309840","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027","messageBody":"Update\n","fileTypesAndContributionMap":{}},{"hash":"44996ce5a2e991f37a33d3531a15411b9f8e9f0e","isMergeCommit":false,"messageTitle":"Update personal portfolio page","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]}],"SeaHogs":[{"date":"2024-03-04","commitResults":[{"hash":"149a1660765b9560dd0c1fb9eac105199da52033","isMergeCommit":true,"messageTitle":"Merge pull request #29 from Ella-e/master","messageBody":"Update Developer Guide","fileTypesAndContributionMap":{}},{"hash":"730cbb618f6a85fb57b37f018abc6ed847b48b8a","isMergeCommit":true,"messageTitle":"Merge pull request #30 from Ella-e/master","messageBody":"Update AboutUs page","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"javierng2knus":{"docs":0,"functional-code":0,"test-code":0},"MaYuehan":{"docs":130,"functional-code":0,"test-code":0},"Ella-e":{"docs":204,"functional-code":0,"test-code":0,"other":580},"SeaHogs":{"docs":0,"functional-code":0,"test-code":0}},"authorContributionVariance":{"javierng2knus":0.0,"MaYuehan":1528.5952,"Ella-e":57208.598,"SeaHogs":0.0},"authorDisplayNameMap":{"javierng2knus":"CS2103T-W08-2 NG W..VIER","MaYuehan":"CS2103T-W08-2 MA Y..EHAN","Ella-e":"CS2103T-W08-2 MU Z..AOYU","SeaHogs":"CS2103T-W08-2 LAI ..IWEN"}} +{"authorDailyContributionsMap":{"javierng2knus":[{"date":"2024-03-06","commitResults":[{"hash":"088a7db21464bbc65dd5ada35bae72aefe113f5c","isMergeCommit":false,"messageTitle":"Update the AboutUs page","messageBody":"Update the AboutUs page to include my own information and image.\n\nResponsibility is left blank as the responsibilities will need to properly reassigned in a future date.\n","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":6}}}]}],"MaYuehan":[{"date":"2024-02-25","commitResults":[{"hash":"c65d82151bc280716b9fe72527033275eaa16b67","isMergeCommit":false,"messageTitle":"Update Readme and AboutUs Modify the Readme file, add more details about the project and the features we plan to achieve for v1.2. Also modify the AboutUs file, add the information of mine. Create my profile file and link to AboutUs.","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":130,"deletions":6}}}]}],"Ella-e":[{"date":"2024-03-04","commitResults":[{"hash":"88928392b502c29986859c42ae863abd6c573eb0","isMergeCommit":false,"messageTitle":"Update NFRs to the DG","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":580,"deletions":0},"docs":{"insertions":15,"deletions":4}}},{"hash":"9f1b36aa95883a953e163177c02b608df0fc9741","isMergeCommit":true,"messageTitle":"Merge","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"80330bd7de96af545b73b260d978a38b4266f6a6","isMergeCommit":false,"messageTitle":"Update User Story","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":35,"deletions":9}}},{"hash":"8c20a6b890d2562d007f15710a1ea3c12180f395","isMergeCommit":false,"messageTitle":"Update Use case","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":116,"deletions":20}}},{"hash":"ea0a4cfa9b5323ceedb52cbba54a5d32884e0cc3","isMergeCommit":true,"messageTitle":"Merge branch \u0027developer-guide\u0027","messageBody":"Update the User Story and Use case section of the Developer Guide.\n","fileTypesAndContributionMap":{}},{"hash":"c63f5bed507ded44d8db7c5c1629e76f3abdfe27","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027","messageBody":"Update the local fork version.\n","fileTypesAndContributionMap":{}},{"hash":"0eeaf9201a4b1469e3efbcb845059af5d4367e48","isMergeCommit":false,"messageTitle":"Update information into AboutUs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":47,"deletions":4}}},{"hash":"9fbb4d4dc65acefe4ee86a183dd670e9ff309840","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027","messageBody":"Update\n","fileTypesAndContributionMap":{}},{"hash":"44996ce5a2e991f37a33d3531a15411b9f8e9f0e","isMergeCommit":false,"messageTitle":"Update personal portfolio page","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2024-03-06","commitResults":[{"hash":"ead282bc2fdba495b980e4d32537f61a8fa45004","isMergeCommit":true,"messageTitle":"Merge pull request #34 from javierng2knus/javierng2knus-aboutus","messageBody":"Update the AboutUs page","fileTypesAndContributionMap":{}},{"hash":"07eecd85bcea003773547341ccf254978cee3d48","isMergeCommit":true,"messageTitle":"Merge pull request #35 from javierng2knus/javierng2knus-site-wide-settings","messageBody":"Update site-wide settings","fileTypesAndContributionMap":{}}]}],"SeaHogs":[{"date":"2024-03-04","commitResults":[{"hash":"149a1660765b9560dd0c1fb9eac105199da52033","isMergeCommit":true,"messageTitle":"Merge pull request #29 from Ella-e/master","messageBody":"Update Developer Guide","fileTypesAndContributionMap":{}},{"hash":"730cbb618f6a85fb57b37f018abc6ed847b48b8a","isMergeCommit":true,"messageTitle":"Merge pull request #30 from Ella-e/master","messageBody":"Update AboutUs page","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"javierng2knus":{"docs":6,"functional-code":0,"test-code":0},"MaYuehan":{"docs":130,"functional-code":0,"test-code":0},"Ella-e":{"docs":204,"functional-code":0,"test-code":0,"other":580},"SeaHogs":{"docs":0,"functional-code":0,"test-code":0}},"authorContributionVariance":{"javierng2knus":10.224853,"MaYuehan":1313.3251,"Ella-e":49152.0,"SeaHogs":0.0},"authorDisplayNameMap":{"javierng2knus":"CS2103T-W08-2 NG W..VIER","MaYuehan":"CS2103T-W08-2 MA Y..EHAN","Ella-e":"CS2103T-W08-2 MU Z..AOYU","SeaHogs":"CS2103T-W08-2 LAI ..IWEN"}} diff --git a/AY2324S2-CS2103T-W10-4_tp_master/authorship.json b/AY2324S2-CS2103T-W10-4_tp_master/authorship.json index 3bb21dcd..647eba26 100644 --- a/AY2324S2-CS2103T-W10-4_tp_master/authorship.json +++ b/AY2324S2-CS2103T-W10-4_tp_master/authorship.json @@ -1 +1 @@ -[{"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":"doyelee0313"},"content":"### Doye Lee","lastModifiedDate":"2024-03-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"doyelee0313"},"content":"\u003cimg src\u003d\"images/doyelee0313.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"doyelee0313"},"content":"[[github](https://github.com/doyelee0313)]","lastModifiedDate":"2024-03-05"},{"lineNumber":19,"author":{"gitId":"doyelee0313"},"content":"[[portfolio](team/doyelee0313.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":"doyelee0313"},"content":"* Responsibilities: Development + UI + Documentation","lastModifiedDate":"2024-03-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":"### Jane Doe","lastModifiedDate":"2020-06-17"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/johndoe.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2020-06-17"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":"[[github](http://github.com/johndoe)]","lastModifiedDate":"2020-06-17"},{"lineNumber":29,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"-"},"content":"* Role: Team Lead","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"-"},"content":"* Responsibilities: UI","lastModifiedDate":"2020-05-23"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"STELLA-LYE"},"content":"### Stella Lye Si Yu","lastModifiedDate":"2024-03-04"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"STELLA-LYE"},"content":"\u003cimg src\u003d\"images/STELLA-LYE.jpg\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"STELLA-LYE"},"content":"[[homepage](http://STELLA-LYE.github.io)]","lastModifiedDate":"2024-03-04"},{"lineNumber":39,"author":{"gitId":"STELLA-LYE"},"content":"[[github](https://github.com/STELLA-LYE)] ","lastModifiedDate":"2024-03-04"},{"lineNumber":40,"author":{"gitId":"STELLA-LYE"},"content":"[[portfolio](team/STELLA-LYE.md)]","lastModifiedDate":"2024-03-04"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"STELLA-LYE"},"content":"* Responsibilities: Dev Ops + Development + UI","lastModifiedDate":"2024-03-04"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"tohlh"},"content":"### Toh Li Heng","lastModifiedDate":"2024-03-04"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"tohlh"},"content":"\u003cimg src\u003d\"images/tohlh.jpg\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"tohlh"},"content":"[[homepage](http://tohlh.github.io)]","lastModifiedDate":"2024-03-04"},{"lineNumber":50,"author":{"gitId":"tohlh"},"content":"[[github](http://github.com/tohlh)]","lastModifiedDate":"2024-03-04"},{"lineNumber":51,"author":{"gitId":"tohlh"},"content":"[[portfolio](team/tohlh.md)]","lastModifiedDate":"2024-03-04"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"tohlh"},"content":"* Responsibilities: Dev Ops + Development","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"doyelee0313":5,"STELLA-LYE":6,"-":37,"tohlh":6}},{"path":"docs/team/STELLA-LYE.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"STELLA-LYE"},"content":"---","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"STELLA-LYE"},"content":"layout: default.md","lastModifiedDate":"2024-03-04"},{"lineNumber":3,"author":{"gitId":"STELLA-LYE"},"content":"title: \"Stella\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-04"},{"lineNumber":4,"author":{"gitId":"STELLA-LYE"},"content":"---","lastModifiedDate":"2024-03-04"},{"lineNumber":5,"author":{"gitId":"STELLA-LYE"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":6,"author":{"gitId":"STELLA-LYE"},"content":"### Project: AddressBook Level 3","lastModifiedDate":"2024-03-04"},{"lineNumber":7,"author":{"gitId":"STELLA-LYE"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"STELLA-LYE"},"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":"STELLA-LYE"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":10,"author":{"gitId":"STELLA-LYE"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-03-04"},{"lineNumber":11,"author":{"gitId":"STELLA-LYE"},"content":"","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"STELLA-LYE":11}},{"path":"docs/team/doyelee0313.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"doyelee0313"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":2,"author":{"gitId":"doyelee0313"},"content":" layout: default.md","lastModifiedDate":"2024-03-05"},{"lineNumber":3,"author":{"gitId":"doyelee0313"},"content":" title: \"Doye\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-05"},{"lineNumber":4,"author":{"gitId":"doyelee0313"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":5,"author":{"gitId":"doyelee0313"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":6,"author":{"gitId":"doyelee0313"},"content":"### Project: AddressBook Level 3","lastModifiedDate":"2024-03-05"},{"lineNumber":7,"author":{"gitId":"doyelee0313"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":8,"author":{"gitId":"doyelee0313"},"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":"doyelee0313"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":10,"author":{"gitId":"doyelee0313"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-03-05"},{"lineNumber":11,"author":{"gitId":"doyelee0313"},"content":"","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"doyelee0313":11}},{"path":"docs/team/tohlh.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"tohlh"},"content":"---","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"tohlh"},"content":" layout: default.md","lastModifiedDate":"2024-03-04"},{"lineNumber":3,"author":{"gitId":"tohlh"},"content":" title: \"Li Heng\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-04"},{"lineNumber":4,"author":{"gitId":"tohlh"},"content":"---","lastModifiedDate":"2024-03-04"},{"lineNumber":5,"author":{"gitId":"tohlh"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":6,"author":{"gitId":"tohlh"},"content":"### Project: AddressBook Level 3","lastModifiedDate":"2024-03-04"},{"lineNumber":7,"author":{"gitId":"tohlh"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"tohlh"},"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":"tohlh"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":10,"author":{"gitId":"tohlh"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-03-04"},{"lineNumber":11,"author":{"gitId":"tohlh"},"content":"","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"tohlh":11}}] +[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"doyelee0313"},"content":"[![CI Status](https://github.com/se-edu/addressbook-level3/workflows/Java%20CI/badge.svg)](https://github.com/AY2324S2-CS2103T-W10-4/tp/actions)","lastModifiedDate":"2024-03-06"},{"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":"doyelee0313"},"content":"# TutorsContactsPro","lastModifiedDate":"2024-03-06"},{"lineNumber":6,"author":{"gitId":"doyelee0313"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":7,"author":{"gitId":"doyelee0313"},"content":"* TutorsContactsPro is a app for computer science tutor managing students for tutorials (all cs course or type of teaching)","lastModifiedDate":"2024-03-06"},{"lineNumber":8,"author":{"gitId":"doyelee0313"},"content":"* TutorsContactsPro allows tutors to have faster and more convenient access to their list of students (from different classes), optimized for those who prefer a clean UI with the use of CLI.","lastModifiedDate":"2024-03-06"},{"lineNumber":9,"author":{"gitId":"doyelee0313"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":10,"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":11,"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":12,"author":{"gitId":"-"},"content":" * It comes with a **reasonable level of user and developer documentation**.","lastModifiedDate":"2020-05-23"},{"lineNumber":13,"author":{"gitId":"doyelee0313"},"content":"* It is named `TutorsContactsPro` (`TCP` for short) which means it is a pro-version app for tutors to manage their students","lastModifiedDate":"2024-03-06"},{"lineNumber":14,"author":{"gitId":"doyelee0313"},"content":"* For the detailed documentation of this project, see the **[Address Book Product Website](https://ay2324s2-cs2103t-w10-4.github.io/tp/index.html)**.","lastModifiedDate":"2024-03-06"},{"lineNumber":15,"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"},{"lineNumber":16,"author":{"gitId":"doyelee0313"},"content":"* This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-03-06"}],"authorContributionMap":{"doyelee0313":9,"-":7}},{"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":"doyelee0313"},"content":"### Doye Lee","lastModifiedDate":"2024-03-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"doyelee0313"},"content":"\u003cimg src\u003d\"images/doyelee0313.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"doyelee0313"},"content":"[[github](https://github.com/doyelee0313)]","lastModifiedDate":"2024-03-05"},{"lineNumber":19,"author":{"gitId":"doyelee0313"},"content":"[[portfolio](team/doyelee0313.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":"doyelee0313"},"content":"* Responsibilities: Development + UI + Documentation","lastModifiedDate":"2024-03-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":"### Jane Doe","lastModifiedDate":"2020-06-17"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/johndoe.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2020-06-17"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":"[[github](http://github.com/johndoe)]","lastModifiedDate":"2020-06-17"},{"lineNumber":29,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"-"},"content":"* Role: Team Lead","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"-"},"content":"* Responsibilities: UI","lastModifiedDate":"2020-05-23"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"STELLA-LYE"},"content":"### Stella Lye Si Yu","lastModifiedDate":"2024-03-04"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"STELLA-LYE"},"content":"\u003cimg src\u003d\"images/STELLA-LYE.jpg\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"STELLA-LYE"},"content":"[[homepage](http://STELLA-LYE.github.io)]","lastModifiedDate":"2024-03-04"},{"lineNumber":39,"author":{"gitId":"STELLA-LYE"},"content":"[[github](https://github.com/STELLA-LYE)] ","lastModifiedDate":"2024-03-04"},{"lineNumber":40,"author":{"gitId":"STELLA-LYE"},"content":"[[portfolio](team/STELLA-LYE.md)]","lastModifiedDate":"2024-03-04"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"STELLA-LYE"},"content":"* Responsibilities: Dev Ops + Development + UI","lastModifiedDate":"2024-03-04"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"tohlh"},"content":"### Toh Li Heng","lastModifiedDate":"2024-03-04"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"tohlh"},"content":"\u003cimg src\u003d\"images/tohlh.jpg\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"tohlh"},"content":"[[homepage](http://tohlh.github.io)]","lastModifiedDate":"2024-03-04"},{"lineNumber":50,"author":{"gitId":"tohlh"},"content":"[[github](http://github.com/tohlh)]","lastModifiedDate":"2024-03-04"},{"lineNumber":51,"author":{"gitId":"tohlh"},"content":"[[portfolio](team/tohlh.md)]","lastModifiedDate":"2024-03-04"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"tohlh"},"content":"* Responsibilities: Dev Ops + Development","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"doyelee0313":5,"STELLA-LYE":6,"-":37,"tohlh":6}},{"path":"docs/team/STELLA-LYE.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"STELLA-LYE"},"content":"---","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"STELLA-LYE"},"content":"layout: default.md","lastModifiedDate":"2024-03-04"},{"lineNumber":3,"author":{"gitId":"STELLA-LYE"},"content":"title: \"Stella\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-04"},{"lineNumber":4,"author":{"gitId":"STELLA-LYE"},"content":"---","lastModifiedDate":"2024-03-04"},{"lineNumber":5,"author":{"gitId":"STELLA-LYE"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":6,"author":{"gitId":"STELLA-LYE"},"content":"### Project: AddressBook Level 3","lastModifiedDate":"2024-03-04"},{"lineNumber":7,"author":{"gitId":"STELLA-LYE"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"STELLA-LYE"},"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":"STELLA-LYE"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":10,"author":{"gitId":"STELLA-LYE"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-03-04"},{"lineNumber":11,"author":{"gitId":"STELLA-LYE"},"content":"","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"STELLA-LYE":11}},{"path":"docs/team/doyelee0313.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"doyelee0313"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":2,"author":{"gitId":"doyelee0313"},"content":" layout: default.md","lastModifiedDate":"2024-03-05"},{"lineNumber":3,"author":{"gitId":"doyelee0313"},"content":" title: \"Doye\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-05"},{"lineNumber":4,"author":{"gitId":"doyelee0313"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":5,"author":{"gitId":"doyelee0313"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":6,"author":{"gitId":"doyelee0313"},"content":"### Project: AddressBook Level 3","lastModifiedDate":"2024-03-05"},{"lineNumber":7,"author":{"gitId":"doyelee0313"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":8,"author":{"gitId":"doyelee0313"},"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":"doyelee0313"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":10,"author":{"gitId":"doyelee0313"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-03-05"},{"lineNumber":11,"author":{"gitId":"doyelee0313"},"content":"","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"doyelee0313":11}},{"path":"docs/team/tohlh.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"tohlh"},"content":"---","lastModifiedDate":"2024-03-04"},{"lineNumber":2,"author":{"gitId":"tohlh"},"content":" layout: default.md","lastModifiedDate":"2024-03-04"},{"lineNumber":3,"author":{"gitId":"tohlh"},"content":" title: \"Li Heng\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-04"},{"lineNumber":4,"author":{"gitId":"tohlh"},"content":"---","lastModifiedDate":"2024-03-04"},{"lineNumber":5,"author":{"gitId":"tohlh"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":6,"author":{"gitId":"tohlh"},"content":"### Project: AddressBook Level 3","lastModifiedDate":"2024-03-04"},{"lineNumber":7,"author":{"gitId":"tohlh"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"tohlh"},"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":"tohlh"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":10,"author":{"gitId":"tohlh"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-03-04"},{"lineNumber":11,"author":{"gitId":"tohlh"},"content":"","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"tohlh":11}}] diff --git a/AY2324S2-CS2103T-W10-4_tp_master/commits.json b/AY2324S2-CS2103T-W10-4_tp_master/commits.json index 48f26360..45491097 100644 --- a/AY2324S2-CS2103T-W10-4_tp_master/commits.json +++ b/AY2324S2-CS2103T-W10-4_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"doyelee0313":[{"date":"2024-03-05","commitResults":[{"hash":"21e7fd316d98570476976d8bfa3a73cc647c0439","isMergeCommit":false,"messageTitle":"Update Doye AboutUs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":16,"deletions":15}}}]}],"STELLA-LYE":[{"date":"2024-03-04","commitResults":[{"hash":"09ba9eb1ce42d538c3a5ccc09292c0b27252ceb3","isMergeCommit":true,"messageTitle":"Merge pull request #6 from tohlh/update-about-me","messageBody":"Add tohlh\u0027s personal info","fileTypesAndContributionMap":{}},{"hash":"a79bf0389bed7ba3dfee07f868f51863ca55fa37","isMergeCommit":false,"messageTitle":"Update Stella AboutUs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":17,"deletions":4}}}]}],"jocelyn-soh":[],"tohlh":[{"date":"2024-03-04","commitResults":[{"hash":"558a8e598a3c6d1e65235ce3657ed47ef99709d2","isMergeCommit":true,"messageTitle":"Merge pull request #1 from AY2324S2-CS2103T-W10-4/switch-docs-to-markbind","messageBody":"Switch docs to markbind","fileTypesAndContributionMap":{}},{"hash":"b225ac386ca9d8d71bdfb4561bc458d960f69a45","isMergeCommit":false,"messageTitle":"Add tohlh\u0027s personal info","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":17,"deletions":5}}}]},{"date":"2024-03-05","commitResults":[{"hash":"ba5c14fb443856d3fb504f76b5bac2c036f0004a","isMergeCommit":true,"messageTitle":"Merge pull request #7 from STELLA-LYE/Update-AboutUs","messageBody":"Update Stella AboutUs","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"doyelee0313":{"docs":16,"functional-code":0,"test-code":0},"STELLA-LYE":{"docs":17,"functional-code":0,"test-code":0},"jocelyn-soh":{"docs":0,"functional-code":0,"test-code":0},"tohlh":{"docs":17,"functional-code":0,"test-code":0}},"authorContributionVariance":{"doyelee0313":73.40972,"STELLA-LYE":33.6875,"jocelyn-soh":0.0,"tohlh":36.97222},"authorDisplayNameMap":{"doyelee0313":"CS2103T-W10-4 LEE ..DOYE","STELLA-LYE":"CS2103T-W10-4 STEL..I YU","jocelyn-soh":"CS2103T-W10-4 SOH ..ELYN","tohlh":"CS2103T-W10-4 TOH ..HENG"}} +{"authorDailyContributionsMap":{"doyelee0313":[{"date":"2024-03-05","commitResults":[{"hash":"21e7fd316d98570476976d8bfa3a73cc647c0439","isMergeCommit":false,"messageTitle":"Update Doye AboutUs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":16,"deletions":15}}}]},{"date":"2024-03-06","commitResults":[{"hash":"3cd2515a6a52d379fb164e314655685b905a8a78","isMergeCommit":false,"messageTitle":"Updated README","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":9,"deletions":7}}}]}],"STELLA-LYE":[{"date":"2024-03-04","commitResults":[{"hash":"09ba9eb1ce42d538c3a5ccc09292c0b27252ceb3","isMergeCommit":true,"messageTitle":"Merge pull request #6 from tohlh/update-about-me","messageBody":"Add tohlh\u0027s personal info","fileTypesAndContributionMap":{}},{"hash":"a79bf0389bed7ba3dfee07f868f51863ca55fa37","isMergeCommit":false,"messageTitle":"Update Stella AboutUs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":17,"deletions":4}}}]}],"jocelyn-soh":[],"tohlh":[{"date":"2024-03-04","commitResults":[{"hash":"558a8e598a3c6d1e65235ce3657ed47ef99709d2","isMergeCommit":true,"messageTitle":"Merge pull request #1 from AY2324S2-CS2103T-W10-4/switch-docs-to-markbind","messageBody":"Switch docs to markbind","fileTypesAndContributionMap":{}},{"hash":"b225ac386ca9d8d71bdfb4561bc458d960f69a45","isMergeCommit":false,"messageTitle":"Add tohlh\u0027s personal info","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":17,"deletions":5}}}]},{"date":"2024-03-05","commitResults":[{"hash":"ba5c14fb443856d3fb504f76b5bac2c036f0004a","isMergeCommit":true,"messageTitle":"Merge pull request #7 from STELLA-LYE/Update-AboutUs","messageBody":"Update Stella AboutUs","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"doyelee0313":{"docs":25,"functional-code":0,"test-code":0},"STELLA-LYE":{"docs":17,"functional-code":0,"test-code":0},"jocelyn-soh":{"docs":0,"functional-code":0,"test-code":0},"tohlh":{"docs":17,"functional-code":0,"test-code":0}},"authorContributionVariance":{"doyelee0313":80.54438,"STELLA-LYE":31.313608,"jocelyn-soh":0.0,"tohlh":34.36686},"authorDisplayNameMap":{"doyelee0313":"CS2103T-W10-4 LEE ..DOYE","STELLA-LYE":"CS2103T-W10-4 STEL..I YU","jocelyn-soh":"CS2103T-W10-4 SOH ..ELYN","tohlh":"CS2103T-W10-4 TOH ..HENG"}} diff --git a/AY2324S2-CS2103T-W11-3_tp_master/authorship.json b/AY2324S2-CS2103T-W11-3_tp_master/authorship.json index e3f37551..62bf8fbc 100644 --- a/AY2324S2-CS2103T-W11-3_tp_master/authorship.json +++ b/AY2324S2-CS2103T-W11-3_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":"[![codecov](https://codecov.io/gh/AY2324S2-CS2103T-W11-3/tp/graph/badge.svg?token\u003dF7G5FM6BNJ)](https://codecov.io/gh/AY2324S2-CS2103T-W11-3/tp)","lastModifiedDate":"2024-02-16"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-16"},{"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":"cyqjoseph"},"content":"* This is an application for **NUS School of Computing (SoC) students to find contacts within SoC** and **book consultation slots with Professors and Teaching Assistants**.\u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"-"},"content":" Example usages:","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"cyqjoseph"},"content":" * retrieves all contact details of a user within NUS SoC","lastModifiedDate":"2024-03-04"},{"lineNumber":10,"author":{"gitId":"cyqjoseph"},"content":" * create and delete user contact details","lastModifiedDate":"2024-03-04"},{"lineNumber":11,"author":{"gitId":"cyqjoseph"},"content":" * retrieves all consultation timings of a user","lastModifiedDate":"2024-03-04"},{"lineNumber":12,"author":{"gitId":"cyqjoseph"},"content":" * create and delete consultation timings","lastModifiedDate":"2024-03-04"},{"lineNumber":13,"author":{"gitId":"cyqjoseph"},"content":"* The project is an ongoing software project for a desktop application (called _Dook_) used for managing contact details.","lastModifiedDate":"2024-03-04"},{"lineNumber":14,"author":{"gitId":"cyqjoseph"},"content":" * It is built on the AddressBook-Level3 project.","lastModifiedDate":"2024-03-04"},{"lineNumber":15,"author":{"gitId":"cyqjoseph"},"content":" * It is **written in OOP fashion**. It provides a **reasonably well-written** code base **bigger** than what students usually write in beginner-level SE modules, without being overwhelmingly big.","lastModifiedDate":"2024-03-04"},{"lineNumber":16,"author":{"gitId":"cyqjoseph"},"content":"* It is named `Dook` because it is a moniker from the individual project (iP) that all CS2103T students do.","lastModifiedDate":"2024-03-04"},{"lineNumber":17,"author":{"gitId":"cyqjoseph"},"content":"* For the detailed documentation of this project, see the **[User Guide](https://github.com/AY2324S2-CS2103T-W11-3/tp/blob/master/docs/UserGuide.md)**, or the **[Developer Guide](https://github.com/AY2324S2-CS2103T-W11-3/tp/blob/master/docs/DeveloperGuide.md)** if you are interested in contributing to Dook.","lastModifiedDate":"2024-03-04"},{"lineNumber":18,"author":{"gitId":"cyqjoseph"},"content":"* This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"cyqjoseph":11,"-":7}},{"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":"cyqjoseph"},"content":"### Joseph Chan ","lastModifiedDate":"2024-02-28"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":14,"author":{"gitId":"cyqjoseph"},"content":"\u003cimg src\u003d\"images/cyqjoseph.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-28"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"cyqjoseph"},"content":"[[github](https://github.com/cyqjoseph)]","lastModifiedDate":"2024-02-28"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"cyqjoseph"},"content":"* Role: Developer ","lastModifiedDate":"2024-02-28"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"cyqjoseph"},"content":"### Wang Minhong","lastModifiedDate":"2024-02-28"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"cyqjoseph"},"content":"\u003cimg src\u003d\"images/chrysanthemumt.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-28"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"cyqjoseph"},"content":"[[github](http://github.com/chrysanthemumt)]","lastModifiedDate":"2024-02-28"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"cyqjoseph"},"content":"* Role: Developer","lastModifiedDate":"2024-02-28"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"jerremyng"},"content":"### Jerremy Ng","lastModifiedDate":"2024-02-28"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"jerremyng"},"content":"\u003cimg src\u003d\"images/jerremyng.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-28"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"jerremyng"},"content":"[[github](http://github.com/jerremyng)]","lastModifiedDate":"2024-02-28"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":35,"author":{"gitId":"jerremyng"},"content":"* Responsibilities: Code","lastModifiedDate":"2024-02-28"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":37,"author":{"gitId":"gauravuj"},"content":"### Ujjwal Gaurav","lastModifiedDate":"2024-02-28"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"gauravuj"},"content":"\u003cimg src\u003d\"images/gauravuj.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-28"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":41,"author":{"gitId":"gauravuj"},"content":"[[github](http://github.com/gauravuj)]","lastModifiedDate":"2024-02-28"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"gauravuj"},"content":"* Role: ","lastModifiedDate":"2024-02-28"},{"lineNumber":44,"author":{"gitId":"gauravuj"},"content":"* Responsibilities: ","lastModifiedDate":"2024-02-28"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"zhenghuil"},"content":"### Low Zheng Hui","lastModifiedDate":"2024-02-28"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"zhenghuil"},"content":"\u003cimg src\u003d\"images/zhenghuil.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-28"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":50,"author":{"gitId":"zhenghuil"},"content":"[[github](https://github.com/zhenghuil)]","lastModifiedDate":"2024-02-28"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"jerremyng":4,"gauravuj":5,"cyqjoseph":8,"-":32,"zhenghuil":3}}] +[{"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":"[![codecov](https://codecov.io/gh/AY2324S2-CS2103T-W11-3/tp/graph/badge.svg?token\u003dF7G5FM6BNJ)](https://codecov.io/gh/AY2324S2-CS2103T-W11-3/tp)","lastModifiedDate":"2024-02-16"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-16"},{"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":"cyqjoseph"},"content":"* This is an application for **NUS School of Computing (SoC) students to find contacts within SoC** and **book consultation slots with Professors and Teaching Assistants**.\u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"-"},"content":" Example usages:","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"cyqjoseph"},"content":" * retrieves all contact details of a user within NUS SoC","lastModifiedDate":"2024-03-04"},{"lineNumber":10,"author":{"gitId":"cyqjoseph"},"content":" * create and delete user contact details","lastModifiedDate":"2024-03-04"},{"lineNumber":11,"author":{"gitId":"cyqjoseph"},"content":" * retrieves all consultation timings of a user","lastModifiedDate":"2024-03-04"},{"lineNumber":12,"author":{"gitId":"cyqjoseph"},"content":" * create and delete consultation timings","lastModifiedDate":"2024-03-04"},{"lineNumber":13,"author":{"gitId":"cyqjoseph"},"content":"* The project is an ongoing software project for a desktop application (called _Dook_) used for managing contact details.","lastModifiedDate":"2024-03-04"},{"lineNumber":14,"author":{"gitId":"cyqjoseph"},"content":" * It is built on the AddressBook-Level3 project.","lastModifiedDate":"2024-03-04"},{"lineNumber":15,"author":{"gitId":"cyqjoseph"},"content":" * It is **written in OOP fashion**. It provides a **reasonably well-written** code base **bigger** than what students usually write in beginner-level SE modules, without being overwhelmingly big.","lastModifiedDate":"2024-03-04"},{"lineNumber":16,"author":{"gitId":"cyqjoseph"},"content":"* It is named `Dook` because it is a moniker from the individual project (iP) that all CS2103T students do.","lastModifiedDate":"2024-03-04"},{"lineNumber":17,"author":{"gitId":"cyqjoseph"},"content":"* For the detailed documentation of this project, see the **[User Guide](https://github.com/AY2324S2-CS2103T-W11-3/tp/blob/master/docs/UserGuide.md)**, or the **[Developer Guide](https://github.com/AY2324S2-CS2103T-W11-3/tp/blob/master/docs/DeveloperGuide.md)** if you are interested in contributing to Dook.","lastModifiedDate":"2024-03-04"},{"lineNumber":18,"author":{"gitId":"cyqjoseph"},"content":"* This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"cyqjoseph":11,"-":7}},{"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":"cyqjoseph"},"content":"### Joseph Chan ","lastModifiedDate":"2024-02-28"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":14,"author":{"gitId":"cyqjoseph"},"content":"\u003cimg src\u003d\"images/cyqjoseph.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-28"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"cyqjoseph"},"content":"[[github](https://github.com/cyqjoseph)]","lastModifiedDate":"2024-02-28"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"cyqjoseph"},"content":"* Role: Developer ","lastModifiedDate":"2024-02-28"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"cyqjoseph"},"content":"### Wang Minhong","lastModifiedDate":"2024-02-28"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"cyqjoseph"},"content":"\u003cimg src\u003d\"images/chrysanthemumt.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-28"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"cyqjoseph"},"content":"[[github](http://github.com/chrysanthemumt)]","lastModifiedDate":"2024-02-28"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"cyqjoseph"},"content":"* Role: Developer","lastModifiedDate":"2024-02-28"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"jerremyng"},"content":"### Jerremy Ng","lastModifiedDate":"2024-02-28"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"jerremyng"},"content":"\u003cimg src\u003d\"images/jerremyng.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-28"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"jerremyng"},"content":"[[github](http://github.com/jerremyng)]","lastModifiedDate":"2024-02-28"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":35,"author":{"gitId":"jerremyng"},"content":"* Responsibilities: Code","lastModifiedDate":"2024-02-28"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":37,"author":{"gitId":"gauravuj"},"content":"### Ujjwal Gaurav","lastModifiedDate":"2024-02-28"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"gauravuj"},"content":"\u003cimg src\u003d\"images/gauravuj.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-28"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":41,"author":{"gitId":"gauravuj"},"content":"[[github](http://github.com/gauravuj)]","lastModifiedDate":"2024-02-28"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"gauravuj"},"content":"* Role: ","lastModifiedDate":"2024-02-28"},{"lineNumber":44,"author":{"gitId":"gauravuj"},"content":"* Responsibilities: ","lastModifiedDate":"2024-02-28"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"zhenghuil"},"content":"### Low Zheng Hui","lastModifiedDate":"2024-02-28"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"zhenghuil"},"content":"\u003cimg src\u003d\"images/zhenghuil.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-28"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":50,"author":{"gitId":"zhenghuil"},"content":"[[github](https://github.com/zhenghuil)]","lastModifiedDate":"2024-02-28"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"jerremyng":4,"gauravuj":5,"cyqjoseph":8,"-":32,"zhenghuil":3}},{"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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"content":"Classes used by multiple components are in the `seedu.addressbook.commons` package.","lastModifiedDate":"2020-05-23"},{"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":"-"},"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":163,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":164,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#commit()` — Saves the current address book state in its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":165,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#undo()` — Restores the previous address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":166,"author":{"gitId":"-"},"content":"* `VersionedAddressBook#redo()` — Restores a previously undone address book state from its history.","lastModifiedDate":"2020-05-23"},{"lineNumber":167,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":168,"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":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":"-"},"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":210,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":211,"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":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":"-"},"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":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":"-"},"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":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":"-"},"content":"* has a need to manage a significant number of contacts","lastModifiedDate":"2020-05-23"},{"lineNumber":266,"author":{"gitId":"-"},"content":"* prefer desktop apps over other types","lastModifiedDate":"2020-05-23"},{"lineNumber":267,"author":{"gitId":"-"},"content":"* can type fast","lastModifiedDate":"2020-05-23"},{"lineNumber":268,"author":{"gitId":"-"},"content":"* prefers typing to mouse interactions","lastModifiedDate":"2020-05-26"},{"lineNumber":269,"author":{"gitId":"-"},"content":"* is reasonably comfortable using CLI apps","lastModifiedDate":"2020-05-23"},{"lineNumber":270,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":271,"author":{"gitId":"-"},"content":"**Value proposition**: manage contacts faster than a typical mouse/GUI driven app","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":"### User stories","lastModifiedDate":"2020-06-07"},{"lineNumber":275,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":276,"author":{"gitId":"-"},"content":"Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unlikely to have) - `*`","lastModifiedDate":"2020-05-23"},{"lineNumber":277,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":278,"author":{"gitId":"-"},"content":"| Priority | As a …​ | I want to …​ | So that I can…​ |","lastModifiedDate":"2020-05-23"},{"lineNumber":279,"author":{"gitId":"ChrysanthemumT"},"content":"| -------- | ------------------------------ | ----------------------------------- | ---------------------------------------------------------------------- |","lastModifiedDate":"2024-03-05"},{"lineNumber":280,"author":{"gitId":"-"},"content":"| `* * *` | new user | see usage instructions | refer to instructions when I forget how to use the App |","lastModifiedDate":"2020-05-23"},{"lineNumber":281,"author":{"gitId":"ChrysanthemumT"},"content":"| `* * *` | user | add a contact | |","lastModifiedDate":"2024-03-05"},{"lineNumber":282,"author":{"gitId":"ChrysanthemumT"},"content":"| `* * *` | user | delete a contact | remove entries that I no longer need |","lastModifiedDate":"2024-03-05"},{"lineNumber":283,"author":{"gitId":"ChrysanthemumT"},"content":"| `* * *` | user | update a contact | |","lastModifiedDate":"2024-03-05"},{"lineNumber":284,"author":{"gitId":"ChrysanthemumT"},"content":"| `*` | user | delete all contacts | | ","lastModifiedDate":"2024-03-05"},{"lineNumber":285,"author":{"gitId":"ChrysanthemumT"},"content":"| `* * *` | user | view porfessors calendar | see the available timings |","lastModifiedDate":"2024-03-05"},{"lineNumber":286,"author":{"gitId":"ChrysanthemumT"},"content":"| `* * *` | user | view porfessors\u0027s office hours | know when to contact them |","lastModifiedDate":"2024-03-05"},{"lineNumber":287,"author":{"gitId":"ChrysanthemumT"},"content":"| `* * *` | user | view porfessors\u0027s office location | know where to find them | ","lastModifiedDate":"2024-03-05"},{"lineNumber":288,"author":{"gitId":"ChrysanthemumT"},"content":"| `* * *` | user | find a proff by name | locate details of persons without having to go through the entire list |","lastModifiedDate":"2024-03-05"},{"lineNumber":289,"author":{"gitId":"-"},"content":"| `* *` | user | hide private contact details | minimize chance of someone else seeing them by accident |","lastModifiedDate":"2020-05-23"},{"lineNumber":290,"author":{"gitId":"ChrysanthemumT"},"content":"| `*` | user | update my calendar | change my schedule |","lastModifiedDate":"2024-03-05"},{"lineNumber":291,"author":{"gitId":"ChrysanthemumT"},"content":"| `*` | user | create event/consultations | it can be recorded |","lastModifiedDate":"2024-03-05"},{"lineNumber":292,"author":{"gitId":"ChrysanthemumT"},"content":"| `*` | user | delete event | |","lastModifiedDate":"2024-03-05"},{"lineNumber":293,"author":{"gitId":"ChrysanthemumT"},"content":"| `*` | user | update event | |","lastModifiedDate":"2024-03-05"},{"lineNumber":294,"author":{"gitId":"ChrysanthemumT"},"content":"| `*` | user | view the current week\u0027s consults | change my schedule |","lastModifiedDate":"2024-03-05"},{"lineNumber":295,"author":{"gitId":"ChrysanthemumT"},"content":"| `*` | user | view a TA\u0027s calendar | book a consult |","lastModifiedDate":"2024-03-05"},{"lineNumber":296,"author":{"gitId":"ChrysanthemumT"},"content":"| `*` | user | generate email to contact | easily send out communications |","lastModifiedDate":"2024-03-05"},{"lineNumber":297,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":298,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":299,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":300,"author":{"gitId":"-"},"content":"### Use cases","lastModifiedDate":"2020-06-07"},{"lineNumber":301,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":302,"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":303,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":304,"author":{"gitId":"-"},"content":"**Use case: Delete a person**","lastModifiedDate":"2020-05-23"},{"lineNumber":305,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":306,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2020-05-23"},{"lineNumber":307,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":308,"author":{"gitId":"-"},"content":"1. User requests to list persons","lastModifiedDate":"2020-05-23"},{"lineNumber":309,"author":{"gitId":"-"},"content":"2. AddressBook shows a list of persons","lastModifiedDate":"2020-05-23"},{"lineNumber":310,"author":{"gitId":"-"},"content":"3. User requests to delete a specific person in the list","lastModifiedDate":"2020-05-23"},{"lineNumber":311,"author":{"gitId":"-"},"content":"4. AddressBook deletes the person","lastModifiedDate":"2020-05-23"},{"lineNumber":312,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":313,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":314,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":315,"author":{"gitId":"-"},"content":"**Extensions**","lastModifiedDate":"2020-05-23"},{"lineNumber":316,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":317,"author":{"gitId":"-"},"content":"* 2a. The list is empty.","lastModifiedDate":"2020-05-23"},{"lineNumber":318,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":319,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":320,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":321,"author":{"gitId":"-"},"content":"* 3a. The given index is invalid.","lastModifiedDate":"2020-05-23"},{"lineNumber":322,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":323,"author":{"gitId":"-"},"content":" * 3a1. AddressBook shows an error message.","lastModifiedDate":"2020-05-23"},{"lineNumber":324,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":325,"author":{"gitId":"-"},"content":" Use case resumes at step 2.","lastModifiedDate":"2020-05-23"},{"lineNumber":326,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":327,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":328,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":329,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":330,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":331,"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":332,"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":333,"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":334,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":335,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":336,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":337,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":338,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":339,"author":{"gitId":"-"},"content":"* **Mainstream OS**: Windows, Linux, Unix, MacOS","lastModifiedDate":"2024-02-09"},{"lineNumber":340,"author":{"gitId":"-"},"content":"* **Private contact detail**: A contact detail that is not meant to be shared with others","lastModifiedDate":"2020-05-23"},{"lineNumber":341,"author":{"gitId":"-"},"content":"","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":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":345,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":346,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":347,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":348,"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":349,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":350,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":351,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":352,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":353,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":354,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":355,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":356,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":357,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":358,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":359,"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":360,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":361,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":362,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":363,"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":364,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":365,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":366,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","lastModifiedDate":"2020-05-23"},{"lineNumber":367,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":368,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":369,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":370,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":371,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":372,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":373,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":374,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":375,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":376,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":377,"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":378,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":379,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":380,"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":381,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":382,"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":383,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":384,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":385,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":386,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":387,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":388,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":389,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":390,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":391,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":392,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":393,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"ChrysanthemumT":16,"-":377}}] diff --git a/AY2324S2-CS2103T-W11-3_tp_master/commits.json b/AY2324S2-CS2103T-W11-3_tp_master/commits.json index a09b3a21..ba4a746b 100644 --- a/AY2324S2-CS2103T-W11-3_tp_master/commits.json +++ b/AY2324S2-CS2103T-W11-3_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"jerremyng":[{"date":"2024-02-28","commitResults":[{"hash":"889511ed05a964435dfd3136f40f69c0754f3c92","isMergeCommit":false,"messageTitle":"Add personal details of Jerremy: closes #7","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":4}}}]}],"gauravuj":[{"date":"2024-02-28","commitResults":[{"hash":"8c16bbbce5b5fa9803456bbdd960fbaae7168ae3","isMergeCommit":false,"messageTitle":"Update profile picture and AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":6}}},{"hash":"eb1f408a80509bf8b3f615c47c7c54bf430c6f85","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-gauravuj-image","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5c3a552208e964a28b04dbc1c3a862ae7ca00091","isMergeCommit":true,"messageTitle":"Merge pull request #12 from gauravuj/branch-gauravuj-image","messageBody":"Add photo and update AboutUs.md","fileTypesAndContributionMap":{}}]}],"cyqjoseph":[{"date":"2024-02-28","commitResults":[{"hash":"f94fc1241549f9c67be3d7dfe0d7a2933c8de8ab","isMergeCommit":true,"messageTitle":"Merge pull request #13 from jerremyng/branch-Jerremy-Details","messageBody":"Add personal details of Jerremy: closes #7","fileTypesAndContributionMap":{}},{"hash":"8ff44952dca0a88517c34e6aafe9f2e897e32c85","isMergeCommit":false,"messageTitle":"Edit Aboutus.md close #15","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":8,"deletions":12}}}]},{"date":"2024-02-29","commitResults":[{"hash":"aa26a1159de9f17b4755f3b4f6d26d5cc1122d87","isMergeCommit":true,"messageTitle":"Merge pull request #21 from zhenghuil/zh-aboutus close #18","messageBody":"Zh aboutus","fileTypesAndContributionMap":{}}]},{"date":"2024-03-04","commitResults":[{"hash":"603b78d973c2cbf3e413023763a2d5377d32d7d4","isMergeCommit":false,"messageTitle":"Update first iteration of README.md to describe the product. clear #19","messageBody":"Remove details related to previous AddressBook-Level3 and replace with\ngroup product details.\n","fileTypesAndContributionMap":{"docs":{"insertions":11,"deletions":9}}},{"hash":"910cce7702d727a385768a5bf38331d1848a8d9d","isMergeCommit":true,"messageTitle":"Merge pull request #22 from cyqjoseph/branch-update-README-v1","messageBody":"Update first iteration of README.md to describe the product. clear #19","fileTypesAndContributionMap":{}}]}],"ChrysanthemumT":[{"date":"2024-02-28","commitResults":[{"hash":"3b944bac6abcf457ad7544d191b77bf8a3e3ff2f","isMergeCommit":true,"messageTitle":"Merge pull request #14 from ChrysanthemumT/add-ui-mockup","messageBody":"Add ui mockup closes #4","fileTypesAndContributionMap":{}},{"hash":"9b8d069a24967fa8a6a29a419bec8e4fef6b8450","isMergeCommit":true,"messageTitle":"Merge pull request #16 from cyqjoseph/branch-edit-aboutus","messageBody":"Edit Aboutus.md close #15","fileTypesAndContributionMap":{}}]}],"zhenghuil":[{"date":"2024-02-28","commitResults":[{"hash":"1c333bd8150873f1da98850649df2f6b5db04956","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/zhenghuil/tp","messageBody":"* \u0027master\u0027 of https://github.com/zhenghuil/tp:\n Edit Aboutus.md close #15\n Add ui mockup closes #4\n Add personal details of Jerremy: closes #7\n Update profile picture and AboutUs.md\n Add phot closes #10\n","fileTypesAndContributionMap":{}},{"hash":"67c7a6910d80b48cf10e8a9f930119384ab0edf3","isMergeCommit":false,"messageTitle":"Add zhenghuil.png Add personal details in AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":5}}},{"hash":"6830c51bd88a5ce0050745512d6b791f9b352cf9","isMergeCommit":false,"messageTitle":"Add zhenghuil.png Add personal details in AboutUs.md closes #18","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":5}}}]}]},"authorFileTypeContributionMap":{"jerremyng":{"docs":4,"functional-code":0,"test-code":0},"gauravuj":{"docs":5,"functional-code":0,"test-code":0},"cyqjoseph":{"docs":19,"functional-code":0,"test-code":0},"ChrysanthemumT":{"docs":0,"functional-code":0,"test-code":0},"zhenghuil":{"docs":3,"functional-code":0,"test-code":0}},"authorContributionVariance":{"jerremyng":5.2892566,"gauravuj":11.900826,"cyqjoseph":59.504128,"ChrysanthemumT":0.0,"zhenghuil":21.157026},"authorDisplayNameMap":{"jerremyng":"CS2103T-W11-3 JERR.. JIE","gauravuj":"CS2103T-W11-3 UJJW..URAV","cyqjoseph":"CS2103T-W11-3 CHAN..SEPH","ChrysanthemumT":"CS2103T-W11-3 WANG..HONG","zhenghuil":"CS2103T-W11-3 LOW .. HUI"}} +{"authorDailyContributionsMap":{"jerremyng":[{"date":"2024-02-28","commitResults":[{"hash":"889511ed05a964435dfd3136f40f69c0754f3c92","isMergeCommit":false,"messageTitle":"Add personal details of Jerremy: closes #7","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":4}}}]},{"date":"2024-03-06","commitResults":[{"hash":"a786a61018d003572d4b6158fe860f658bb89c1f","isMergeCommit":true,"messageTitle":"Merge pull request #25 from ChrysanthemumT/master","messageBody":"Update DG user stories","fileTypesAndContributionMap":{}}]}],"gauravuj":[{"date":"2024-02-28","commitResults":[{"hash":"8c16bbbce5b5fa9803456bbdd960fbaae7168ae3","isMergeCommit":false,"messageTitle":"Update profile picture and AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":6}}},{"hash":"eb1f408a80509bf8b3f615c47c7c54bf430c6f85","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-gauravuj-image","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5c3a552208e964a28b04dbc1c3a862ae7ca00091","isMergeCommit":true,"messageTitle":"Merge pull request #12 from gauravuj/branch-gauravuj-image","messageBody":"Add photo and update AboutUs.md","fileTypesAndContributionMap":{}}]}],"cyqjoseph":[{"date":"2024-02-28","commitResults":[{"hash":"f94fc1241549f9c67be3d7dfe0d7a2933c8de8ab","isMergeCommit":true,"messageTitle":"Merge pull request #13 from jerremyng/branch-Jerremy-Details","messageBody":"Add personal details of Jerremy: closes #7","fileTypesAndContributionMap":{}},{"hash":"8ff44952dca0a88517c34e6aafe9f2e897e32c85","isMergeCommit":false,"messageTitle":"Edit Aboutus.md close #15","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":8,"deletions":12}}}]},{"date":"2024-02-29","commitResults":[{"hash":"aa26a1159de9f17b4755f3b4f6d26d5cc1122d87","isMergeCommit":true,"messageTitle":"Merge pull request #21 from zhenghuil/zh-aboutus close #18","messageBody":"Zh aboutus","fileTypesAndContributionMap":{}}]},{"date":"2024-03-04","commitResults":[{"hash":"603b78d973c2cbf3e413023763a2d5377d32d7d4","isMergeCommit":false,"messageTitle":"Update first iteration of README.md to describe the product. clear #19","messageBody":"Remove details related to previous AddressBook-Level3 and replace with\ngroup product details.\n","fileTypesAndContributionMap":{"docs":{"insertions":11,"deletions":9}}},{"hash":"910cce7702d727a385768a5bf38331d1848a8d9d","isMergeCommit":true,"messageTitle":"Merge pull request #22 from cyqjoseph/branch-update-README-v1","messageBody":"Update first iteration of README.md to describe the product. clear #19","fileTypesAndContributionMap":{}}]}],"ChrysanthemumT":[{"date":"2024-02-28","commitResults":[{"hash":"3b944bac6abcf457ad7544d191b77bf8a3e3ff2f","isMergeCommit":true,"messageTitle":"Merge pull request #14 from ChrysanthemumT/add-ui-mockup","messageBody":"Add ui mockup closes #4","fileTypesAndContributionMap":{}},{"hash":"9b8d069a24967fa8a6a29a419bec8e4fef6b8450","isMergeCommit":true,"messageTitle":"Merge pull request #16 from cyqjoseph/branch-edit-aboutus","messageBody":"Edit Aboutus.md close #15","fileTypesAndContributionMap":{}}]},{"date":"2024-03-05","commitResults":[{"hash":"e5643daa401f08272cfb3e3ec0482d41baf9174d","isMergeCommit":false,"messageTitle":"Update DG user stories","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":18,"deletions":7}}}]}],"zhenghuil":[{"date":"2024-02-28","commitResults":[{"hash":"1c333bd8150873f1da98850649df2f6b5db04956","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/zhenghuil/tp","messageBody":"* \u0027master\u0027 of https://github.com/zhenghuil/tp:\n Edit Aboutus.md close #15\n Add ui mockup closes #4\n Add personal details of Jerremy: closes #7\n Update profile picture and AboutUs.md\n Add phot closes #10\n","fileTypesAndContributionMap":{}},{"hash":"67c7a6910d80b48cf10e8a9f930119384ab0edf3","isMergeCommit":false,"messageTitle":"Add zhenghuil.png Add personal details in AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":5}}},{"hash":"6830c51bd88a5ce0050745512d6b791f9b352cf9","isMergeCommit":false,"messageTitle":"Add zhenghuil.png Add personal details in AboutUs.md closes #18","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":5}}}]}]},"authorFileTypeContributionMap":{"jerremyng":{"docs":4,"functional-code":0,"test-code":0},"gauravuj":{"docs":5,"functional-code":0,"test-code":0},"cyqjoseph":{"docs":19,"functional-code":0,"test-code":0},"ChrysanthemumT":{"docs":16,"functional-code":0,"test-code":0},"zhenghuil":{"docs":3,"functional-code":0,"test-code":0}},"authorContributionVariance":{"jerremyng":4.544378,"gauravuj":10.224852,"cyqjoseph":52.07101,"ChrysanthemumT":44.3787,"zhenghuil":18.177511},"authorDisplayNameMap":{"jerremyng":"CS2103T-W11-3 JERR.. JIE","gauravuj":"CS2103T-W11-3 UJJW..URAV","cyqjoseph":"CS2103T-W11-3 CHAN..SEPH","ChrysanthemumT":"CS2103T-W11-3 WANG..HONG","zhenghuil":"CS2103T-W11-3 LOW .. HUI"}} diff --git a/AY2324S2-CS2103T-W12-1_tp_master/authorship.json b/AY2324S2-CS2103T-W12-1_tp_master/authorship.json index 6e2d8914..2905462d 100644 --- a/AY2324S2-CS2103T-W12-1_tp_master/authorship.json +++ b/AY2324S2-CS2103T-W12-1_tp_master/authorship.json @@ -1 +1 @@ -[{"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":"-"},"content":"### John Doe","lastModifiedDate":"2020-05-23"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/johndoe.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2020-06-17"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"[[homepage](http://www.comp.nus.edu.sg/~damithch)]","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"[[github](https://github.com/johndoe)]","lastModifiedDate":"2020-06-17"},{"lineNumber":20,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"* Role: Project Advisor","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"getsquared"},"content":"### Ge Shuqing","lastModifiedDate":"2024-03-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"getsquared"},"content":"\u003cimg src\u003d\"images/getsquared.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"getsquared"},"content":"[[github](http://github.com/getsquared)]","lastModifiedDate":"2024-03-05"},{"lineNumber":29,"author":{"gitId":"getsquared"},"content":"[[portfolio](team/shuqing.md)]","lastModifiedDate":"2024-03-05"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"getsquared"},"content":"* Role: Integration + Documentation","lastModifiedDate":"2024-03-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":"* Responsibilities: UI","lastModifiedDate":"2020-05-23"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"ReganChoy"},"content":"* Role: Project Advisor","lastModifiedDate":"2024-03-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":36,"author":{"gitId":"ReganChoy"},"content":"### Regan Choy","lastModifiedDate":"2024-03-05"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":38,"author":{"gitId":"ReganChoy"},"content":"\u003cimg src\u003d\"images/reganchoy.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":40,"author":{"gitId":"ReganChoy"},"content":"[[github](http://github.com/ReganChoy)]","lastModifiedDate":"2024-03-05"},{"lineNumber":41,"author":{"gitId":"ReganChoy"},"content":"[[portfolio](team/reganchoy.md)]","lastModifiedDate":"2024-03-05"},{"lineNumber":42,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":43,"author":{"gitId":"ReganChoy"},"content":"* Role: Deliverables + Deadline + Scheduling","lastModifiedDate":"2024-03-05"},{"lineNumber":44,"author":{"gitId":"ReganChoy"},"content":"* Responsibilities: Model","lastModifiedDate":"2024-03-05"},{"lineNumber":45,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":46,"author":{"gitId":"solomonng2001"},"content":"### Solomon Ng","lastModifiedDate":"2024-03-05"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"solomonng2001"},"content":"\u003cimg src\u003d\"images/solomonng2001.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":50,"author":{"gitId":"solomonng2001"},"content":"[[github](http://github.com/solomonng2001)] [[portfolio](team/solomonng.md)]","lastModifiedDate":"2024-03-05"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"solomonng2001"},"content":"* Role: Testing","lastModifiedDate":"2024-03-05"},{"lineNumber":53,"author":{"gitId":"solomonng2001"},"content":"* Responsibilities: Storage","lastModifiedDate":"2024-03-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":"### Jean Doe","lastModifiedDate":"2020-06-17"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":57,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/johndoe.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2020-06-17"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":59,"author":{"gitId":"-"},"content":"[[github](http://github.com/johndoe)]","lastModifiedDate":"2020-06-17"},{"lineNumber":60,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":62,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":63,"author":{"gitId":"-"},"content":"* Responsibilities: Dev Ops + Threading","lastModifiedDate":"2020-05-23"},{"lineNumber":64,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":65,"author":{"gitId":"-"},"content":"### James Doe","lastModifiedDate":"2020-06-17"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":67,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/johndoe.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2020-06-17"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":69,"author":{"gitId":"-"},"content":"[[github](http://github.com/johndoe)]","lastModifiedDate":"2020-06-17"},{"lineNumber":70,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":72,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":73,"author":{"gitId":"-"},"content":"* Responsibilities: UI","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"getsquared":5,"ReganChoy":9,"solomonng2001":5,"-":54}},{"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":"getsquared"},"content":"* has a need to manage a significant number of clients for insurance policies","lastModifiedDate":"2024-03-05"},{"lineNumber":278,"author":{"gitId":"getsquared"},"content":"* has a need to organise schedules with clients and their details in one place","lastModifiedDate":"2024-03-05"},{"lineNumber":279,"author":{"gitId":"getsquared"},"content":"* has a need for reminders to keep in touch with clients","lastModifiedDate":"2024-03-05"},{"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":"getsquared"},"content":"**Value proposition**: conveniently manage client details and schedules faster than a typical mouse/GUI driven app","lastModifiedDate":"2024-03-05"},{"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":"getsquared"},"content":"|----------|-----------------|---------------------------------------------------------------|-----------------------------------------------------------------------|","lastModifiedDate":"2024-03-05"},{"lineNumber":294,"author":{"gitId":"getsquared"},"content":"| `* * *` | insurance agent | see usage instructions | refer to instructions when I forget how to use the App |","lastModifiedDate":"2024-03-05"},{"lineNumber":295,"author":{"gitId":"getsquared"},"content":"| `* * *` | insurance agent | add a new client contact details | keep track of the clients I have |","lastModifiedDate":"2024-03-05"},{"lineNumber":296,"author":{"gitId":"getsquared"},"content":"| `* * *` | insurance agent | delete a client | remove clients that are leaving |","lastModifiedDate":"2024-03-05"},{"lineNumber":297,"author":{"gitId":"getsquared"},"content":"| `* * *` | insurance agent | find a client by name | locate details of client without having to go through the entire list |","lastModifiedDate":"2024-03-05"},{"lineNumber":298,"author":{"gitId":"getsquared"},"content":"| `* *` | insurance agent | view client information | know and check client details |","lastModifiedDate":"2024-03-05"},{"lineNumber":299,"author":{"gitId":"getsquared"},"content":"| `* *` | insurance agent | check what schedules I have with clients on a particular date | keep track of what I have to do in a day |","lastModifiedDate":"2024-03-05"},{"lineNumber":300,"author":{"gitId":"getsquared"},"content":"| `* *` | insurance agent | add the birthday of my clients | wish them happy birthday to keep in contact with them |","lastModifiedDate":"2024-03-05"},{"lineNumber":301,"author":{"gitId":"getsquared"},"content":"| `* *` | insurance agent | delete policy details for a client | remove expired policies of the client |","lastModifiedDate":"2024-03-05"},{"lineNumber":302,"author":{"gitId":"getsquared"},"content":"| `* *` | insurance agent | see when I last met a client | check in on a client that I have not met for a long time |","lastModifiedDate":"2024-03-05"},{"lineNumber":303,"author":{"gitId":"getsquared"},"content":"| `* *` | insurance agent | mark that a schedule is completed | know that i fulfilled the appointment scheduled |","lastModifiedDate":"2024-03-05"},{"lineNumber":304,"author":{"gitId":"getsquared"},"content":"| `*` | insurance agent | sort clients by priority | deal with client with higher priority status first |","lastModifiedDate":"2024-03-05"},{"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":"getsquared"},"content":"(For all use cases below, the **System** is the `ClientCare` and the **Actor** is the `user`, unless specified otherwise)","lastModifiedDate":"2024-03-05"},{"lineNumber":311,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":312,"author":{"gitId":"getsquared"},"content":"**Use case: Find a client by name**","lastModifiedDate":"2024-03-05"},{"lineNumber":313,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":314,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2020-05-23"},{"lineNumber":315,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":316,"author":{"gitId":"getsquared"},"content":"1. User requests to find a specific client in the list by name","lastModifiedDate":"2024-03-05"},{"lineNumber":317,"author":{"gitId":"getsquared"},"content":"2. ClientCare shows list of client that matches the name","lastModifiedDate":"2024-03-05"},{"lineNumber":318,"author":{"gitId":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":319,"author":{"gitId":"getsquared"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":320,"author":{"gitId":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":321,"author":{"gitId":"getsquared"},"content":"**Extensions**","lastModifiedDate":"2024-03-05"},{"lineNumber":322,"author":{"gitId":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":323,"author":{"gitId":"getsquared"},"content":"* 2a. The list is empty as there is no matching name found.","lastModifiedDate":"2024-03-05"},{"lineNumber":324,"author":{"gitId":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":325,"author":{"gitId":"getsquared"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":326,"author":{"gitId":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":327,"author":{"gitId":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":328,"author":{"gitId":"getsquared"},"content":"**Use case: Delete a client**","lastModifiedDate":"2024-03-05"},{"lineNumber":329,"author":{"gitId":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":330,"author":{"gitId":"getsquared"},"content":"**MSS**","lastModifiedDate":"2024-03-05"},{"lineNumber":331,"author":{"gitId":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":332,"author":{"gitId":"getsquared"},"content":"1. User requests to list clients or find client by name","lastModifiedDate":"2024-03-05"},{"lineNumber":333,"author":{"gitId":"getsquared"},"content":"2. ClientCare shows a list of clients","lastModifiedDate":"2024-03-05"},{"lineNumber":334,"author":{"gitId":"getsquared"},"content":"3. User requests to delete a specific client in the list by index","lastModifiedDate":"2024-03-05"},{"lineNumber":335,"author":{"gitId":"getsquared"},"content":"4. ClientCare deletes the client","lastModifiedDate":"2024-03-05"},{"lineNumber":336,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":337,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":338,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":339,"author":{"gitId":"-"},"content":"**Extensions**","lastModifiedDate":"2020-05-23"},{"lineNumber":340,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":341,"author":{"gitId":"-"},"content":"* 2a. The list is empty.","lastModifiedDate":"2020-05-23"},{"lineNumber":342,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":343,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":344,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":345,"author":{"gitId":"-"},"content":"* 3a. The given index is invalid.","lastModifiedDate":"2020-05-23"},{"lineNumber":346,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":347,"author":{"gitId":"getsquared"},"content":" * 3a1. ClientCare shows an error message.","lastModifiedDate":"2024-03-05"},{"lineNumber":348,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":349,"author":{"gitId":"-"},"content":" Use case resumes at step 2.","lastModifiedDate":"2020-05-23"},{"lineNumber":350,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":351,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":352,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":353,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":354,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":355,"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":356,"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":357,"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":358,"author":{"gitId":"getsquared"},"content":"4. The system should respond to user input within 2 seconds.","lastModifiedDate":"2024-03-05"},{"lineNumber":359,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":360,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":361,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":362,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":363,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":364,"author":{"gitId":"getsquared"},"content":"* **Client**: Customers or potential customers the insurance agent wants to keep in contact with","lastModifiedDate":"2024-03-05"},{"lineNumber":365,"author":{"gitId":"getsquared"},"content":"* **Command Line Interface (CLI)**: A text-based interface to input commands to interact with the system","lastModifiedDate":"2024-03-05"},{"lineNumber":366,"author":{"gitId":"-"},"content":"* **Mainstream OS**: Windows, Linux, Unix, MacOS","lastModifiedDate":"2024-02-09"},{"lineNumber":367,"author":{"gitId":"getsquared"},"content":"* **AddressBook**: The underlying system that ClientCare is built on. Interchangeable with ClientCare.","lastModifiedDate":"2024-03-05"},{"lineNumber":368,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":369,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":370,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":371,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":372,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":373,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":374,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":375,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":376,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":377,"author":{"gitId":"-"},"content":"**Note:** These instructions only provide a starting point for testers to work on;","lastModifiedDate":"2023-09-12"},{"lineNumber":378,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":379,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":380,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":381,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":382,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":383,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":384,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":385,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":386,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":387,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":388,"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":389,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":390,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":391,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":392,"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":393,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":394,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":395,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","lastModifiedDate":"2020-05-23"},{"lineNumber":396,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":397,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":398,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":399,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":400,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":401,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":402,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":403,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":404,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":405,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":406,"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":407,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":408,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":409,"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":410,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":411,"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":412,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":413,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":414,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":415,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":416,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":417,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":418,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":419,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":420,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":421,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":422,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"getsquared":43,"-":379}},{"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\"\u003eClientCare\u003c/a\u003e","lastModifiedDate":"2024-02-20"},{"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":"getsquared"},"content":" \u003cli\u003e\u003ca href\u003d\"https://github.com/AY2324S2-CS2103T-W12-1/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":{"getsquared":1,"-":66}},{"path":"docs/team/reganchoy.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"ReganChoy"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":2,"author":{"gitId":"ReganChoy"},"content":"layout: default.md","lastModifiedDate":"2024-03-05"},{"lineNumber":3,"author":{"gitId":"ReganChoy"},"content":"title: \"Regan Choy\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-05"},{"lineNumber":4,"author":{"gitId":"ReganChoy"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":5,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":6,"author":{"gitId":"ReganChoy"},"content":"### Project: ClientCare","lastModifiedDate":"2024-03-05"},{"lineNumber":7,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":8,"author":{"gitId":"ReganChoy"},"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":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":10,"author":{"gitId":"ReganChoy"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-03-05"},{"lineNumber":11,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":12,"author":{"gitId":"ReganChoy"},"content":"* **New Feature**: Added the ability to undo/redo previous commands.","lastModifiedDate":"2024-03-05"},{"lineNumber":13,"author":{"gitId":"ReganChoy"},"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":"ReganChoy"},"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":"ReganChoy"},"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":"ReganChoy"},"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":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":18,"author":{"gitId":"ReganChoy"},"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":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":20,"author":{"gitId":"ReganChoy"},"content":"* **Code contributed**: [RepoSense link]()","lastModifiedDate":"2024-03-05"},{"lineNumber":21,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":22,"author":{"gitId":"ReganChoy"},"content":"* **Project management**:","lastModifiedDate":"2024-03-05"},{"lineNumber":23,"author":{"gitId":"ReganChoy"},"content":" * Managed releases `v1.3` - `v1.5rc` (3 releases) on GitHub","lastModifiedDate":"2024-03-05"},{"lineNumber":24,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":25,"author":{"gitId":"ReganChoy"},"content":"* **Enhancements to existing features**:","lastModifiedDate":"2024-03-05"},{"lineNumber":26,"author":{"gitId":"ReganChoy"},"content":" * Updated the GUI color scheme (Pull requests [\\#33](), [\\#34]())","lastModifiedDate":"2024-03-05"},{"lineNumber":27,"author":{"gitId":"ReganChoy"},"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":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":29,"author":{"gitId":"ReganChoy"},"content":"* **Documentation**:","lastModifiedDate":"2024-03-05"},{"lineNumber":30,"author":{"gitId":"ReganChoy"},"content":" * User Guide:","lastModifiedDate":"2024-03-05"},{"lineNumber":31,"author":{"gitId":"ReganChoy"},"content":" * Added documentation for the features `delete` and `find` [\\#72]()","lastModifiedDate":"2024-03-05"},{"lineNumber":32,"author":{"gitId":"ReganChoy"},"content":" * Did cosmetic tweaks to existing documentation of features `clear`, `exit`: [\\#74]()","lastModifiedDate":"2024-03-05"},{"lineNumber":33,"author":{"gitId":"ReganChoy"},"content":" * Developer Guide:","lastModifiedDate":"2024-03-05"},{"lineNumber":34,"author":{"gitId":"ReganChoy"},"content":" * Added implementation details of the `delete` feature.","lastModifiedDate":"2024-03-05"},{"lineNumber":35,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":36,"author":{"gitId":"ReganChoy"},"content":"* **Community**:","lastModifiedDate":"2024-03-05"},{"lineNumber":37,"author":{"gitId":"ReganChoy"},"content":" * PRs reviewed (with non-trivial review comments): [\\#12](), [\\#32](), [\\#19](), [\\#42]()","lastModifiedDate":"2024-03-05"},{"lineNumber":38,"author":{"gitId":"ReganChoy"},"content":" * Contributed to forum discussions (examples: [1](), [2](), [3](), [4]())","lastModifiedDate":"2024-03-05"},{"lineNumber":39,"author":{"gitId":"ReganChoy"},"content":" * Reported bugs and suggestions for other teams in the class (examples: [1](), [2](), [3]())","lastModifiedDate":"2024-03-05"},{"lineNumber":40,"author":{"gitId":"ReganChoy"},"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":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":42,"author":{"gitId":"ReganChoy"},"content":"* **Tools**:","lastModifiedDate":"2024-03-05"},{"lineNumber":43,"author":{"gitId":"ReganChoy"},"content":" * Integrated a third party library (Natty) to the project ([\\#42]())","lastModifiedDate":"2024-03-05"},{"lineNumber":44,"author":{"gitId":"ReganChoy"},"content":" * Integrated a new Github plugin (CircleCI) to the team repo","lastModifiedDate":"2024-03-05"},{"lineNumber":45,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":46,"author":{"gitId":"ReganChoy"},"content":"* _{you can add/remove categories in the list above}_","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"ReganChoy":46}},{"path":"docs/team/shuqing.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"getsquared"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":2,"author":{"gitId":"getsquared"},"content":"layout: default.md","lastModifiedDate":"2024-03-05"},{"lineNumber":3,"author":{"gitId":"getsquared"},"content":"title: \"Shuqing\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-05"},{"lineNumber":4,"author":{"gitId":"getsquared"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":5,"author":{"gitId":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":6,"author":{"gitId":"getsquared"},"content":"### Project: ClientCare","lastModifiedDate":"2024-03-05"},{"lineNumber":7,"author":{"gitId":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":8,"author":{"gitId":"getsquared"},"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":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":10,"author":{"gitId":"getsquared"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-03-05"},{"lineNumber":11,"author":{"gitId":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":12,"author":{"gitId":"getsquared"},"content":"* **New Feature**: Added the ability to undo/redo previous commands.","lastModifiedDate":"2024-03-05"},{"lineNumber":13,"author":{"gitId":"getsquared"},"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":"getsquared"},"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":"getsquared"},"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":"getsquared"},"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":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":18,"author":{"gitId":"getsquared"},"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":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":20,"author":{"gitId":"getsquared"},"content":"* **Code contributed**: [RepoSense link]()","lastModifiedDate":"2024-03-05"},{"lineNumber":21,"author":{"gitId":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":22,"author":{"gitId":"getsquared"},"content":"* **Project management**:","lastModifiedDate":"2024-03-05"},{"lineNumber":23,"author":{"gitId":"getsquared"},"content":" * Managed releases `v1.3` - `v1.5rc` (3 releases) on GitHub","lastModifiedDate":"2024-03-05"},{"lineNumber":24,"author":{"gitId":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":25,"author":{"gitId":"getsquared"},"content":"* **Enhancements to existing features**:","lastModifiedDate":"2024-03-05"},{"lineNumber":26,"author":{"gitId":"getsquared"},"content":" * Updated the GUI color scheme (Pull requests [\\#33](), [\\#34]())","lastModifiedDate":"2024-03-05"},{"lineNumber":27,"author":{"gitId":"getsquared"},"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":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":29,"author":{"gitId":"getsquared"},"content":"* **Documentation**:","lastModifiedDate":"2024-03-05"},{"lineNumber":30,"author":{"gitId":"getsquared"},"content":" * User Guide:","lastModifiedDate":"2024-03-05"},{"lineNumber":31,"author":{"gitId":"getsquared"},"content":" * Added documentation for the features `delete` and `find` [\\#72]()","lastModifiedDate":"2024-03-05"},{"lineNumber":32,"author":{"gitId":"getsquared"},"content":" * Did cosmetic tweaks to existing documentation of features `clear`, `exit`: [\\#74]()","lastModifiedDate":"2024-03-05"},{"lineNumber":33,"author":{"gitId":"getsquared"},"content":" * Developer Guide:","lastModifiedDate":"2024-03-05"},{"lineNumber":34,"author":{"gitId":"getsquared"},"content":" * Added implementation details of the `delete` feature.","lastModifiedDate":"2024-03-05"},{"lineNumber":35,"author":{"gitId":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":36,"author":{"gitId":"getsquared"},"content":"* **Community**:","lastModifiedDate":"2024-03-05"},{"lineNumber":37,"author":{"gitId":"getsquared"},"content":" * PRs reviewed (with non-trivial review comments): [\\#12](), [\\#32](), [\\#19](), [\\#42]()","lastModifiedDate":"2024-03-05"},{"lineNumber":38,"author":{"gitId":"getsquared"},"content":" * Contributed to forum discussions (examples: [1](), [2](), [3](), [4]())","lastModifiedDate":"2024-03-05"},{"lineNumber":39,"author":{"gitId":"getsquared"},"content":" * Reported bugs and suggestions for other teams in the class (examples: [1](), [2](), [3]())","lastModifiedDate":"2024-03-05"},{"lineNumber":40,"author":{"gitId":"getsquared"},"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":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":42,"author":{"gitId":"getsquared"},"content":"* **Tools**:","lastModifiedDate":"2024-03-05"},{"lineNumber":43,"author":{"gitId":"getsquared"},"content":" * Integrated a third party library (Natty) to the project ([\\#42]())","lastModifiedDate":"2024-03-05"},{"lineNumber":44,"author":{"gitId":"getsquared"},"content":" * Integrated a new Github plugin (CircleCI) to the team repo","lastModifiedDate":"2024-03-05"},{"lineNumber":45,"author":{"gitId":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":46,"author":{"gitId":"getsquared"},"content":"* _{you can add/remove categories in the list above}_","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"getsquared":46}},{"path":"docs/team/solomonng.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"solomonng2001"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":2,"author":{"gitId":"solomonng2001"},"content":" layout: default.md","lastModifiedDate":"2024-03-05"},{"lineNumber":3,"author":{"gitId":"solomonng2001"},"content":" title: \"John Doe\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-05"},{"lineNumber":4,"author":{"gitId":"solomonng2001"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":5,"author":{"gitId":"solomonng2001"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":6,"author":{"gitId":"solomonng2001"},"content":"### Project: AddressBook Level 3","lastModifiedDate":"2024-03-05"},{"lineNumber":7,"author":{"gitId":"solomonng2001"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":8,"author":{"gitId":"solomonng2001"},"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":"solomonng2001"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":10,"author":{"gitId":"solomonng2001"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-03-05"},{"lineNumber":11,"author":{"gitId":"solomonng2001"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":12,"author":{"gitId":"solomonng2001"},"content":"* **New Feature**: Added the ability to undo/redo previous commands.","lastModifiedDate":"2024-03-05"},{"lineNumber":13,"author":{"gitId":"solomonng2001"},"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":"solomonng2001"},"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":"solomonng2001"},"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":"solomonng2001"},"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":"solomonng2001"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":18,"author":{"gitId":"solomonng2001"},"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":"solomonng2001"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":20,"author":{"gitId":"solomonng2001"},"content":"* **Code contributed**: [RepoSense link]()","lastModifiedDate":"2024-03-05"},{"lineNumber":21,"author":{"gitId":"solomonng2001"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":22,"author":{"gitId":"solomonng2001"},"content":"* **Project management**:","lastModifiedDate":"2024-03-05"},{"lineNumber":23,"author":{"gitId":"solomonng2001"},"content":" * Managed releases `v1.3` - `v1.5rc` (3 releases) on GitHub","lastModifiedDate":"2024-03-05"},{"lineNumber":24,"author":{"gitId":"solomonng2001"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":25,"author":{"gitId":"solomonng2001"},"content":"* **Enhancements to existing features**:","lastModifiedDate":"2024-03-05"},{"lineNumber":26,"author":{"gitId":"solomonng2001"},"content":" * Updated the GUI color scheme (Pull requests [\\#33](), [\\#34]())","lastModifiedDate":"2024-03-05"},{"lineNumber":27,"author":{"gitId":"solomonng2001"},"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":"solomonng2001"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":29,"author":{"gitId":"solomonng2001"},"content":"* **Documentation**:","lastModifiedDate":"2024-03-05"},{"lineNumber":30,"author":{"gitId":"solomonng2001"},"content":" * User Guide:","lastModifiedDate":"2024-03-05"},{"lineNumber":31,"author":{"gitId":"solomonng2001"},"content":" * Added documentation for the features `delete` and `find` [\\#72]()","lastModifiedDate":"2024-03-05"},{"lineNumber":32,"author":{"gitId":"solomonng2001"},"content":" * Did cosmetic tweaks to existing documentation of features `clear`, `exit`: [\\#74]()","lastModifiedDate":"2024-03-05"},{"lineNumber":33,"author":{"gitId":"solomonng2001"},"content":" * Developer Guide:","lastModifiedDate":"2024-03-05"},{"lineNumber":34,"author":{"gitId":"solomonng2001"},"content":" * Added implementation details of the `delete` feature.","lastModifiedDate":"2024-03-05"},{"lineNumber":35,"author":{"gitId":"solomonng2001"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":36,"author":{"gitId":"solomonng2001"},"content":"* **Community**:","lastModifiedDate":"2024-03-05"},{"lineNumber":37,"author":{"gitId":"solomonng2001"},"content":" * PRs reviewed (with non-trivial review comments): [\\#12](), [\\#32](), [\\#19](), [\\#42]()","lastModifiedDate":"2024-03-05"},{"lineNumber":38,"author":{"gitId":"solomonng2001"},"content":" * Contributed to forum discussions (examples: [1](), [2](), [3](), [4]())","lastModifiedDate":"2024-03-05"},{"lineNumber":39,"author":{"gitId":"solomonng2001"},"content":" * Reported bugs and suggestions for other teams in the class (examples: [1](), [2](), [3]())","lastModifiedDate":"2024-03-05"},{"lineNumber":40,"author":{"gitId":"solomonng2001"},"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":"solomonng2001"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":42,"author":{"gitId":"solomonng2001"},"content":"* **Tools**:","lastModifiedDate":"2024-03-05"},{"lineNumber":43,"author":{"gitId":"solomonng2001"},"content":" * Integrated a third party library (Natty) to the project ([\\#42]())","lastModifiedDate":"2024-03-05"},{"lineNumber":44,"author":{"gitId":"solomonng2001"},"content":" * Integrated a new Github plugin (CircleCI) to the team repo","lastModifiedDate":"2024-03-05"},{"lineNumber":45,"author":{"gitId":"solomonng2001"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":46,"author":{"gitId":"solomonng2001"},"content":"* _{you can add/remove categories in the list above}_","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"solomonng2001":46}}] +[{"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":"-"},"content":"### John Doe","lastModifiedDate":"2020-05-23"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/johndoe.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2020-06-17"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"[[homepage](http://www.comp.nus.edu.sg/~damithch)]","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"[[github](https://github.com/johndoe)]","lastModifiedDate":"2020-06-17"},{"lineNumber":20,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"* Role: Project Advisor","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"getsquared"},"content":"### Ge Shuqing","lastModifiedDate":"2024-03-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"getsquared"},"content":"\u003cimg src\u003d\"images/getsquared.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"getsquared"},"content":"[[github](http://github.com/getsquared)]","lastModifiedDate":"2024-03-05"},{"lineNumber":29,"author":{"gitId":"getsquared"},"content":"[[portfolio](team/shuqing.md)]","lastModifiedDate":"2024-03-05"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"getsquared"},"content":"* Role: Integration + Documentation","lastModifiedDate":"2024-03-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":"* Responsibilities: UI","lastModifiedDate":"2020-05-23"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"ReganChoy"},"content":"* Role: Project Advisor","lastModifiedDate":"2024-03-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":36,"author":{"gitId":"ReganChoy"},"content":"### Regan Choy","lastModifiedDate":"2024-03-05"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":38,"author":{"gitId":"ReganChoy"},"content":"\u003cimg src\u003d\"images/reganchoy.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":40,"author":{"gitId":"ReganChoy"},"content":"[[github](http://github.com/ReganChoy)]","lastModifiedDate":"2024-03-05"},{"lineNumber":41,"author":{"gitId":"ReganChoy"},"content":"[[portfolio](team/reganchoy.md)]","lastModifiedDate":"2024-03-05"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":43,"author":{"gitId":"ReganChoy"},"content":"* Role: Deliverables + Deadline + Scheduling","lastModifiedDate":"2024-03-05"},{"lineNumber":44,"author":{"gitId":"ReganChoy"},"content":"* Responsibilities: Model","lastModifiedDate":"2024-03-05"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":46,"author":{"gitId":"solomonng2001"},"content":"### Solomon Ng","lastModifiedDate":"2024-03-05"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"solomonng2001"},"content":"\u003cimg src\u003d\"images/solomonng2001.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":50,"author":{"gitId":"solomonng2001"},"content":"[[github](http://github.com/solomonng2001)] [[portfolio](team/solomonng.md)]","lastModifiedDate":"2024-03-05"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"solomonng2001"},"content":"* Role: Testing","lastModifiedDate":"2024-03-05"},{"lineNumber":53,"author":{"gitId":"solomonng2001"},"content":"* Responsibilities: Storage","lastModifiedDate":"2024-03-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"yorklim"},"content":"### Chia York Lim","lastModifiedDate":"2024-03-06"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":57,"author":{"gitId":"yorklim"},"content":"\u003cimg src\u003d\"images/yorklim.jpg\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-06"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":59,"author":{"gitId":"yorklim"},"content":"[[github](http://github.com/yorklim)]","lastModifiedDate":"2024-03-06"},{"lineNumber":60,"author":{"gitId":"yorklim"},"content":"[[portfolio](team/yorklim.md)]","lastModifiedDate":"2024-03-06"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":62,"author":{"gitId":"yorklim"},"content":"* Role: Team lead + Code quality","lastModifiedDate":"2024-03-06"},{"lineNumber":63,"author":{"gitId":"yorklim"},"content":"* Responsibilities: Dev Ops","lastModifiedDate":"2024-03-06"},{"lineNumber":64,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":65,"author":{"gitId":"-"},"content":"### James Doe","lastModifiedDate":"2020-06-17"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":67,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/johndoe.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2020-06-17"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":69,"author":{"gitId":"-"},"content":"[[github](http://github.com/johndoe)]","lastModifiedDate":"2020-06-17"},{"lineNumber":70,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":72,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":73,"author":{"gitId":"-"},"content":"* Responsibilities: UI","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"getsquared":5,"ReganChoy":7,"solomonng2001":5,"yorklim":6,"-":50}},{"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":"getsquared"},"content":"* has a need to manage a significant number of clients for insurance policies","lastModifiedDate":"2024-03-05"},{"lineNumber":278,"author":{"gitId":"getsquared"},"content":"* has a need to organise schedules with clients and their details in one place","lastModifiedDate":"2024-03-05"},{"lineNumber":279,"author":{"gitId":"getsquared"},"content":"* has a need for reminders to keep in touch with clients","lastModifiedDate":"2024-03-05"},{"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":"getsquared"},"content":"**Value proposition**: conveniently manage client details and schedules faster than a typical mouse/GUI driven app","lastModifiedDate":"2024-03-05"},{"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":"yorklim"},"content":"|----------|-----------------|-------------------------------------------------------|-----------------------------------------------------------------------|","lastModifiedDate":"2024-03-06"},{"lineNumber":294,"author":{"gitId":"getsquared"},"content":"| `* * *` | insurance agent | see usage instructions | refer to instructions when I forget how to use the App |","lastModifiedDate":"2024-03-05"},{"lineNumber":295,"author":{"gitId":"getsquared"},"content":"| `* * *` | insurance agent | add a new client contact details | keep track of the clients I have |","lastModifiedDate":"2024-03-05"},{"lineNumber":296,"author":{"gitId":"getsquared"},"content":"| `* * *` | insurance agent | delete a client | remove clients that are leaving |","lastModifiedDate":"2024-03-05"},{"lineNumber":297,"author":{"gitId":"getsquared"},"content":"| `* * *` | insurance agent | find a client by name | locate details of client without having to go through the entire list |","lastModifiedDate":"2024-03-05"},{"lineNumber":298,"author":{"gitId":"getsquared"},"content":"| `* *` | insurance agent | view client information | know and check client details |","lastModifiedDate":"2024-03-05"},{"lineNumber":299,"author":{"gitId":"ReganChoy"},"content":"| `* *` | insurance agent | check schedules with clients on a date | keep track of what I have to do in a day |","lastModifiedDate":"2024-03-05"},{"lineNumber":300,"author":{"gitId":"getsquared"},"content":"| `* *` | insurance agent | add the birthday of my clients | wish them happy birthday to keep in contact with them |","lastModifiedDate":"2024-03-05"},{"lineNumber":301,"author":{"gitId":"getsquared"},"content":"| `* *` | insurance agent | delete policy details for a client | remove expired policies of the client |","lastModifiedDate":"2024-03-05"},{"lineNumber":302,"author":{"gitId":"getsquared"},"content":"| `* *` | insurance agent | see when I last met a client | check in on a client that I have not met for a long time |","lastModifiedDate":"2024-03-05"},{"lineNumber":303,"author":{"gitId":"getsquared"},"content":"| `* *` | insurance agent | mark that a schedule is completed | know that i fulfilled the appointment scheduled |","lastModifiedDate":"2024-03-05"},{"lineNumber":304,"author":{"gitId":"ReganChoy"},"content":"| `* *` | insurance agent | add policy details of a client | keep track of clients and their policies |","lastModifiedDate":"2024-03-05"},{"lineNumber":305,"author":{"gitId":"ReganChoy"},"content":"| `* *` | insurance agent | schedule checkup date and time for clients | so I know when to follow-up with them |","lastModifiedDate":"2024-03-05"},{"lineNumber":306,"author":{"gitId":"getsquared"},"content":"| `*` | insurance agent | sort clients by priority | deal with client with higher priority status first |","lastModifiedDate":"2024-03-05"},{"lineNumber":307,"author":{"gitId":"ReganChoy"},"content":"| `*` | insurance agent | track deals that I have closed | track my current progress |","lastModifiedDate":"2024-03-05"},{"lineNumber":308,"author":{"gitId":"ReganChoy"},"content":"| `*` | insurance agent | edit my client\u0027s details | update my client\u0027s details |","lastModifiedDate":"2024-03-05"},{"lineNumber":309,"author":{"gitId":"ReganChoy"},"content":"| `*` | insurance agent | reschedule my appointments | change the date and time of appointments with clients |","lastModifiedDate":"2024-03-05"},{"lineNumber":310,"author":{"gitId":"ReganChoy"},"content":"| `*` | insurance agent | filter clients by importance | decide on who to prioritise on |","lastModifiedDate":"2024-03-05"},{"lineNumber":311,"author":{"gitId":"ReganChoy"},"content":"| `*` | insurance agent | get help | use the app when I am lost or confused |","lastModifiedDate":"2024-03-05"},{"lineNumber":312,"author":{"gitId":"yorklim"},"content":"| `*` | insurance agent | can sort clients by the expected revenue of the deals | know which clients to prioritise |","lastModifiedDate":"2024-03-06"},{"lineNumber":313,"author":{"gitId":"yorklim"},"content":"| `*` | insurance agent | set the policy payment due dates | remind my clients. |","lastModifiedDate":"2024-03-06"},{"lineNumber":314,"author":{"gitId":"yorklim"},"content":"| `*` | insurance agent | add the maturity date of my client’s policy | update them and plan for future policies |","lastModifiedDate":"2024-03-06"},{"lineNumber":315,"author":{"gitId":"yorklim"},"content":"| `*` | developer | view list of all bugs reported by users | conveniently view all reported bugs and fix them |","lastModifiedDate":"2024-03-06"},{"lineNumber":316,"author":{"gitId":"yorklim"},"content":"| `*` | colleague | import someone\u0027s contact list | take over his clients |","lastModifiedDate":"2024-03-06"},{"lineNumber":317,"author":{"gitId":"yorklim"},"content":"| `*` | insurance agent | report issues/bugs | get someone to fix bugs |","lastModifiedDate":"2024-03-06"},{"lineNumber":318,"author":{"gitId":"yorklim"},"content":"| `*` | developer\t | get a log list of user activity | view user activity to bug fix |","lastModifiedDate":"2024-03-06"},{"lineNumber":319,"author":{"gitId":"yorklim"},"content":"| `*` | manager | view all my subordinates\u0027 clients | be aware of their progress and client base |","lastModifiedDate":"2024-03-06"},{"lineNumber":320,"author":{"gitId":"yorklim"},"content":"| `*` | insurance agent | get reminders of client birthday | send birthday message |","lastModifiedDate":"2024-03-06"},{"lineNumber":321,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":322,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":323,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":324,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":325,"author":{"gitId":"-"},"content":"### Use cases","lastModifiedDate":"2020-06-07"},{"lineNumber":326,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":327,"author":{"gitId":"getsquared"},"content":"(For all use cases below, the **System** is the `ClientCare` and the **Actor** is the `user`, unless specified otherwise)","lastModifiedDate":"2024-03-05"},{"lineNumber":328,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":329,"author":{"gitId":"getsquared"},"content":"**Use case: Find a client by name**","lastModifiedDate":"2024-03-05"},{"lineNumber":330,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":331,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2020-05-23"},{"lineNumber":332,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":333,"author":{"gitId":"getsquared"},"content":"1. User requests to find a specific client in the list by name","lastModifiedDate":"2024-03-05"},{"lineNumber":334,"author":{"gitId":"getsquared"},"content":"2. ClientCare shows list of client that matches the name","lastModifiedDate":"2024-03-05"},{"lineNumber":335,"author":{"gitId":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":336,"author":{"gitId":"getsquared"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":337,"author":{"gitId":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":338,"author":{"gitId":"getsquared"},"content":"**Extensions**","lastModifiedDate":"2024-03-05"},{"lineNumber":339,"author":{"gitId":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":340,"author":{"gitId":"getsquared"},"content":"* 2a. The list is empty as there is no matching name found.","lastModifiedDate":"2024-03-05"},{"lineNumber":341,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":342,"author":{"gitId":"getsquared"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":343,"author":{"gitId":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":344,"author":{"gitId":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":345,"author":{"gitId":"getsquared"},"content":"**Use case: Delete a client**","lastModifiedDate":"2024-03-05"},{"lineNumber":346,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":347,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2024-03-05"},{"lineNumber":348,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":349,"author":{"gitId":"getsquared"},"content":"1. User requests to list clients or find client by name","lastModifiedDate":"2024-03-05"},{"lineNumber":350,"author":{"gitId":"getsquared"},"content":"2. ClientCare shows a list of clients","lastModifiedDate":"2024-03-05"},{"lineNumber":351,"author":{"gitId":"getsquared"},"content":"3. User requests to delete a specific client in the list by index","lastModifiedDate":"2024-03-05"},{"lineNumber":352,"author":{"gitId":"getsquared"},"content":"4. ClientCare deletes the client","lastModifiedDate":"2024-03-05"},{"lineNumber":353,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":354,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":355,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":356,"author":{"gitId":"-"},"content":"**Extensions**","lastModifiedDate":"2020-05-23"},{"lineNumber":357,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":358,"author":{"gitId":"-"},"content":"* 2a. The list is empty.","lastModifiedDate":"2020-05-23"},{"lineNumber":359,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":360,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":361,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":362,"author":{"gitId":"-"},"content":"* 3a. The given index is invalid.","lastModifiedDate":"2020-05-23"},{"lineNumber":363,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":364,"author":{"gitId":"getsquared"},"content":" * 3a1. ClientCare shows an error message.","lastModifiedDate":"2024-03-05"},{"lineNumber":365,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":366,"author":{"gitId":"-"},"content":" Use case resumes at step 2.","lastModifiedDate":"2020-05-23"},{"lineNumber":367,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":368,"author":{"gitId":"ReganChoy"},"content":"**Use case: Schedule**","lastModifiedDate":"2024-03-05"},{"lineNumber":369,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":370,"author":{"gitId":"ReganChoy"},"content":"**MSS**","lastModifiedDate":"2024-03-05"},{"lineNumber":371,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":372,"author":{"gitId":"ReganChoy"},"content":"1. User schedules a date and time to meet with a client","lastModifiedDate":"2024-03-05"},{"lineNumber":373,"author":{"gitId":"ReganChoy"},"content":"2. ClientCare sets up the appointment","lastModifiedDate":"2024-03-05"},{"lineNumber":374,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":375,"author":{"gitId":"ReganChoy"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":376,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":377,"author":{"gitId":"ReganChoy"},"content":"**Extensions**","lastModifiedDate":"2024-03-05"},{"lineNumber":378,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":379,"author":{"gitId":"ReganChoy"},"content":"* 1a. Date and time is invalid.","lastModifiedDate":"2024-03-05"},{"lineNumber":380,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":381,"author":{"gitId":"ReganChoy"},"content":" * 1a1. ClientCare shows an error message.","lastModifiedDate":"2024-03-05"},{"lineNumber":382,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":383,"author":{"gitId":"ReganChoy"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":384,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":385,"author":{"gitId":"ReganChoy"},"content":"* 1b. Date and time has past.","lastModifiedDate":"2024-03-05"},{"lineNumber":386,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":387,"author":{"gitId":"ReganChoy"},"content":" * 1b1. ClientCare shows an error message.","lastModifiedDate":"2024-03-05"},{"lineNumber":388,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":389,"author":{"gitId":"ReganChoy"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":390,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":391,"author":{"gitId":"ReganChoy"},"content":"**Use case: Last Met**","lastModifiedDate":"2024-03-05"},{"lineNumber":392,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":393,"author":{"gitId":"ReganChoy"},"content":"**MSS**","lastModifiedDate":"2024-03-05"},{"lineNumber":394,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":395,"author":{"gitId":"ReganChoy"},"content":"1. User marks a client as met","lastModifiedDate":"2024-03-05"},{"lineNumber":396,"author":{"gitId":"ReganChoy"},"content":"2. ClientCare updates Last Met date of client","lastModifiedDate":"2024-03-05"},{"lineNumber":397,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":398,"author":{"gitId":"ReganChoy"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":399,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":400,"author":{"gitId":"ReganChoy"},"content":"**Extensions**","lastModifiedDate":"2024-03-05"},{"lineNumber":401,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":402,"author":{"gitId":"ReganChoy"},"content":"* 1a. Client does not exist.","lastModifiedDate":"2024-03-05"},{"lineNumber":403,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":404,"author":{"gitId":"ReganChoy"},"content":" * 1a1. ClientCare shows an error message.","lastModifiedDate":"2024-03-05"},{"lineNumber":405,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":406,"author":{"gitId":"ReganChoy"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":407,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":408,"author":{"gitId":"ReganChoy"},"content":"**Use case: Mark**","lastModifiedDate":"2024-03-05"},{"lineNumber":409,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":410,"author":{"gitId":"ReganChoy"},"content":"**MSS**","lastModifiedDate":"2024-03-05"},{"lineNumber":411,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":412,"author":{"gitId":"ReganChoy"},"content":"1. User marks an appointment with client as done","lastModifiedDate":"2024-03-05"},{"lineNumber":413,"author":{"gitId":"ReganChoy"},"content":"2. ClientCare updates appointment has done","lastModifiedDate":"2024-03-05"},{"lineNumber":414,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":415,"author":{"gitId":"ReganChoy"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":416,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":417,"author":{"gitId":"ReganChoy"},"content":"**Extensions**","lastModifiedDate":"2024-03-05"},{"lineNumber":418,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":419,"author":{"gitId":"ReganChoy"},"content":"* 1a. Appointment does not exist.","lastModifiedDate":"2024-03-05"},{"lineNumber":420,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":421,"author":{"gitId":"ReganChoy"},"content":" * 1a1. ClientCare shows an error message.","lastModifiedDate":"2024-03-05"},{"lineNumber":422,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":423,"author":{"gitId":"ReganChoy"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":424,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":425,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":426,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":427,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":428,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":429,"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":430,"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":431,"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":432,"author":{"gitId":"getsquared"},"content":"4. The system should respond to user input within 2 seconds.","lastModifiedDate":"2024-03-05"},{"lineNumber":433,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":434,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":435,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":436,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":437,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":438,"author":{"gitId":"getsquared"},"content":"* **Client**: Customers or potential customers the insurance agent wants to keep in contact with","lastModifiedDate":"2024-03-05"},{"lineNumber":439,"author":{"gitId":"getsquared"},"content":"* **Command Line Interface (CLI)**: A text-based interface to input commands to interact with the system","lastModifiedDate":"2024-03-05"},{"lineNumber":440,"author":{"gitId":"-"},"content":"* **Mainstream OS**: Windows, Linux, Unix, MacOS","lastModifiedDate":"2024-02-09"},{"lineNumber":441,"author":{"gitId":"getsquared"},"content":"* **AddressBook**: The underlying system that ClientCare is built on. Interchangeable with ClientCare.","lastModifiedDate":"2024-03-05"},{"lineNumber":442,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":443,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":444,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":445,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":446,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":447,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":448,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":449,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":450,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":451,"author":{"gitId":"-"},"content":"**Note:** These instructions only provide a starting point for testers to work on;","lastModifiedDate":"2023-09-12"},{"lineNumber":452,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":453,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":454,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":455,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":456,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":457,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":458,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":459,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":460,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":461,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":462,"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":463,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":464,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":465,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":466,"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":467,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":468,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":469,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","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":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":474,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":475,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":476,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":477,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":478,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":479,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":480,"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":481,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":482,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":483,"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":484,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":485,"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":486,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":487,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":488,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":489,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":490,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":491,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":492,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":493,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":494,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":495,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":496,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"getsquared":37,"ReganChoy":66,"yorklim":10,"-":383}},{"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\"\u003eClientCare\u003c/a\u003e","lastModifiedDate":"2024-02-20"},{"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":"getsquared"},"content":" \u003cli\u003e\u003ca href\u003d\"https://github.com/AY2324S2-CS2103T-W12-1/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":{"getsquared":1,"-":66}},{"path":"docs/team/reganchoy.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"ReganChoy"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":2,"author":{"gitId":"ReganChoy"},"content":"layout: default.md","lastModifiedDate":"2024-03-05"},{"lineNumber":3,"author":{"gitId":"ReganChoy"},"content":"title: \"Regan Choy\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-05"},{"lineNumber":4,"author":{"gitId":"ReganChoy"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":5,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":6,"author":{"gitId":"ReganChoy"},"content":"### Project: ClientCare","lastModifiedDate":"2024-03-05"},{"lineNumber":7,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":8,"author":{"gitId":"ReganChoy"},"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":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":10,"author":{"gitId":"ReganChoy"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-03-05"},{"lineNumber":11,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":12,"author":{"gitId":"ReganChoy"},"content":"* **New Feature**: Added the ability to undo/redo previous commands.","lastModifiedDate":"2024-03-05"},{"lineNumber":13,"author":{"gitId":"ReganChoy"},"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":"ReganChoy"},"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":"ReganChoy"},"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":"ReganChoy"},"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":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":18,"author":{"gitId":"ReganChoy"},"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":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":20,"author":{"gitId":"ReganChoy"},"content":"* **Code contributed**: [RepoSense link]()","lastModifiedDate":"2024-03-05"},{"lineNumber":21,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":22,"author":{"gitId":"ReganChoy"},"content":"* **Project management**:","lastModifiedDate":"2024-03-05"},{"lineNumber":23,"author":{"gitId":"ReganChoy"},"content":" * Managed releases `v1.3` - `v1.5rc` (3 releases) on GitHub","lastModifiedDate":"2024-03-05"},{"lineNumber":24,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":25,"author":{"gitId":"ReganChoy"},"content":"* **Enhancements to existing features**:","lastModifiedDate":"2024-03-05"},{"lineNumber":26,"author":{"gitId":"ReganChoy"},"content":" * Updated the GUI color scheme (Pull requests [\\#33](), [\\#34]())","lastModifiedDate":"2024-03-05"},{"lineNumber":27,"author":{"gitId":"ReganChoy"},"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":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":29,"author":{"gitId":"ReganChoy"},"content":"* **Documentation**:","lastModifiedDate":"2024-03-05"},{"lineNumber":30,"author":{"gitId":"ReganChoy"},"content":" * User Guide:","lastModifiedDate":"2024-03-05"},{"lineNumber":31,"author":{"gitId":"ReganChoy"},"content":" * Added documentation for the features `delete` and `find` [\\#72]()","lastModifiedDate":"2024-03-05"},{"lineNumber":32,"author":{"gitId":"ReganChoy"},"content":" * Did cosmetic tweaks to existing documentation of features `clear`, `exit`: [\\#74]()","lastModifiedDate":"2024-03-05"},{"lineNumber":33,"author":{"gitId":"ReganChoy"},"content":" * Developer Guide:","lastModifiedDate":"2024-03-05"},{"lineNumber":34,"author":{"gitId":"ReganChoy"},"content":" * Added implementation details of the `delete` feature.","lastModifiedDate":"2024-03-05"},{"lineNumber":35,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":36,"author":{"gitId":"ReganChoy"},"content":"* **Community**:","lastModifiedDate":"2024-03-05"},{"lineNumber":37,"author":{"gitId":"ReganChoy"},"content":" * PRs reviewed (with non-trivial review comments): [\\#12](), [\\#32](), [\\#19](), [\\#42]()","lastModifiedDate":"2024-03-05"},{"lineNumber":38,"author":{"gitId":"ReganChoy"},"content":" * Contributed to forum discussions (examples: [1](), [2](), [3](), [4]())","lastModifiedDate":"2024-03-05"},{"lineNumber":39,"author":{"gitId":"ReganChoy"},"content":" * Reported bugs and suggestions for other teams in the class (examples: [1](), [2](), [3]())","lastModifiedDate":"2024-03-05"},{"lineNumber":40,"author":{"gitId":"ReganChoy"},"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":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":42,"author":{"gitId":"ReganChoy"},"content":"* **Tools**:","lastModifiedDate":"2024-03-05"},{"lineNumber":43,"author":{"gitId":"ReganChoy"},"content":" * Integrated a third party library (Natty) to the project ([\\#42]())","lastModifiedDate":"2024-03-05"},{"lineNumber":44,"author":{"gitId":"ReganChoy"},"content":" * Integrated a new Github plugin (CircleCI) to the team repo","lastModifiedDate":"2024-03-05"},{"lineNumber":45,"author":{"gitId":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":46,"author":{"gitId":"ReganChoy"},"content":"* _{you can add/remove categories in the list above}_","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"ReganChoy":46}},{"path":"docs/team/shuqing.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"getsquared"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":2,"author":{"gitId":"getsquared"},"content":"layout: default.md","lastModifiedDate":"2024-03-05"},{"lineNumber":3,"author":{"gitId":"getsquared"},"content":"title: \"Shuqing\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-05"},{"lineNumber":4,"author":{"gitId":"getsquared"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":5,"author":{"gitId":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":6,"author":{"gitId":"getsquared"},"content":"### Project: ClientCare","lastModifiedDate":"2024-03-05"},{"lineNumber":7,"author":{"gitId":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":8,"author":{"gitId":"getsquared"},"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":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":10,"author":{"gitId":"getsquared"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-03-05"},{"lineNumber":11,"author":{"gitId":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":12,"author":{"gitId":"getsquared"},"content":"* **New Feature**: Added the ability to undo/redo previous commands.","lastModifiedDate":"2024-03-05"},{"lineNumber":13,"author":{"gitId":"getsquared"},"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":"getsquared"},"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":"getsquared"},"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":"getsquared"},"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":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":18,"author":{"gitId":"getsquared"},"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":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":20,"author":{"gitId":"getsquared"},"content":"* **Code contributed**: [RepoSense link]()","lastModifiedDate":"2024-03-05"},{"lineNumber":21,"author":{"gitId":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":22,"author":{"gitId":"getsquared"},"content":"* **Project management**:","lastModifiedDate":"2024-03-05"},{"lineNumber":23,"author":{"gitId":"getsquared"},"content":" * Managed releases `v1.3` - `v1.5rc` (3 releases) on GitHub","lastModifiedDate":"2024-03-05"},{"lineNumber":24,"author":{"gitId":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":25,"author":{"gitId":"getsquared"},"content":"* **Enhancements to existing features**:","lastModifiedDate":"2024-03-05"},{"lineNumber":26,"author":{"gitId":"getsquared"},"content":" * Updated the GUI color scheme (Pull requests [\\#33](), [\\#34]())","lastModifiedDate":"2024-03-05"},{"lineNumber":27,"author":{"gitId":"getsquared"},"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":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":29,"author":{"gitId":"getsquared"},"content":"* **Documentation**:","lastModifiedDate":"2024-03-05"},{"lineNumber":30,"author":{"gitId":"getsquared"},"content":" * User Guide:","lastModifiedDate":"2024-03-05"},{"lineNumber":31,"author":{"gitId":"getsquared"},"content":" * Added documentation for the features `delete` and `find` [\\#72]()","lastModifiedDate":"2024-03-05"},{"lineNumber":32,"author":{"gitId":"getsquared"},"content":" * Did cosmetic tweaks to existing documentation of features `clear`, `exit`: [\\#74]()","lastModifiedDate":"2024-03-05"},{"lineNumber":33,"author":{"gitId":"getsquared"},"content":" * Developer Guide:","lastModifiedDate":"2024-03-05"},{"lineNumber":34,"author":{"gitId":"getsquared"},"content":" * Added implementation details of the `delete` feature.","lastModifiedDate":"2024-03-05"},{"lineNumber":35,"author":{"gitId":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":36,"author":{"gitId":"getsquared"},"content":"* **Community**:","lastModifiedDate":"2024-03-05"},{"lineNumber":37,"author":{"gitId":"getsquared"},"content":" * PRs reviewed (with non-trivial review comments): [\\#12](), [\\#32](), [\\#19](), [\\#42]()","lastModifiedDate":"2024-03-05"},{"lineNumber":38,"author":{"gitId":"getsquared"},"content":" * Contributed to forum discussions (examples: [1](), [2](), [3](), [4]())","lastModifiedDate":"2024-03-05"},{"lineNumber":39,"author":{"gitId":"getsquared"},"content":" * Reported bugs and suggestions for other teams in the class (examples: [1](), [2](), [3]())","lastModifiedDate":"2024-03-05"},{"lineNumber":40,"author":{"gitId":"getsquared"},"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":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":42,"author":{"gitId":"getsquared"},"content":"* **Tools**:","lastModifiedDate":"2024-03-05"},{"lineNumber":43,"author":{"gitId":"getsquared"},"content":" * Integrated a third party library (Natty) to the project ([\\#42]())","lastModifiedDate":"2024-03-05"},{"lineNumber":44,"author":{"gitId":"getsquared"},"content":" * Integrated a new Github plugin (CircleCI) to the team repo","lastModifiedDate":"2024-03-05"},{"lineNumber":45,"author":{"gitId":"getsquared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":46,"author":{"gitId":"getsquared"},"content":"* _{you can add/remove categories in the list above}_","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"getsquared":46}},{"path":"docs/team/solomonng.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"solomonng2001"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":2,"author":{"gitId":"solomonng2001"},"content":" layout: default.md","lastModifiedDate":"2024-03-05"},{"lineNumber":3,"author":{"gitId":"solomonng2001"},"content":" title: \"John Doe\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-05"},{"lineNumber":4,"author":{"gitId":"solomonng2001"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":5,"author":{"gitId":"solomonng2001"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":6,"author":{"gitId":"solomonng2001"},"content":"### Project: AddressBook Level 3","lastModifiedDate":"2024-03-05"},{"lineNumber":7,"author":{"gitId":"solomonng2001"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":8,"author":{"gitId":"solomonng2001"},"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":"solomonng2001"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":10,"author":{"gitId":"solomonng2001"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-03-05"},{"lineNumber":11,"author":{"gitId":"solomonng2001"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":12,"author":{"gitId":"solomonng2001"},"content":"* **New Feature**: Added the ability to undo/redo previous commands.","lastModifiedDate":"2024-03-05"},{"lineNumber":13,"author":{"gitId":"solomonng2001"},"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":"solomonng2001"},"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":"solomonng2001"},"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":"solomonng2001"},"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":"solomonng2001"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":18,"author":{"gitId":"solomonng2001"},"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":"solomonng2001"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":20,"author":{"gitId":"solomonng2001"},"content":"* **Code contributed**: [RepoSense link]()","lastModifiedDate":"2024-03-05"},{"lineNumber":21,"author":{"gitId":"solomonng2001"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":22,"author":{"gitId":"solomonng2001"},"content":"* **Project management**:","lastModifiedDate":"2024-03-05"},{"lineNumber":23,"author":{"gitId":"solomonng2001"},"content":" * Managed releases `v1.3` - `v1.5rc` (3 releases) on GitHub","lastModifiedDate":"2024-03-05"},{"lineNumber":24,"author":{"gitId":"solomonng2001"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":25,"author":{"gitId":"solomonng2001"},"content":"* **Enhancements to existing features**:","lastModifiedDate":"2024-03-05"},{"lineNumber":26,"author":{"gitId":"solomonng2001"},"content":" * Updated the GUI color scheme (Pull requests [\\#33](), [\\#34]())","lastModifiedDate":"2024-03-05"},{"lineNumber":27,"author":{"gitId":"solomonng2001"},"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":"solomonng2001"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":29,"author":{"gitId":"solomonng2001"},"content":"* **Documentation**:","lastModifiedDate":"2024-03-05"},{"lineNumber":30,"author":{"gitId":"solomonng2001"},"content":" * User Guide:","lastModifiedDate":"2024-03-05"},{"lineNumber":31,"author":{"gitId":"solomonng2001"},"content":" * Added documentation for the features `delete` and `find` [\\#72]()","lastModifiedDate":"2024-03-05"},{"lineNumber":32,"author":{"gitId":"solomonng2001"},"content":" * Did cosmetic tweaks to existing documentation of features `clear`, `exit`: [\\#74]()","lastModifiedDate":"2024-03-05"},{"lineNumber":33,"author":{"gitId":"solomonng2001"},"content":" * Developer Guide:","lastModifiedDate":"2024-03-05"},{"lineNumber":34,"author":{"gitId":"solomonng2001"},"content":" * Added implementation details of the `delete` feature.","lastModifiedDate":"2024-03-05"},{"lineNumber":35,"author":{"gitId":"solomonng2001"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":36,"author":{"gitId":"solomonng2001"},"content":"* **Community**:","lastModifiedDate":"2024-03-05"},{"lineNumber":37,"author":{"gitId":"solomonng2001"},"content":" * PRs reviewed (with non-trivial review comments): [\\#12](), [\\#32](), [\\#19](), [\\#42]()","lastModifiedDate":"2024-03-05"},{"lineNumber":38,"author":{"gitId":"solomonng2001"},"content":" * Contributed to forum discussions (examples: [1](), [2](), [3](), [4]())","lastModifiedDate":"2024-03-05"},{"lineNumber":39,"author":{"gitId":"solomonng2001"},"content":" * Reported bugs and suggestions for other teams in the class (examples: [1](), [2](), [3]())","lastModifiedDate":"2024-03-05"},{"lineNumber":40,"author":{"gitId":"solomonng2001"},"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":"solomonng2001"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":42,"author":{"gitId":"solomonng2001"},"content":"* **Tools**:","lastModifiedDate":"2024-03-05"},{"lineNumber":43,"author":{"gitId":"solomonng2001"},"content":" * Integrated a third party library (Natty) to the project ([\\#42]())","lastModifiedDate":"2024-03-05"},{"lineNumber":44,"author":{"gitId":"solomonng2001"},"content":" * Integrated a new Github plugin (CircleCI) to the team repo","lastModifiedDate":"2024-03-05"},{"lineNumber":45,"author":{"gitId":"solomonng2001"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":46,"author":{"gitId":"solomonng2001"},"content":"* _{you can add/remove categories in the list above}_","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"solomonng2001":46}},{"path":"docs/team/yorklim.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"yorklim"},"content":"---","lastModifiedDate":"2024-03-06"},{"lineNumber":2,"author":{"gitId":"yorklim"},"content":"layout: default.md","lastModifiedDate":"2024-03-06"},{"lineNumber":3,"author":{"gitId":"yorklim"},"content":"title: \"York Lim\u0027s Project Portfolio Page\"","lastModifiedDate":"2024-03-06"},{"lineNumber":4,"author":{"gitId":"yorklim"},"content":"---","lastModifiedDate":"2024-03-06"},{"lineNumber":5,"author":{"gitId":"yorklim"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":6,"author":{"gitId":"yorklim"},"content":"### Project: ClientCare","lastModifiedDate":"2024-03-06"},{"lineNumber":7,"author":{"gitId":"yorklim"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":8,"author":{"gitId":"yorklim"},"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":"yorklim"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":10,"author":{"gitId":"yorklim"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-03-06"},{"lineNumber":11,"author":{"gitId":"yorklim"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":12,"author":{"gitId":"yorklim"},"content":"* **New Feature**: Added the ability to undo/redo previous commands.","lastModifiedDate":"2024-03-06"},{"lineNumber":13,"author":{"gitId":"yorklim"},"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":"yorklim"},"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":"yorklim"},"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":"yorklim"},"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":"yorklim"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":18,"author":{"gitId":"yorklim"},"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":"yorklim"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":20,"author":{"gitId":"yorklim"},"content":"* **Code contributed**: [RepoSense link]()","lastModifiedDate":"2024-03-06"},{"lineNumber":21,"author":{"gitId":"yorklim"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":22,"author":{"gitId":"yorklim"},"content":"* **Project management**:","lastModifiedDate":"2024-03-06"},{"lineNumber":23,"author":{"gitId":"yorklim"},"content":" * Managed releases `v1.3` - `v1.5rc` (3 releases) on GitHub","lastModifiedDate":"2024-03-06"},{"lineNumber":24,"author":{"gitId":"yorklim"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":25,"author":{"gitId":"yorklim"},"content":"* **Enhancements to existing features**:","lastModifiedDate":"2024-03-06"},{"lineNumber":26,"author":{"gitId":"yorklim"},"content":" * Updated the GUI color scheme (Pull requests [\\#33](), [\\#34]())","lastModifiedDate":"2024-03-06"},{"lineNumber":27,"author":{"gitId":"yorklim"},"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":"yorklim"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":29,"author":{"gitId":"yorklim"},"content":"* **Documentation**:","lastModifiedDate":"2024-03-06"},{"lineNumber":30,"author":{"gitId":"yorklim"},"content":" * User Guide:","lastModifiedDate":"2024-03-06"},{"lineNumber":31,"author":{"gitId":"yorklim"},"content":" * Added documentation for the features `delete` and `find` [\\#72]()","lastModifiedDate":"2024-03-06"},{"lineNumber":32,"author":{"gitId":"yorklim"},"content":" * Did cosmetic tweaks to existing documentation of features `clear`, `exit`: [\\#74]()","lastModifiedDate":"2024-03-06"},{"lineNumber":33,"author":{"gitId":"yorklim"},"content":" * Developer Guide:","lastModifiedDate":"2024-03-06"},{"lineNumber":34,"author":{"gitId":"yorklim"},"content":" * Added implementation details of the `delete` feature.","lastModifiedDate":"2024-03-06"},{"lineNumber":35,"author":{"gitId":"yorklim"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":36,"author":{"gitId":"yorklim"},"content":"* **Community**:","lastModifiedDate":"2024-03-06"},{"lineNumber":37,"author":{"gitId":"yorklim"},"content":" * PRs reviewed (with non-trivial review comments): [\\#12](), [\\#32](), [\\#19](), [\\#42]()","lastModifiedDate":"2024-03-06"},{"lineNumber":38,"author":{"gitId":"yorklim"},"content":" * Contributed to forum discussions (examples: [1](), [2](), [3](), [4]())","lastModifiedDate":"2024-03-06"},{"lineNumber":39,"author":{"gitId":"yorklim"},"content":" * Reported bugs and suggestions for other teams in the class (examples: [1](), [2](), [3]())","lastModifiedDate":"2024-03-06"},{"lineNumber":40,"author":{"gitId":"yorklim"},"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":"yorklim"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":42,"author":{"gitId":"yorklim"},"content":"* **Tools**:","lastModifiedDate":"2024-03-06"},{"lineNumber":43,"author":{"gitId":"yorklim"},"content":" * Integrated a third party library (Natty) to the project ([\\#42]())","lastModifiedDate":"2024-03-06"},{"lineNumber":44,"author":{"gitId":"yorklim"},"content":" * Integrated a new Github plugin (CircleCI) to the team repo","lastModifiedDate":"2024-03-06"},{"lineNumber":45,"author":{"gitId":"yorklim"},"content":"","lastModifiedDate":"2024-03-06"},{"lineNumber":46,"author":{"gitId":"yorklim"},"content":"* _{you can add/remove categories in the list above}_","lastModifiedDate":"2024-03-06"}],"authorContributionMap":{"yorklim":46}}] diff --git a/AY2324S2-CS2103T-W12-1_tp_master/commits.json b/AY2324S2-CS2103T-W12-1_tp_master/commits.json index 00ecea3f..8f01af40 100644 --- a/AY2324S2-CS2103T-W12-1_tp_master/commits.json +++ b/AY2324S2-CS2103T-W12-1_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"getsquared":[{"date":"2024-03-05","commitResults":[{"hash":"39ea1f1fa1afce0456ff0b1288151b2aa0449569","isMergeCommit":false,"messageTitle":"Add info to AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":0}}},{"hash":"3a3e3f5c068f6a3534397c6af710f823b850e8ed","isMergeCommit":false,"messageTitle":"Update info in AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":51,"deletions":5}}},{"hash":"8a0f965fcf9f26b526ed4efbe62b47b3d0163cfc","isMergeCommit":false,"messageTitle":"Update Website Navbar Github Link","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"69226491532efdc47d888697436b1ed041a072bf","isMergeCommit":false,"messageTitle":"Update DG Requirements","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":44,"deletions":18}}}]}],"ReganChoy":[{"date":"2024-02-25","commitResults":[{"hash":"3a7ec979d8f15325c7f31b1f51946536fae91b31","isMergeCommit":false,"messageTitle":"Add new MetCommand class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":86,"deletions":0}}},{"hash":"1910c330493fb2d66724749ae4650a6620903b7a","isMergeCommit":false,"messageTitle":"Add new MetCommand class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":148,"deletions":46}}}]},{"date":"2024-03-05","commitResults":[{"hash":"bb196b2ea48c3731d2c9a1488986a7b56bb99fca","isMergeCommit":true,"messageTitle":"Merge pull request #25 from getsquared/add-getsquared-info","messageBody":"Add Shuqing AboutUs Info","fileTypesAndContributionMap":{}},{"hash":"082c80138aee6a0d3502c740f66e1149243df4f2","isMergeCommit":true,"messageTitle":"Merge pull request #35 from getsquared/update-docs-settings","messageBody":"Update Website Navbar Github Link","fileTypesAndContributionMap":{}},{"hash":"0c737d7b30e0a18c54fe2e92ac075384da7f9266","isMergeCommit":true,"messageTitle":"Merge pull request #36 from getsquared/add-dg-requirements","messageBody":"Update DG Requirements","fileTypesAndContributionMap":{}},{"hash":"0a2ab9906b6efcc28bd28d1b4ae79d363c21fa73","isMergeCommit":false,"messageTitle":"Reset master branch back to origin state","messageBody":"Copy origin src folder back into the branch\n","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":48}}},{"hash":"1fea686b0b0fdf00852a3f757d5fcd9f06e9d197","isMergeCommit":false,"messageTitle":"Remove MetCommand class file","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":91}}},{"hash":"972427777c85a30d40d854d851bb01e288eabde8","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S2-CS2103T-W12-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3f8649316089211b45b834035c45817648d078d4","isMergeCommit":false,"messageTitle":"Add ReganChoy AboutUs info","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":58,"deletions":0}}},{"hash":"dfe3a7435b5f895b1dcfa0bd766f33c5abfb9161","isMergeCommit":false,"messageTitle":"Fix naming error in aboutMe","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"9385de5870c9d8724b5b5c1574f93ae70954a1d9","isMergeCommit":false,"messageTitle":"Fix check errors","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":60},"docs":{"insertions":46,"deletions":46}}},{"hash":"398a53ad1f4f809ddd95f3c26658422e5cc5b06d","isMergeCommit":false,"messageTitle":"Fix name change","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]}],"solomonng2001":[{"date":"2024-03-05","commitResults":[{"hash":"735042ec98fecd4dcfbb1dc9a63885e98103cfa1","isMergeCommit":false,"messageTitle":"Add solomonng info in aboutus","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":51,"deletions":5}}},{"hash":"9373c40d227a562e98f1957a46fb86ad97e12767","isMergeCommit":false,"messageTitle":"Refactor solomonng2001 photo link in aboutus","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"7609ad60931949f6f6a8e02bfd363e0736272924","isMergeCommit":true,"messageTitle":"Merge pull request #47 from ReganChoy/branch_aboutus","messageBody":"Add ReganChoy AboutUs Info","fileTypesAndContributionMap":{}},{"hash":"5285950245ad9624602d5954e2bb16ac335fb1bb","isMergeCommit":true,"messageTitle":"Merge fix for met class errors Merge branch \u0027master\u0027 into add-solomonng-aboutus","messageBody":"","fileTypesAndContributionMap":{}}]}],"yorklim":[{"date":"2024-03-06","commitResults":[{"hash":"1b0f8c9f7d675c1a147026367750ba7fc20541f9","isMergeCommit":true,"messageTitle":"Merge pull request #49 from solomonng2001/add-solomonng-aboutus","messageBody":"Add solomonng aboutus info","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"getsquared":{"docs":95,"functional-code":0,"test-code":0},"ReganChoy":{"docs":55,"functional-code":0,"test-code":0},"solomonng2001":{"docs":51,"functional-code":0,"test-code":0},"yorklim":{"docs":0,"functional-code":0,"test-code":0}},"authorContributionVariance":{"getsquared":1022.4853,"ReganChoy":13768.713,"solomonng2001":238.86388,"yorklim":0.0},"authorDisplayNameMap":{"getsquared":"CS2103T-W12-1 GE S..QING","ReganChoy":"CS2103T-W12-1 REGA..N FU","solomonng2001":"CS2103T-W12-1 NG R..OMON","yorklim":"CS2103T-W12-1 CHIA.. LIM"}} +{"authorDailyContributionsMap":{"getsquared":[{"date":"2024-03-05","commitResults":[{"hash":"39ea1f1fa1afce0456ff0b1288151b2aa0449569","isMergeCommit":false,"messageTitle":"Add info to AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":0}}},{"hash":"3a3e3f5c068f6a3534397c6af710f823b850e8ed","isMergeCommit":false,"messageTitle":"Update info in AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":51,"deletions":5}}},{"hash":"8a0f965fcf9f26b526ed4efbe62b47b3d0163cfc","isMergeCommit":false,"messageTitle":"Update Website Navbar Github Link","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"69226491532efdc47d888697436b1ed041a072bf","isMergeCommit":false,"messageTitle":"Update DG Requirements","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":44,"deletions":18}}}]}],"ReganChoy":[{"date":"2024-02-25","commitResults":[{"hash":"3a7ec979d8f15325c7f31b1f51946536fae91b31","isMergeCommit":false,"messageTitle":"Add new MetCommand class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":86,"deletions":0}}},{"hash":"1910c330493fb2d66724749ae4650a6620903b7a","isMergeCommit":false,"messageTitle":"Add new MetCommand class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":148,"deletions":46}}}]},{"date":"2024-03-05","commitResults":[{"hash":"bb196b2ea48c3731d2c9a1488986a7b56bb99fca","isMergeCommit":true,"messageTitle":"Merge pull request #25 from getsquared/add-getsquared-info","messageBody":"Add Shuqing AboutUs Info","fileTypesAndContributionMap":{}},{"hash":"082c80138aee6a0d3502c740f66e1149243df4f2","isMergeCommit":true,"messageTitle":"Merge pull request #35 from getsquared/update-docs-settings","messageBody":"Update Website Navbar Github Link","fileTypesAndContributionMap":{}},{"hash":"0c737d7b30e0a18c54fe2e92ac075384da7f9266","isMergeCommit":true,"messageTitle":"Merge pull request #36 from getsquared/add-dg-requirements","messageBody":"Update DG Requirements","fileTypesAndContributionMap":{}},{"hash":"0a2ab9906b6efcc28bd28d1b4ae79d363c21fa73","isMergeCommit":false,"messageTitle":"Reset master branch back to origin state","messageBody":"Copy origin src folder back into the branch\n","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":48}}},{"hash":"1fea686b0b0fdf00852a3f757d5fcd9f06e9d197","isMergeCommit":false,"messageTitle":"Remove MetCommand class file","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":91}}},{"hash":"972427777c85a30d40d854d851bb01e288eabde8","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S2-CS2103T-W12-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3f8649316089211b45b834035c45817648d078d4","isMergeCommit":false,"messageTitle":"Add ReganChoy AboutUs info","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":58,"deletions":0}}},{"hash":"dfe3a7435b5f895b1dcfa0bd766f33c5abfb9161","isMergeCommit":false,"messageTitle":"Fix naming error in aboutMe","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"9385de5870c9d8724b5b5c1574f93ae70954a1d9","isMergeCommit":false,"messageTitle":"Fix check errors","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":60},"docs":{"insertions":46,"deletions":46}}},{"hash":"92ec9e71b08cf1fc39b353a29400805a944ed1a0","isMergeCommit":false,"messageTitle":"Remove MetCommandParser class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":60}}},{"hash":"f9d3c07ac18070cb6ac3fa31c6cd819362b5dca2","isMergeCommit":false,"messageTitle":"Update developer guide","messageBody":"New user stories and use cases added\n","fileTypesAndContributionMap":{"docs":{"insertions":78,"deletions":13}}},{"hash":"2f69924289af36f3d350f163ae5f18ed63aad7b7","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S2-CS2103T-W12-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"d6a4f7f233bf78904313f82f3db2955cf6874a8e","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-developer_guide","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"88d563da18e03f80b44eba74cab1ab0d0e4f8324","isMergeCommit":false,"messageTitle":"Fix name change","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"6b3ef448f2734b8901ff003427acade2fb442c89","isMergeCommit":false,"messageTitle":"Fix name change","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"398a53ad1f4f809ddd95f3c26658422e5cc5b06d","isMergeCommit":false,"messageTitle":"Fix name change","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"d1426d76a8b3246f89ea96ee2813864d20df9ef4","isMergeCommit":false,"messageTitle":"Fix check error","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":46,"deletions":46}}},{"hash":"e8b970379ab2f138cacf921042797847023c5037","isMergeCommit":false,"messageTitle":"Test commit changes","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"5eecc4e946a3596f4de07c8b2b339b2555aa5d8a","isMergeCommit":false,"messageTitle":"Remove test text","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"4998ec9ad409b80a075c16dd15f3821306e6fb43","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S2-CS2103T-W12-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6cad6e952437b63036deca6232d38fdd3e784761","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-developer_guide","messageBody":"","fileTypesAndContributionMap":{}}]}],"solomonng2001":[{"date":"2024-03-05","commitResults":[{"hash":"735042ec98fecd4dcfbb1dc9a63885e98103cfa1","isMergeCommit":false,"messageTitle":"Add solomonng info in aboutus","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":51,"deletions":5}}},{"hash":"9373c40d227a562e98f1957a46fb86ad97e12767","isMergeCommit":false,"messageTitle":"Refactor solomonng2001 photo link in aboutus","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"7609ad60931949f6f6a8e02bfd363e0736272924","isMergeCommit":true,"messageTitle":"Merge pull request #47 from ReganChoy/branch_aboutus","messageBody":"Add ReganChoy AboutUs Info","fileTypesAndContributionMap":{}},{"hash":"5285950245ad9624602d5954e2bb16ac335fb1bb","isMergeCommit":true,"messageTitle":"Merge fix for met class errors Merge branch \u0027master\u0027 into add-solomonng-aboutus","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2024-03-06","commitResults":[{"hash":"9ab6a92f4726fed2053b25944e1f9cf547130e92","isMergeCommit":true,"messageTitle":"Merge pull request #51 from yorklim/AboutUs","messageBody":"Add Yorklim AboutUs Info","fileTypesAndContributionMap":{}},{"hash":"be503811835a7dbb7bbdc6f13822cf068826293b","isMergeCommit":true,"messageTitle":"Merge pull request #52 from yorklim/DevGuide","messageBody":"Add User stories to DevGuide","fileTypesAndContributionMap":{}}]}],"yorklim":[{"date":"2024-03-06","commitResults":[{"hash":"1b0f8c9f7d675c1a147026367750ba7fc20541f9","isMergeCommit":true,"messageTitle":"Merge pull request #49 from solomonng2001/add-solomonng-aboutus","messageBody":"Add solomonng aboutus info","fileTypesAndContributionMap":{}},{"hash":"feb839f4769b31f88f94e01e1a74693e6788bd56","isMergeCommit":false,"messageTitle":"Add Yorklim AboutUs Info","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":52,"deletions":6}}},{"hash":"ec659f4ce686e625757d679cf00d2d318376abb0","isMergeCommit":true,"messageTitle":"Merge pull request #48 from ReganChoy/branch-developer_guide","messageBody":"Update DG Requirements","fileTypesAndContributionMap":{}},{"hash":"b29f82bd28e53da5e51aa4ce907c8d814544dd46","isMergeCommit":false,"messageTitle":"Add User stories to DevGuide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":29,"deletions":20}}}]}]},"authorFileTypeContributionMap":{"getsquared":{"docs":89,"functional-code":0,"test-code":0},"ReganChoy":{"docs":119,"functional-code":0,"test-code":0},"solomonng2001":{"docs":51,"functional-code":0,"test-code":0},"yorklim":{"docs":62,"functional-code":0,"test-code":0}},"authorContributionVariance":{"getsquared":1022.4853,"ReganChoy":30385.207,"solomonng2001":238.86388,"yorklim":812.94684},"authorDisplayNameMap":{"getsquared":"CS2103T-W12-1 GE S..QING","ReganChoy":"CS2103T-W12-1 REGA..N FU","solomonng2001":"CS2103T-W12-1 NG R..OMON","yorklim":"CS2103T-W12-1 CHIA.. LIM"}} diff --git a/AY2324S2-CS2103T-W12-2_tp_master/authorship.json b/AY2324S2-CS2103T-W12-2_tp_master/authorship.json index fb4e85f6..a5a5fc9f 100644 --- a/AY2324S2-CS2103T-W12-2_tp_master/authorship.json +++ b/AY2324S2-CS2103T-W12-2_tp_master/authorship.json @@ -1 +1 @@ -[{"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":"blaukc"},"content":"### Brandon Lau","lastModifiedDate":"2024-02-28"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"blaukc"},"content":"\u003cimg src\u003d\"images/blaukc.png\" width\u003d\"200px\" height\u003d\"200px\" style\u003d\"object-fit: cover; object-position: bottom\"\u003e","lastModifiedDate":"2024-02-28"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"blaukc"},"content":"[[github](http://github.com/blaukc)]","lastModifiedDate":"2024-02-28"},{"lineNumber":27,"author":{"gitId":"blaukc"},"content":"[[portfolio](team/blaukc.md)]","lastModifiedDate":"2024-02-28"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":29,"author":{"gitId":"blaukc"},"content":"* Role: Developer","lastModifiedDate":"2024-02-28"},{"lineNumber":30,"author":{"gitId":"blaukc"},"content":"* Responsibilities: Code Quality","lastModifiedDate":"2024-02-28"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"-"},"content":"### Johnny Doe","lastModifiedDate":"2020-05-23"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/johndoe.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2020-06-17"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"-"},"content":"[[github](http://github.com/johndoe)] [[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-06-17"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"-"},"content":"* Responsibilities: Data","lastModifiedDate":"2020-05-23"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":41,"author":{"gitId":"-"},"content":"### Jean Doe","lastModifiedDate":"2020-06-17"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/johndoe.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2020-06-17"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":"[[github](http://github.com/johndoe)]","lastModifiedDate":"2020-06-17"},{"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":"-"},"content":"* Responsibilities: Dev Ops + Threading","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"blaukc":6,"-":43}},{"path":"docs/team/blaukc.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"blaukc"},"content":"---","lastModifiedDate":"2024-02-28"},{"lineNumber":2,"author":{"gitId":"blaukc"},"content":"layout: page","lastModifiedDate":"2024-02-28"},{"lineNumber":3,"author":{"gitId":"blaukc"},"content":"title: blaukc\u0027s Project Portfolio Page","lastModifiedDate":"2024-02-28"},{"lineNumber":4,"author":{"gitId":"blaukc"},"content":"---","lastModifiedDate":"2024-02-28"},{"lineNumber":5,"author":{"gitId":"blaukc"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":6,"author":{"gitId":"blaukc"},"content":"### Project: ModContacts","lastModifiedDate":"2024-02-28"},{"lineNumber":7,"author":{"gitId":"blaukc"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":8,"author":{"gitId":"blaukc"},"content":"ModContacts is a desktop address book application used to manage our friend\u0027s contacts and the modules they are taking. 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-28"},{"lineNumber":9,"author":{"gitId":"blaukc"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":10,"author":{"gitId":"blaukc"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-02-28"},{"lineNumber":11,"author":{"gitId":"blaukc"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":12,"author":{"gitId":"blaukc"},"content":"- **New Feature**: Currently nothing","lastModifiedDate":"2024-02-28"},{"lineNumber":13,"author":{"gitId":"blaukc"},"content":" - What it does: Currently nothing","lastModifiedDate":"2024-02-28"},{"lineNumber":14,"author":{"gitId":"blaukc"},"content":" - Justification: Currently nothing","lastModifiedDate":"2024-02-28"},{"lineNumber":15,"author":{"gitId":"blaukc"},"content":" - Highlights: Currently nothing","lastModifiedDate":"2024-02-28"},{"lineNumber":16,"author":{"gitId":"blaukc"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":17,"author":{"gitId":"blaukc"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":18,"author":{"gitId":"blaukc"},"content":"- **Code contributed**: [RepoSense link]()","lastModifiedDate":"2024-02-28"},{"lineNumber":19,"author":{"gitId":"blaukc"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":20,"author":{"gitId":"blaukc"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":21,"author":{"gitId":"blaukc"},"content":"- **Project management**:","lastModifiedDate":"2024-02-28"},{"lineNumber":22,"author":{"gitId":"blaukc"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":23,"author":{"gitId":"blaukc"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":24,"author":{"gitId":"blaukc"},"content":"- **Enhancements to existing features**:","lastModifiedDate":"2024-02-28"},{"lineNumber":25,"author":{"gitId":"blaukc"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":26,"author":{"gitId":"blaukc"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":27,"author":{"gitId":"blaukc"},"content":"- **Documentation**:","lastModifiedDate":"2024-02-28"},{"lineNumber":28,"author":{"gitId":"blaukc"},"content":" - User Guide:","lastModifiedDate":"2024-02-28"},{"lineNumber":29,"author":{"gitId":"blaukc"},"content":" - Something","lastModifiedDate":"2024-02-28"},{"lineNumber":30,"author":{"gitId":"blaukc"},"content":" - Developer Guide:","lastModifiedDate":"2024-02-28"},{"lineNumber":31,"author":{"gitId":"blaukc"},"content":" - Something","lastModifiedDate":"2024-02-28"},{"lineNumber":32,"author":{"gitId":"blaukc"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":33,"author":{"gitId":"blaukc"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":34,"author":{"gitId":"blaukc"},"content":"- **Community**:","lastModifiedDate":"2024-02-28"},{"lineNumber":35,"author":{"gitId":"blaukc"},"content":" -PRs reviewed (with non-trivial review comments):","lastModifiedDate":"2024-02-28"},{"lineNumber":36,"author":{"gitId":"blaukc"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":37,"author":{"gitId":"blaukc"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":38,"author":{"gitId":"blaukc"},"content":"- **Tools**:","lastModifiedDate":"2024-02-28"}],"authorContributionMap":{"blaukc":38}}] +[{"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":"blaukc"},"content":"### Brandon Lau","lastModifiedDate":"2024-02-28"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"blaukc"},"content":"\u003cimg src\u003d\"images/blaukc.png\" width\u003d\"200px\" height\u003d\"200px\" style\u003d\"object-fit: cover; object-position: bottom\"\u003e","lastModifiedDate":"2024-02-28"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"blaukc"},"content":"[[github](http://github.com/blaukc)]","lastModifiedDate":"2024-02-28"},{"lineNumber":27,"author":{"gitId":"blaukc"},"content":"[[portfolio](team/blaukc.md)]","lastModifiedDate":"2024-02-28"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":29,"author":{"gitId":"blaukc"},"content":"* Role: Developer","lastModifiedDate":"2024-02-28"},{"lineNumber":30,"author":{"gitId":"blaukc"},"content":"* Responsibilities: Code Quality","lastModifiedDate":"2024-02-28"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":32,"author":{"gitId":"yadunut"},"content":"### Yadunand Prem","lastModifiedDate":"2024-03-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"yadunut"},"content":"\u003cimg src\u003d\"images/yadunut.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"yadunut"},"content":"[[homepage](https://gitea.ts.yadunut.com)]","lastModifiedDate":"2024-03-05"},{"lineNumber":37,"author":{"gitId":"yadunut"},"content":"[[github](http://github.com/yadunut)] ","lastModifiedDate":"2024-03-05"},{"lineNumber":38,"author":{"gitId":"yadunut"},"content":"[[portfolio](team/yadunut.md)]","lastModifiedDate":"2024-03-06"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":40,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":41,"author":{"gitId":"yadunut"},"content":"* Responsibilities: Code Writer","lastModifiedDate":"2024-03-05"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"-"},"content":"### Jean Doe","lastModifiedDate":"2020-06-17"},{"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":"-"},"content":"[[github](http://github.com/johndoe)]","lastModifiedDate":"2020-06-17"},{"lineNumber":48,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":50,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"-"},"content":"* Responsibilities: Dev Ops + Threading","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"yadunut":6,"blaukc":6,"-":39}},{"path":"docs/team/blaukc.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"blaukc"},"content":"---","lastModifiedDate":"2024-02-28"},{"lineNumber":2,"author":{"gitId":"blaukc"},"content":"layout: page","lastModifiedDate":"2024-02-28"},{"lineNumber":3,"author":{"gitId":"blaukc"},"content":"title: blaukc\u0027s Project Portfolio Page","lastModifiedDate":"2024-02-28"},{"lineNumber":4,"author":{"gitId":"blaukc"},"content":"---","lastModifiedDate":"2024-02-28"},{"lineNumber":5,"author":{"gitId":"blaukc"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":6,"author":{"gitId":"blaukc"},"content":"### Project: ModContacts","lastModifiedDate":"2024-02-28"},{"lineNumber":7,"author":{"gitId":"blaukc"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":8,"author":{"gitId":"blaukc"},"content":"ModContacts is a desktop address book application used to manage our friend\u0027s contacts and the modules they are taking. 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-28"},{"lineNumber":9,"author":{"gitId":"blaukc"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":10,"author":{"gitId":"blaukc"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-02-28"},{"lineNumber":11,"author":{"gitId":"blaukc"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":12,"author":{"gitId":"blaukc"},"content":"- **New Feature**: Currently nothing","lastModifiedDate":"2024-02-28"},{"lineNumber":13,"author":{"gitId":"blaukc"},"content":" - What it does: Currently nothing","lastModifiedDate":"2024-02-28"},{"lineNumber":14,"author":{"gitId":"blaukc"},"content":" - Justification: Currently nothing","lastModifiedDate":"2024-02-28"},{"lineNumber":15,"author":{"gitId":"blaukc"},"content":" - Highlights: Currently nothing","lastModifiedDate":"2024-02-28"},{"lineNumber":16,"author":{"gitId":"blaukc"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":17,"author":{"gitId":"blaukc"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":18,"author":{"gitId":"blaukc"},"content":"- **Code contributed**: [RepoSense link]()","lastModifiedDate":"2024-02-28"},{"lineNumber":19,"author":{"gitId":"blaukc"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":20,"author":{"gitId":"blaukc"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":21,"author":{"gitId":"blaukc"},"content":"- **Project management**:","lastModifiedDate":"2024-02-28"},{"lineNumber":22,"author":{"gitId":"blaukc"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":23,"author":{"gitId":"blaukc"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":24,"author":{"gitId":"blaukc"},"content":"- **Enhancements to existing features**:","lastModifiedDate":"2024-02-28"},{"lineNumber":25,"author":{"gitId":"blaukc"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":26,"author":{"gitId":"blaukc"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":27,"author":{"gitId":"blaukc"},"content":"- **Documentation**:","lastModifiedDate":"2024-02-28"},{"lineNumber":28,"author":{"gitId":"blaukc"},"content":" - User Guide:","lastModifiedDate":"2024-02-28"},{"lineNumber":29,"author":{"gitId":"blaukc"},"content":" - Something","lastModifiedDate":"2024-02-28"},{"lineNumber":30,"author":{"gitId":"blaukc"},"content":" - Developer Guide:","lastModifiedDate":"2024-02-28"},{"lineNumber":31,"author":{"gitId":"blaukc"},"content":" - Something","lastModifiedDate":"2024-02-28"},{"lineNumber":32,"author":{"gitId":"blaukc"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":33,"author":{"gitId":"blaukc"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":34,"author":{"gitId":"blaukc"},"content":"- **Community**:","lastModifiedDate":"2024-02-28"},{"lineNumber":35,"author":{"gitId":"blaukc"},"content":" -PRs reviewed (with non-trivial review comments):","lastModifiedDate":"2024-02-28"},{"lineNumber":36,"author":{"gitId":"blaukc"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":37,"author":{"gitId":"blaukc"},"content":"","lastModifiedDate":"2024-02-28"},{"lineNumber":38,"author":{"gitId":"blaukc"},"content":"- **Tools**:","lastModifiedDate":"2024-02-28"}],"authorContributionMap":{"blaukc":38}},{"path":"docs/team/yadunut.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"yadunut"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":2,"author":{"gitId":"yadunut"},"content":"layout: page","lastModifiedDate":"2024-03-05"},{"lineNumber":3,"author":{"gitId":"yadunut"},"content":"title: Yadunand\u0027s Project Portfolio Page","lastModifiedDate":"2024-03-05"},{"lineNumber":4,"author":{"gitId":"yadunut"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":5,"author":{"gitId":"yadunut"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":6,"author":{"gitId":"yadunut"},"content":"### Project: AddressBook Level 3","lastModifiedDate":"2024-03-05"},{"lineNumber":7,"author":{"gitId":"yadunut"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":8,"author":{"gitId":"yadunut"},"content":"ModContacts is a desktop address book application used to manage our friend\u0027s contacts and the modules they are taking. 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":"yadunut"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":10,"author":{"gitId":"yadunut"},"content":"Given below are my contributions to the project.","lastModifiedDate":"2024-03-05"},{"lineNumber":11,"author":{"gitId":"yadunut"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":12,"author":{"gitId":"yadunut"},"content":"* Setting up the CI pipeline and ensuring it was working","lastModifiedDate":"2024-03-05"},{"lineNumber":13,"author":{"gitId":"yadunut"},"content":"* Setting up the project page","lastModifiedDate":"2024-03-05"},{"lineNumber":14,"author":{"gitId":"yadunut"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":15,"author":{"gitId":"yadunut"},"content":"* **Code contributed**: [RepoSense link]()","lastModifiedDate":"2024-03-05"},{"lineNumber":16,"author":{"gitId":"yadunut"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":17,"author":{"gitId":"yadunut"},"content":"* **Project management**:","lastModifiedDate":"2024-03-05"},{"lineNumber":18,"author":{"gitId":"yadunut"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":19,"author":{"gitId":"yadunut"},"content":"* **Enhancements to existing features**:","lastModifiedDate":"2024-03-05"},{"lineNumber":20,"author":{"gitId":"yadunut"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":21,"author":{"gitId":"yadunut"},"content":"* **Documentation**:","lastModifiedDate":"2024-03-05"},{"lineNumber":22,"author":{"gitId":"yadunut"},"content":" * User Guide:","lastModifiedDate":"2024-03-05"},{"lineNumber":23,"author":{"gitId":"yadunut"},"content":" * Developer Guide:","lastModifiedDate":"2024-03-05"},{"lineNumber":24,"author":{"gitId":"yadunut"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":25,"author":{"gitId":"yadunut"},"content":"* **Community**:","lastModifiedDate":"2024-03-05"},{"lineNumber":26,"author":{"gitId":"yadunut"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":27,"author":{"gitId":"yadunut"},"content":"* **Tools**:","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"yadunut":27}}] diff --git a/AY2324S2-CS2103T-W12-2_tp_master/commits.json b/AY2324S2-CS2103T-W12-2_tp_master/commits.json index 591f5f45..e2f0393f 100644 --- a/AY2324S2-CS2103T-W12-2_tp_master/commits.json +++ b/AY2324S2-CS2103T-W12-2_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"AdityaB4":[],"yadunut":[],"taufiq":[],"blaukc":[{"date":"2024-02-28","commitResults":[{"hash":"5b3d763bb59a9d4be3f3ff95b4aaf73acd425239","isMergeCommit":false,"messageTitle":"Update AboutUs page, and add individual page and photo","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":44,"deletions":16}}},{"hash":"71d6d95c18ee7071b3c55d17d59174286b711df9","isMergeCommit":false,"messageTitle":"Add newline to end of blaukc.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"ba433d397d2388f0feb387ad4c64b0f55ee87fbb","isMergeCommit":true,"messageTitle":"Merge pull request #13 from blaukc/update-about-us","messageBody":"Update AboutUs (Brandon)","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"AdityaB4":{"docs":0,"functional-code":0,"test-code":0},"yadunut":{"docs":0,"functional-code":0,"test-code":0},"taufiq":{"docs":0,"functional-code":0,"test-code":0},"blaukc":{"docs":44,"functional-code":0,"test-code":0}},"authorContributionVariance":{"AdityaB4":0.0,"yadunut":0.0,"taufiq":0.0,"blaukc":533.8889},"authorDisplayNameMap":{"AdityaB4":"CS2103T-W12-2 BAJA..ITYA","yadunut":"CS2103T-W12-2 YADU..PREM","taufiq":"CS2103T-W12-2 TAUF..MMED","blaukc":"CS2103T-W12-2 BRAN..CHUN"}} +{"authorDailyContributionsMap":{"AdityaB4":[],"yadunut":[{"date":"2024-03-05","commitResults":[{"hash":"adbba1f1a775b89577c96fac3ce8e25e4daa3be4","isMergeCommit":false,"messageTitle":"Update the about me page with yadunut\u0027s details","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":33,"deletions":4}}}]},{"date":"2024-03-06","commitResults":[{"hash":"f31cd2e3ef14e6a71bc00b9748a1352f7a7f2141","isMergeCommit":false,"messageTitle":"Fix wrong url","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"7f41e09df90fef17a2e3e72e3def7bd3150f08b1","isMergeCommit":true,"messageTitle":"Merge pull request #15 from yadunut/update-about","messageBody":"Update the about me page with yadunut\u0027s details","fileTypesAndContributionMap":{}}]}],"taufiq":[],"blaukc":[{"date":"2024-02-28","commitResults":[{"hash":"5b3d763bb59a9d4be3f3ff95b4aaf73acd425239","isMergeCommit":false,"messageTitle":"Update AboutUs page, and add individual page and photo","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":44,"deletions":16}}},{"hash":"71d6d95c18ee7071b3c55d17d59174286b711df9","isMergeCommit":false,"messageTitle":"Add newline to end of blaukc.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"ba433d397d2388f0feb387ad4c64b0f55ee87fbb","isMergeCommit":true,"messageTitle":"Merge pull request #13 from blaukc/update-about-us","messageBody":"Update AboutUs (Brandon)","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"AdityaB4":{"docs":0,"functional-code":0,"test-code":0},"yadunut":{"docs":33,"functional-code":0,"test-code":0},"taufiq":{"docs":0,"functional-code":0,"test-code":0},"blaukc":{"docs":44,"functional-code":0,"test-code":0}},"authorContributionVariance":{"AdityaB4":0.0,"yadunut":96.61539,"taufiq":0.0,"blaukc":272.94678},"authorDisplayNameMap":{"AdityaB4":"CS2103T-W12-2 BAJA..ITYA","yadunut":"CS2103T-W12-2 YADU..PREM","taufiq":"CS2103T-W12-2 TAUF..MMED","blaukc":"CS2103T-W12-2 BRAN..CHUN"}} diff --git a/archive.zip b/archive.zip index 3e052a23..de9e6cec 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 f924974f..53ca21c2 100644 --- a/reposense-logs/reposense.log.0 +++ b/reposense-logs/reposense.log.0 @@ -1,42 +1,42 @@ -Mar 05, 2024 4:17:41 PM reposense.system.LogsManager addFileHandler +Mar 06, 2024 12:50:31 AM reposense.system.LogsManager addFileHandler INFO: Log temp folder has been successfully created -Mar 05, 2024 4:17:41 PM reposense.parser.CsvParser validateHeader +Mar 06, 2024 12:50:31 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 05, 2024 4:17:41 PM reposense.parser.RepoConfigCsvParser matchValueAndKeyword +Mar 06, 2024 12:50:31 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 05, 2024 4:17:42 PM reposense.parser.CsvParser validateHeader +Mar 06, 2024 12:50:31 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 05, 2024 4:17:42 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 06, 2024 12:50:31 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias guohuang found. The alias will belong to the last author - guohuang88 -Mar 05, 2024 4:17:42 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 06, 2024 12:50:31 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias amanzainal found. The alias will belong to the last author - amanzainal -Mar 05, 2024 4:17:42 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 06, 2024 12:50:31 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias shuyuan found. The alias will belong to the last author - legionlegion -Mar 05, 2024 4:17:42 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 06, 2024 12:50:31 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias alphajae11 found. The alias will belong to the last author - alphajae11 -Mar 05, 2024 4:17:42 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 06, 2024 12:50:31 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jayne1010 found. The alias will belong to the last author - Jayne1010 -Mar 05, 2024 4:17:42 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 06, 2024 12:50:31 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias miffi found. The alias will belong to the last author - miffi -Mar 05, 2024 4:17:42 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 06, 2024 12:50:31 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias windofbitter found. The alias will belong to the last author - Windofbitter -Mar 05, 2024 4:17:42 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 06, 2024 12:50:31 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias guohuang found. The alias will belong to the last author - guohuang88 -Mar 05, 2024 4:17:42 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 06, 2024 12:50:31 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias amanzainal found. The alias will belong to the last author - amanzainal -Mar 05, 2024 4:17:42 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 06, 2024 12:50:31 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias shuyuan found. The alias will belong to the last author - legionlegion -Mar 05, 2024 4:17:42 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 06, 2024 12:50:31 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias alphajae11 found. The alias will belong to the last author - alphajae11 -Mar 05, 2024 4:17:42 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 06, 2024 12:50:31 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias windofbitter found. The alias will belong to the last author - Windofbitter -Mar 05, 2024 4:17:42 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 06, 2024 12:50:31 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jayne1010 found. The alias will belong to the last author - Jayne1010 -Mar 05, 2024 4:17:42 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 06, 2024 12:50:31 AM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias miffi found. The alias will belong to the last author - miffi -Mar 05, 2024 4:17:42 PM reposense.parser.CsvParser validateHeader +Mar 06, 2024 12:50:31 AM reposense.parser.CsvParser validateHeader INFO: Parsed header of CSV file, group-config.csv, and recognized columns: Globs, Repository's Location, Group Name -Mar 05, 2024 4:17:42 PM reposense.git.GitConfig getGlobalGitLfsConfig +Mar 06, 2024 12:50:31 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,1481 +52,1473 @@ 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 05, 2024 4:17:42 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:31 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T16-1/tp.git... -Mar 05, 2024 4:17:42 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:31 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F13-3/tp.git... -Mar 05, 2024 4:17:42 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W10-4/tp.git... -Mar 05, 2024 4:17:42 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:31 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F15-2/tp.git... -Mar 05, 2024 4:17:42 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:31 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W10-4/tp.git... +Mar 06, 2024 12:50:31 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T16-1/tp.git to complete... -Mar 05, 2024 4:17:42 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:31 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F15-2/tp.git to complete... -Mar 05, 2024 4:17:42 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F13-3/tp.git to complete... -Mar 05, 2024 4:17:42 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:31 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W10-4/tp.git to complete... -Mar 05, 2024 4:17:43 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:31 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F13-3/tp.git to complete... +Mar 06, 2024 12:50:32 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103-F15-2/tp.git completed! -Mar 05, 2024 4:17:43 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:32 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F10-3/tp.git... -Mar 05, 2024 4:17:43 PM reposense.report.ReportGenerator analyzeRepos -INFO: [1/92] Analyzing https://github.com/AY2324S2-CS2103-F15-2/tp.git (master)... -Mar 05, 2024 4:17:43 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:32 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F10-3/tp.git to complete... -Mar 05, 2024 4:17:43 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:32 AM reposense.report.ReportGenerator analyzeRepos +INFO: [1/92] Analyzing https://github.com/AY2324S2-CS2103-F15-2/tp.git (master)... +Mar 06, 2024 12:50:32 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103-F15-2/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:17:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:32 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F15-2/tp.git (master)... -Mar 05, 2024 4:17:43 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 06, 2024 12:50:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F15-2/tp.git (master)... -Mar 05, 2024 4:17:43 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F15-2/tp.git (master)... -Mar 05, 2024 4:17:43 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103-F15-2/tp.git (master) completed! -Mar 05, 2024 4:17:43 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T16-1/tp.git completed! -Mar 05, 2024 4:17:43 PM reposense.report.ReportGenerator analyzeRepos -INFO: [2/92] Analyzing https://github.com/AY2324S2-CS2103T-T16-1/tp.git (master)... -Mar 05, 2024 4:17:43 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:33 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-F13-3/tp.git completed! +Mar 06, 2024 12:50:33 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W13-4/tp.git... -Mar 05, 2024 4:17:43 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:33 AM reposense.report.ReportGenerator analyzeRepos +INFO: [2/92] Analyzing https://github.com/AY2324S2-CS2103T-F13-3/tp.git (master)... +Mar 06, 2024 12:50:33 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W13-4/tp.git to complete... -Mar 05, 2024 4:17:43 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-T16-1/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:17:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T16-1/tp.git (master)... -Mar 05, 2024 4:17:43 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T16-1/tp.git (master)... -Mar 05, 2024 4:17:44 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T16-1/tp.git (master)... -Mar 05, 2024 4:17:44 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T16-1/tp.git (master) completed! -Mar 05, 2024 4:17:44 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F13-3/tp.git completed! -Mar 05, 2024 4:17:44 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F15-2/tp.git (master)... +Mar 06, 2024 12:50:33 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103-F15-2/tp.git (master) completed! +Mar 06, 2024 12:50:33 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-W10-4/tp.git completed! +Mar 06, 2024 12:50:33 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F10-2/tp.git... -Mar 05, 2024 4:17:44 PM reposense.report.ReportGenerator analyzeRepos -INFO: [3/92] Analyzing https://github.com/AY2324S2-CS2103T-F13-3/tp.git (master)... -Mar 05, 2024 4:17:44 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:33 AM reposense.report.ReportGenerator analyzeRepos +INFO: [3/92] Analyzing https://github.com/AY2324S2-CS2103T-W10-4/tp.git (master)... +Mar 06, 2024 12:50:33 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F10-2/tp.git to complete... -Mar 05, 2024 4:17:44 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:33 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T16-1/tp.git completed! +Mar 06, 2024 12:50:33 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F15-3/tp.git... +Mar 06, 2024 12:50:33 AM reposense.report.ReportGenerator analyzeRepos +INFO: [4/92] Analyzing https://github.com/AY2324S2-CS2103T-T16-1/tp.git (master)... +Mar 06, 2024 12:50:33 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-F13-3/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:17:44 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:33 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F15-3/tp.git to complete... +Mar 06, 2024 12:50:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F13-3/tp.git (master)... -Mar 05, 2024 4:17:44 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 06, 2024 12:50:33 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-W10-4/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W10-4/tp.git (master)... +Mar 06, 2024 12:50:33 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-T16-1/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:33 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T16-1/tp.git (master)... +Mar 06, 2024 12:50:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F13-3/tp.git (master)... -Mar 05, 2024 4:17:44 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 06, 2024 12:50:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W10-4/tp.git (master)... +Mar 06, 2024 12:50:33 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F13-3/tp.git (master)... -Mar 05, 2024 4:17:44 PM reposense.report.ReportGenerator analyzeRepo +Mar 06, 2024 12:50:33 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T16-1/tp.git (master)... +Mar 06, 2024 12:50:33 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-F13-3/tp.git (master) completed! -Mar 05, 2024 4:17:44 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F10-3/tp.git completed! -Mar 05, 2024 4:17:44 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F15-3/tp.git... -Mar 05, 2024 4:17:44 PM reposense.report.ReportGenerator analyzeRepos -INFO: [4/92] Analyzing https://github.com/AY2324S2-CS2103T-F10-3/tp.git (master)... -Mar 05, 2024 4:17:44 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F15-3/tp.git to complete... -Mar 05, 2024 4:17:44 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-F10-3/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:17:44 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F10-3/tp.git (master)... -Mar 05, 2024 4:17:44 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W10-4/tp.git (master)... +Mar 06, 2024 12:50:34 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-W10-4/tp.git (master) completed! +Mar 06, 2024 12:50:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T16-1/tp.git (master)... +Mar 06, 2024 12:50:34 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T16-1/tp.git (master) completed! +Mar 06, 2024 12:50:34 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-W13-4/tp.git completed! -Mar 05, 2024 4:17:44 PM reposense.report.ReportGenerator analyzeRepos +Mar 06, 2024 12:50:34 AM reposense.report.ReportGenerator analyzeRepos INFO: [5/92] Analyzing https://github.com/AY2324S2-CS2103T-W13-4/tp.git (master)... -Mar 05, 2024 4:17:44 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:34 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F15-1/tp.git... -Mar 05, 2024 4:17:44 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:34 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F15-1/tp.git to complete... -Mar 05, 2024 4:17:44 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F10-3/tp.git (master)... -Mar 05, 2024 4:17:44 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:34 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-W13-4/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:17:44 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W13-4/tp.git (master)... -Mar 05, 2024 4:17:45 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F10-3/tp.git (master)... -Mar 05, 2024 4:17:45 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F10-3/tp.git (master) completed! -Mar 05, 2024 4:17:45 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W13-4/tp.git (master)... -Mar 05, 2024 4:17:45 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W13-4/tp.git (master)... -Mar 05, 2024 4:17:45 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W13-4/tp.git (master) completed! -Mar 05, 2024 4:17:46 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103-F15-3/tp.git completed! -Mar 05, 2024 4:17:46 PM reposense.report.ReportGenerator analyzeRepos -INFO: [6/92] Analyzing https://github.com/AY2324S2-CS2103-F15-3/tp.git (master)... -Mar 05, 2024 4:17:46 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:34 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-F10-3/tp.git completed! +Mar 06, 2024 12:50:34 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T16-2/tp.git... -Mar 05, 2024 4:17:46 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:34 AM reposense.report.ReportGenerator analyzeRepos +INFO: [6/92] Analyzing https://github.com/AY2324S2-CS2103T-F10-3/tp.git (master)... +Mar 06, 2024 12:50:34 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T16-2/tp.git to complete... -Mar 05, 2024 4:17:46 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:34 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103-F15-3/tp.git completed! +Mar 06, 2024 12:50:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W13-4/tp.git (master)... +Mar 06, 2024 12:50:34 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T10-1/tp.git... +Mar 06, 2024 12:50:34 AM reposense.report.ReportGenerator analyzeRepos +INFO: [7/92] Analyzing https://github.com/AY2324S2-CS2103-F15-3/tp.git (master)... +Mar 06, 2024 12:50:34 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T10-1/tp.git to complete... +Mar 06, 2024 12:50:34 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-F10-3/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F10-3/tp.git (master)... +Mar 06, 2024 12:50:34 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103-F15-3/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:17:46 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:34 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F15-3/tp.git (master)... -Mar 05, 2024 4:17:46 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103-F15-1/tp.git completed! -Mar 05, 2024 4:17:46 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 06, 2024 12:50:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W13-4/tp.git (master)... +Mar 06, 2024 12:50:34 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-W13-4/tp.git (master) completed! +Mar 06, 2024 12:50:34 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F10-3/tp.git (master)... +Mar 06, 2024 12:50:34 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F10-3/tp.git (master)... +Mar 06, 2024 12:50:34 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-F10-3/tp.git (master) completed! +Mar 06, 2024 12:50:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F15-3/tp.git (master)... -Mar 05, 2024 4:17:46 PM reposense.report.ReportGenerator analyzeRepos -INFO: [7/92] Analyzing https://github.com/AY2324S2-CS2103-F15-1/tp.git (master)... -Mar 05, 2024 4:17:46 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T10-1/tp.git... -Mar 05, 2024 4:17:46 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T10-1/tp.git to complete... -Mar 05, 2024 4:17:46 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103-F15-1/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:17:46 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F15-1/tp.git (master)... -Mar 05, 2024 4:17:46 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 06, 2024 12:50:35 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-F10-2/tp.git completed! +Mar 06, 2024 12:50:35 AM reposense.report.ReportGenerator analyzeRepos +INFO: [8/92] Analyzing https://github.com/AY2324S2-CS2103T-F10-2/tp.git (master)... +Mar 06, 2024 12:50:35 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F13-2/tp.git... +Mar 06, 2024 12:50:35 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F13-2/tp.git to complete... +Mar 06, 2024 12:50:35 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-F10-2/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:35 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F10-2/tp.git (master)... +Mar 06, 2024 12:50:35 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F15-3/tp.git (master)... -Mar 05, 2024 4:17:46 PM reposense.report.ReportGenerator analyzeRepo +Mar 06, 2024 12:50:35 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103-F15-3/tp.git (master) completed! -Mar 05, 2024 4:17:46 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F15-1/tp.git (master)... -Mar 05, 2024 4:17:46 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F15-1/tp.git (master)... -Mar 05, 2024 4:17:46 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103-F15-1/tp.git (master) completed! -Mar 05, 2024 4:17:47 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:35 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-T16-2/tp.git completed! -Mar 05, 2024 4:17:47 PM reposense.report.ReportGenerator analyzeRepos -INFO: [8/92] Analyzing https://github.com/AY2324S2-CS2103T-T16-2/tp.git (master)... -Mar 05, 2024 4:17:47 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F13-2/tp.git... -Mar 05, 2024 4:17:47 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F13-2/tp.git to complete... -Mar 05, 2024 4:17:47 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:35 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F13-4/tp.git... +Mar 06, 2024 12:50:35 AM reposense.report.ReportGenerator analyzeRepos +INFO: [9/92] Analyzing https://github.com/AY2324S2-CS2103T-T16-2/tp.git (master)... +Mar 06, 2024 12:50:35 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103-F15-1/tp.git completed! +Mar 06, 2024 12:50:35 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F13-4/tp.git to complete... +Mar 06, 2024 12:50:35 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W10-3/tp.git... +Mar 06, 2024 12:50:35 AM reposense.report.ReportGenerator analyzeRepos +INFO: [10/92] Analyzing https://github.com/AY2324S2-CS2103-F15-1/tp.git (master)... +Mar 06, 2024 12:50:35 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F10-2/tp.git (master)... +Mar 06, 2024 12:50:35 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W10-3/tp.git to complete... +Mar 06, 2024 12:50:35 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T16-2/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:17:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T16-2/tp.git (master)... -Mar 05, 2024 4:17:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 06, 2024 12:50:36 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103-F15-1/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F15-1/tp.git (master)... +Mar 06, 2024 12:50:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T16-2/tp.git (master)... -Mar 05, 2024 4:17:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 06, 2024 12:50:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T16-2/tp.git (master)... -Mar 05, 2024 4:17:47 PM reposense.report.ReportGenerator analyzeRepo +Mar 06, 2024 12:50:36 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T16-2/tp.git (master) completed! -Mar 05, 2024 4:17:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W10-4/tp.git completed! -Mar 05, 2024 4:17:48 PM reposense.report.ReportGenerator analyzeRepos -INFO: [9/92] Analyzing https://github.com/AY2324S2-CS2103T-W10-4/tp.git (master)... -Mar 05, 2024 4:17:48 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F13-4/tp.git... -Mar 05, 2024 4:17:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F13-4/tp.git to complete... -Mar 05, 2024 4:17:48 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-W10-4/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:17:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W10-4/tp.git (master)... -Mar 05, 2024 4:17:48 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W10-4/tp.git (master)... -Mar 05, 2024 4:17:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T10-1/tp.git completed! -Mar 05, 2024 4:17:48 PM reposense.report.ReportGenerator analyzeRepos -INFO: [10/92] Analyzing https://github.com/AY2324S2-CS2103T-T10-1/tp.git (master)... -Mar 05, 2024 4:17:48 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W10-3/tp.git... -Mar 05, 2024 4:17:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W10-3/tp.git to complete... -Mar 05, 2024 4:17:48 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W10-4/tp.git (master)... -Mar 05, 2024 4:17:48 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W10-4/tp.git (master) completed! -Mar 05, 2024 4:17:49 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-T10-1/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:17:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T10-1/tp.git (master)... -Mar 05, 2024 4:17:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T10-1/tp.git (master)... -Mar 05, 2024 4:17:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T10-1/tp.git (master)... -Mar 05, 2024 4:17:49 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T10-1/tp.git (master) completed! -Mar 05, 2024 4:17:49 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F10-2/tp.git (master)... +Mar 06, 2024 12:50:36 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-F10-2/tp.git (master) completed! +Mar 06, 2024 12:50:36 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F15-1/tp.git (master)... +Mar 06, 2024 12:50:36 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-F13-2/tp.git completed! -Mar 05, 2024 4:17:49 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T13-2/tp.git... -Mar 05, 2024 4:17:49 PM reposense.report.ReportGenerator analyzeRepos +Mar 06, 2024 12:50:36 AM reposense.report.ReportGenerator analyzeRepos INFO: [11/92] Analyzing https://github.com/AY2324S2-CS2103T-F13-2/tp.git (master)... -Mar 05, 2024 4:17:49 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:36 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T13-2/tp.git... +Mar 06, 2024 12:50:36 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T13-2/tp.git to complete... -Mar 05, 2024 4:17:49 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F13-4/tp.git completed! -Mar 05, 2024 4:17:49 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:36 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T10-1/tp.git completed! +Mar 06, 2024 12:50:36 AM reposense.report.ReportGenerator analyzeRepos +INFO: [12/92] Analyzing https://github.com/AY2324S2-CS2103T-T10-1/tp.git (master)... +Mar 06, 2024 12:50:36 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T13-1/tp.git... +Mar 06, 2024 12:50:36 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-F13-2/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:17:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:36 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F13-2/tp.git (master)... -Mar 05, 2024 4:17:49 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T13-1/tp.git... -Mar 05, 2024 4:17:49 PM reposense.report.ReportGenerator analyzeRepos -INFO: [12/92] Analyzing https://github.com/AY2324S2-CS2103T-F13-4/tp.git (master)... -Mar 05, 2024 4:17:49 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:36 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T13-1/tp.git to complete... -Mar 05, 2024 4:17:49 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-F13-4/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:17:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F13-4/tp.git (master)... -Mar 05, 2024 4:17:49 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F10-2/tp.git completed! -Mar 05, 2024 4:17:49 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:36 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F15-1/tp.git (master)... +Mar 06, 2024 12:50:36 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103-F15-1/tp.git (master) completed! +Mar 06, 2024 12:50:37 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-T10-1/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T10-1/tp.git (master)... +Mar 06, 2024 12:50:37 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-F13-4/tp.git completed! +Mar 06, 2024 12:50:37 AM reposense.report.ReportGenerator analyzeRepos +INFO: [13/92] Analyzing https://github.com/AY2324S2-CS2103T-F13-4/tp.git (master)... +Mar 06, 2024 12:50:37 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T10-2/tp.git... -Mar 05, 2024 4:17:49 PM reposense.report.ReportGenerator analyzeRepos -INFO: [13/92] Analyzing https://github.com/AY2324S2-CS2103T-F10-2/tp.git (master)... -Mar 05, 2024 4:17:50 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:37 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T10-2/tp.git to complete... -Mar 05, 2024 4:17:50 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-F10-2/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:17:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F10-2/tp.git (master)... -Mar 05, 2024 4:17:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F13-4/tp.git (master)... -Mar 05, 2024 4:17:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F13-4/tp.git (master)... -Mar 05, 2024 4:17:50 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F13-4/tp.git (master) completed! -Mar 05, 2024 4:17:50 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F13-2/tp.git (master)... +Mar 06, 2024 12:50:37 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-W10-3/tp.git completed! -Mar 05, 2024 4:17:50 PM reposense.report.ReportGenerator analyzeRepos -INFO: [14/92] Analyzing https://github.com/AY2324S2-CS2103T-W10-3/tp.git (master)... -Mar 05, 2024 4:17:50 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:37 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-F13-4/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F13-4/tp.git (master)... +Mar 06, 2024 12:50:37 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F13-1/tp.git... -Mar 05, 2024 4:17:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F13-2/tp.git (master)... -Mar 05, 2024 4:17:50 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:37 AM reposense.report.ReportGenerator analyzeRepos +INFO: [14/92] Analyzing https://github.com/AY2324S2-CS2103T-W10-3/tp.git (master)... +Mar 06, 2024 12:50:37 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F13-1/tp.git to complete... -Mar 05, 2024 4:17:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F13-2/tp.git (master)... -Mar 05, 2024 4:17:50 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F13-2/tp.git (master) completed! -Mar 05, 2024 4:17:50 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:37 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-W10-3/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:17:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:37 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W10-3/tp.git (master)... -Mar 05, 2024 4:17:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F10-2/tp.git (master)... -Mar 05, 2024 4:17:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 06, 2024 12:50:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F13-2/tp.git (master)... +Mar 06, 2024 12:50:37 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-F13-2/tp.git (master) completed! +Mar 06, 2024 12:50:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F13-4/tp.git (master)... +Mar 06, 2024 12:50:37 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F13-4/tp.git (master)... +Mar 06, 2024 12:50:37 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-F13-4/tp.git (master) completed! +Mar 06, 2024 12:50:37 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T10-1/tp.git (master)... +Mar 06, 2024 12:50:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W10-3/tp.git (master)... -Mar 05, 2024 4:17:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 06, 2024 12:50:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T10-1/tp.git (master)... +Mar 06, 2024 12:50:38 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T10-1/tp.git (master) completed! +Mar 06, 2024 12:50:38 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T13-2/tp.git completed! +Mar 06, 2024 12:50:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W10-3/tp.git (master)... -Mar 05, 2024 4:17:50 PM reposense.report.ReportGenerator analyzeRepo +Mar 06, 2024 12:50:38 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-W10-3/tp.git (master) completed! -Mar 05, 2024 4:17:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F10-2/tp.git (master)... -Mar 05, 2024 4:17:50 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F10-2/tp.git (master) completed! -Mar 05, 2024 4:17:51 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T13-2/tp.git completed! -Mar 05, 2024 4:17:51 PM reposense.report.ReportGenerator analyzeRepos +Mar 06, 2024 12:50:38 AM reposense.report.ReportGenerator analyzeRepos INFO: [15/92] Analyzing https://github.com/AY2324S2-CS2103T-T13-2/tp.git (master)... -Mar 05, 2024 4:17:51 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:38 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F15-4/tp.git... -Mar 05, 2024 4:17:51 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:38 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F15-4/tp.git to complete... -Mar 05, 2024 4:17:51 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:38 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T13-2/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:17:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T13-2/tp.git (master)... -Mar 05, 2024 4:17:51 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T13-2/tp.git (master)... +Mar 06, 2024 12:50:38 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-T13-1/tp.git completed! -Mar 05, 2024 4:17:51 PM reposense.report.ReportGenerator analyzeRepos +Mar 06, 2024 12:50:38 AM reposense.report.ReportGenerator analyzeRepos INFO: [16/92] Analyzing https://github.com/AY2324S2-CS2103T-T13-1/tp.git (master)... -Mar 05, 2024 4:17:51 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:38 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W13-3/tp.git... -Mar 05, 2024 4:17:51 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:38 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W13-3/tp.git to complete... -Mar 05, 2024 4:17:51 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T13-2/tp.git (master)... +Mar 06, 2024 12:50:38 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T13-2/tp.git (master) completed! +Mar 06, 2024 12:50:38 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T13-1/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:17:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T13-1/tp.git (master)... -Mar 05, 2024 4:17:51 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:38 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-T10-2/tp.git completed! -Mar 05, 2024 4:17:51 PM reposense.report.ReportGenerator analyzeRepos -INFO: [17/92] Analyzing https://github.com/AY2324S2-CS2103T-T10-2/tp.git (master)... -Mar 05, 2024 4:17:51 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:38 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W13-2/tp.git... -Mar 05, 2024 4:17:51 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:38 AM reposense.report.ReportGenerator analyzeRepos +INFO: [17/92] Analyzing https://github.com/AY2324S2-CS2103T-T10-2/tp.git (master)... +Mar 06, 2024 12:50:38 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W13-2/tp.git to complete... -Mar 05, 2024 4:17:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T13-2/tp.git (master)... -Mar 05, 2024 4:17:51 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T13-1/tp.git (master)... +Mar 06, 2024 12:50:38 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T10-2/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:17:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T10-2/tp.git (master)... -Mar 05, 2024 4:17:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T13-2/tp.git (master)... -Mar 05, 2024 4:17:51 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T13-2/tp.git (master) completed! -Mar 05, 2024 4:17:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T13-1/tp.git (master)... -Mar 05, 2024 4:17:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 06, 2024 12:50:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T13-1/tp.git (master)... -Mar 05, 2024 4:17:51 PM reposense.report.ReportGenerator analyzeRepo +Mar 06, 2024 12:50:38 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T13-1/tp.git (master) completed! -Mar 05, 2024 4:17:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 06, 2024 12:50:38 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-F13-1/tp.git completed! +Mar 06, 2024 12:50:38 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T10-2/tp.git (master)... -Mar 05, 2024 4:17:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T10-2/tp.git (master)... -Mar 05, 2024 4:17:51 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T10-2/tp.git (master) completed! -Mar 05, 2024 4:17:52 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W13-2/tp.git completed! -Mar 05, 2024 4:17:52 PM reposense.report.ReportGenerator analyzeRepos -INFO: [18/92] Analyzing https://github.com/AY2324S2-CS2103T-W13-2/tp.git (master)... -Mar 05, 2024 4:17:52 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:38 AM reposense.report.ReportGenerator analyzeRepos +INFO: [18/92] Analyzing https://github.com/AY2324S2-CS2103T-F13-1/tp.git (master)... +Mar 06, 2024 12:50:38 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T16-4/tp.git... -Mar 05, 2024 4:17:52 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:38 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T16-4/tp.git to complete... -Mar 05, 2024 4:17:52 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-W13-2/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:17:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W13-2/tp.git (master)... -Mar 05, 2024 4:17:52 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:38 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T10-2/tp.git (master)... +Mar 06, 2024 12:50:38 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T10-2/tp.git (master) completed! +Mar 06, 2024 12:50:38 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-F13-1/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:38 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F13-1/tp.git (master)... +Mar 06, 2024 12:50:39 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103-F15-4/tp.git completed! -Mar 05, 2024 4:17:52 PM reposense.report.ReportGenerator analyzeRepos -INFO: [19/92] Analyzing https://github.com/AY2324S2-CS2103-F15-4/tp.git (master)... -Mar 05, 2024 4:17:52 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:39 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W10-1/tp.git... -Mar 05, 2024 4:17:52 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:39 AM reposense.report.ReportGenerator analyzeRepos +INFO: [19/92] Analyzing https://github.com/AY2324S2-CS2103-F15-4/tp.git (master)... +Mar 06, 2024 12:50:39 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W10-1/tp.git to complete... -Mar 05, 2024 4:17:52 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:39 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103-F15-4/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:17:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:39 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F15-4/tp.git (master)... -Mar 05, 2024 4:17:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W13-2/tp.git (master)... -Mar 05, 2024 4:17:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W13-2/tp.git (master)... -Mar 05, 2024 4:17:52 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W13-2/tp.git (master) completed! -Mar 05, 2024 4:17:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F15-4/tp.git (master)... -Mar 05, 2024 4:17:53 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:40 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-W13-3/tp.git completed! -Mar 05, 2024 4:17:53 PM reposense.report.ReportGenerator analyzeRepos -INFO: [20/92] Analyzing https://github.com/AY2324S2-CS2103T-W13-3/tp.git (master)... -Mar 05, 2024 4:17:53 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:40 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-W13-2/tp.git completed! +Mar 06, 2024 12:50:40 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T13-3/tp.git... -Mar 05, 2024 4:17:53 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:40 AM reposense.report.ReportGenerator analyzeRepos +INFO: [20/92] Analyzing https://github.com/AY2324S2-CS2103T-W13-3/tp.git (master)... +Mar 06, 2024 12:50:40 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T13-4/tp.git... +Mar 06, 2024 12:50:40 AM reposense.report.ReportGenerator analyzeRepos +INFO: [21/92] Analyzing https://github.com/AY2324S2-CS2103T-W13-2/tp.git (master)... +Mar 06, 2024 12:50:40 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T13-3/tp.git to complete... -Mar 05, 2024 4:17:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F15-4/tp.git (master)... -Mar 05, 2024 4:17:53 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103-F15-4/tp.git (master) completed! -Mar 05, 2024 4:17:53 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:40 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T13-4/tp.git to complete... +Mar 06, 2024 12:50:40 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-W13-3/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:17:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W13-3/tp.git (master)... -Mar 05, 2024 4:17:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W13-3/tp.git (master)... -Mar 05, 2024 4:17:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W13-3/tp.git (master)... -Mar 05, 2024 4:17:53 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W13-3/tp.git (master) completed! -Mar 05, 2024 4:17:53 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:40 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-W13-2/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W13-2/tp.git (master)... +Mar 06, 2024 12:50:40 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-T16-4/tp.git completed! -Mar 05, 2024 4:17:53 PM reposense.report.ReportGenerator analyzeRepos -INFO: [21/92] Analyzing https://github.com/AY2324S2-CS2103T-T16-4/tp.git (master)... -Mar 05, 2024 4:17:53 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T13-4/tp.git... -Mar 05, 2024 4:17:53 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T13-4/tp.git to complete... -Mar 05, 2024 4:17:53 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:40 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W10-2/tp.git... +Mar 06, 2024 12:50:40 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W10-2/tp.git to complete... +Mar 06, 2024 12:50:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F15-4/tp.git (master)... +Mar 06, 2024 12:50:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F15-4/tp.git (master)... +Mar 06, 2024 12:50:40 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103-F15-4/tp.git (master) completed! +Mar 06, 2024 12:50:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W13-2/tp.git (master)... +Mar 06, 2024 12:50:40 AM reposense.report.ReportGenerator analyzeRepos +INFO: [22/92] Analyzing https://github.com/AY2324S2-CS2103T-T16-4/tp.git (master)... +Mar 06, 2024 12:50:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W13-2/tp.git (master)... +Mar 06, 2024 12:50:40 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-W13-2/tp.git (master) completed! +Mar 06, 2024 12:50:40 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F13-1/tp.git (master)... +Mar 06, 2024 12:50:40 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T16-4/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:17:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:40 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T16-4/tp.git (master)... -Mar 05, 2024 4:17:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 06, 2024 12:50:40 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F13-1/tp.git (master)... +Mar 06, 2024 12:50:40 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-F13-1/tp.git (master) completed! +Mar 06, 2024 12:50:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W13-3/tp.git (master)... +Mar 06, 2024 12:50:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T16-4/tp.git (master)... -Mar 05, 2024 4:17:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 06, 2024 12:50:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W13-3/tp.git (master)... +Mar 06, 2024 12:50:41 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-W13-3/tp.git (master) completed! +Mar 06, 2024 12:50:41 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T16-4/tp.git (master)... -Mar 05, 2024 4:17:54 PM reposense.report.ReportGenerator analyzeRepo +Mar 06, 2024 12:50:41 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T16-4/tp.git (master) completed! -Mar 05, 2024 4:17:54 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:41 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-W10-1/tp.git completed! -Mar 05, 2024 4:17:54 PM reposense.report.ReportGenerator analyzeRepos -INFO: [22/92] Analyzing https://github.com/AY2324S2-CS2103T-W10-1/tp.git (master)... -Mar 05, 2024 4:17:54 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W10-2/tp.git... -Mar 05, 2024 4:17:54 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W10-2/tp.git to complete... -Mar 05, 2024 4:17:54 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:41 AM reposense.report.ReportGenerator analyzeRepos +INFO: [23/92] Analyzing https://github.com/AY2324S2-CS2103T-W10-1/tp.git (master)... +Mar 06, 2024 12:50:41 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F10-1/tp.git... +Mar 06, 2024 12:50:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F10-1/tp.git to complete... +Mar 06, 2024 12:50:41 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-W10-1/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:17:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W10-1/tp.git (master)... -Mar 05, 2024 4:17:54 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-W10-2/tp.git completed! +Mar 06, 2024 12:50:41 AM reposense.report.ReportGenerator analyzeRepos +INFO: [24/92] Analyzing https://github.com/AY2324S2-CS2103T-W10-2/tp.git (master)... +Mar 06, 2024 12:50:41 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F10-4/tp.git... +Mar 06, 2024 12:50:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F10-4/tp.git to complete... +Mar 06, 2024 12:50:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T13-4/tp.git completed! +Mar 06, 2024 12:50:41 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T16-3/tp.git... +Mar 06, 2024 12:50:41 AM reposense.report.ReportGenerator analyzeRepos +INFO: [25/92] Analyzing https://github.com/AY2324S2-CS2103T-T13-4/tp.git (master)... +Mar 06, 2024 12:50:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T16-3/tp.git to complete... +Mar 06, 2024 12:50:41 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-W10-2/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W10-2/tp.git (master)... +Mar 06, 2024 12:50:41 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-T13-3/tp.git completed! -Mar 05, 2024 4:17:54 PM reposense.report.ReportGenerator analyzeRepos -INFO: [23/92] Analyzing https://github.com/AY2324S2-CS2103T-T13-3/tp.git (master)... -Mar 05, 2024 4:17:54 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F10-1/tp.git... -Mar 05, 2024 4:17:54 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F10-1/tp.git to complete... -Mar 05, 2024 4:17:54 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:41 AM reposense.report.ReportGenerator analyzeRepos +INFO: [26/92] Analyzing https://github.com/AY2324S2-CS2103T-T13-3/tp.git (master)... +Mar 06, 2024 12:50:41 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F09-3/tp.git... +Mar 06, 2024 12:50:41 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F09-3/tp.git to complete... +Mar 06, 2024 12:50:41 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-T13-4/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T13-4/tp.git (master)... +Mar 06, 2024 12:50:41 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T13-3/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:17:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:41 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T13-3/tp.git (master)... -Mar 05, 2024 4:17:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 06, 2024 12:50:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W10-1/tp.git (master)... -Mar 05, 2024 4:17:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 06, 2024 12:50:41 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W10-2/tp.git (master)... +Mar 06, 2024 12:50:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W10-1/tp.git (master)... -Mar 05, 2024 4:17:54 PM reposense.report.ReportGenerator analyzeRepo +Mar 06, 2024 12:50:42 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-W10-1/tp.git (master) completed! -Mar 05, 2024 4:17:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 06, 2024 12:50:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T13-3/tp.git (master)... -Mar 05, 2024 4:17:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 06, 2024 12:50:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T13-4/tp.git (master)... +Mar 06, 2024 12:50:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W10-2/tp.git (master)... +Mar 06, 2024 12:50:42 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-W10-2/tp.git (master) completed! +Mar 06, 2024 12:50:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T13-3/tp.git (master)... -Mar 05, 2024 4:17:55 PM reposense.report.ReportGenerator analyzeRepo +Mar 06, 2024 12:50:42 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T13-3/tp.git (master) completed! -Mar 05, 2024 4:17:55 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F13-1/tp.git completed! -Mar 05, 2024 4:17:55 PM reposense.report.ReportGenerator analyzeRepos -INFO: [24/92] Analyzing https://github.com/AY2324S2-CS2103T-F13-1/tp.git (master)... -Mar 05, 2024 4:17:55 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F10-4/tp.git... -Mar 05, 2024 4:17:55 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F10-4/tp.git to complete... -Mar 05, 2024 4:17:55 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T13-4/tp.git completed! -Mar 05, 2024 4:17:55 PM reposense.report.ReportGenerator analyzeRepos -INFO: [25/92] Analyzing https://github.com/AY2324S2-CS2103T-T13-4/tp.git (master)... -Mar 05, 2024 4:17:55 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T16-3/tp.git... -Mar 05, 2024 4:17:55 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T16-3/tp.git to complete... -Mar 05, 2024 4:17:55 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-F13-1/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:17:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F13-1/tp.git (master)... -Mar 05, 2024 4:17:55 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-T13-4/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:17:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T13-4/tp.git (master)... -Mar 05, 2024 4:17:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T13-4/tp.git (master)... -Mar 05, 2024 4:17:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 06, 2024 12:50:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T13-4/tp.git (master)... -Mar 05, 2024 4:17:55 PM reposense.report.ReportGenerator analyzeRepo +Mar 06, 2024 12:50:42 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T13-4/tp.git (master) completed! -Mar 05, 2024 4:17:55 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W10-2/tp.git completed! -Mar 05, 2024 4:17:55 PM reposense.report.ReportGenerator analyzeRepos -INFO: [26/92] Analyzing https://github.com/AY2324S2-CS2103T-W10-2/tp.git (master)... -Mar 05, 2024 4:17:55 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F09-3/tp.git... -Mar 05, 2024 4:17:55 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F09-3/tp.git to complete... -Mar 05, 2024 4:17:56 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-W10-2/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:17:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W10-2/tp.git (master)... -Mar 05, 2024 4:17:56 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:42 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-F10-1/tp.git completed! -Mar 05, 2024 4:17:56 PM reposense.report.ReportGenerator analyzeRepos +Mar 06, 2024 12:50:42 AM reposense.report.ReportGenerator analyzeRepos INFO: [27/92] Analyzing https://github.com/AY2324S2-CS2103T-F10-1/tp.git (master)... -Mar 05, 2024 4:17:56 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:42 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T10-3/tp.git... -Mar 05, 2024 4:17:56 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:42 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T10-3/tp.git to complete... -Mar 05, 2024 4:17:56 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:42 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-F10-1/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:17:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F10-1/tp.git (master)... -Mar 05, 2024 4:17:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W10-2/tp.git (master)... -Mar 05, 2024 4:17:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 06, 2024 12:50:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-F10-4/tp.git completed! +Mar 06, 2024 12:50:42 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F10-1/tp.git (master)... -Mar 05, 2024 4:17:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W10-2/tp.git (master)... -Mar 05, 2024 4:17:56 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W10-2/tp.git (master) completed! -Mar 05, 2024 4:17:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 06, 2024 12:50:42 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F09-1/tp.git... +Mar 06, 2024 12:50:42 AM reposense.report.ReportGenerator analyzeRepos +INFO: [28/92] Analyzing https://github.com/AY2324S2-CS2103T-F10-4/tp.git (master)... +Mar 06, 2024 12:50:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F09-1/tp.git to complete... +Mar 06, 2024 12:50:42 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F10-1/tp.git (master)... -Mar 05, 2024 4:17:56 PM reposense.report.ReportGenerator analyzeRepo +Mar 06, 2024 12:50:42 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-F10-1/tp.git (master) completed! -Mar 05, 2024 4:17:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F13-1/tp.git (master)... -Mar 05, 2024 4:17:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F13-1/tp.git (master)... -Mar 05, 2024 4:17:56 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F13-1/tp.git (master) completed! -Mar 05, 2024 4:17:56 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:42 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-F10-4/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:42 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F10-4/tp.git (master)... +Mar 06, 2024 12:50:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103-F09-3/tp.git completed! +Mar 06, 2024 12:50:42 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F09-4/tp.git... +Mar 06, 2024 12:50:42 AM reposense.report.ReportGenerator analyzeRepos +INFO: [29/92] Analyzing https://github.com/AY2324S2-CS2103-F09-3/tp.git (master)... +Mar 06, 2024 12:50:42 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F09-4/tp.git to complete... +Mar 06, 2024 12:50:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F10-4/tp.git (master)... +Mar 06, 2024 12:50:43 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103-F09-3/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F09-3/tp.git (master)... +Mar 06, 2024 12:50:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F10-4/tp.git (master)... +Mar 06, 2024 12:50:43 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-F10-4/tp.git (master) completed! +Mar 06, 2024 12:50:43 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-T16-3/tp.git completed! -Mar 05, 2024 4:17:56 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F09-1/tp.git... -Mar 05, 2024 4:17:56 PM reposense.report.ReportGenerator analyzeRepos -INFO: [28/92] Analyzing https://github.com/AY2324S2-CS2103T-T16-3/tp.git (master)... -Mar 05, 2024 4:17:56 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F09-1/tp.git to complete... -Mar 05, 2024 4:17:56 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:43 AM reposense.report.ReportGenerator analyzeRepos +INFO: [30/92] Analyzing https://github.com/AY2324S2-CS2103T-T16-3/tp.git (master)... +Mar 06, 2024 12:50:43 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F09-2/tp.git... +Mar 06, 2024 12:50:43 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F09-2/tp.git to complete... +Mar 06, 2024 12:50:43 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T16-3/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:17:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T16-3/tp.git (master)... -Mar 05, 2024 4:17:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T16-3/tp.git (master)... -Mar 05, 2024 4:17:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T16-3/tp.git (master)... -Mar 05, 2024 4:17:57 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T16-3/tp.git (master) completed! -Mar 05, 2024 4:17:57 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F10-4/tp.git completed! -Mar 05, 2024 4:17:57 PM reposense.report.ReportGenerator analyzeRepos -INFO: [29/92] Analyzing https://github.com/AY2324S2-CS2103T-F10-4/tp.git (master)... -Mar 05, 2024 4:17:57 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F09-4/tp.git... -Mar 05, 2024 4:17:57 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F09-4/tp.git to complete... -Mar 05, 2024 4:17:57 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103-F09-3/tp.git completed! -Mar 05, 2024 4:17:57 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-F10-4/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:17:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F10-4/tp.git (master)... -Mar 05, 2024 4:17:57 PM reposense.report.ReportGenerator analyzeRepos -INFO: [30/92] Analyzing https://github.com/AY2324S2-CS2103-F09-3/tp.git (master)... -Mar 05, 2024 4:17:57 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F09-2/tp.git... -Mar 05, 2024 4:17:57 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F09-2/tp.git to complete... -Mar 05, 2024 4:17:57 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103-F09-3/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:17:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F09-3/tp.git (master)... -Mar 05, 2024 4:17:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F10-4/tp.git (master)... -Mar 05, 2024 4:17:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F10-4/tp.git (master)... -Mar 05, 2024 4:17:57 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F10-4/tp.git (master) completed! -Mar 05, 2024 4:17:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 06, 2024 12:50:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F09-3/tp.git (master)... -Mar 05, 2024 4:17:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 06, 2024 12:50:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F09-3/tp.git (master)... -Mar 05, 2024 4:17:57 PM reposense.report.ReportGenerator analyzeRepo +Mar 06, 2024 12:50:43 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103-F09-3/tp.git (master) completed! -Mar 05, 2024 4:17:57 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:43 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T16-3/tp.git (master)... +Mar 06, 2024 12:50:43 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T16-3/tp.git (master)... +Mar 06, 2024 12:50:43 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T16-3/tp.git (master) completed! +Mar 06, 2024 12:50:43 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-T10-3/tp.git completed! -Mar 05, 2024 4:17:57 PM reposense.report.ReportGenerator analyzeRepos +Mar 06, 2024 12:50:43 AM reposense.report.ReportGenerator analyzeRepos INFO: [31/92] Analyzing https://github.com/AY2324S2-CS2103T-T10-3/tp.git (master)... -Mar 05, 2024 4:17:57 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:43 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T09-4/tp.git... -Mar 05, 2024 4:17:57 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:43 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T09-4/tp.git to complete... -Mar 05, 2024 4:17:57 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:43 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T10-3/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:17:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:43 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T10-3/tp.git (master)... -Mar 05, 2024 4:17:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 06, 2024 12:50:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T10-3/tp.git (master)... -Mar 05, 2024 4:17:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T10-3/tp.git (master)... -Mar 05, 2024 4:17:57 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T10-3/tp.git (master) completed! -Mar 05, 2024 4:17:58 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:44 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103-F09-4/tp.git completed! -Mar 05, 2024 4:17:58 PM reposense.report.ReportGenerator analyzeRepos -INFO: [32/92] Analyzing https://github.com/AY2324S2-CS2103-F09-4/tp.git (master)... -Mar 05, 2024 4:17:58 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:44 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F08-4/tp.git... -Mar 05, 2024 4:17:58 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:44 AM reposense.report.ReportGenerator analyzeRepos +INFO: [32/92] Analyzing https://github.com/AY2324S2-CS2103-F09-4/tp.git (master)... +Mar 06, 2024 12:50:44 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F08-4/tp.git to complete... -Mar 05, 2024 4:17:58 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103-F09-4/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:17:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F09-4/tp.git (master)... -Mar 05, 2024 4:17:59 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T09-4/tp.git completed! -Mar 05, 2024 4:17:59 PM reposense.report.ReportGenerator analyzeRepos -INFO: [33/92] Analyzing https://github.com/AY2324S2-CS2103T-T09-4/tp.git (master)... -Mar 05, 2024 4:17:59 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T10-3/tp.git (master)... +Mar 06, 2024 12:50:44 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T10-3/tp.git (master) completed! +Mar 06, 2024 12:50:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103-F09-1/tp.git completed! +Mar 06, 2024 12:50:44 AM reposense.report.ReportGenerator analyzeRepos +INFO: [33/92] Analyzing https://github.com/AY2324S2-CS2103-F09-1/tp.git (master)... +Mar 06, 2024 12:50:44 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T09-3/tp.git... -Mar 05, 2024 4:17:59 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:44 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T09-3/tp.git to complete... -Mar 05, 2024 4:17:59 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-T09-4/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:17:59 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T09-4/tp.git (master)... -Mar 05, 2024 4:17:59 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F09-4/tp.git (master)... -Mar 05, 2024 4:17:59 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F09-4/tp.git (master)... -Mar 05, 2024 4:17:59 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103-F09-4/tp.git (master) completed! -Mar 05, 2024 4:17:59 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T09-4/tp.git (master)... -Mar 05, 2024 4:17:59 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T09-4/tp.git (master)... -Mar 05, 2024 4:17:59 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T09-4/tp.git (master) completed! -Mar 05, 2024 4:17:59 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103-F08-4/tp.git completed! -Mar 05, 2024 4:17:59 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:44 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103-F09-4/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F09-4/tp.git (master)... +Mar 06, 2024 12:50:44 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103-F09-2/tp.git completed! +Mar 06, 2024 12:50:44 AM reposense.report.ReportGenerator analyzeRepos +INFO: [34/92] Analyzing https://github.com/AY2324S2-CS2103-F09-2/tp.git (master)... +Mar 06, 2024 12:50:44 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T12-4/tp.git... -Mar 05, 2024 4:17:59 PM reposense.report.ReportGenerator analyzeRepos -INFO: [34/92] Analyzing https://github.com/AY2324S2-CS2103-F08-4/tp.git (master)... -Mar 05, 2024 4:17:59 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:44 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T12-4/tp.git to complete... -Mar 05, 2024 4:18:00 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103-F08-4/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:00 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F08-4/tp.git (master)... -Mar 05, 2024 4:18:00 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103-F09-1/tp.git completed! -Mar 05, 2024 4:18:00 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F08-2/tp.git... -Mar 05, 2024 4:18:00 PM reposense.report.ReportGenerator analyzeRepos -INFO: [35/92] Analyzing https://github.com/AY2324S2-CS2103-F09-1/tp.git (master)... -Mar 05, 2024 4:18:00 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F08-2/tp.git to complete... -Mar 05, 2024 4:18:00 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103-F09-2/tp.git completed! -Mar 05, 2024 4:18:00 PM reposense.report.ReportGenerator analyzeRepos -INFO: [36/92] Analyzing https://github.com/AY2324S2-CS2103-F09-2/tp.git (master)... -Mar 05, 2024 4:18:00 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W11-1/tp.git... -Mar 05, 2024 4:18:00 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W11-1/tp.git to complete... -Mar 05, 2024 4:18:00 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F08-4/tp.git (master)... -Mar 05, 2024 4:18:00 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:44 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103-F09-1/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:00 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F09-1/tp.git (master)... -Mar 05, 2024 4:18:00 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:44 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103-F09-2/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:00 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:44 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F09-2/tp.git (master)... -Mar 05, 2024 4:18:00 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F08-4/tp.git (master)... -Mar 05, 2024 4:18:00 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103-F08-4/tp.git (master) completed! -Mar 05, 2024 4:18:00 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 06, 2024 12:50:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F09-2/tp.git (master)... -Mar 05, 2024 4:18:00 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F09-2/tp.git (master)... -Mar 05, 2024 4:18:00 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103-F09-2/tp.git (master) completed! -Mar 05, 2024 4:18:00 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 06, 2024 12:50:44 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F09-1/tp.git (master)... -Mar 05, 2024 4:18:00 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 06, 2024 12:50:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F09-1/tp.git (master)... -Mar 05, 2024 4:18:00 PM reposense.report.ReportGenerator analyzeRepo +Mar 06, 2024 12:50:44 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103-F09-1/tp.git (master) completed! -Mar 05, 2024 4:18:02 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W11-1/tp.git completed! -Mar 05, 2024 4:18:02 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:44 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F09-2/tp.git (master)... +Mar 06, 2024 12:50:44 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103-F09-2/tp.git (master) completed! +Mar 06, 2024 12:50:45 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F09-4/tp.git (master)... +Mar 06, 2024 12:50:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T09-4/tp.git completed! +Mar 06, 2024 12:50:45 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F08-2/tp.git... +Mar 06, 2024 12:50:45 AM reposense.report.ReportGenerator analyzeRepos +INFO: [35/92] Analyzing https://github.com/AY2324S2-CS2103T-T09-4/tp.git (master)... +Mar 06, 2024 12:50:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F08-2/tp.git to complete... +Mar 06, 2024 12:50:45 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-T09-4/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T09-4/tp.git (master)... +Mar 06, 2024 12:50:45 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F09-4/tp.git (master)... +Mar 06, 2024 12:50:45 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103-F09-4/tp.git (master) completed! +Mar 06, 2024 12:50:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103-F08-4/tp.git completed! +Mar 06, 2024 12:50:45 AM reposense.report.ReportGenerator analyzeRepos +INFO: [36/92] Analyzing https://github.com/AY2324S2-CS2103-F08-4/tp.git (master)... +Mar 06, 2024 12:50:45 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W11-1/tp.git... +Mar 06, 2024 12:50:45 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W11-1/tp.git to complete... +Mar 06, 2024 12:50:45 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103-F08-4/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:45 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F08-4/tp.git (master)... +Mar 06, 2024 12:50:46 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T12-4/tp.git completed! +Mar 06, 2024 12:50:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F08-4/tp.git (master)... +Mar 06, 2024 12:50:46 AM reposense.report.ReportGenerator analyzeRepos +INFO: [37/92] Analyzing https://github.com/AY2324S2-CS2103T-T12-4/tp.git (master)... +Mar 06, 2024 12:50:46 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W11-3/tp.git... -Mar 05, 2024 4:18:02 PM reposense.report.ReportGenerator analyzeRepos -INFO: [37/92] Analyzing https://github.com/AY2324S2-CS2103T-W11-1/tp.git (master)... -Mar 05, 2024 4:18:02 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:46 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W11-3/tp.git to complete... -Mar 05, 2024 4:18:02 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-W11-1/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:02 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W11-1/tp.git (master)... -Mar 05, 2024 4:18:02 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T12-4/tp.git completed! -Mar 05, 2024 4:18:02 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W09-3/tp.git... -Mar 05, 2024 4:18:02 PM reposense.report.ReportGenerator analyzeRepos -INFO: [38/92] Analyzing https://github.com/AY2324S2-CS2103T-T12-4/tp.git (master)... -Mar 05, 2024 4:18:02 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W09-3/tp.git to complete... -Mar 05, 2024 4:18:03 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T09-4/tp.git (master)... +Mar 06, 2024 12:50:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F08-4/tp.git (master)... +Mar 06, 2024 12:50:46 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103-F08-4/tp.git (master) completed! +Mar 06, 2024 12:50:46 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T12-4/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:03 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:46 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T12-4/tp.git (master)... -Mar 05, 2024 4:18:03 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T09-4/tp.git (master)... +Mar 06, 2024 12:50:46 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T09-4/tp.git (master) completed! +Mar 06, 2024 12:50:46 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T12-4/tp.git (master)... +Mar 06, 2024 12:50:46 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T12-4/tp.git (master)... +Mar 06, 2024 12:50:46 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T12-4/tp.git (master) completed! +Mar 06, 2024 12:50:47 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103-F08-2/tp.git completed! -Mar 05, 2024 4:18:03 PM reposense.report.ReportGenerator analyzeRepos -INFO: [39/92] Analyzing https://github.com/AY2324S2-CS2103-F08-2/tp.git (master)... -Mar 05, 2024 4:18:03 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:47 AM reposense.report.ReportGenerator analyzeRepos +INFO: [38/92] Analyzing https://github.com/AY2324S2-CS2103-F08-2/tp.git (master)... +Mar 06, 2024 12:50:47 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W09-3/tp.git... +Mar 06, 2024 12:50:47 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W09-3/tp.git to complete... +Mar 06, 2024 12:50:47 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T09-3/tp.git completed! +Mar 06, 2024 12:50:47 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F14-1/tp.git... -Mar 05, 2024 4:18:03 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:47 AM reposense.report.ReportGenerator analyzeRepos +INFO: [39/92] Analyzing https://github.com/AY2324S2-CS2103T-T09-3/tp.git (master)... +Mar 06, 2024 12:50:47 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F14-1/tp.git to complete... -Mar 05, 2024 4:18:03 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:47 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103-F08-2/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:03 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F08-2/tp.git (master)... -Mar 05, 2024 4:18:03 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T12-4/tp.git (master)... -Mar 05, 2024 4:18:03 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T12-4/tp.git (master)... -Mar 05, 2024 4:18:03 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T12-4/tp.git (master) completed! -Mar 05, 2024 4:18:03 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W11-1/tp.git (master)... -Mar 05, 2024 4:18:03 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F08-2/tp.git (master)... -Mar 05, 2024 4:18:03 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W11-1/tp.git (master)... -Mar 05, 2024 4:18:03 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W11-1/tp.git (master) completed! -Mar 05, 2024 4:18:03 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F08-2/tp.git (master)... -Mar 05, 2024 4:18:03 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103-F08-2/tp.git (master) completed! -Mar 05, 2024 4:18:03 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T09-3/tp.git completed! -Mar 05, 2024 4:18:03 PM reposense.report.ReportGenerator analyzeRepos -INFO: [40/92] Analyzing https://github.com/AY2324S2-CS2103T-T09-3/tp.git (master)... -Mar 05, 2024 4:18:03 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:47 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-W11-1/tp.git completed! +Mar 06, 2024 12:50:47 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T12-2/tp.git... -Mar 05, 2024 4:18:03 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:47 AM reposense.report.ReportGenerator analyzeRepos +INFO: [40/92] Analyzing https://github.com/AY2324S2-CS2103T-W11-1/tp.git (master)... +Mar 06, 2024 12:50:47 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T12-2/tp.git to complete... -Mar 05, 2024 4:18:03 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:47 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-T09-3/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T09-3/tp.git (master)... +Mar 06, 2024 12:50:47 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-W11-3/tp.git completed! -Mar 05, 2024 4:18:03 PM reposense.report.ReportGenerator analyzeRepos -INFO: [41/92] Analyzing https://github.com/AY2324S2-CS2103T-W11-3/tp.git (master)... -Mar 05, 2024 4:18:03 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:47 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-W11-1/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W11-1/tp.git (master)... +Mar 06, 2024 12:50:47 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F14-3/tp.git... -Mar 05, 2024 4:18:03 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:47 AM reposense.report.ReportGenerator analyzeRepos +INFO: [41/92] Analyzing https://github.com/AY2324S2-CS2103T-W11-3/tp.git (master)... +Mar 06, 2024 12:50:47 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F14-3/tp.git to complete... -Mar 05, 2024 4:18:03 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F08-2/tp.git (master)... +Mar 06, 2024 12:50:47 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-W11-3/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:03 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:47 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W11-3/tp.git (master)... -Mar 05, 2024 4:18:03 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-T09-3/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:03 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T09-3/tp.git (master)... -Mar 05, 2024 4:18:04 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 06, 2024 12:50:47 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F08-2/tp.git (master)... +Mar 06, 2024 12:50:47 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103-F08-2/tp.git (master) completed! +Mar 06, 2024 12:50:47 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W11-3/tp.git (master)... -Mar 05, 2024 4:18:04 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 06, 2024 12:50:48 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W11-3/tp.git (master)... -Mar 05, 2024 4:18:04 PM reposense.report.ReportGenerator analyzeRepo +Mar 06, 2024 12:50:48 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-W11-3/tp.git (master) completed! -Mar 05, 2024 4:18:04 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:48 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-W09-3/tp.git completed! -Mar 05, 2024 4:18:04 PM reposense.report.ReportGenerator analyzeRepos +Mar 06, 2024 12:50:48 AM reposense.report.ReportGenerator analyzeRepos INFO: [42/92] Analyzing https://github.com/AY2324S2-CS2103T-W09-3/tp.git (master)... -Mar 05, 2024 4:18:04 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:48 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W09-1/tp.git... -Mar 05, 2024 4:18:04 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:48 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W09-1/tp.git to complete... -Mar 05, 2024 4:18:04 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:48 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-W09-3/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:04 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W09-3/tp.git (master)... -Mar 05, 2024 4:18:04 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T09-3/tp.git (master)... -Mar 05, 2024 4:18:04 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W09-3/tp.git (master)... -Mar 05, 2024 4:18:04 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T09-3/tp.git (master)... -Mar 05, 2024 4:18:04 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T09-3/tp.git (master) completed! -Mar 05, 2024 4:18:04 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W09-3/tp.git (master)... -Mar 05, 2024 4:18:04 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W09-3/tp.git (master) completed! -Mar 05, 2024 4:18:04 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:48 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-F14-1/tp.git completed! -Mar 05, 2024 4:18:04 PM reposense.report.ReportGenerator analyzeRepos -INFO: [43/92] Analyzing https://github.com/AY2324S2-CS2103T-F14-1/tp.git (master)... -Mar 05, 2024 4:18:04 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:48 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T12-2/tp.git completed! +Mar 06, 2024 12:50:48 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T17-4/tp.git... -Mar 05, 2024 4:18:04 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:48 AM reposense.report.ReportGenerator analyzeRepos +INFO: [43/92] Analyzing https://github.com/AY2324S2-CS2103T-F14-1/tp.git (master)... +Mar 06, 2024 12:50:48 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T17-4/tp.git to complete... -Mar 05, 2024 4:18:04 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:48 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T11-2/tp.git... +Mar 06, 2024 12:50:48 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T11-2/tp.git to complete... +Mar 06, 2024 12:50:48 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-F14-1/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:04 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:48 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F14-1/tp.git (master)... -Mar 05, 2024 4:18:05 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T12-2/tp.git completed! -Mar 05, 2024 4:18:05 PM reposense.report.ReportGenerator analyzeRepos +Mar 06, 2024 12:50:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W09-3/tp.git (master)... +Mar 06, 2024 12:50:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W11-1/tp.git (master)... +Mar 06, 2024 12:50:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W09-3/tp.git (master)... +Mar 06, 2024 12:50:49 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-W09-3/tp.git (master) completed! +Mar 06, 2024 12:50:49 AM reposense.report.ReportGenerator analyzeRepos INFO: [44/92] Analyzing https://github.com/AY2324S2-CS2103T-T12-2/tp.git (master)... -Mar 05, 2024 4:18:05 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T11-2/tp.git... -Mar 05, 2024 4:18:05 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T11-2/tp.git to complete... -Mar 05, 2024 4:18:05 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:49 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W11-1/tp.git (master)... +Mar 06, 2024 12:50:49 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-W11-1/tp.git (master) completed! +Mar 06, 2024 12:50:49 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T09-3/tp.git (master)... +Mar 06, 2024 12:50:49 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T12-2/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:05 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T12-2/tp.git (master)... -Mar 05, 2024 4:18:05 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T12-2/tp.git (master)... -Mar 05, 2024 4:18:05 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T12-2/tp.git (master)... -Mar 05, 2024 4:18:05 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T12-2/tp.git (master) completed! -Mar 05, 2024 4:18:06 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T17-4/tp.git completed! -Mar 05, 2024 4:18:06 PM reposense.report.ReportGenerator analyzeRepos -INFO: [45/92] Analyzing https://github.com/AY2324S2-CS2103T-T17-4/tp.git (master)... -Mar 05, 2024 4:18:06 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:49 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-F14-3/tp.git completed! +Mar 06, 2024 12:50:49 AM reposense.report.ReportGenerator analyzeRepos +INFO: [45/92] Analyzing https://github.com/AY2324S2-CS2103T-F14-3/tp.git (master)... +Mar 06, 2024 12:50:49 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T11-4/tp.git... -Mar 05, 2024 4:18:06 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:49 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T11-4/tp.git to complete... -Mar 05, 2024 4:18:06 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-T17-4/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:06 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T17-4/tp.git (master)... -Mar 05, 2024 4:18:06 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T17-4/tp.git (master)... -Mar 05, 2024 4:18:06 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F14-1/tp.git (master)... -Mar 05, 2024 4:18:06 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T17-4/tp.git (master)... -Mar 05, 2024 4:18:06 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T17-4/tp.git (master) completed! -Mar 05, 2024 4:18:06 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F14-1/tp.git (master)... -Mar 05, 2024 4:18:06 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:49 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-F14-3/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:49 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F14-3/tp.git (master)... +Mar 06, 2024 12:50:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T12-2/tp.git (master)... +Mar 06, 2024 12:50:50 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-W09-1/tp.git completed! -Mar 05, 2024 4:18:06 PM reposense.report.ReportGenerator analyzeRepos -INFO: [46/92] Analyzing https://github.com/AY2324S2-CS2103T-W09-1/tp.git (master)... -Mar 05, 2024 4:18:06 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:50 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T17-2/tp.git... -Mar 05, 2024 4:18:06 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:50 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T17-2/tp.git to complete... -Mar 05, 2024 4:18:06 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F14-1/tp.git (master) completed! -Mar 05, 2024 4:18:06 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-W09-1/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:06 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W09-1/tp.git (master)... -Mar 05, 2024 4:18:06 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T11-2/tp.git completed! -Mar 05, 2024 4:18:06 PM reposense.report.ReportGenerator analyzeRepos -INFO: [47/92] Analyzing https://github.com/AY2324S2-CS2103T-T11-2/tp.git (master)... -Mar 05, 2024 4:18:06 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T09-3/tp.git (master)... +Mar 06, 2024 12:50:50 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T09-3/tp.git (master) completed! +Mar 06, 2024 12:50:50 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T17-4/tp.git completed! +Mar 06, 2024 12:50:50 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T08-3/tp.git... -Mar 05, 2024 4:18:06 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:50 AM reposense.report.ReportGenerator analyzeRepos +INFO: [46/92] Analyzing https://github.com/AY2324S2-CS2103T-W09-1/tp.git (master)... +Mar 06, 2024 12:50:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T12-2/tp.git (master)... +Mar 06, 2024 12:50:50 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T12-2/tp.git (master) completed! +Mar 06, 2024 12:50:50 AM reposense.report.ReportGenerator analyzeRepos +INFO: [47/92] Analyzing https://github.com/AY2324S2-CS2103T-T17-4/tp.git (master)... +Mar 06, 2024 12:50:50 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T08-3/tp.git to complete... -Mar 05, 2024 4:18:06 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-T11-2/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:06 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T11-2/tp.git (master)... -Mar 05, 2024 4:18:06 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 06, 2024 12:50:50 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T11-2/tp.git completed! +Mar 06, 2024 12:50:50 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-W09-1/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W09-1/tp.git (master)... +Mar 06, 2024 12:50:50 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T08-1/tp.git... +Mar 06, 2024 12:50:50 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-T17-4/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T17-4/tp.git (master)... +Mar 06, 2024 12:50:50 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T08-1/tp.git to complete... +Mar 06, 2024 12:50:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F14-3/tp.git (master)... +Mar 06, 2024 12:50:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T17-4/tp.git (master)... +Mar 06, 2024 12:50:50 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W09-1/tp.git (master)... -Mar 05, 2024 4:18:06 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 06, 2024 12:50:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F14-3/tp.git (master)... +Mar 06, 2024 12:50:50 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-F14-3/tp.git (master) completed! +Mar 06, 2024 12:50:50 AM reposense.report.ReportGenerator analyzeRepos +INFO: [48/92] Analyzing https://github.com/AY2324S2-CS2103T-T11-2/tp.git (master)... +Mar 06, 2024 12:50:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W09-1/tp.git (master)... -Mar 05, 2024 4:18:06 PM reposense.report.ReportGenerator analyzeRepo +Mar 06, 2024 12:50:50 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-W09-1/tp.git (master) completed! -Mar 05, 2024 4:18:06 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T11-2/tp.git (master)... -Mar 05, 2024 4:18:06 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T11-2/tp.git (master)... -Mar 05, 2024 4:18:06 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T11-2/tp.git (master) completed! -Mar 05, 2024 4:18:07 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:50 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T17-4/tp.git (master)... +Mar 06, 2024 12:50:50 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T17-4/tp.git (master) completed! +Mar 06, 2024 12:50:50 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-T11-2/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:50 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T11-2/tp.git (master)... +Mar 06, 2024 12:50:51 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-T11-4/tp.git completed! -Mar 05, 2024 4:18:07 PM reposense.report.ReportGenerator analyzeRepos -INFO: [48/92] Analyzing https://github.com/AY2324S2-CS2103T-T11-4/tp.git (master)... -Mar 05, 2024 4:18:07 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T08-1/tp.git... -Mar 05, 2024 4:18:07 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T08-1/tp.git to complete... -Mar 05, 2024 4:18:07 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:51 AM reposense.report.ReportGenerator analyzeRepos +INFO: [49/92] Analyzing https://github.com/AY2324S2-CS2103T-T11-4/tp.git (master)... +Mar 06, 2024 12:50:51 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F12-4/tp.git... +Mar 06, 2024 12:50:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T11-2/tp.git (master)... +Mar 06, 2024 12:50:51 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F12-4/tp.git to complete... +Mar 06, 2024 12:50:51 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T11-4/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:07 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T11-4/tp.git (master)... -Mar 05, 2024 4:18:07 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 06, 2024 12:50:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T11-2/tp.git (master)... +Mar 06, 2024 12:50:51 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T11-2/tp.git (master) completed! +Mar 06, 2024 12:50:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T11-4/tp.git (master)... -Mar 05, 2024 4:18:07 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 06, 2024 12:50:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T11-4/tp.git (master)... -Mar 05, 2024 4:18:07 PM reposense.report.ReportGenerator analyzeRepo +Mar 06, 2024 12:50:51 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T11-4/tp.git (master) completed! -Mar 05, 2024 4:18:07 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:51 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-T17-2/tp.git completed! -Mar 05, 2024 4:18:07 PM reposense.report.ReportGenerator analyzeRepos -INFO: [49/92] Analyzing https://github.com/AY2324S2-CS2103T-T17-2/tp.git (master)... -Mar 05, 2024 4:18:07 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F12-4/tp.git... -Mar 05, 2024 4:18:07 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F12-4/tp.git to complete... -Mar 05, 2024 4:18:07 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-T17-2/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:07 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T17-2/tp.git (master)... -Mar 05, 2024 4:18:07 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T17-2/tp.git (master)... -Mar 05, 2024 4:18:08 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T17-2/tp.git (master)... -Mar 05, 2024 4:18:08 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T17-2/tp.git (master) completed! -Mar 05, 2024 4:18:08 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T08-3/tp.git completed! -Mar 05, 2024 4:18:08 PM reposense.report.ReportGenerator analyzeRepos -INFO: [50/92] Analyzing https://github.com/AY2324S2-CS2103T-T08-3/tp.git (master)... -Mar 05, 2024 4:18:08 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:51 AM reposense.report.ReportGenerator analyzeRepos +INFO: [50/92] Analyzing https://github.com/AY2324S2-CS2103T-T17-2/tp.git (master)... +Mar 06, 2024 12:50:51 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T14-1/tp.git... -Mar 05, 2024 4:18:08 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:51 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T14-1/tp.git to complete... -Mar 05, 2024 4:18:08 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:51 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T08-3/tp.git completed! +Mar 06, 2024 12:50:51 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F12-2/tp.git... +Mar 06, 2024 12:50:51 AM reposense.report.ReportGenerator analyzeRepos +INFO: [51/92] Analyzing https://github.com/AY2324S2-CS2103T-T08-3/tp.git (master)... +Mar 06, 2024 12:50:51 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-T17-2/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T17-2/tp.git (master)... +Mar 06, 2024 12:50:51 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F12-2/tp.git to complete... +Mar 06, 2024 12:50:51 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T08-1/tp.git completed! +Mar 06, 2024 12:50:51 AM reposense.report.ReportGenerator analyzeRepos +INFO: [52/92] Analyzing https://github.com/AY2324S2-CS2103T-T08-1/tp.git (master)... +Mar 06, 2024 12:50:51 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W08-4/tp.git... +Mar 06, 2024 12:50:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F14-1/tp.git (master)... +Mar 06, 2024 12:50:51 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W08-4/tp.git to complete... +Mar 06, 2024 12:50:51 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T08-3/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:08 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T08-3/tp.git (master)... -Mar 05, 2024 4:18:08 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 06, 2024 12:50:51 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-T08-1/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:51 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T08-1/tp.git (master)... +Mar 06, 2024 12:50:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T17-2/tp.git (master)... +Mar 06, 2024 12:50:51 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T08-3/tp.git (master)... -Mar 05, 2024 4:18:08 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T08-1/tp.git completed! -Mar 05, 2024 4:18:08 PM reposense.report.ReportGenerator analyzeRepos -INFO: [51/92] Analyzing https://github.com/AY2324S2-CS2103T-T08-1/tp.git (master)... -Mar 05, 2024 4:18:08 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F12-2/tp.git... -Mar 05, 2024 4:18:08 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F12-2/tp.git to complete... -Mar 05, 2024 4:18:08 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 06, 2024 12:50:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T17-2/tp.git (master)... +Mar 06, 2024 12:50:51 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T17-2/tp.git (master) completed! +Mar 06, 2024 12:50:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F14-1/tp.git (master)... +Mar 06, 2024 12:50:51 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-F14-1/tp.git (master) completed! +Mar 06, 2024 12:50:51 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T08-3/tp.git (master)... -Mar 05, 2024 4:18:08 PM reposense.report.ReportGenerator analyzeRepo +Mar 06, 2024 12:50:51 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T08-3/tp.git (master) completed! -Mar 05, 2024 4:18:08 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-T08-1/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:08 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T08-1/tp.git (master)... -Mar 05, 2024 4:18:08 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F14-3/tp.git completed! -Mar 05, 2024 4:18:08 PM reposense.report.ReportGenerator analyzeRepos -INFO: [52/92] Analyzing https://github.com/AY2324S2-CS2103T-F14-3/tp.git (master)... -Mar 05, 2024 4:18:08 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W08-4/tp.git... -Mar 05, 2024 4:18:08 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W08-4/tp.git to complete... -Mar 05, 2024 4:18:08 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-F14-3/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:08 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F14-3/tp.git (master)... -Mar 05, 2024 4:18:08 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 06, 2024 12:50:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T08-1/tp.git (master)... -Mar 05, 2024 4:18:08 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 06, 2024 12:50:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T08-1/tp.git (master)... -Mar 05, 2024 4:18:08 PM reposense.report.ReportGenerator analyzeRepo +Mar 06, 2024 12:50:52 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T08-1/tp.git (master) completed! -Mar 05, 2024 4:18:08 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F14-3/tp.git (master)... -Mar 05, 2024 4:18:09 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F14-3/tp.git (master)... -Mar 05, 2024 4:18:09 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F14-3/tp.git (master) completed! -Mar 05, 2024 4:18:09 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F12-2/tp.git completed! -Mar 05, 2024 4:18:09 PM reposense.report.ReportGenerator analyzeRepos -INFO: [53/92] Analyzing https://github.com/AY2324S2-CS2103T-F12-2/tp.git (master)... -Mar 05, 2024 4:18:09 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:52 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-F12-4/tp.git completed! +Mar 06, 2024 12:50:52 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W12-2/tp.git... -Mar 05, 2024 4:18:09 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:52 AM reposense.report.ReportGenerator analyzeRepos +INFO: [53/92] Analyzing https://github.com/AY2324S2-CS2103T-F12-4/tp.git (master)... +Mar 06, 2024 12:50:52 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W12-2/tp.git to complete... -Mar 05, 2024 4:18:09 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-F12-2/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:09 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F12-2/tp.git (master)... -Mar 05, 2024 4:18:09 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T14-1/tp.git completed! -Mar 05, 2024 4:18:09 PM reposense.report.ReportGenerator analyzeRepos -INFO: [54/92] Analyzing https://github.com/AY2324S2-CS2103T-T14-1/tp.git (master)... -Mar 05, 2024 4:18:09 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:52 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-F12-4/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F12-4/tp.git (master)... +Mar 06, 2024 12:50:52 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F12-4/tp.git (master)... +Mar 06, 2024 12:50:52 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F12-4/tp.git (master)... +Mar 06, 2024 12:50:52 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-F12-4/tp.git (master) completed! +Mar 06, 2024 12:50:52 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-F12-2/tp.git completed! +Mar 06, 2024 12:50:52 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W08-3/tp.git... -Mar 05, 2024 4:18:09 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:52 AM reposense.report.ReportGenerator analyzeRepos +INFO: [54/92] Analyzing https://github.com/AY2324S2-CS2103T-F12-2/tp.git (master)... +Mar 06, 2024 12:50:52 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W08-3/tp.git to complete... -Mar 05, 2024 4:18:09 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:52 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T14-1/tp.git completed! +Mar 06, 2024 12:50:52 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W12-1/tp.git... +Mar 06, 2024 12:50:52 AM reposense.report.ReportGenerator analyzeRepos +INFO: [55/92] Analyzing https://github.com/AY2324S2-CS2103T-T14-1/tp.git (master)... +Mar 06, 2024 12:50:52 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W12-1/tp.git to complete... +Mar 06, 2024 12:50:52 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-F12-2/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F12-2/tp.git (master)... +Mar 06, 2024 12:50:52 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T14-1/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:09 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:52 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T14-1/tp.git (master)... -Mar 05, 2024 4:18:09 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 06, 2024 12:50:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F12-2/tp.git (master)... -Mar 05, 2024 4:18:09 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 06, 2024 12:50:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-W08-4/tp.git completed! +Mar 06, 2024 12:50:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T14-1/tp.git (master)... +Mar 06, 2024 12:50:53 AM reposense.report.ReportGenerator analyzeRepos +INFO: [56/92] Analyzing https://github.com/AY2324S2-CS2103T-W08-4/tp.git (master)... +Mar 06, 2024 12:50:53 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F11-4/tp.git... +Mar 06, 2024 12:50:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F12-2/tp.git (master)... -Mar 05, 2024 4:18:09 PM reposense.report.ReportGenerator analyzeRepo +Mar 06, 2024 12:50:53 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-F12-2/tp.git (master) completed! -Mar 05, 2024 4:18:10 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T14-1/tp.git (master)... -Mar 05, 2024 4:18:10 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W08-4/tp.git completed! -Mar 05, 2024 4:18:10 PM reposense.report.ReportGenerator analyzeRepos -INFO: [55/92] Analyzing https://github.com/AY2324S2-CS2103T-W08-4/tp.git (master)... -Mar 05, 2024 4:18:10 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W12-1/tp.git... -Mar 05, 2024 4:18:10 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 06, 2024 12:50:53 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F11-4/tp.git to complete... +Mar 06, 2024 12:50:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T14-1/tp.git (master)... -Mar 05, 2024 4:18:10 PM reposense.report.ReportGenerator analyzeRepo +Mar 06, 2024 12:50:53 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T14-1/tp.git (master) completed! -Mar 05, 2024 4:18:10 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W12-1/tp.git to complete... -Mar 05, 2024 4:18:10 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:53 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-W08-4/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:10 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W08-4/tp.git (master)... -Mar 05, 2024 4:18:10 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W08-4/tp.git (master)... -Mar 05, 2024 4:18:10 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W08-4/tp.git (master)... -Mar 05, 2024 4:18:10 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W08-4/tp.git (master) completed! -Mar 05, 2024 4:18:10 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F12-4/tp.git completed! -Mar 05, 2024 4:18:10 PM reposense.report.ReportGenerator analyzeRepos -INFO: [56/92] Analyzing https://github.com/AY2324S2-CS2103T-F12-4/tp.git (master)... -Mar 05, 2024 4:18:10 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F11-4/tp.git... -Mar 05, 2024 4:18:10 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F11-4/tp.git to complete... -Mar 05, 2024 4:18:10 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-F12-4/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:10 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F12-4/tp.git (master)... -Mar 05, 2024 4:18:10 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F12-4/tp.git (master)... -Mar 05, 2024 4:18:10 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F12-4/tp.git (master)... -Mar 05, 2024 4:18:10 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F12-4/tp.git (master) completed! -Mar 05, 2024 4:18:11 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:53 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-W12-2/tp.git completed! -Mar 05, 2024 4:18:11 PM reposense.report.ReportGenerator analyzeRepos +Mar 06, 2024 12:50:53 AM reposense.report.ReportGenerator analyzeRepos INFO: [57/92] Analyzing https://github.com/AY2324S2-CS2103T-W12-2/tp.git (master)... -Mar 05, 2024 4:18:11 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:53 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F14-4/tp.git... -Mar 05, 2024 4:18:11 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:53 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F14-4/tp.git to complete... -Mar 05, 2024 4:18:11 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:53 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-W12-2/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:11 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:53 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W12-2/tp.git (master)... -Mar 05, 2024 4:18:11 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 06, 2024 12:50:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W08-4/tp.git (master)... +Mar 06, 2024 12:50:53 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W12-2/tp.git (master)... -Mar 05, 2024 4:18:11 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 06, 2024 12:50:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W08-4/tp.git (master)... +Mar 06, 2024 12:50:53 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-W08-4/tp.git (master) completed! +Mar 06, 2024 12:50:53 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W12-2/tp.git (master)... -Mar 05, 2024 4:18:11 PM reposense.report.ReportGenerator analyzeRepo +Mar 06, 2024 12:50:53 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-W12-2/tp.git (master) completed! -Mar 05, 2024 4:18:11 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-W08-3/tp.git completed! -Mar 05, 2024 4:18:11 PM reposense.report.ReportGenerator analyzeRepos +Mar 06, 2024 12:50:54 AM reposense.report.ReportGenerator analyzeRepos INFO: [58/92] Analyzing https://github.com/AY2324S2-CS2103T-W08-3/tp.git (master)... -Mar 05, 2024 4:18:11 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:54 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W08-2/tp.git... -Mar 05, 2024 4:18:11 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W08-2/tp.git to complete... -Mar 05, 2024 4:18:11 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:54 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-W08-3/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:11 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W08-3/tp.git (master)... -Mar 05, 2024 4:18:11 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W08-3/tp.git (master)... -Mar 05, 2024 4:18:11 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W08-3/tp.git (master)... -Mar 05, 2024 4:18:11 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W08-3/tp.git (master) completed! -Mar 05, 2024 4:18:12 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-W12-1/tp.git completed! -Mar 05, 2024 4:18:12 PM reposense.report.ReportGenerator analyzeRepos -INFO: [59/92] Analyzing https://github.com/AY2324S2-CS2103T-W12-1/tp.git (master)... -Mar 05, 2024 4:18:12 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:54 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F11-3/tp.git... -Mar 05, 2024 4:18:12 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:54 AM reposense.report.ReportGenerator analyzeRepos +INFO: [59/92] Analyzing https://github.com/AY2324S2-CS2103T-W12-1/tp.git (master)... +Mar 06, 2024 12:50:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F11-3/tp.git to complete... -Mar 05, 2024 4:18:12 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W08-3/tp.git (master)... +Mar 06, 2024 12:50:54 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-W12-1/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:12 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W12-1/tp.git (master)... -Mar 05, 2024 4:18:12 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W12-1/tp.git (master)... -Mar 05, 2024 4:18:12 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W12-1/tp.git (master)... -Mar 05, 2024 4:18:12 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W12-1/tp.git (master) completed! -Mar 05, 2024 4:18:12 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W08-3/tp.git (master)... +Mar 06, 2024 12:50:54 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-W08-3/tp.git (master) completed! +Mar 06, 2024 12:50:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-F11-4/tp.git completed! -Mar 05, 2024 4:18:12 PM reposense.report.ReportGenerator analyzeRepos +Mar 06, 2024 12:50:54 AM reposense.report.ReportGenerator analyzeRepos INFO: [60/92] Analyzing https://github.com/AY2324S2-CS2103T-F11-4/tp.git (master)... -Mar 05, 2024 4:18:12 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:54 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T15-2/tp.git... -Mar 05, 2024 4:18:12 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T15-2/tp.git to complete... -Mar 05, 2024 4:18:12 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-F11-4/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:12 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F11-4/tp.git (master)... -Mar 05, 2024 4:18:12 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W08-2/tp.git completed! -Mar 05, 2024 4:18:12 PM reposense.report.ReportGenerator analyzeRepos -INFO: [61/92] Analyzing https://github.com/AY2324S2-CS2103T-W08-2/tp.git (master)... -Mar 05, 2024 4:18:12 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:54 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-F14-4/tp.git completed! +Mar 06, 2024 12:50:54 AM reposense.report.ReportGenerator analyzeRepos +INFO: [61/92] Analyzing https://github.com/AY2324S2-CS2103T-F14-4/tp.git (master)... +Mar 06, 2024 12:50:54 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-T14-1/tp.git... -Mar 05, 2024 4:18:12 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:54 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-T14-1/tp.git to complete... -Mar 05, 2024 4:18:12 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-W08-2/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:12 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W08-2/tp.git (master)... -Mar 05, 2024 4:18:12 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 06, 2024 12:50:54 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-F11-4/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F11-4/tp.git (master)... +Mar 06, 2024 12:50:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W12-1/tp.git (master)... +Mar 06, 2024 12:50:54 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-F14-4/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:54 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F14-4/tp.git (master)... +Mar 06, 2024 12:50:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W12-1/tp.git (master)... +Mar 06, 2024 12:50:54 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-W12-1/tp.git (master) completed! +Mar 06, 2024 12:50:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F14-4/tp.git (master)... +Mar 06, 2024 12:50:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F14-4/tp.git (master)... +Mar 06, 2024 12:50:54 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-F14-4/tp.git (master) completed! +Mar 06, 2024 12:50:54 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F11-4/tp.git (master)... -Mar 05, 2024 4:18:12 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 06, 2024 12:50:54 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F11-4/tp.git (master)... -Mar 05, 2024 4:18:12 PM reposense.report.ReportGenerator analyzeRepo +Mar 06, 2024 12:50:54 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-F11-4/tp.git (master) completed! -Mar 05, 2024 4:18:12 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W08-2/tp.git (master)... -Mar 05, 2024 4:18:13 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W08-2/tp.git (master)... -Mar 05, 2024 4:18:13 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W08-2/tp.git (master) completed! -Mar 05, 2024 4:18:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F11-3/tp.git completed! -Mar 05, 2024 4:18:13 PM reposense.report.ReportGenerator analyzeRepos -INFO: [62/92] Analyzing https://github.com/AY2324S2-CS2103T-F11-3/tp.git (master)... -Mar 05, 2024 4:18:13 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-W08-2/tp.git completed! +Mar 06, 2024 12:50:55 AM reposense.report.ReportGenerator analyzeRepos +INFO: [62/92] Analyzing https://github.com/AY2324S2-CS2103T-W08-2/tp.git (master)... +Mar 06, 2024 12:50:55 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F11-2/tp.git... -Mar 05, 2024 4:18:13 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:55 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F11-2/tp.git to complete... -Mar 05, 2024 4:18:13 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-F11-3/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:13 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F11-3/tp.git (master)... -Mar 05, 2024 4:18:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F14-4/tp.git completed! -Mar 05, 2024 4:18:13 PM reposense.report.ReportGenerator analyzeRepos -INFO: [63/92] Analyzing https://github.com/AY2324S2-CS2103T-F14-4/tp.git (master)... -Mar 05, 2024 4:18:13 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:55 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-W08-2/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W08-2/tp.git (master)... +Mar 06, 2024 12:50:55 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-F11-3/tp.git completed! +Mar 06, 2024 12:50:55 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W08-2/tp.git (master)... +Mar 06, 2024 12:50:55 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F11-1/tp.git... -Mar 05, 2024 4:18:13 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:55 AM reposense.report.ReportGenerator analyzeRepos +INFO: [63/92] Analyzing https://github.com/AY2324S2-CS2103T-F11-3/tp.git (master)... +Mar 06, 2024 12:50:55 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F11-1/tp.git to complete... -Mar 05, 2024 4:18:13 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-F14-4/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:13 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F14-4/tp.git (master)... -Mar 05, 2024 4:18:13 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F14-4/tp.git (master)... -Mar 05, 2024 4:18:13 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F14-4/tp.git (master)... -Mar 05, 2024 4:18:13 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F14-4/tp.git (master) completed! -Mar 05, 2024 4:18:14 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F11-3/tp.git (master)... -Mar 05, 2024 4:18:14 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F11-3/tp.git (master)... -Mar 05, 2024 4:18:14 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F11-3/tp.git (master) completed! -Mar 05, 2024 4:18:14 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:55 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W08-2/tp.git (master)... +Mar 06, 2024 12:50:55 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-W08-2/tp.git (master) completed! +Mar 06, 2024 12:50:55 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-F11-3/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:55 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F11-3/tp.git (master)... +Mar 06, 2024 12:50:55 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-T15-2/tp.git completed! -Mar 05, 2024 4:18:14 PM reposense.report.ReportGenerator analyzeRepos -INFO: [64/92] Analyzing https://github.com/AY2324S2-CS2103T-T15-2/tp.git (master)... -Mar 05, 2024 4:18:14 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:55 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T15-3/tp.git... -Mar 05, 2024 4:18:14 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:55 AM reposense.report.ReportGenerator analyzeRepos +INFO: [64/92] Analyzing https://github.com/AY2324S2-CS2103T-T15-2/tp.git (master)... +Mar 06, 2024 12:50:55 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T15-3/tp.git to complete... -Mar 05, 2024 4:18:14 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:56 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T15-2/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:14 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T15-2/tp.git (master)... -Mar 05, 2024 4:18:14 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 06, 2024 12:50:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T15-2/tp.git (master)... -Mar 05, 2024 4:18:14 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:56 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T15-2/tp.git (master)... +Mar 06, 2024 12:50:56 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T15-2/tp.git (master) completed! +Mar 06, 2024 12:50:56 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103-T14-1/tp.git completed! -Mar 05, 2024 4:18:14 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:56 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T15-1/tp.git... -Mar 05, 2024 4:18:14 PM reposense.report.ReportGenerator analyzeRepos +Mar 06, 2024 12:50:56 AM reposense.report.ReportGenerator analyzeRepos INFO: [65/92] Analyzing https://github.com/AY2324S2-CS2103-T14-1/tp.git (master)... -Mar 05, 2024 4:18:14 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:56 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T15-1/tp.git to complete... -Mar 05, 2024 4:18:14 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T15-2/tp.git (master)... -Mar 05, 2024 4:18:14 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T15-2/tp.git (master) completed! -Mar 05, 2024 4:18:15 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103-T14-1/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:15 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-T14-1/tp.git (master)... -Mar 05, 2024 4:18:15 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:56 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-F11-2/tp.git completed! -Mar 05, 2024 4:18:15 PM reposense.report.ReportGenerator analyzeRepos +Mar 06, 2024 12:50:56 AM reposense.report.ReportGenerator analyzeRepos INFO: [66/92] Analyzing https://github.com/AY2324S2-CS2103T-F11-2/tp.git (master)... -Mar 05, 2024 4:18:15 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:56 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T09-1/tp.git... -Mar 05, 2024 4:18:15 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:56 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T09-1/tp.git to complete... -Mar 05, 2024 4:18:15 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:56 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103-T14-1/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-T14-1/tp.git (master)... +Mar 06, 2024 12:50:56 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-F11-2/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:15 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:56 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F11-2/tp.git (master)... -Mar 05, 2024 4:18:15 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 06, 2024 12:50:56 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F11-2/tp.git (master)... -Mar 05, 2024 4:18:15 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 06, 2024 12:50:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F11-2/tp.git (master)... -Mar 05, 2024 4:18:15 PM reposense.report.ReportGenerator analyzeRepo +Mar 06, 2024 12:50:57 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-F11-2/tp.git (master) completed! -Mar 05, 2024 4:18:15 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-T14-1/tp.git (master)... -Mar 05, 2024 4:18:15 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-T14-1/tp.git (master)... -Mar 05, 2024 4:18:15 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103-T14-1/tp.git (master) completed! -Mar 05, 2024 4:18:15 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-F11-1/tp.git completed! -Mar 05, 2024 4:18:15 PM reposense.report.ReportGenerator analyzeRepos +Mar 06, 2024 12:50:57 AM reposense.report.ReportGenerator analyzeRepos INFO: [67/92] Analyzing https://github.com/AY2324S2-CS2103T-F11-1/tp.git (master)... -Mar 05, 2024 4:18:15 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-T14-1/tp.git (master)... +Mar 06, 2024 12:50:57 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W12-4/tp.git... -Mar 05, 2024 4:18:15 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W12-4/tp.git to complete... -Mar 05, 2024 4:18:15 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-F11-1/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:15 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F11-1/tp.git (master)... -Mar 05, 2024 4:18:16 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F11-1/tp.git (master)... -Mar 05, 2024 4:18:16 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F11-1/tp.git (master)... -Mar 05, 2024 4:18:16 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F11-1/tp.git (master) completed! -Mar 05, 2024 4:18:16 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-T15-3/tp.git completed! -Mar 05, 2024 4:18:16 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W12-3/tp.git... -Mar 05, 2024 4:18:16 PM reposense.report.ReportGenerator analyzeRepos +Mar 06, 2024 12:50:57 AM reposense.report.ReportGenerator analyzeRepos INFO: [68/92] Analyzing https://github.com/AY2324S2-CS2103T-T15-3/tp.git (master)... -Mar 05, 2024 4:18:16 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:57 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W12-3/tp.git... +Mar 06, 2024 12:50:57 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W12-3/tp.git to complete... -Mar 05, 2024 4:18:16 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T15-1/tp.git completed! -Mar 05, 2024 4:18:16 PM reposense.report.ReportGenerator analyzeRepos -INFO: [69/92] Analyzing https://github.com/AY2324S2-CS2103T-T15-1/tp.git (master)... -Mar 05, 2024 4:18:16 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T09-2/tp.git... -Mar 05, 2024 4:18:16 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T09-2/tp.git to complete... -Mar 05, 2024 4:18:16 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T09-1/tp.git completed! -Mar 05, 2024 4:18:16 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:57 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-F11-1/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F11-1/tp.git (master)... +Mar 06, 2024 12:50:57 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-T14-1/tp.git (master)... +Mar 06, 2024 12:50:57 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103-T14-1/tp.git (master) completed! +Mar 06, 2024 12:50:57 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T15-3/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:16 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:57 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T15-3/tp.git (master)... -Mar 05, 2024 4:18:16 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:57 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F11-3/tp.git (master)... +Mar 06, 2024 12:50:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T09-1/tp.git completed! +Mar 06, 2024 12:50:57 AM reposense.report.ReportGenerator analyzeRepos +INFO: [69/92] Analyzing https://github.com/AY2324S2-CS2103T-T09-1/tp.git (master)... +Mar 06, 2024 12:50:57 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T09-2/tp.git... +Mar 06, 2024 12:50:57 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T15-1/tp.git completed! +Mar 06, 2024 12:50:58 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T15-4/tp.git... -Mar 05, 2024 4:18:16 PM reposense.report.ReportGenerator analyzeRepos -INFO: [70/92] Analyzing https://github.com/AY2324S2-CS2103T-T09-1/tp.git (master)... -Mar 05, 2024 4:18:16 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:58 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T15-4/tp.git to complete... -Mar 05, 2024 4:18:16 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-T15-1/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:16 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T15-1/tp.git (master)... -Mar 05, 2024 4:18:16 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:58 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T09-2/tp.git to complete... +Mar 06, 2024 12:50:58 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T09-1/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:16 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T09-1/tp.git (master)... -Mar 05, 2024 4:18:16 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 06, 2024 12:50:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F11-3/tp.git (master)... +Mar 06, 2024 12:50:58 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-F11-3/tp.git (master) completed! +Mar 06, 2024 12:50:58 AM reposense.report.ReportGenerator analyzeRepos +INFO: [70/92] Analyzing https://github.com/AY2324S2-CS2103T-T15-1/tp.git (master)... +Mar 06, 2024 12:50:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T15-3/tp.git (master)... -Mar 05, 2024 4:18:16 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T15-1/tp.git (master)... -Mar 05, 2024 4:18:16 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T09-1/tp.git (master)... -Mar 05, 2024 4:18:16 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 06, 2024 12:50:58 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-T15-1/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:58 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T15-1/tp.git (master)... +Mar 06, 2024 12:50:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F11-1/tp.git (master)... +Mar 06, 2024 12:50:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T15-3/tp.git (master)... -Mar 05, 2024 4:18:16 PM reposense.report.ReportGenerator analyzeRepo +Mar 06, 2024 12:50:58 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T15-3/tp.git (master) completed! -Mar 05, 2024 4:18:16 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T15-1/tp.git (master)... -Mar 05, 2024 4:18:16 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T15-1/tp.git (master) completed! -Mar 05, 2024 4:18:16 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 06, 2024 12:50:58 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F11-1/tp.git (master)... +Mar 06, 2024 12:50:58 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-F11-1/tp.git (master) completed! +Mar 06, 2024 12:50:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T09-1/tp.git (master)... +Mar 06, 2024 12:50:58 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T15-1/tp.git (master)... +Mar 06, 2024 12:50:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T09-1/tp.git (master)... -Mar 05, 2024 4:18:16 PM reposense.report.ReportGenerator analyzeRepo +Mar 06, 2024 12:50:59 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T09-1/tp.git (master) completed! -Mar 05, 2024 4:18:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T09-2/tp.git completed! -Mar 05, 2024 4:18:17 PM reposense.report.ReportGenerator analyzeRepos -INFO: [71/92] Analyzing https://github.com/AY2324S2-CS2103T-T09-2/tp.git (master)... -Mar 05, 2024 4:18:17 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-W12-4/tp.git completed! +Mar 06, 2024 12:50:59 AM reposense.report.ReportGenerator analyzeRepos +INFO: [71/92] Analyzing https://github.com/AY2324S2-CS2103T-W12-4/tp.git (master)... +Mar 06, 2024 12:50:59 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F08-3/tp.git... -Mar 05, 2024 4:18:17 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:59 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F08-3/tp.git to complete... -Mar 05, 2024 4:18:17 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-T09-2/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:17 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T09-2/tp.git (master)... -Mar 05, 2024 4:18:17 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T09-2/tp.git (master)... -Mar 05, 2024 4:18:17 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T09-2/tp.git (master)... -Mar 05, 2024 4:18:17 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T09-2/tp.git (master) completed! -Mar 05, 2024 4:18:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W12-4/tp.git completed! -Mar 05, 2024 4:18:17 PM reposense.report.ReportGenerator analyzeRepos -INFO: [72/92] Analyzing https://github.com/AY2324S2-CS2103T-W12-4/tp.git (master)... -Mar 05, 2024 4:18:17 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F08-1/tp.git... -Mar 05, 2024 4:18:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F08-1/tp.git to complete... -Mar 05, 2024 4:18:18 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:59 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-W12-4/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:18 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W12-4/tp.git (master)... -Mar 05, 2024 4:18:18 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W12-4/tp.git (master)... -Mar 05, 2024 4:18:18 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W12-4/tp.git (master)... -Mar 05, 2024 4:18:18 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W12-4/tp.git (master) completed! -Mar 05, 2024 4:18:18 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T15-1/tp.git (master)... +Mar 06, 2024 12:50:59 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T15-1/tp.git (master) completed! +Mar 06, 2024 12:50:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T09-2/tp.git completed! +Mar 06, 2024 12:50:59 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F08-1/tp.git... +Mar 06, 2024 12:50:59 AM reposense.report.ReportGenerator analyzeRepos +INFO: [72/92] Analyzing https://github.com/AY2324S2-CS2103T-T09-2/tp.git (master)... +Mar 06, 2024 12:50:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F08-1/tp.git to complete... +Mar 06, 2024 12:50:59 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-T15-4/tp.git completed! -Mar 05, 2024 4:18:18 PM reposense.report.ReportGenerator analyzeRepos +Mar 06, 2024 12:50:59 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-T09-2/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T09-2/tp.git (master)... +Mar 06, 2024 12:50:59 AM reposense.report.ReportGenerator analyzeRepos INFO: [73/92] Analyzing https://github.com/AY2324S2-CS2103T-T15-4/tp.git (master)... -Mar 05, 2024 4:18:18 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:59 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W08-1/tp.git... -Mar 05, 2024 4:18:18 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:59 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W08-1/tp.git to complete... -Mar 05, 2024 4:18:18 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103-F08-3/tp.git completed! -Mar 05, 2024 4:18:18 PM reposense.report.ReportGenerator analyzeRepos -INFO: [74/92] Analyzing https://github.com/AY2324S2-CS2103-F08-3/tp.git (master)... -Mar 05, 2024 4:18:18 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:50:59 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-W12-3/tp.git completed! +Mar 06, 2024 12:50:59 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T12-1/tp.git... -Mar 05, 2024 4:18:18 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:50:59 AM reposense.report.ReportGenerator analyzeRepos +INFO: [74/92] Analyzing https://github.com/AY2324S2-CS2103T-W12-3/tp.git (master)... +Mar 06, 2024 12:50:59 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T12-1/tp.git to complete... -Mar 05, 2024 4:18:18 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:50:59 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T15-4/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:18 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:50:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T15-4/tp.git (master)... -Mar 05, 2024 4:18:18 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103-F08-3/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:18 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F08-3/tp.git (master)... -Mar 05, 2024 4:18:18 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 06, 2024 12:50:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T09-2/tp.git (master)... +Mar 06, 2024 12:50:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W12-4/tp.git (master)... +Mar 06, 2024 12:50:59 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-W12-3/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:50:59 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W12-3/tp.git (master)... +Mar 06, 2024 12:50:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T09-2/tp.git (master)... +Mar 06, 2024 12:50:59 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T09-2/tp.git (master) completed! +Mar 06, 2024 12:50:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W12-4/tp.git (master)... +Mar 06, 2024 12:50:59 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-W12-4/tp.git (master) completed! +Mar 06, 2024 12:50:59 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T15-4/tp.git (master)... -Mar 05, 2024 4:18:19 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 06, 2024 12:50:59 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T15-4/tp.git (master)... -Mar 05, 2024 4:18:19 PM reposense.report.ReportGenerator analyzeRepo +Mar 06, 2024 12:50:59 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T15-4/tp.git (master) completed! -Mar 05, 2024 4:18:19 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F08-3/tp.git (master)... -Mar 05, 2024 4:18:19 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F08-3/tp.git (master)... -Mar 05, 2024 4:18:19 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103-F08-3/tp.git (master) completed! -Mar 05, 2024 4:18:19 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103-F08-1/tp.git completed! -Mar 05, 2024 4:18:19 PM reposense.report.ReportGenerator analyzeRepos -INFO: [75/92] Analyzing https://github.com/AY2324S2-CS2103-F08-1/tp.git (master)... -Mar 05, 2024 4:18:19 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:51:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103-F08-3/tp.git completed! +Mar 06, 2024 12:51:00 AM reposense.report.ReportGenerator analyzeRepos +INFO: [75/92] Analyzing https://github.com/AY2324S2-CS2103-F08-3/tp.git (master)... +Mar 06, 2024 12:51:00 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W11-2/tp.git... -Mar 05, 2024 4:18:19 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:51:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W11-2/tp.git to complete... -Mar 05, 2024 4:18:19 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103-F08-1/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:19 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F08-1/tp.git (master)... -Mar 05, 2024 4:18:19 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W12-3/tp.git completed! -Mar 05, 2024 4:18:19 PM reposense.report.ReportGenerator analyzeRepos -INFO: [76/92] Analyzing https://github.com/AY2324S2-CS2103T-W12-3/tp.git (master)... -Mar 05, 2024 4:18:19 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:51:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103-F08-1/tp.git completed! +Mar 06, 2024 12:51:00 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103-F08-3/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:51:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F08-3/tp.git (master)... +Mar 06, 2024 12:51:00 AM reposense.report.ReportGenerator analyzeRepos +INFO: [76/92] Analyzing https://github.com/AY2324S2-CS2103-F08-1/tp.git (master)... +Mar 06, 2024 12:51:00 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W09-2/tp.git... -Mar 05, 2024 4:18:19 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:51:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-W08-1/tp.git completed! +Mar 06, 2024 12:51:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W09-2/tp.git to complete... -Mar 05, 2024 4:18:19 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-W12-3/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:19 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W12-3/tp.git (master)... -Mar 05, 2024 4:18:19 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F08-1/tp.git (master)... -Mar 05, 2024 4:18:19 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F08-1/tp.git (master)... -Mar 05, 2024 4:18:19 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103-F08-1/tp.git (master) completed! -Mar 05, 2024 4:18:20 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T12-1/tp.git completed! -Mar 05, 2024 4:18:20 PM reposense.report.ReportGenerator analyzeRepos -INFO: [77/92] Analyzing https://github.com/AY2324S2-CS2103T-T12-1/tp.git (master)... -Mar 05, 2024 4:18:20 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:51:00 AM reposense.report.ReportGenerator analyzeRepos +INFO: [77/92] Analyzing https://github.com/AY2324S2-CS2103T-W08-1/tp.git (master)... +Mar 06, 2024 12:51:00 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W09-4/tp.git... -Mar 05, 2024 4:18:20 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:51:00 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W09-4/tp.git to complete... -Mar 05, 2024 4:18:20 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:51:00 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103-F08-1/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:51:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F08-1/tp.git (master)... +Mar 06, 2024 12:51:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T12-1/tp.git completed! +Mar 06, 2024 12:51:00 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T12-3/tp.git... +Mar 06, 2024 12:51:00 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T12-3/tp.git to complete... +Mar 06, 2024 12:51:00 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-W08-1/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:51:00 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W08-1/tp.git (master)... +Mar 06, 2024 12:51:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F08-3/tp.git (master)... +Mar 06, 2024 12:51:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F08-3/tp.git (master)... +Mar 06, 2024 12:51:01 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103-F08-3/tp.git (master) completed! +Mar 06, 2024 12:51:01 AM reposense.report.ReportGenerator analyzeRepos +INFO: [78/92] Analyzing https://github.com/AY2324S2-CS2103T-T12-1/tp.git (master)... +Mar 06, 2024 12:51:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W12-3/tp.git (master)... +Mar 06, 2024 12:51:01 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T12-1/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:20 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:51:01 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T12-1/tp.git (master)... -Mar 05, 2024 4:18:20 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 06, 2024 12:51:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W12-3/tp.git (master)... +Mar 06, 2024 12:51:01 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-W12-3/tp.git (master) completed! +Mar 06, 2024 12:51:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W08-1/tp.git (master)... +Mar 06, 2024 12:51:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T12-1/tp.git (master)... -Mar 05, 2024 4:18:20 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 06, 2024 12:51:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T12-1/tp.git (master)... -Mar 05, 2024 4:18:20 PM reposense.report.ReportGenerator analyzeRepo +Mar 06, 2024 12:51:01 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T12-1/tp.git (master) completed! -Mar 05, 2024 4:18:20 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:51:01 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W08-1/tp.git (master)... +Mar 06, 2024 12:51:01 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-W08-1/tp.git (master) completed! +Mar 06, 2024 12:51:01 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F08-1/tp.git (master)... +Mar 06, 2024 12:51:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-W11-2/tp.git completed! -Mar 05, 2024 4:18:20 PM reposense.report.ReportGenerator analyzeRepos -INFO: [78/92] Analyzing https://github.com/AY2324S2-CS2103T-W11-2/tp.git (master)... -Mar 05, 2024 4:18:20 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T12-3/tp.git... -Mar 05, 2024 4:18:20 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T12-3/tp.git to complete... -Mar 05, 2024 4:18:20 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-W11-2/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:20 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W11-2/tp.git (master)... -Mar 05, 2024 4:18:20 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W12-3/tp.git (master)... -Mar 05, 2024 4:18:20 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W11-2/tp.git (master)... -Mar 05, 2024 4:18:21 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W11-2/tp.git (master)... -Mar 05, 2024 4:18:21 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W12-3/tp.git (master)... -Mar 05, 2024 4:18:21 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W11-2/tp.git (master) completed! -Mar 05, 2024 4:18:21 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W12-3/tp.git (master) completed! -Mar 05, 2024 4:18:21 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W09-4/tp.git completed! -Mar 05, 2024 4:18:21 PM reposense.report.ReportGenerator analyzeRepos -INFO: [79/92] Analyzing https://github.com/AY2324S2-CS2103T-W09-4/tp.git (master)... -Mar 05, 2024 4:18:21 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:51:02 AM reposense.report.ReportGenerator analyzeRepos +INFO: [79/92] Analyzing https://github.com/AY2324S2-CS2103T-W11-2/tp.git (master)... +Mar 06, 2024 12:51:02 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F14-2/tp.git... -Mar 05, 2024 4:18:21 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:51:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F08-1/tp.git (master)... +Mar 06, 2024 12:51:02 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103-F08-1/tp.git (master) completed! +Mar 06, 2024 12:51:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F14-2/tp.git to complete... -Mar 05, 2024 4:18:21 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-W09-4/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:21 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W09-4/tp.git (master)... -Mar 05, 2024 4:18:21 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T12-3/tp.git completed! -Mar 05, 2024 4:18:21 PM reposense.report.ReportGenerator analyzeRepos -INFO: [80/92] Analyzing https://github.com/AY2324S2-CS2103T-T12-3/tp.git (master)... -Mar 05, 2024 4:18:21 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:51:02 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-W11-2/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:51:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W11-2/tp.git (master)... +Mar 06, 2024 12:51:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-W09-2/tp.git completed! +Mar 06, 2024 12:51:02 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T11-3/tp.git... -Mar 05, 2024 4:18:21 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:51:02 AM reposense.report.ReportGenerator analyzeRepos +INFO: [80/92] Analyzing https://github.com/AY2324S2-CS2103T-W09-2/tp.git (master)... +Mar 06, 2024 12:51:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T11-3/tp.git to complete... -Mar 05, 2024 4:18:21 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-T12-3/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:21 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T12-3/tp.git (master)... -Mar 05, 2024 4:18:21 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T12-3/tp.git (master)... -Mar 05, 2024 4:18:21 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T12-3/tp.git (master)... -Mar 05, 2024 4:18:21 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T12-3/tp.git (master) completed! -Mar 05, 2024 4:18:21 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W09-4/tp.git (master)... -Mar 05, 2024 4:18:22 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W09-4/tp.git (master)... -Mar 05, 2024 4:18:22 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W09-4/tp.git (master) completed! -Mar 05, 2024 4:18:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T11-3/tp.git completed! -Mar 05, 2024 4:18:23 PM reposense.report.ReportGenerator analyzeRepos -INFO: [81/92] Analyzing https://github.com/AY2324S2-CS2103T-T11-3/tp.git (master)... -Mar 05, 2024 4:18:23 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:51:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T12-3/tp.git completed! +Mar 06, 2024 12:51:02 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F12-1/tp.git... -Mar 05, 2024 4:18:23 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:51:02 AM reposense.report.ReportGenerator analyzeRepos +INFO: [81/92] Analyzing https://github.com/AY2324S2-CS2103T-T12-3/tp.git (master)... +Mar 06, 2024 12:51:02 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-W09-2/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:51:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W09-2/tp.git (master)... +Mar 06, 2024 12:51:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F12-1/tp.git to complete... -Mar 05, 2024 4:18:23 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-T11-3/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:23 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T11-3/tp.git (master)... -Mar 05, 2024 4:18:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F14-2/tp.git completed! -Mar 05, 2024 4:18:23 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:51:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-W09-4/tp.git completed! +Mar 06, 2024 12:51:02 AM reposense.report.ReportGenerator analyzeRepos +INFO: [82/92] Analyzing https://github.com/AY2324S2-CS2103T-W09-4/tp.git (master)... +Mar 06, 2024 12:51:02 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T17-3/tp.git... -Mar 05, 2024 4:18:23 PM reposense.report.ReportGenerator analyzeRepos -INFO: [82/92] Analyzing https://github.com/AY2324S2-CS2103T-F14-2/tp.git (master)... -Mar 05, 2024 4:18:23 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:51:02 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-T12-3/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:51:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T12-3/tp.git (master)... +Mar 06, 2024 12:51:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W09-2/tp.git (master)... +Mar 06, 2024 12:51:02 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T17-3/tp.git to complete... +Mar 06, 2024 12:51:02 AM reposense.report.RepoCloner waitForCloneProcess WARNING: Exception met while trying to clone the repo "AY2324S2-CS2103T-F12-1/tp[master]", will skip this repo. reposense.system.CommandRunnerProcessException: Error returned from command git clone --bare 'https://github.com/AY2324S2-CS2103T-F12-1/tp.git' 'repos/AY2324S2-CS2103T-F12-1_tp/tp_bare' on path . : Cloning into bare repository 'repos/AY2324S2-CS2103T-F12-1_tp/tp_bare'... @@ -1542,175 +1534,183 @@ fatal: could not read Username for 'https://github.com': No such device or addre at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:829) -Mar 05, 2024 4:18:23 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:51:02 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T14-2/tp.git... -Mar 05, 2024 4:18:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T17-3/tp.git to complete... -Mar 05, 2024 4:18:23 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:51:02 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-W09-4/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:51:02 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W09-4/tp.git (master)... +Mar 06, 2024 12:51:02 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T14-2/tp.git to complete... -Mar 05, 2024 4:18:23 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T11-3/tp.git (master)... -Mar 05, 2024 4:18:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W09-2/tp.git completed! -Mar 05, 2024 4:18:23 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T11-3/tp.git (master)... -Mar 05, 2024 4:18:23 PM reposense.report.ReportGenerator analyzeRepos -INFO: [83/92] Analyzing https://github.com/AY2324S2-CS2103T-W09-2/tp.git (master)... -Mar 05, 2024 4:18:23 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T08-2/tp.git... -Mar 05, 2024 4:18:23 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T11-3/tp.git (master) completed! -Mar 05, 2024 4:18:23 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-F14-2/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:23 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F14-2/tp.git (master)... -Mar 05, 2024 4:18:23 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T08-2/tp.git to complete... -Mar 05, 2024 4:18:24 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-W09-2/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:24 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W09-2/tp.git (master)... -Mar 05, 2024 4:18:24 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W09-2/tp.git (master)... -Mar 05, 2024 4:18:24 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 06, 2024 12:51:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T12-3/tp.git (master)... +Mar 06, 2024 12:51:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W09-2/tp.git (master)... -Mar 05, 2024 4:18:24 PM reposense.report.ReportGenerator analyzeRepo +Mar 06, 2024 12:51:02 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-W09-2/tp.git (master) completed! -Mar 05, 2024 4:18:24 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F14-2/tp.git (master)... -Mar 05, 2024 4:18:24 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F14-2/tp.git (master)... -Mar 05, 2024 4:18:24 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F14-2/tp.git (master) completed! -Mar 05, 2024 4:18:25 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:51:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T12-3/tp.git (master)... +Mar 06, 2024 12:51:02 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T12-3/tp.git (master) completed! +Mar 06, 2024 12:51:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W11-2/tp.git (master)... +Mar 06, 2024 12:51:02 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W09-4/tp.git (master)... +Mar 06, 2024 12:51:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W11-2/tp.git (master)... +Mar 06, 2024 12:51:02 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-W11-2/tp.git (master) completed! +Mar 06, 2024 12:51:02 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W09-4/tp.git (master)... +Mar 06, 2024 12:51:02 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-W09-4/tp.git (master) completed! +Mar 06, 2024 12:51:04 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-T17-3/tp.git completed! -Mar 05, 2024 4:18:25 PM reposense.report.ReportGenerator analyzeRepos -INFO: [84/92] Analyzing https://github.com/AY2324S2-CS2103T-T17-3/tp.git (master)... -Mar 05, 2024 4:18:25 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T17-1/tp.git... -Mar 05, 2024 4:18:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T17-1/tp.git to complete... -Mar 05, 2024 4:18:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T08-2/tp.git completed! -Mar 05, 2024 4:18:25 PM reposense.report.ReportGenerator analyzeRepos -INFO: [85/92] Analyzing https://github.com/AY2324S2-CS2103T-T08-2/tp.git (master)... -Mar 05, 2024 4:18:25 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W13-1/tp.git... -Mar 05, 2024 4:18:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W13-1/tp.git to complete... -Mar 05, 2024 4:18:25 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:51:04 AM reposense.report.ReportGenerator analyzeRepos +INFO: [83/92] Analyzing https://github.com/AY2324S2-CS2103T-T17-3/tp.git (master)... +Mar 06, 2024 12:51:04 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T08-2/tp.git... +Mar 06, 2024 12:51:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T08-2/tp.git to complete... +Mar 06, 2024 12:51:04 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T17-3/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:25 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:51:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T17-3/tp.git (master)... -Mar 05, 2024 4:18:25 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-T08-2/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:25 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T08-2/tp.git (master)... -Mar 05, 2024 4:18:25 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T08-2/tp.git (master)... -Mar 05, 2024 4:18:25 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:51:04 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-T14-2/tp.git completed! -Mar 05, 2024 4:18:25 PM reposense.report.ReportGenerator analyzeRepos -INFO: [86/92] Analyzing https://github.com/AY2324S2-CS2103T-T14-2/tp.git (master)... -Mar 05, 2024 4:18:25 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F12-3/tp.git... -Mar 05, 2024 4:18:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F12-3/tp.git to complete... -Mar 05, 2024 4:18:25 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T17-3/tp.git (master)... -Mar 05, 2024 4:18:25 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T08-2/tp.git (master)... -Mar 05, 2024 4:18:25 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T08-2/tp.git (master) completed! -Mar 05, 2024 4:18:25 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:51:04 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T17-1/tp.git... +Mar 06, 2024 12:51:04 AM reposense.report.ReportGenerator analyzeRepos +INFO: [84/92] Analyzing https://github.com/AY2324S2-CS2103T-T14-2/tp.git (master)... +Mar 06, 2024 12:51:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T17-1/tp.git to complete... +Mar 06, 2024 12:51:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T11-3/tp.git completed! +Mar 06, 2024 12:51:04 AM reposense.report.ReportGenerator analyzeRepos +INFO: [85/92] Analyzing https://github.com/AY2324S2-CS2103T-T11-3/tp.git (master)... +Mar 06, 2024 12:51:04 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W13-1/tp.git... +Mar 06, 2024 12:51:04 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T14-2/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:25 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:51:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T14-2/tp.git (master)... -Mar 05, 2024 4:18:25 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T17-3/tp.git (master)... -Mar 05, 2024 4:18:25 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T17-3/tp.git (master) completed! -Mar 05, 2024 4:18:25 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 06, 2024 12:51:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W13-1/tp.git to complete... +Mar 06, 2024 12:51:04 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-T11-3/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:51:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T11-3/tp.git (master)... +Mar 06, 2024 12:51:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T17-3/tp.git (master)... +Mar 06, 2024 12:51:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T14-2/tp.git (master)... -Mar 05, 2024 4:18:25 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 06, 2024 12:51:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T14-2/tp.git (master)... -Mar 05, 2024 4:18:25 PM reposense.report.ReportGenerator analyzeRepo +Mar 06, 2024 12:51:04 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T14-2/tp.git (master) completed! -Mar 05, 2024 4:18:25 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W08-1/tp.git completed! -Mar 05, 2024 4:18:25 PM reposense.report.ReportGenerator analyzeRepos -INFO: [87/92] Analyzing https://github.com/AY2324S2-CS2103T-W08-1/tp.git (master)... -Mar 05, 2024 4:18:25 PM reposense.report.RepoCloner spawnCloneProcess +Mar 06, 2024 12:51:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T17-3/tp.git (master)... +Mar 06, 2024 12:51:04 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T17-3/tp.git (master) completed! +Mar 06, 2024 12:51:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T11-3/tp.git (master)... +Mar 06, 2024 12:51:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-F14-2/tp.git completed! +Mar 06, 2024 12:51:04 AM reposense.report.ReportGenerator analyzeRepos +INFO: [86/92] Analyzing https://github.com/AY2324S2-CS2103T-F14-2/tp.git (master)... +Mar 06, 2024 12:51:04 AM reposense.report.RepoCloner spawnCloneProcess +INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F12-3/tp.git... +Mar 06, 2024 12:51:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F12-3/tp.git to complete... +Mar 06, 2024 12:51:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T11-3/tp.git (master)... +Mar 06, 2024 12:51:04 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T11-3/tp.git (master) completed! +Mar 06, 2024 12:51:04 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-F14-2/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:51:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F14-2/tp.git (master)... +Mar 06, 2024 12:51:04 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F14-2/tp.git (master)... +Mar 06, 2024 12:51:04 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T08-2/tp.git completed! +Mar 06, 2024 12:51:04 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F14-2/tp.git (master)... +Mar 06, 2024 12:51:04 AM reposense.report.ReportGenerator analyzeRepos +INFO: [87/92] Analyzing https://github.com/AY2324S2-CS2103T-T08-2/tp.git (master)... +Mar 06, 2024 12:51:04 AM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T11-1/tp.git... -Mar 05, 2024 4:18:25 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:51:04 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-F14-2/tp.git (master) completed! +Mar 06, 2024 12:51:04 AM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T11-1/tp.git to complete... -Mar 05, 2024 4:18:25 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-W08-1/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:25 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W08-1/tp.git (master)... -Mar 05, 2024 4:18:25 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W08-1/tp.git (master)... -Mar 05, 2024 4:18:26 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W08-1/tp.git (master)... -Mar 05, 2024 4:18:26 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W08-1/tp.git (master) completed! -Mar 05, 2024 4:18:26 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:51:04 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-T08-2/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:51:04 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T08-2/tp.git (master)... +Mar 06, 2024 12:51:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T08-2/tp.git (master)... +Mar 06, 2024 12:51:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T08-2/tp.git (master)... +Mar 06, 2024 12:51:05 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-T08-2/tp.git (master) completed! +Mar 06, 2024 12:51:05 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-T17-1/tp.git completed! -Mar 05, 2024 4:18:26 PM reposense.report.ReportGenerator analyzeRepos +Mar 06, 2024 12:51:05 AM reposense.report.ReportGenerator analyzeRepos INFO: [88/92] Analyzing https://github.com/AY2324S2-CS2103T-T17-1/tp.git (master)... -Mar 05, 2024 4:18:26 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:51:05 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T17-1/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:26 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:51:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T17-1/tp.git (master)... -Mar 05, 2024 4:18:26 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 06, 2024 12:51:05 AM reposense.report.RepoCloner waitForCloneProcess +INFO: Cloning of https://github.com/AY2324S2-CS2103T-W13-1/tp.git completed! +Mar 06, 2024 12:51:05 AM reposense.report.ReportGenerator analyzeRepos +INFO: [89/92] Analyzing https://github.com/AY2324S2-CS2103T-W13-1/tp.git (master)... +Mar 06, 2024 12:51:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T17-1/tp.git (master)... -Mar 05, 2024 4:18:26 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:51:05 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-F12-3/tp.git completed! -Mar 05, 2024 4:18:26 PM reposense.report.ReportGenerator analyzeRepos -INFO: [89/92] Analyzing https://github.com/AY2324S2-CS2103T-F12-3/tp.git (master)... -Mar 05, 2024 4:18:26 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 06, 2024 12:51:05 AM reposense.report.ReportGenerator analyzeRepos +INFO: [90/92] Analyzing https://github.com/AY2324S2-CS2103T-F12-3/tp.git (master)... +Mar 06, 2024 12:51:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T17-1/tp.git (master)... -Mar 05, 2024 4:18:26 PM reposense.report.ReportGenerator analyzeRepo +Mar 06, 2024 12:51:05 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T17-1/tp.git (master) completed! -Mar 05, 2024 4:18:26 PM reposense.report.ReportGenerator updateRepoConfig -INFO: https://github.com/AY2324S2-CS2103T-F12-3/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:26 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F12-3/tp.git (master)... -Mar 05, 2024 4:18:26 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F12-3/tp.git (master)... -Mar 05, 2024 4:18:26 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W13-1/tp.git completed! -Mar 05, 2024 4:18:26 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F12-3/tp.git (master)... -Mar 05, 2024 4:18:26 PM reposense.report.ReportGenerator analyzeRepos -INFO: [90/92] Analyzing https://github.com/AY2324S2-CS2103T-W13-1/tp.git (master)... -Mar 05, 2024 4:18:26 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F12-3/tp.git (master) completed! -Mar 05, 2024 4:18:26 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:51:05 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-W13-1/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:26 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:51:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W13-1/tp.git (master)... -Mar 05, 2024 4:18:26 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 06, 2024 12:51:05 AM reposense.report.ReportGenerator updateRepoConfig +INFO: https://github.com/AY2324S2-CS2103T-F12-3/tp.git (master) does not contain a standalone config file. +Mar 06, 2024 12:51:05 AM reposense.authorship.FileInfoExtractor extractTextFileInfos +INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F12-3/tp.git (master)... +Mar 06, 2024 12:51:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W13-1/tp.git (master)... -Mar 05, 2024 4:18:26 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 06, 2024 12:51:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W13-1/tp.git (master)... -Mar 05, 2024 4:18:26 PM reposense.report.ReportGenerator analyzeRepo +Mar 06, 2024 12:51:05 AM reposense.commits.CommitInfoExtractor extractCommitInfos +INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F12-3/tp.git (master)... +Mar 06, 2024 12:51:05 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-W13-1/tp.git (master) completed! -Mar 05, 2024 4:18:27 PM reposense.report.RepoCloner waitForCloneProcess +Mar 06, 2024 12:51:05 AM reposense.commits.CommitInfoAnalyzer analyzeCommits +INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F12-3/tp.git (master)... +Mar 06, 2024 12:51:05 AM reposense.report.ReportGenerator analyzeRepo +INFO: Analysis of https://github.com/AY2324S2-CS2103T-F12-3/tp.git (master) completed! +Mar 06, 2024 12:51:06 AM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-T11-1/tp.git completed! -Mar 05, 2024 4:18:27 PM reposense.report.ReportGenerator analyzeRepos +Mar 06, 2024 12:51:06 AM reposense.report.ReportGenerator analyzeRepos INFO: [91/92] Analyzing https://github.com/AY2324S2-CS2103T-T11-1/tp.git (master)... -Mar 05, 2024 4:18:27 PM reposense.report.ReportGenerator updateRepoConfig +Mar 06, 2024 12:51:06 AM reposense.report.ReportGenerator updateRepoConfig INFO: https://github.com/AY2324S2-CS2103T-T11-1/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 4:18:27 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 06, 2024 12:51:06 AM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T11-1/tp.git (master)... -Mar 05, 2024 4:18:27 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 06, 2024 12:51:06 AM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T11-1/tp.git (master)... -Mar 05, 2024 4:18:27 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 06, 2024 12:51:06 AM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T11-1/tp.git (master)... -Mar 05, 2024 4:18:27 PM reposense.report.ReportGenerator analyzeRepo +Mar 06, 2024 12:51:06 AM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T11-1/tp.git (master) completed! -Mar 05, 2024 4:18:27 PM reposense.report.ReportGenerator generateReposReport +Mar 06, 2024 12:51:06 AM reposense.report.ReportGenerator generateReposReport INFO: The report is generated at /home/runner/work/tp-dashboard/tp-dashboard/reposense-report -Mar 05, 2024 4:18:27 PM reposense.RepoSense main -INFO: Elapsed processing time: 45.86 second(s) +Mar 06, 2024 12:51:06 AM reposense.RepoSense main +INFO: Elapsed processing time: 35.54 second(s) diff --git a/summary.json b/summary.json index bad564e2..ec6c5065 100644 --- a/summary.json +++ b/summary.json @@ -1 +1 @@ -{"repoSenseVersion":"bbb2f694a7","reportGeneratedTime":"Wed Mar 6 00:17:42 2024 UTC+08:00","reportGenerationTime":" 45.65 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-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":[{"repoName":"AY2324S2-CS2103T-F12-1/tp[master]","errorMessage":"Failed to clone from https://github.com/AY2324S2-CS2103T-F12-1/tp.git"}],"sinceDate":"2024-02-23","untilDate":"2024-03-06","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":"Wed Mar 6 08:50:31 2024 UTC+08:00","reportGenerationTime":" 35.33 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-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":[{"repoName":"AY2324S2-CS2103T-F12-1/tp[master]","errorMessage":"Failed to clone from https://github.com/AY2324S2-CS2103T-F12-1/tp.git"}],"sinceDate":"2024-02-23","untilDate":"2024-03-06","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"}}}