diff --git a/AY2324S2-CS2103-F09-1_tp_master/authorship.json b/AY2324S2-CS2103-F09-1_tp_master/authorship.json index 25740802..cfa62f3a 100644 --- a/AY2324S2-CS2103-F09-1_tp_master/authorship.json +++ b/AY2324S2-CS2103-F09-1_tp_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"felixchanyy"},"content":"[![CI Status](https://github.com/AY2324S2-CS2103-F09-1/tp/workflows/Java%20CI/badge.svg)](https://github.com/se-edu/addressbook-level3/actions) [![codecov](https://codecov.io/gh/AY2324S2-CS2103-F09-1/tp/graph/badge.svg?token\u003dNB86I9H23Z)](https://codecov.io/gh/AY2324S2-CS2103-F09-1/tp)","lastModifiedDate":"2024-03-04"},{"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":"felixchanyy"},"content":"## About the app","lastModifiedDate":"2024-03-04"},{"lineNumber":6,"author":{"gitId":"felixchanyy"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":7,"author":{"gitId":"felixchanyy"},"content":"EstateEase simplifies residential property management for real estate listing agents in Singapore.","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"felixchanyy"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":9,"author":{"gitId":"felixchanyy"},"content":"### Key Features:","lastModifiedDate":"2024-03-04"},{"lineNumber":10,"author":{"gitId":"felixchanyy"},"content":" * With intuitive tools for listing and client communication, the app is tailored for efficiency. ","lastModifiedDate":"2024-03-04"},{"lineNumber":11,"author":{"gitId":"felixchanyy"},"content":" * Agents can quickly access contacts and prioritize them, ensuring swift connections with clients. ","lastModifiedDate":"2024-03-04"},{"lineNumber":12,"author":{"gitId":"felixchanyy"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":13,"author":{"gitId":"felixchanyy"},"content":"### Example Usages:","lastModifiedDate":"2024-03-04"},{"lineNumber":14,"author":{"gitId":"felixchanyy"},"content":" * Allows real estate agents to add and delete client information.","lastModifiedDate":"2024-03-04"},{"lineNumber":15,"author":{"gitId":"felixchanyy"},"content":" * Allows real estate agents to prioritize client contacts for efficient communication","lastModifiedDate":"2024-03-04"},{"lineNumber":16,"author":{"gitId":"felixchanyy"},"content":" * Allows real estate agents to load and save the list using JSON file","lastModifiedDate":"2024-03-04"},{"lineNumber":17,"author":{"gitId":"felixchanyy"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":18,"author":{"gitId":"felixchanyy"},"content":"## Acknowledgements","lastModifiedDate":"2024-03-04"},{"lineNumber":19,"author":{"gitId":"felixchanyy"},"content":"This project is based on the AddressBook-Level3 project created by the ","lastModifiedDate":"2024-03-04"},{"lineNumber":20,"author":{"gitId":"felixchanyy"},"content":"[SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"felixchanyy":17,"-":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":"felixchanyy"},"content":"You can reach us at the email `felixchanyy.22@u.nus.edu`","lastModifiedDate":"2024-03-04"},{"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":"felixchanyy"},"content":"### Felix Chan","lastModifiedDate":"2024-03-04"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"felixchanyy"},"content":"\u003cimg src\u003d\"images/felixchanyy.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"felixchanyy"},"content":"[[homepage](https://nus-cs2103-ay2324s2.github.io/website)]","lastModifiedDate":"2024-03-04"},{"lineNumber":19,"author":{"gitId":"felixchanyy"},"content":"[[github](https://github.com/felixchanyy)]","lastModifiedDate":"2024-03-04"},{"lineNumber":20,"author":{"gitId":"felixchanyy"},"content":"[[portfolio](https://www.linkedin.com/in/felixchanyy)]","lastModifiedDate":"2024-03-04"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"felixchanyy"},"content":"* Role: Team Lead, Scheduling and Tracking, Git Expert","lastModifiedDate":"2024-03-04"},{"lineNumber":23,"author":{"gitId":"felixchanyy"},"content":"* Responsibilities: Responsible for overall project coordination, in charge of defining, assigning, and tracking ","lastModifiedDate":"2024-03-04"},{"lineNumber":24,"author":{"gitId":"felixchanyy"},"content":"project tasks, helps other team members with matters related to Git","lastModifiedDate":"2024-03-04"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"felixchanyy"},"content":"### Yek Khoon Sun","lastModifiedDate":"2024-03-04"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"felixchanyy"},"content":"\u003cimg src\u003d\"images/khoonsun47.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"felixchanyy"},"content":"[[github](http://github.com/khoonsun47)]","lastModifiedDate":"2024-03-04"},{"lineNumber":31,"author":{"gitId":"felixchanyy"},"content":"[[portfolio](https://sg.linkedin.com/in/yek-khoon-sun-2b2270177)]","lastModifiedDate":"2024-03-04"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":33,"author":{"gitId":"felixchanyy"},"content":"* Role: Testing","lastModifiedDate":"2024-03-04"},{"lineNumber":34,"author":{"gitId":"felixchanyy"},"content":"* Responsibilities: Ensures the testing of the project is done properly and on time","lastModifiedDate":"2024-03-04"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"felixchanyy"},"content":"### Carl Lim","lastModifiedDate":"2024-03-04"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"felixchanyy"},"content":"\u003cimg src\u003d\"images/lokidoki102.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":40,"author":{"gitId":"felixchanyy"},"content":"[[github](http://github.com/lokidoki102)] ","lastModifiedDate":"2024-03-04"},{"lineNumber":41,"author":{"gitId":"felixchanyy"},"content":"[[portfolio](https://www.linkedin.com/in/carl-lim-483980152/)]","lastModifiedDate":"2024-03-04"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"felixchanyy"},"content":"* Role: Code Quality, IntelliJ expert","lastModifiedDate":"2024-03-04"},{"lineNumber":44,"author":{"gitId":"felixchanyy"},"content":"* Responsibilities: Looks after code quality and code review, ensures adherence to coding standards, ","lastModifiedDate":"2024-03-04"},{"lineNumber":45,"author":{"gitId":"felixchanyy"},"content":"helps other team members with matters related to IntelliJ","lastModifiedDate":"2024-03-04"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"felixchanyy"},"content":"### Zeng Zihui","lastModifiedDate":"2024-03-04"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"felixchanyy"},"content":"\u003cimg src\u003d\"images/zengzihui.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"felixchanyy"},"content":"[[github](http://github.com/zengzihui)]","lastModifiedDate":"2024-03-04"},{"lineNumber":52,"author":{"gitId":"felixchanyy"},"content":"[[portfolio](https://www.linkedin.com/in/zeng-zihui)]","lastModifiedDate":"2024-03-04"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"felixchanyy"},"content":"* Role: Documentation, In charge of UI","lastModifiedDate":"2024-03-04"},{"lineNumber":55,"author":{"gitId":"felixchanyy"},"content":"* Responsibilities: Responsible for the quality of various project documents,","lastModifiedDate":"2024-03-04"},{"lineNumber":56,"author":{"gitId":"felixchanyy"},"content":"review changes done to UI, act as the gate keeper of its quality, help others when they face","lastModifiedDate":"2024-03-04"},{"lineNumber":57,"author":{"gitId":"felixchanyy"},"content":"difficulties while modifying UI","lastModifiedDate":"2024-03-04"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":59,"author":{"gitId":"felixchanyy"},"content":"### Liu Zhengyang","lastModifiedDate":"2024-03-04"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":61,"author":{"gitId":"felixchanyy"},"content":"\u003cimg src\u003d\"images/redcolorbicycle.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":63,"author":{"gitId":"felixchanyy"},"content":"[[github](http://github.com/redcolorbicycle)]","lastModifiedDate":"2024-03-04"},{"lineNumber":64,"author":{"gitId":"felixchanyy"},"content":"[[portfolio](https://www.linkedin.com/in/liu-zhengyang)]","lastModifiedDate":"2024-03-04"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":66,"author":{"gitId":"felixchanyy"},"content":"* Role: Deliverables and deadlines","lastModifiedDate":"2024-03-04"},{"lineNumber":67,"author":{"gitId":"felixchanyy"},"content":"* Responsibilities: Ensure project deliverables are done on time and in the right format","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"felixchanyy":36,"-":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":"zengzihui"},"content":"# EstateEase Developer Guide","lastModifiedDate":"2024-03-04"},{"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":"zengzihui"},"content":"* Residential Property Real Estate Listing Agent in Singapore","lastModifiedDate":"2024-03-04"},{"lineNumber":277,"author":{"gitId":"-"},"content":"* can type fast","lastModifiedDate":"2020-05-23"},{"lineNumber":278,"author":{"gitId":"-"},"content":"* prefers typing to mouse interactions","lastModifiedDate":"2020-05-26"},{"lineNumber":279,"author":{"gitId":"-"},"content":"* is reasonably comfortable using CLI apps","lastModifiedDate":"2020-05-23"},{"lineNumber":280,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":281,"author":{"gitId":"zengzihui"},"content":"**Value proposition**: EstateEase simplifies residential property management for real estate listing agents in Singapore. With intuitive tools for listing and client communication, the app is tailored for efficiency. Agents can quickly access contacts and prioritize them, ensuring swift connections with clients.","lastModifiedDate":"2024-03-04"},{"lineNumber":282,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":283,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":284,"author":{"gitId":"-"},"content":"### User stories","lastModifiedDate":"2020-06-07"},{"lineNumber":285,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":286,"author":{"gitId":"-"},"content":"Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unlikely to have) - `*`","lastModifiedDate":"2020-05-23"},{"lineNumber":287,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":288,"author":{"gitId":"-"},"content":"| Priority | As a …​ | I want to …​ | So that I can…​ |","lastModifiedDate":"2020-05-23"},{"lineNumber":289,"author":{"gitId":"zengzihui"},"content":"|----------|-------------------|--------------------------------------------------------------|------------------------------------------------------------------------------|","lastModifiedDate":"2024-03-04"},{"lineNumber":290,"author":{"gitId":"zengzihui"},"content":"| `* * *` | real estate agent | add home-owners | keep track of their contact details and the properties that they are selling |","lastModifiedDate":"2024-03-04"},{"lineNumber":291,"author":{"gitId":"zengzihui"},"content":"| `* * *` | real estate agent | view a list of all contacts stored, along with their details | quickly find the contact I need |","lastModifiedDate":"2024-03-04"},{"lineNumber":292,"author":{"gitId":"zengzihui"},"content":"| `* * *` | real estate agent | delete contacts | remove outdated or irrelevant contacts |","lastModifiedDate":"2024-03-04"},{"lineNumber":293,"author":{"gitId":"zengzihui"},"content":"| `* *` | real estate agent | be able to import my existing contact and address data | seamlessly transition to using EstateEase |","lastModifiedDate":"2024-03-04"},{"lineNumber":294,"author":{"gitId":"zengzihui"},"content":"| `* *` | real estate agent | save any changes or updates made to the contact details | ensure that my data is always up-to-date |","lastModifiedDate":"2024-03-04"},{"lineNumber":295,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":296,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":297,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":298,"author":{"gitId":"-"},"content":"### Use cases","lastModifiedDate":"2020-06-07"},{"lineNumber":299,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":300,"author":{"gitId":"zengzihui"},"content":"(For all use cases below, the **System** is the `EstateEase` and the **Actor** is the `user`, unless specified otherwise)","lastModifiedDate":"2024-03-04"},{"lineNumber":301,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":302,"author":{"gitId":"KhoonSun47"},"content":"**Use case: UC01 - Add home-owners to user’s contact list**","lastModifiedDate":"2024-03-04"},{"lineNumber":303,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":304,"author":{"gitId":"KhoonSun47"},"content":"**MSS:**","lastModifiedDate":"2024-03-04"},{"lineNumber":305,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":306,"author":{"gitId":"KhoonSun47"},"content":"1. User chooses to add home-owner.","lastModifiedDate":"2024-03-04"},{"lineNumber":307,"author":{"gitId":"KhoonSun47"},"content":"2. EstateEase requests for the details of the home-owner.","lastModifiedDate":"2024-03-04"},{"lineNumber":308,"author":{"gitId":"KhoonSun47"},"content":"3. User enters the requested details.","lastModifiedDate":"2024-03-04"},{"lineNumber":309,"author":{"gitId":"KhoonSun47"},"content":"4. EstateEase adds the home-owner and displays the newly added home-owner. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":310,"author":{"gitId":"KhoonSun47"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":311,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":312,"author":{"gitId":"KhoonSun47"},"content":"**Precondition for Extension 3i:** EstateEase has received the details of the home-owner from the user. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":313,"author":{"gitId":"KhoonSun47"},"content":"**Trigger:** EstateEase validates the entered details and detects that the block number is missing when the housing type is HDB/Condo.","lastModifiedDate":"2024-03-04"},{"lineNumber":314,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":315,"author":{"gitId":"KhoonSun47"},"content":"**Precondition for Extension 3k and 3l:** EstateEase has received the details of the home-owner from the user. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":316,"author":{"gitId":"KhoonSun47"},"content":"**Trigger:** EstateEase validates the entered details and detects that the unit number is missing when the housing type is HDB/Condo.","lastModifiedDate":"2024-03-04"},{"lineNumber":317,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":318,"author":{"gitId":"KhoonSun47"},"content":"**Extensions**","lastModifiedDate":"2024-03-04"},{"lineNumber":319,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":320,"author":{"gitId":"KhoonSun47"},"content":"* 3a. EstateEase detects missing name in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":321,"author":{"gitId":"KhoonSun47"},"content":" * 3a1. EstateEase shows an error message regarding missing name. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":322,"author":{"gitId":"KhoonSun47"},"content":" Use case resumes from step 2.","lastModifiedDate":"2024-03-04"},{"lineNumber":323,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":324,"author":{"gitId":"KhoonSun47"},"content":"* 3b. EstateEase detects duplicate name in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":325,"author":{"gitId":"KhoonSun47"},"content":" * 3b1. EstateEase shows an error message regarding duplicate name. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":326,"author":{"gitId":"KhoonSun47"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":327,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":328,"author":{"gitId":"KhoonSun47"},"content":"* 3c. EstateEase detects missing phone number in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":329,"author":{"gitId":"KhoonSun47"},"content":" * 3c1. EstateEase shows an error message regarding missing phone number. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":330,"author":{"gitId":"KhoonSun47"},"content":" Use case resumes from step 2.","lastModifiedDate":"2024-03-04"},{"lineNumber":331,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":332,"author":{"gitId":"KhoonSun47"},"content":"* 3d. EstateEase detects incorrect format for phone number in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":333,"author":{"gitId":"KhoonSun47"},"content":" * 3d1. EstateEase shows an error message regarding incorrect format for phone number. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":334,"author":{"gitId":"KhoonSun47"},"content":" Use case resumes from step 2.","lastModifiedDate":"2024-03-04"},{"lineNumber":335,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":336,"author":{"gitId":"KhoonSun47"},"content":"* 3e. EstateEase detects missing email in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":337,"author":{"gitId":"KhoonSun47"},"content":" * 3e1. EstateEase shows an error message regarding missing email. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":338,"author":{"gitId":"KhoonSun47"},"content":" Use case resumes from step 2.","lastModifiedDate":"2024-03-04"},{"lineNumber":339,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":340,"author":{"gitId":"KhoonSun47"},"content":"* 3f. EstateEase detects incorrect format for email in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":341,"author":{"gitId":"KhoonSun47"},"content":" * 3f1. EstateEase shows an error message regarding incorrect format for email. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":342,"author":{"gitId":"KhoonSun47"},"content":" Use case resumes from step 2.","lastModifiedDate":"2024-03-04"},{"lineNumber":343,"author":{"gitId":"KhoonSun47"},"content":" ","lastModifiedDate":"2024-03-04"},{"lineNumber":344,"author":{"gitId":"KhoonSun47"},"content":"* 3g. EstateEase detects missing housing type in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":345,"author":{"gitId":"KhoonSun47"},"content":" * 3g1. EstateEase shows an error message regarding missing housing type. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":346,"author":{"gitId":"KhoonSun47"},"content":" Use case resumes from step 2.","lastModifiedDate":"2024-03-04"},{"lineNumber":347,"author":{"gitId":"KhoonSun47"},"content":" ","lastModifiedDate":"2024-03-04"},{"lineNumber":348,"author":{"gitId":"KhoonSun47"},"content":"* 3h. EstateEase detects incorrect housing type in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":349,"author":{"gitId":"KhoonSun47"},"content":" * 3h1. EstateEase shows an error message regarding the entry of incorrect of housing type. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":350,"author":{"gitId":"KhoonSun47"},"content":" Use case resumes from step 2.","lastModifiedDate":"2024-03-04"},{"lineNumber":351,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":352,"author":{"gitId":"KhoonSun47"},"content":"* 3i. EstateEase detects missing block number in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":353,"author":{"gitId":"KhoonSun47"},"content":" * \t3i1. EstateEase shows an error message regarding missing block number. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":354,"author":{"gitId":"KhoonSun47"},"content":" Use case resumes from step 2.","lastModifiedDate":"2024-03-04"},{"lineNumber":355,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":356,"author":{"gitId":"KhoonSun47"},"content":"* 3j. EstateEase detects missing street name in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":357,"author":{"gitId":"KhoonSun47"},"content":" * 3j1. EstateEase shows an error message regarding missing street name. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":358,"author":{"gitId":"KhoonSun47"},"content":" Use case resumes from step 2.","lastModifiedDate":"2024-03-04"},{"lineNumber":359,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":360,"author":{"gitId":"KhoonSun47"},"content":"* 3k. EstateEase detects missing unit number in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":361,"author":{"gitId":"KhoonSun47"},"content":" * 3k1. EstateEase shows an error message regarding missing unit number. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":362,"author":{"gitId":"KhoonSun47"},"content":" Use case resumes from step 2.","lastModifiedDate":"2024-03-04"},{"lineNumber":363,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":364,"author":{"gitId":"KhoonSun47"},"content":"* 3l. EstateEase detects incorrect format for unit number in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":365,"author":{"gitId":"KhoonSun47"},"content":" * 3l1. EstateEase shows an error message regarding incorrect format for unit number. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":366,"author":{"gitId":"KhoonSun47"},"content":" Use case resumes from step 2.","lastModifiedDate":"2024-03-04"},{"lineNumber":367,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":368,"author":{"gitId":"KhoonSun47"},"content":"* 3m. EstateEase detects missing postal code in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":369,"author":{"gitId":"KhoonSun47"},"content":" * 3m1. EstateEase shows an error message regarding missing postal code. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":370,"author":{"gitId":"KhoonSun47"},"content":" Use case resumes from step 2.","lastModifiedDate":"2024-03-04"},{"lineNumber":371,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":372,"author":{"gitId":"KhoonSun47"},"content":"* 3n. EstateEase detects incorrect format for postal code in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":373,"author":{"gitId":"KhoonSun47"},"content":" * 3n1. EstateEase shows an error message regarding incorrect format for postal code. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":374,"author":{"gitId":"KhoonSun47"},"content":" Use case resumes from step 2.","lastModifiedDate":"2024-03-04"},{"lineNumber":375,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":376,"author":{"gitId":"KhoonSun47"},"content":"* 3o. EstateEase detects missing role in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":377,"author":{"gitId":"KhoonSun47"},"content":" * 3o1. EstateEase shows an error message regarding missing role. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":378,"author":{"gitId":"KhoonSun47"},"content":" Use case resumes from step 2.","lastModifiedDate":"2024-03-04"},{"lineNumber":379,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":380,"author":{"gitId":"KhoonSun47"},"content":"* 3p. EstateEase detects incorrect role in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":381,"author":{"gitId":"KhoonSun47"},"content":" * 3p1. EstateEase shows an error message regarding the entry of incorrect role. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":382,"author":{"gitId":"KhoonSun47"},"content":" Use case resumes from step 2.","lastModifiedDate":"2024-03-04"},{"lineNumber":383,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":384,"author":{"gitId":"KhoonSun47"},"content":"* 3q. EstateEase detects incorrect priority level in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":385,"author":{"gitId":"KhoonSun47"},"content":" * 3q1. EstateEase shows an error message regarding the entry of incorrect priority level. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":386,"author":{"gitId":"KhoonSun47"},"content":" Use case resumes from step 2.","lastModifiedDate":"2024-03-04"},{"lineNumber":387,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":388,"author":{"gitId":"lokidoki102"},"content":"**Use case: UC03 - Delete a person**","lastModifiedDate":"2024-03-04"},{"lineNumber":389,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":390,"author":{"gitId":"lokidoki102"},"content":"**MSS:**","lastModifiedDate":"2024-03-04"},{"lineNumber":391,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":392,"author":{"gitId":"-"},"content":"1. User requests to list persons","lastModifiedDate":"2020-05-23"},{"lineNumber":393,"author":{"gitId":"zengzihui"},"content":"2. EstateEase shows a list of persons","lastModifiedDate":"2024-03-04"},{"lineNumber":394,"author":{"gitId":"-"},"content":"3. User requests to delete a specific person in the list","lastModifiedDate":"2020-05-23"},{"lineNumber":395,"author":{"gitId":"zengzihui"},"content":"4. EstateEase deletes the person","lastModifiedDate":"2024-03-04"},{"lineNumber":396,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":397,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":398,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":399,"author":{"gitId":"-"},"content":"**Extensions**","lastModifiedDate":"2020-05-23"},{"lineNumber":400,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":401,"author":{"gitId":"-"},"content":"* 2a. The list is empty.","lastModifiedDate":"2020-05-23"},{"lineNumber":402,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":403,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":404,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":405,"author":{"gitId":"-"},"content":"* 3a. The given index is invalid.","lastModifiedDate":"2020-05-23"},{"lineNumber":406,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":407,"author":{"gitId":"zengzihui"},"content":" * 3a1. EstateEase shows an error message.","lastModifiedDate":"2024-03-04"},{"lineNumber":408,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":409,"author":{"gitId":"-"},"content":" Use case resumes at step 2.","lastModifiedDate":"2020-05-23"},{"lineNumber":410,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":411,"author":{"gitId":"lokidoki102"},"content":"**Use case: UC05 - Save to storage**","lastModifiedDate":"2024-03-04"},{"lineNumber":412,"author":{"gitId":"lokidoki102"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":413,"author":{"gitId":"lokidoki102"},"content":"**Actor: EstateEase**","lastModifiedDate":"2024-03-04"},{"lineNumber":414,"author":{"gitId":"lokidoki102"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":415,"author":{"gitId":"lokidoki102"},"content":"**Preconditions: The user initiates an add or delete command**","lastModifiedDate":"2024-03-04"},{"lineNumber":416,"author":{"gitId":"lokidoki102"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":417,"author":{"gitId":"lokidoki102"},"content":"**MSS:**","lastModifiedDate":"2024-03-04"},{"lineNumber":418,"author":{"gitId":"lokidoki102"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":419,"author":{"gitId":"lokidoki102"},"content":"1. EstateEase processes the add (UC01) or delete (UC03) command and updates the address book accordingly.","lastModifiedDate":"2024-03-04"},{"lineNumber":420,"author":{"gitId":"lokidoki102"},"content":"2. EstateEase attempts to update the JSON file accordingly.","lastModifiedDate":"2024-03-04"},{"lineNumber":421,"author":{"gitId":"lokidoki102"},"content":"3. EstateEase successfully updates the JSON file.","lastModifiedDate":"2024-03-04"},{"lineNumber":422,"author":{"gitId":"lokidoki102"},"content":" ","lastModifiedDate":"2024-03-04"},{"lineNumber":423,"author":{"gitId":"lokidoki102"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":424,"author":{"gitId":"lokidoki102"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":425,"author":{"gitId":"lokidoki102"},"content":"**Extensions**","lastModifiedDate":"2024-03-04"},{"lineNumber":426,"author":{"gitId":"lokidoki102"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":427,"author":{"gitId":"lokidoki102"},"content":"* 2a. EstateEase is unable to write to the JSON file due to file permission issue.","lastModifiedDate":"2024-03-04"},{"lineNumber":428,"author":{"gitId":"lokidoki102"},"content":" * 2a1. EstateEase shows error message regarding the insufficient file permission to the user.","lastModifiedDate":"2024-03-04"},{"lineNumber":429,"author":{"gitId":"lokidoki102"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":430,"author":{"gitId":"lokidoki102"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":431,"author":{"gitId":"lokidoki102"},"content":" ","lastModifiedDate":"2024-03-04"},{"lineNumber":432,"author":{"gitId":"lokidoki102"},"content":"* 2b. EstateEase is unable to write to the JSON file due to some IOException.","lastModifiedDate":"2024-03-04"},{"lineNumber":433,"author":{"gitId":"lokidoki102"},"content":" * 2b1. EstateEase shows error message regarding the IOException to the user.","lastModifiedDate":"2024-03-04"},{"lineNumber":434,"author":{"gitId":"lokidoki102"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":435,"author":{"gitId":"lokidoki102"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":436,"author":{"gitId":"lokidoki102"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":437,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":438,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":439,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":440,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":441,"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":442,"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":443,"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":444,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":445,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":446,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":447,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":448,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":449,"author":{"gitId":"-"},"content":"* **Mainstream OS**: Windows, Linux, Unix, MacOS","lastModifiedDate":"2024-02-09"},{"lineNumber":450,"author":{"gitId":"-"},"content":"* **Private contact detail**: A contact detail that is not meant to be shared with others","lastModifiedDate":"2020-05-23"},{"lineNumber":451,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":452,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":453,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":454,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":455,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":456,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":457,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":458,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":459,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":460,"author":{"gitId":"-"},"content":"**Note:** These instructions only provide a starting point for testers to work on;","lastModifiedDate":"2023-09-12"},{"lineNumber":461,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":462,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":463,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":464,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":465,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":466,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":467,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":468,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":469,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":470,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":471,"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":472,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":473,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":474,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":475,"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":476,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":477,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":478,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","lastModifiedDate":"2020-05-23"},{"lineNumber":479,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":480,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":481,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":482,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":483,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":484,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":485,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":486,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":487,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":488,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":489,"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":490,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":491,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":492,"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":493,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":494,"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":495,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":496,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":497,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":498,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":499,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":500,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":501,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":502,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":503,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":504,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":505,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"zengzihui":13,"KhoonSun47":84,"-":380,"lokidoki102":28}},{"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":"felixchanyy"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"{{baseUrl}}/index.html\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003eEstateEase\u003c/a\u003e","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/index.html\" class\u003d\"nav-link\"\u003eHome\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/UserGuide.html\" class\u003d\"nav-link\"\u003eUser Guide\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/DeveloperGuide.html\" class\u003d\"nav-link\"\u003eDeveloper Guide\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/AboutUs.html\" class\u003d\"nav-link\"\u003eAbout Us\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"https://github.com/se-edu/addressbook-level3\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003e\u003cmd\u003e:fab-github:\u003c/md\u003e\u003c/a\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003cli slot\u003d\"right\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003cform class\u003d\"navbar-form\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\" menu-align-right\u003e\u003c/searchbar\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003c/form\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003c/navbar\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"-"},"content":"\u003c/header\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"flex-body\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"site-nav\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"site-nav-top\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"fw-bold mb-2\" style\u003d\"font-size: 1.25rem;\"\u003eSite Map\u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003csite-nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"-"},"content":"* [Home]({{ baseUrl }}/index.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"-"},"content":"* [User Guide]({{ baseUrl }}/UserGuide.html) :expanded:","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * [Quick Start]({{ baseUrl }}/UserGuide.html#quick-start)","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"-"},"content":" * [Features]({{ baseUrl }}/UserGuide.html#features)","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * [FAQ]({{ baseUrl }}/UserGuide.html#faq)","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * [Command Summary]({{ baseUrl }}/UserGuide.html#faq)","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"-"},"content":"* [Developer Guide]({{ baseUrl }}/DeveloperGuide.html) :expanded:","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * [Acknowledgements]({{ baseUrl }}/DeveloperGuide.html#acknowledgements)","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * [Setting Up]({{ baseUrl }}/DeveloperGuide.html#setting-up-getting-started)","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"-"},"content":" * [Design]({{ baseUrl }}/DeveloperGuide.html#design)","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * [Implementation]({{ baseUrl }}/DeveloperGuide.html#implementation)","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"-"},"content":" * [Documentation, logging, testing, configuration, dev-ops]({{ baseUrl }}/DeveloperGuide.html#documentation-logging-testing-configuration-dev-ops)","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * [Appendix: Requirements]({{ baseUrl }}/DeveloperGuide.html#appendix-requirements)","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * [Appendix: Instructions for manual testing]({{ baseUrl }}/DeveloperGuide.html#appendix-instructions-for-manual-testing)","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"-"},"content":"* Tutorials","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * [Tracing code]({{ baseUrl }}/tutorials/TracingCode.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"-"},"content":" * [Adding a command]({{ baseUrl }}/tutorials/AddRemark.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"-"},"content":" * [Removing Fields]({{ baseUrl }}/tutorials/RemovingFields.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* [About Us]({{ baseUrl }}/AboutUs.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003c/site-nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003c/nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003cdiv id\u003d\"content-wrapper\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"-"},"content":" {{ content }}","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"page-nav\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"-"},"content":" \u003cpage-nav /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"-"},"content":" \u003c/nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"-"},"content":" \u003cscroll-top-button\u003e\u003c/scroll-top-button\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"-"},"content":"\u003cfooter\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u003c!-- Support MarkBind by including a link to us on your landing page! --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"text-center\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"-"},"content":" \u003csmall\u003e[\u003cmd\u003e**Powered by**\u003c/md\u003e \u003cimg src\u003d\"https://markbind.org/favicon.ico\" width\u003d\"30\"\u003e {{MarkBind}}, generated on {{timestamp}}]\u003c/small\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"-"},"content":"\u003c/footer\u003e","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"felixchanyy":1,"-":66}}] +[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"felixchanyy"},"content":"[![CI Status](https://github.com/AY2324S2-CS2103-F09-1/tp/workflows/Java%20CI/badge.svg)](https://github.com/se-edu/addressbook-level3/actions) [![codecov](https://codecov.io/gh/AY2324S2-CS2103-F09-1/tp/graph/badge.svg?token\u003dNB86I9H23Z)](https://codecov.io/gh/AY2324S2-CS2103-F09-1/tp)","lastModifiedDate":"2024-03-04"},{"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":"felixchanyy"},"content":"## About the app","lastModifiedDate":"2024-03-04"},{"lineNumber":6,"author":{"gitId":"felixchanyy"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":7,"author":{"gitId":"felixchanyy"},"content":"EstateEase simplifies residential property management for real estate listing agents in Singapore.","lastModifiedDate":"2024-03-04"},{"lineNumber":8,"author":{"gitId":"felixchanyy"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":9,"author":{"gitId":"felixchanyy"},"content":"### Key Features:","lastModifiedDate":"2024-03-04"},{"lineNumber":10,"author":{"gitId":"felixchanyy"},"content":" * With intuitive tools for listing and client communication, the app is tailored for efficiency. ","lastModifiedDate":"2024-03-04"},{"lineNumber":11,"author":{"gitId":"felixchanyy"},"content":" * Agents can quickly access contacts and prioritize them, ensuring swift connections with clients. ","lastModifiedDate":"2024-03-04"},{"lineNumber":12,"author":{"gitId":"felixchanyy"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":13,"author":{"gitId":"felixchanyy"},"content":"### Example Usages:","lastModifiedDate":"2024-03-04"},{"lineNumber":14,"author":{"gitId":"felixchanyy"},"content":" * Allows real estate agents to add and delete client information.","lastModifiedDate":"2024-03-04"},{"lineNumber":15,"author":{"gitId":"felixchanyy"},"content":" * Allows real estate agents to prioritize client contacts for efficient communication","lastModifiedDate":"2024-03-04"},{"lineNumber":16,"author":{"gitId":"felixchanyy"},"content":" * Allows real estate agents to load and save the list using JSON file","lastModifiedDate":"2024-03-04"},{"lineNumber":17,"author":{"gitId":"felixchanyy"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":18,"author":{"gitId":"felixchanyy"},"content":"## Acknowledgements","lastModifiedDate":"2024-03-04"},{"lineNumber":19,"author":{"gitId":"felixchanyy"},"content":"This project is based on the AddressBook-Level3 project created by the ","lastModifiedDate":"2024-03-04"},{"lineNumber":20,"author":{"gitId":"felixchanyy"},"content":"[SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"felixchanyy":17,"-":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":"felixchanyy"},"content":"You can reach us at the email `felixchanyy.22@u.nus.edu`","lastModifiedDate":"2024-03-04"},{"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":"felixchanyy"},"content":"### Felix Chan","lastModifiedDate":"2024-03-04"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"felixchanyy"},"content":"\u003cimg src\u003d\"images/felixchanyy.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"felixchanyy"},"content":"[[homepage](https://nus-cs2103-ay2324s2.github.io/website)]","lastModifiedDate":"2024-03-04"},{"lineNumber":19,"author":{"gitId":"felixchanyy"},"content":"[[github](https://github.com/felixchanyy)]","lastModifiedDate":"2024-03-04"},{"lineNumber":20,"author":{"gitId":"felixchanyy"},"content":"[[portfolio](https://www.linkedin.com/in/felixchanyy)]","lastModifiedDate":"2024-03-04"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"felixchanyy"},"content":"* Role: Team Lead, Scheduling and Tracking, Git Expert","lastModifiedDate":"2024-03-04"},{"lineNumber":23,"author":{"gitId":"felixchanyy"},"content":"* Responsibilities: Responsible for overall project coordination, in charge of defining, assigning, and tracking ","lastModifiedDate":"2024-03-04"},{"lineNumber":24,"author":{"gitId":"felixchanyy"},"content":"project tasks, helps other team members with matters related to Git","lastModifiedDate":"2024-03-04"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"felixchanyy"},"content":"### Yek Khoon Sun","lastModifiedDate":"2024-03-04"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"felixchanyy"},"content":"\u003cimg src\u003d\"images/khoonsun47.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"felixchanyy"},"content":"[[github](http://github.com/khoonsun47)]","lastModifiedDate":"2024-03-04"},{"lineNumber":31,"author":{"gitId":"felixchanyy"},"content":"[[portfolio](https://sg.linkedin.com/in/yek-khoon-sun-2b2270177)]","lastModifiedDate":"2024-03-04"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":33,"author":{"gitId":"felixchanyy"},"content":"* Role: Testing","lastModifiedDate":"2024-03-04"},{"lineNumber":34,"author":{"gitId":"felixchanyy"},"content":"* Responsibilities: Ensures the testing of the project is done properly and on time","lastModifiedDate":"2024-03-04"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"felixchanyy"},"content":"### Carl Lim","lastModifiedDate":"2024-03-04"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"felixchanyy"},"content":"\u003cimg src\u003d\"images/lokidoki102.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":40,"author":{"gitId":"felixchanyy"},"content":"[[github](http://github.com/lokidoki102)] ","lastModifiedDate":"2024-03-04"},{"lineNumber":41,"author":{"gitId":"felixchanyy"},"content":"[[portfolio](https://www.linkedin.com/in/carl-lim-483980152/)]","lastModifiedDate":"2024-03-04"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"felixchanyy"},"content":"* Role: Code Quality, IntelliJ expert","lastModifiedDate":"2024-03-04"},{"lineNumber":44,"author":{"gitId":"felixchanyy"},"content":"* Responsibilities: Looks after code quality and code review, ensures adherence to coding standards, ","lastModifiedDate":"2024-03-04"},{"lineNumber":45,"author":{"gitId":"felixchanyy"},"content":"helps other team members with matters related to IntelliJ","lastModifiedDate":"2024-03-04"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"felixchanyy"},"content":"### Zeng Zihui","lastModifiedDate":"2024-03-04"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"felixchanyy"},"content":"\u003cimg src\u003d\"images/zengzihui.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"felixchanyy"},"content":"[[github](http://github.com/zengzihui)]","lastModifiedDate":"2024-03-04"},{"lineNumber":52,"author":{"gitId":"felixchanyy"},"content":"[[portfolio](https://www.linkedin.com/in/zeng-zihui)]","lastModifiedDate":"2024-03-04"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"felixchanyy"},"content":"* Role: Documentation, In charge of UI","lastModifiedDate":"2024-03-04"},{"lineNumber":55,"author":{"gitId":"felixchanyy"},"content":"* Responsibilities: Responsible for the quality of various project documents,","lastModifiedDate":"2024-03-04"},{"lineNumber":56,"author":{"gitId":"felixchanyy"},"content":"review changes done to UI, act as the gate keeper of its quality, help others when they face","lastModifiedDate":"2024-03-04"},{"lineNumber":57,"author":{"gitId":"felixchanyy"},"content":"difficulties while modifying UI","lastModifiedDate":"2024-03-04"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":59,"author":{"gitId":"felixchanyy"},"content":"### Liu Zhengyang","lastModifiedDate":"2024-03-04"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":61,"author":{"gitId":"felixchanyy"},"content":"\u003cimg src\u003d\"images/redcolorbicycle.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":63,"author":{"gitId":"felixchanyy"},"content":"[[github](http://github.com/redcolorbicycle)]","lastModifiedDate":"2024-03-04"},{"lineNumber":64,"author":{"gitId":"felixchanyy"},"content":"[[portfolio](https://www.linkedin.com/in/liu-zhengyang)]","lastModifiedDate":"2024-03-04"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":66,"author":{"gitId":"felixchanyy"},"content":"* Role: Deliverables and deadlines","lastModifiedDate":"2024-03-04"},{"lineNumber":67,"author":{"gitId":"felixchanyy"},"content":"* Responsibilities: Ensure project deliverables are done on time and in the right format","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"felixchanyy":36,"-":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":"zengzihui"},"content":"# EstateEase Developer Guide","lastModifiedDate":"2024-03-04"},{"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":"zengzihui"},"content":"* Residential Property Real Estate Listing Agent in Singapore","lastModifiedDate":"2024-03-04"},{"lineNumber":277,"author":{"gitId":"-"},"content":"* can type fast","lastModifiedDate":"2020-05-23"},{"lineNumber":278,"author":{"gitId":"-"},"content":"* prefers typing to mouse interactions","lastModifiedDate":"2020-05-26"},{"lineNumber":279,"author":{"gitId":"-"},"content":"* is reasonably comfortable using CLI apps","lastModifiedDate":"2020-05-23"},{"lineNumber":280,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":281,"author":{"gitId":"zengzihui"},"content":"**Value proposition**: EstateEase simplifies residential property management for real estate listing agents in Singapore. With intuitive tools for listing and client communication, the app is tailored for efficiency. Agents can quickly access contacts and prioritize them, ensuring swift connections with clients.","lastModifiedDate":"2024-03-04"},{"lineNumber":282,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":283,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":284,"author":{"gitId":"-"},"content":"### User stories","lastModifiedDate":"2020-06-07"},{"lineNumber":285,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":286,"author":{"gitId":"-"},"content":"Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unlikely to have) - `*`","lastModifiedDate":"2020-05-23"},{"lineNumber":287,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":288,"author":{"gitId":"-"},"content":"| Priority | As a …​ | I want to …​ | So that I can…​ |","lastModifiedDate":"2020-05-23"},{"lineNumber":289,"author":{"gitId":"zengzihui"},"content":"|----------|-------------------|--------------------------------------------------------------|------------------------------------------------------------------------------|","lastModifiedDate":"2024-03-04"},{"lineNumber":290,"author":{"gitId":"zengzihui"},"content":"| `* * *` | real estate agent | add home-owners | keep track of their contact details and the properties that they are selling |","lastModifiedDate":"2024-03-04"},{"lineNumber":291,"author":{"gitId":"zengzihui"},"content":"| `* * *` | real estate agent | view a list of all contacts stored, along with their details | quickly find the contact I need |","lastModifiedDate":"2024-03-04"},{"lineNumber":292,"author":{"gitId":"zengzihui"},"content":"| `* * *` | real estate agent | delete contacts | remove outdated or irrelevant contacts |","lastModifiedDate":"2024-03-04"},{"lineNumber":293,"author":{"gitId":"zengzihui"},"content":"| `* *` | real estate agent | be able to import my existing contact and address data | seamlessly transition to using EstateEase |","lastModifiedDate":"2024-03-04"},{"lineNumber":294,"author":{"gitId":"zengzihui"},"content":"| `* *` | real estate agent | save any changes or updates made to the contact details | ensure that my data is always up-to-date |","lastModifiedDate":"2024-03-04"},{"lineNumber":295,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":296,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":297,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":298,"author":{"gitId":"-"},"content":"### Use cases","lastModifiedDate":"2020-06-07"},{"lineNumber":299,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":300,"author":{"gitId":"zengzihui"},"content":"(For all use cases below, the **System** is the `EstateEase` and the **Actor** is the `user`, unless specified otherwise)","lastModifiedDate":"2024-03-04"},{"lineNumber":301,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":302,"author":{"gitId":"KhoonSun47"},"content":"**Use case: UC01 - Add home-owners to user’s contact list**","lastModifiedDate":"2024-03-04"},{"lineNumber":303,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":304,"author":{"gitId":"KhoonSun47"},"content":"**MSS:**","lastModifiedDate":"2024-03-04"},{"lineNumber":305,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":306,"author":{"gitId":"KhoonSun47"},"content":"1. User chooses to add home-owner.","lastModifiedDate":"2024-03-04"},{"lineNumber":307,"author":{"gitId":"KhoonSun47"},"content":"2. EstateEase requests for the details of the home-owner.","lastModifiedDate":"2024-03-04"},{"lineNumber":308,"author":{"gitId":"KhoonSun47"},"content":"3. User enters the requested details.","lastModifiedDate":"2024-03-04"},{"lineNumber":309,"author":{"gitId":"KhoonSun47"},"content":"4. EstateEase adds the home-owner and displays the newly added home-owner. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":310,"author":{"gitId":"KhoonSun47"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":311,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":312,"author":{"gitId":"KhoonSun47"},"content":"**Precondition for Extension 3i:** EstateEase has received the details of the home-owner from the user. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":313,"author":{"gitId":"KhoonSun47"},"content":"**Trigger:** EstateEase validates the entered details and detects that the block number is missing when the housing type is HDB/Condo.","lastModifiedDate":"2024-03-04"},{"lineNumber":314,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":315,"author":{"gitId":"KhoonSun47"},"content":"**Precondition for Extension 3k and 3l:** EstateEase has received the details of the home-owner from the user. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":316,"author":{"gitId":"KhoonSun47"},"content":"**Trigger:** EstateEase validates the entered details and detects that the unit number is missing when the housing type is HDB/Condo.","lastModifiedDate":"2024-03-04"},{"lineNumber":317,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":318,"author":{"gitId":"KhoonSun47"},"content":"**Extensions**","lastModifiedDate":"2024-03-04"},{"lineNumber":319,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":320,"author":{"gitId":"KhoonSun47"},"content":"* 3a. EstateEase detects missing name in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":321,"author":{"gitId":"KhoonSun47"},"content":" * 3a1. EstateEase shows an error message regarding missing name. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":322,"author":{"gitId":"KhoonSun47"},"content":" Use case resumes from step 2.","lastModifiedDate":"2024-03-04"},{"lineNumber":323,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":324,"author":{"gitId":"KhoonSun47"},"content":"* 3b. EstateEase detects duplicate name in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":325,"author":{"gitId":"KhoonSun47"},"content":" * 3b1. EstateEase shows an error message regarding duplicate name. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":326,"author":{"gitId":"KhoonSun47"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":327,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":328,"author":{"gitId":"KhoonSun47"},"content":"* 3c. EstateEase detects missing phone number in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":329,"author":{"gitId":"KhoonSun47"},"content":" * 3c1. EstateEase shows an error message regarding missing phone number. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":330,"author":{"gitId":"KhoonSun47"},"content":" Use case resumes from step 2.","lastModifiedDate":"2024-03-04"},{"lineNumber":331,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":332,"author":{"gitId":"KhoonSun47"},"content":"* 3d. EstateEase detects incorrect format for phone number in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":333,"author":{"gitId":"KhoonSun47"},"content":" * 3d1. EstateEase shows an error message regarding incorrect format for phone number. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":334,"author":{"gitId":"KhoonSun47"},"content":" Use case resumes from step 2.","lastModifiedDate":"2024-03-04"},{"lineNumber":335,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":336,"author":{"gitId":"KhoonSun47"},"content":"* 3e. EstateEase detects missing email in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":337,"author":{"gitId":"KhoonSun47"},"content":" * 3e1. EstateEase shows an error message regarding missing email. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":338,"author":{"gitId":"KhoonSun47"},"content":" Use case resumes from step 2.","lastModifiedDate":"2024-03-04"},{"lineNumber":339,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":340,"author":{"gitId":"KhoonSun47"},"content":"* 3f. EstateEase detects incorrect format for email in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":341,"author":{"gitId":"KhoonSun47"},"content":" * 3f1. EstateEase shows an error message regarding incorrect format for email. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":342,"author":{"gitId":"KhoonSun47"},"content":" Use case resumes from step 2.","lastModifiedDate":"2024-03-04"},{"lineNumber":343,"author":{"gitId":"KhoonSun47"},"content":" ","lastModifiedDate":"2024-03-04"},{"lineNumber":344,"author":{"gitId":"KhoonSun47"},"content":"* 3g. EstateEase detects missing housing type in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":345,"author":{"gitId":"KhoonSun47"},"content":" * 3g1. EstateEase shows an error message regarding missing housing type. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":346,"author":{"gitId":"KhoonSun47"},"content":" Use case resumes from step 2.","lastModifiedDate":"2024-03-04"},{"lineNumber":347,"author":{"gitId":"KhoonSun47"},"content":" ","lastModifiedDate":"2024-03-04"},{"lineNumber":348,"author":{"gitId":"KhoonSun47"},"content":"* 3h. EstateEase detects incorrect housing type in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":349,"author":{"gitId":"KhoonSun47"},"content":" * 3h1. EstateEase shows an error message regarding the entry of incorrect of housing type. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":350,"author":{"gitId":"KhoonSun47"},"content":" Use case resumes from step 2.","lastModifiedDate":"2024-03-04"},{"lineNumber":351,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":352,"author":{"gitId":"KhoonSun47"},"content":"* 3i. EstateEase detects missing block number in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":353,"author":{"gitId":"KhoonSun47"},"content":" * \t3i1. EstateEase shows an error message regarding missing block number. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":354,"author":{"gitId":"KhoonSun47"},"content":" Use case resumes from step 2.","lastModifiedDate":"2024-03-04"},{"lineNumber":355,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":356,"author":{"gitId":"KhoonSun47"},"content":"* 3j. EstateEase detects missing street name in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":357,"author":{"gitId":"KhoonSun47"},"content":" * 3j1. EstateEase shows an error message regarding missing street name. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":358,"author":{"gitId":"KhoonSun47"},"content":" Use case resumes from step 2.","lastModifiedDate":"2024-03-04"},{"lineNumber":359,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":360,"author":{"gitId":"KhoonSun47"},"content":"* 3k. EstateEase detects missing unit number in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":361,"author":{"gitId":"KhoonSun47"},"content":" * 3k1. EstateEase shows an error message regarding missing unit number. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":362,"author":{"gitId":"KhoonSun47"},"content":" Use case resumes from step 2.","lastModifiedDate":"2024-03-04"},{"lineNumber":363,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":364,"author":{"gitId":"KhoonSun47"},"content":"* 3l. EstateEase detects incorrect format for unit number in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":365,"author":{"gitId":"KhoonSun47"},"content":" * 3l1. EstateEase shows an error message regarding incorrect format for unit number. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":366,"author":{"gitId":"KhoonSun47"},"content":" Use case resumes from step 2.","lastModifiedDate":"2024-03-04"},{"lineNumber":367,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":368,"author":{"gitId":"KhoonSun47"},"content":"* 3m. EstateEase detects missing postal code in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":369,"author":{"gitId":"KhoonSun47"},"content":" * 3m1. EstateEase shows an error message regarding missing postal code. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":370,"author":{"gitId":"KhoonSun47"},"content":" Use case resumes from step 2.","lastModifiedDate":"2024-03-04"},{"lineNumber":371,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":372,"author":{"gitId":"KhoonSun47"},"content":"* 3n. EstateEase detects incorrect format for postal code in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":373,"author":{"gitId":"KhoonSun47"},"content":" * 3n1. EstateEase shows an error message regarding incorrect format for postal code. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":374,"author":{"gitId":"KhoonSun47"},"content":" Use case resumes from step 2.","lastModifiedDate":"2024-03-04"},{"lineNumber":375,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":376,"author":{"gitId":"KhoonSun47"},"content":"* 3o. EstateEase detects missing role in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":377,"author":{"gitId":"KhoonSun47"},"content":" * 3o1. EstateEase shows an error message regarding missing role. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":378,"author":{"gitId":"KhoonSun47"},"content":" Use case resumes from step 2.","lastModifiedDate":"2024-03-04"},{"lineNumber":379,"author":{"gitId":"KhoonSun47"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":380,"author":{"gitId":"KhoonSun47"},"content":"* 3p. EstateEase detects incorrect role in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":381,"author":{"gitId":"KhoonSun47"},"content":" * 3p1. EstateEase shows an error message regarding the entry of incorrect role. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":382,"author":{"gitId":"KhoonSun47"},"content":" Use case resumes from step 2.","lastModifiedDate":"2024-03-04"},{"lineNumber":383,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":384,"author":{"gitId":"KhoonSun47"},"content":"* 3q. EstateEase detects incorrect priority level in the entered data. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":385,"author":{"gitId":"KhoonSun47"},"content":" * 3q1. EstateEase shows an error message regarding the entry of incorrect priority level. \u003cbr\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":386,"author":{"gitId":"KhoonSun47"},"content":" Use case resumes from step 2.","lastModifiedDate":"2024-03-04"},{"lineNumber":387,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":388,"author":{"gitId":"redcolorbicycle"},"content":"**Use case: UC02 - View all**","lastModifiedDate":"2024-03-05"},{"lineNumber":389,"author":{"gitId":"redcolorbicycle"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":390,"author":{"gitId":"redcolorbicycle"},"content":"**MSS:**","lastModifiedDate":"2024-03-05"},{"lineNumber":391,"author":{"gitId":"redcolorbicycle"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":392,"author":{"gitId":"redcolorbicycle"},"content":"1. User requests to list persons ","lastModifiedDate":"2024-03-05"},{"lineNumber":393,"author":{"gitId":"redcolorbicycle"},"content":"2. EstateEase shows a list of persons","lastModifiedDate":"2024-03-05"},{"lineNumber":394,"author":{"gitId":"redcolorbicycle"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":395,"author":{"gitId":"redcolorbicycle"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":396,"author":{"gitId":"redcolorbicycle"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":397,"author":{"gitId":"redcolorbicycle"},"content":"**Extensions**","lastModifiedDate":"2024-03-05"},{"lineNumber":398,"author":{"gitId":"redcolorbicycle"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":399,"author":{"gitId":"redcolorbicycle"},"content":"*2a. The list is empty","lastModifiedDate":"2024-03-05"},{"lineNumber":400,"author":{"gitId":"redcolorbicycle"},"content":" * 2a1. EstateEast displays a message stating that the list is empty.","lastModifiedDate":"2024-03-05"},{"lineNumber":401,"author":{"gitId":"redcolorbicycle"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":402,"author":{"gitId":"redcolorbicycle"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":403,"author":{"gitId":"redcolorbicycle"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":404,"author":{"gitId":"lokidoki102"},"content":"**Use case: UC03 - Delete a person**","lastModifiedDate":"2024-03-04"},{"lineNumber":405,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":406,"author":{"gitId":"lokidoki102"},"content":"**MSS:**","lastModifiedDate":"2024-03-04"},{"lineNumber":407,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":408,"author":{"gitId":"-"},"content":"1. User requests to list persons","lastModifiedDate":"2020-05-23"},{"lineNumber":409,"author":{"gitId":"zengzihui"},"content":"2. EstateEase shows a list of persons","lastModifiedDate":"2024-03-04"},{"lineNumber":410,"author":{"gitId":"-"},"content":"3. User requests to delete a specific person in the list","lastModifiedDate":"2020-05-23"},{"lineNumber":411,"author":{"gitId":"zengzihui"},"content":"4. EstateEase deletes the person","lastModifiedDate":"2024-03-04"},{"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":"**Extensions**","lastModifiedDate":"2020-05-23"},{"lineNumber":416,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":417,"author":{"gitId":"-"},"content":"* 2a. The list is empty.","lastModifiedDate":"2020-05-23"},{"lineNumber":418,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":419,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":420,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":421,"author":{"gitId":"-"},"content":"* 3a. The given index is invalid.","lastModifiedDate":"2020-05-23"},{"lineNumber":422,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":423,"author":{"gitId":"zengzihui"},"content":" * 3a1. EstateEase shows an error message.","lastModifiedDate":"2024-03-04"},{"lineNumber":424,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":425,"author":{"gitId":"-"},"content":" Use case resumes at step 2.","lastModifiedDate":"2020-05-23"},{"lineNumber":426,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":427,"author":{"gitId":"lokidoki102"},"content":"**Use case: UC05 - Save to storage**","lastModifiedDate":"2024-03-04"},{"lineNumber":428,"author":{"gitId":"lokidoki102"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":429,"author":{"gitId":"lokidoki102"},"content":"**Actor: EstateEase**","lastModifiedDate":"2024-03-04"},{"lineNumber":430,"author":{"gitId":"lokidoki102"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":431,"author":{"gitId":"lokidoki102"},"content":"**Preconditions: The user initiates an add or delete command**","lastModifiedDate":"2024-03-04"},{"lineNumber":432,"author":{"gitId":"lokidoki102"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":433,"author":{"gitId":"lokidoki102"},"content":"**MSS:**","lastModifiedDate":"2024-03-04"},{"lineNumber":434,"author":{"gitId":"lokidoki102"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":435,"author":{"gitId":"lokidoki102"},"content":"1. EstateEase processes the add (UC01) or delete (UC03) command and updates the address book accordingly.","lastModifiedDate":"2024-03-04"},{"lineNumber":436,"author":{"gitId":"lokidoki102"},"content":"2. EstateEase attempts to update the JSON file accordingly.","lastModifiedDate":"2024-03-04"},{"lineNumber":437,"author":{"gitId":"lokidoki102"},"content":"3. EstateEase successfully updates the JSON file.","lastModifiedDate":"2024-03-04"},{"lineNumber":438,"author":{"gitId":"lokidoki102"},"content":" ","lastModifiedDate":"2024-03-04"},{"lineNumber":439,"author":{"gitId":"lokidoki102"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":440,"author":{"gitId":"lokidoki102"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":441,"author":{"gitId":"lokidoki102"},"content":"**Extensions**","lastModifiedDate":"2024-03-04"},{"lineNumber":442,"author":{"gitId":"lokidoki102"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":443,"author":{"gitId":"lokidoki102"},"content":"* 2a. EstateEase is unable to write to the JSON file due to file permission issue.","lastModifiedDate":"2024-03-04"},{"lineNumber":444,"author":{"gitId":"lokidoki102"},"content":" * 2a1. EstateEase shows error message regarding the insufficient file permission to the user.","lastModifiedDate":"2024-03-04"},{"lineNumber":445,"author":{"gitId":"lokidoki102"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":446,"author":{"gitId":"lokidoki102"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":447,"author":{"gitId":"lokidoki102"},"content":" ","lastModifiedDate":"2024-03-04"},{"lineNumber":448,"author":{"gitId":"lokidoki102"},"content":"* 2b. EstateEase is unable to write to the JSON file due to some IOException.","lastModifiedDate":"2024-03-04"},{"lineNumber":449,"author":{"gitId":"lokidoki102"},"content":" * 2b1. EstateEase shows error message regarding the IOException to the user.","lastModifiedDate":"2024-03-04"},{"lineNumber":450,"author":{"gitId":"lokidoki102"},"content":" Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":451,"author":{"gitId":"lokidoki102"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":452,"author":{"gitId":"lokidoki102"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":453,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":454,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":455,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":456,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":457,"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":458,"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":459,"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":460,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":461,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":462,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":463,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":464,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":465,"author":{"gitId":"-"},"content":"* **Mainstream OS**: Windows, Linux, Unix, MacOS","lastModifiedDate":"2024-02-09"},{"lineNumber":466,"author":{"gitId":"-"},"content":"* **Private contact detail**: A contact detail that is not meant to be shared with others","lastModifiedDate":"2020-05-23"},{"lineNumber":467,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":468,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":469,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":470,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":471,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":472,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":473,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":474,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":475,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":476,"author":{"gitId":"-"},"content":"**Note:** These instructions only provide a starting point for testers to work on;","lastModifiedDate":"2023-09-12"},{"lineNumber":477,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":478,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":479,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":480,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":481,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":482,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":483,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":484,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":485,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":486,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":487,"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":488,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":489,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":490,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":491,"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":492,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":493,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":494,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","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"},{"lineNumber":497,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":498,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":499,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":500,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":501,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":502,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":503,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":504,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":505,"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":506,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":507,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":508,"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":509,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":510,"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":511,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":512,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":513,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":514,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":515,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":516,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":517,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":518,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":519,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":520,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":521,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"redcolorbicycle":16,"zengzihui":13,"KhoonSun47":84,"-":380,"lokidoki102":28}},{"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":"felixchanyy"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"{{baseUrl}}/index.html\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003eEstateEase\u003c/a\u003e","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/index.html\" class\u003d\"nav-link\"\u003eHome\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/UserGuide.html\" class\u003d\"nav-link\"\u003eUser Guide\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/DeveloperGuide.html\" class\u003d\"nav-link\"\u003eDeveloper Guide\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/AboutUs.html\" class\u003d\"nav-link\"\u003eAbout Us\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"https://github.com/se-edu/addressbook-level3\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003e\u003cmd\u003e:fab-github:\u003c/md\u003e\u003c/a\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003cli slot\u003d\"right\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003cform class\u003d\"navbar-form\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\" menu-align-right\u003e\u003c/searchbar\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003c/form\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003c/navbar\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"-"},"content":"\u003c/header\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"flex-body\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"site-nav\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"site-nav-top\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"fw-bold mb-2\" style\u003d\"font-size: 1.25rem;\"\u003eSite Map\u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003csite-nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"-"},"content":"* [Home]({{ baseUrl }}/index.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"-"},"content":"* [User Guide]({{ baseUrl }}/UserGuide.html) :expanded:","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * [Quick Start]({{ baseUrl }}/UserGuide.html#quick-start)","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"-"},"content":" * [Features]({{ baseUrl }}/UserGuide.html#features)","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * [FAQ]({{ baseUrl }}/UserGuide.html#faq)","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * [Command Summary]({{ baseUrl }}/UserGuide.html#faq)","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"-"},"content":"* [Developer Guide]({{ baseUrl }}/DeveloperGuide.html) :expanded:","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * [Acknowledgements]({{ baseUrl }}/DeveloperGuide.html#acknowledgements)","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * [Setting Up]({{ baseUrl }}/DeveloperGuide.html#setting-up-getting-started)","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"-"},"content":" * [Design]({{ baseUrl }}/DeveloperGuide.html#design)","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * [Implementation]({{ baseUrl }}/DeveloperGuide.html#implementation)","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"-"},"content":" * [Documentation, logging, testing, configuration, dev-ops]({{ baseUrl }}/DeveloperGuide.html#documentation-logging-testing-configuration-dev-ops)","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * [Appendix: Requirements]({{ baseUrl }}/DeveloperGuide.html#appendix-requirements)","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * [Appendix: Instructions for manual testing]({{ baseUrl }}/DeveloperGuide.html#appendix-instructions-for-manual-testing)","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"-"},"content":"* Tutorials","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * [Tracing code]({{ baseUrl }}/tutorials/TracingCode.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"-"},"content":" * [Adding a command]({{ baseUrl }}/tutorials/AddRemark.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"-"},"content":" * [Removing Fields]({{ baseUrl }}/tutorials/RemovingFields.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* [About Us]({{ baseUrl }}/AboutUs.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003c/site-nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003c/nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003cdiv id\u003d\"content-wrapper\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"-"},"content":" {{ content }}","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"page-nav\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"-"},"content":" \u003cpage-nav /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"-"},"content":" \u003c/nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"-"},"content":" \u003cscroll-top-button\u003e\u003c/scroll-top-button\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"-"},"content":"\u003cfooter\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u003c!-- Support MarkBind by including a link to us on your landing page! --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"text-center\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"-"},"content":" \u003csmall\u003e[\u003cmd\u003e**Powered by**\u003c/md\u003e \u003cimg src\u003d\"https://markbind.org/favicon.ico\" width\u003d\"30\"\u003e {{MarkBind}}, generated on {{timestamp}}]\u003c/small\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"-"},"content":"\u003c/footer\u003e","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"felixchanyy":1,"-":66}}] diff --git a/AY2324S2-CS2103-F09-1_tp_master/commits.json b/AY2324S2-CS2103-F09-1_tp_master/commits.json index cc9c09d6..cb2b87db 100644 --- a/AY2324S2-CS2103-F09-1_tp_master/commits.json +++ b/AY2324S2-CS2103-F09-1_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"redcolorbicycle":[{"date":"2024-03-05","commitResults":[{"hash":"c27b71e1a13fe523788ea79dcb0fb357c40f89d3","isMergeCommit":true,"messageTitle":"Merge pull request #21 from KhoonSun47/branch-update-developer-guide","messageBody":"Branch update developer guide","fileTypesAndContributionMap":{}}]}],"zengzihui":[{"date":"2024-03-04","commitResults":[{"hash":"3bf8fb3483bf513a06bf8c87688887d2dff23b38","isMergeCommit":false,"messageTitle":"Update EstateEase Developer Guide","messageBody":"Update target user profile, value proposition, and user stories for v1.2.\nUpdate use case for delete contact.\n","fileTypesAndContributionMap":{"docs":{"insertions":14,"deletions":17}}},{"hash":"3bbbb04b718ea7c7757dca95142ad3e92e3bb5e0","isMergeCommit":true,"messageTitle":"Merge pull request #17 from zengzihui/branch-update-developer-guide","messageBody":"Update EstateEase Developer Guide for target user profile, value proposition, and user stories for v1.2","fileTypesAndContributionMap":{}}]}],"KhoonSun47":[{"date":"2024-03-04","commitResults":[{"hash":"01368656f2edde1c9467693dfcc5131537fb69fd","isMergeCommit":true,"messageTitle":"Merge branch \u0027AY2324S2-CS2103-F09-1:master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"26ae6d0094063f4a27b0ef46714554a9e01bb351","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/KhoonSun47/tp","messageBody":"* \u0027master\u0027 of https://github.com/KhoonSun47/tp:\n Update EstateEase Developer Guide\n Update EstateEase Developer Guide\n Update README page\n Update AboutUs page\n Rename zhengyang.png. to zhengyang.png\n Rename zhengyang.png.jpg to zhengyang.png\n Added profile pic\n","fileTypesAndContributionMap":{}},{"hash":"6fad1deb95133281b72c04e334974643a7c904e8","isMergeCommit":false,"messageTitle":"Update EstateEase Developer Guide","messageBody":"DeveloperGuide.md: Add use case UC01 - Add home-owners to user\u0027s contact list\n","fileTypesAndContributionMap":{"docs":{"insertions":86,"deletions":0}}}]}],"felixchanyy":[{"date":"2024-02-25","commitResults":[{"hash":"49ea064856c7f445023492f187e586955a8ff914","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"1c557117b928997147adacbfbaa2a51e621be928","isMergeCommit":true,"messageTitle":"Merge pull request #1 from felixchanyy/switch-docs-to-markbind","messageBody":"Add branch Switch docs to markbind","fileTypesAndContributionMap":{}},{"hash":"437dc448a25a27a4e80aadfba9c9ff559fff86df","isMergeCommit":false,"messageTitle":"Set up MarkBind website","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"3ec6fbcede9e2331e865e8c9013ed12ba595a14a","isMergeCommit":true,"messageTitle":"Merge pull request #2 from felixchanyy/master","messageBody":"Set up MarkBind website","fileTypesAndContributionMap":{}}]},{"date":"2024-03-04","commitResults":[{"hash":"a47aa2b24342c77b8db32c2a23911555036fb767","isMergeCommit":false,"messageTitle":"Update AboutUs page","messageBody":"Add roles and individual profile pic\n","fileTypesAndContributionMap":{"docs":{"insertions":36,"deletions":30}}},{"hash":"2d9d3d2668b299b07b49e579c65b1bf0555729f1","isMergeCommit":true,"messageTitle":"Merge pull request #14 from felixchanyy/branch-about-us","messageBody":"Update about us","fileTypesAndContributionMap":{}},{"hash":"14246bf45fe143d902d1bf5bbebbd07da5eca49a","isMergeCommit":false,"messageTitle":"Update README page","messageBody":"Make changes to Ui mock up, update link of Github Actions badge\nand the content of the page.\n","fileTypesAndContributionMap":{"docs":{"insertions":17,"deletions":11}}},{"hash":"d73491577039858c93774a124ef2be0533b6dbad","isMergeCommit":true,"messageTitle":"Merge pull request #16 from felixchanyy/branch-readme","messageBody":"Update README page","fileTypesAndContributionMap":{}}]}],"lokidoki102":[{"date":"2024-03-04","commitResults":[{"hash":"e619f001b6abc4609e4ad77c553f802c6e7d06aa","isMergeCommit":false,"messageTitle":"Update EstateEase Developer Guide","messageBody":"Add use case (textual) for save to storage.\nUpdate delete contact use case to include use case number.\n","fileTypesAndContributionMap":{"docs":{"insertions":28,"deletions":2}}},{"hash":"3d096c0e453bb7ffdd1a615edff7e8a7e1cab953","isMergeCommit":true,"messageTitle":"Merge pull request #19 from lokidoki102/branch-update-developer-guide","messageBody":"Update EstateEase Developer Guide","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"redcolorbicycle":{"docs":0,"functional-code":0,"test-code":0},"zengzihui":{"docs":13,"functional-code":0,"test-code":0},"KhoonSun47":{"docs":84,"functional-code":0,"test-code":0},"felixchanyy":{"docs":54,"functional-code":0,"test-code":0},"lokidoki102":{"docs":28,"functional-code":0,"test-code":0}},"authorContributionVariance":{"redcolorbicycle":0.0,"zengzihui":73.40972,"KhoonSun47":564.9723,"felixchanyy":670.9722,"lokidoki102":68.75},"authorDisplayNameMap":{"redcolorbicycle":"CS2103-F09-1 LIU ..YANG","zengzihui":"CS2103-F09-1 ZENG..IHUI","KhoonSun47":"CS2103-F09-1 YEK .. SUN","felixchanyy":"CS2103-F09-1 FELI..YUAN","lokidoki102":"CS2103-F09-1 LIM ..RATO"}} +{"authorDailyContributionsMap":{"redcolorbicycle":[{"date":"2024-03-05","commitResults":[{"hash":"c27b71e1a13fe523788ea79dcb0fb357c40f89d3","isMergeCommit":true,"messageTitle":"Merge pull request #21 from KhoonSun47/branch-update-developer-guide","messageBody":"Branch update developer guide","fileTypesAndContributionMap":{}},{"hash":"cb692f1617a049621f50325f69bde3ff61660a98","isMergeCommit":false,"messageTitle":"Update use case UC02: View All","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":16,"deletions":0}}}]}],"zengzihui":[{"date":"2024-03-04","commitResults":[{"hash":"3bf8fb3483bf513a06bf8c87688887d2dff23b38","isMergeCommit":false,"messageTitle":"Update EstateEase Developer Guide","messageBody":"Update target user profile, value proposition, and user stories for v1.2.\nUpdate use case for delete contact.\n","fileTypesAndContributionMap":{"docs":{"insertions":14,"deletions":17}}},{"hash":"3bbbb04b718ea7c7757dca95142ad3e92e3bb5e0","isMergeCommit":true,"messageTitle":"Merge pull request #17 from zengzihui/branch-update-developer-guide","messageBody":"Update EstateEase Developer Guide for target user profile, value proposition, and user stories for v1.2","fileTypesAndContributionMap":{}}]}],"KhoonSun47":[{"date":"2024-03-04","commitResults":[{"hash":"01368656f2edde1c9467693dfcc5131537fb69fd","isMergeCommit":true,"messageTitle":"Merge branch \u0027AY2324S2-CS2103-F09-1:master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"26ae6d0094063f4a27b0ef46714554a9e01bb351","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/KhoonSun47/tp","messageBody":"* \u0027master\u0027 of https://github.com/KhoonSun47/tp:\n Update EstateEase Developer Guide\n Update EstateEase Developer Guide\n Update README page\n Update AboutUs page\n Rename zhengyang.png. to zhengyang.png\n Rename zhengyang.png.jpg to zhengyang.png\n Added profile pic\n","fileTypesAndContributionMap":{}},{"hash":"6fad1deb95133281b72c04e334974643a7c904e8","isMergeCommit":false,"messageTitle":"Update EstateEase Developer Guide","messageBody":"DeveloperGuide.md: Add use case UC01 - Add home-owners to user\u0027s contact list\n","fileTypesAndContributionMap":{"docs":{"insertions":86,"deletions":0}}}]}],"felixchanyy":[{"date":"2024-02-25","commitResults":[{"hash":"49ea064856c7f445023492f187e586955a8ff914","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"1c557117b928997147adacbfbaa2a51e621be928","isMergeCommit":true,"messageTitle":"Merge pull request #1 from felixchanyy/switch-docs-to-markbind","messageBody":"Add branch Switch docs to markbind","fileTypesAndContributionMap":{}},{"hash":"437dc448a25a27a4e80aadfba9c9ff559fff86df","isMergeCommit":false,"messageTitle":"Set up MarkBind website","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"3ec6fbcede9e2331e865e8c9013ed12ba595a14a","isMergeCommit":true,"messageTitle":"Merge pull request #2 from felixchanyy/master","messageBody":"Set up MarkBind website","fileTypesAndContributionMap":{}}]},{"date":"2024-03-04","commitResults":[{"hash":"a47aa2b24342c77b8db32c2a23911555036fb767","isMergeCommit":false,"messageTitle":"Update AboutUs page","messageBody":"Add roles and individual profile pic\n","fileTypesAndContributionMap":{"docs":{"insertions":36,"deletions":30}}},{"hash":"2d9d3d2668b299b07b49e579c65b1bf0555729f1","isMergeCommit":true,"messageTitle":"Merge pull request #14 from felixchanyy/branch-about-us","messageBody":"Update about us","fileTypesAndContributionMap":{}},{"hash":"14246bf45fe143d902d1bf5bbebbd07da5eca49a","isMergeCommit":false,"messageTitle":"Update README page","messageBody":"Make changes to Ui mock up, update link of Github Actions badge\nand the content of the page.\n","fileTypesAndContributionMap":{"docs":{"insertions":17,"deletions":11}}},{"hash":"d73491577039858c93774a124ef2be0533b6dbad","isMergeCommit":true,"messageTitle":"Merge pull request #16 from felixchanyy/branch-readme","messageBody":"Update README page","fileTypesAndContributionMap":{}}]},{"date":"2024-03-05","commitResults":[{"hash":"1ad435b1386fa665892fa770ed9207d884c6f925","isMergeCommit":true,"messageTitle":"Merge pull request #23 from redcolorbicycle/master","messageBody":"Update use case UC02: View All","fileTypesAndContributionMap":{}}]}],"lokidoki102":[{"date":"2024-03-04","commitResults":[{"hash":"e619f001b6abc4609e4ad77c553f802c6e7d06aa","isMergeCommit":false,"messageTitle":"Update EstateEase Developer Guide","messageBody":"Add use case (textual) for save to storage.\nUpdate delete contact use case to include use case number.\n","fileTypesAndContributionMap":{"docs":{"insertions":28,"deletions":2}}},{"hash":"3d096c0e453bb7ffdd1a615edff7e8a7e1cab953","isMergeCommit":true,"messageTitle":"Merge pull request #19 from lokidoki102/branch-update-developer-guide","messageBody":"Update EstateEase Developer Guide","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"redcolorbicycle":{"docs":16,"functional-code":0,"test-code":0},"zengzihui":{"docs":13,"functional-code":0,"test-code":0},"KhoonSun47":{"docs":84,"functional-code":0,"test-code":0},"felixchanyy":{"docs":54,"functional-code":0,"test-code":0},"lokidoki102":{"docs":28,"functional-code":0,"test-code":0}},"authorContributionVariance":{"redcolorbicycle":19.555555,"zengzihui":73.40972,"KhoonSun47":564.9723,"felixchanyy":670.9722,"lokidoki102":68.75},"authorDisplayNameMap":{"redcolorbicycle":"CS2103-F09-1 LIU ..YANG","zengzihui":"CS2103-F09-1 ZENG..IHUI","KhoonSun47":"CS2103-F09-1 YEK .. SUN","felixchanyy":"CS2103-F09-1 FELI..YUAN","lokidoki102":"CS2103-F09-1 LIM ..RATO"}} diff --git a/AY2324S2-CS2103-F09-2_tp_master/authorship.json b/AY2324S2-CS2103-F09-2_tp_master/authorship.json index 35e1d0c2..34b9a39e 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/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}}] diff --git a/AY2324S2-CS2103-F09-2_tp_master/commits.json b/AY2324S2-CS2103-F09-2_tp_master/commits.json index 04ee0124..28014da4 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":{}}]}]},"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":5,"functional-code":0,"test-code":0}},"authorContributionVariance":{"guohuang88":11.0,"SherisseTJW":0.0,"ZhiWei1010":11.0,"choowengyan":0.0,"NeoHW":30.555557},"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":{}}]}]},"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"}} diff --git a/AY2324S2-CS2103T-T09-4_tp_master/authorship.json b/AY2324S2-CS2103T-T09-4_tp_master/authorship.json index b0a5048c..f198157b 100644 --- a/AY2324S2-CS2103T-T09-4_tp_master/authorship.json +++ b/AY2324S2-CS2103T-T09-4_tp_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"[![CI Status](https://github.com/se-edu/addressbook-level3/workflows/Java%20CI/badge.svg)](https://github.com/se-edu/addressbook-level3/actions)","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":"[![codecov](https://codecov.io/gh/AY2324S2-CS2103T-T09-4/tp/graph/badge.svg?token\u003dWAIOG42WJK)](https://codecov.io/gh/AY2324S2-CS2103T-T09-4/tp)","lastModifiedDate":"2024-02-17"},{"lineNumber":3,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":4,"author":{"gitId":"Jajared"},"content":"# TA Helper","lastModifiedDate":"2024-02-25"},{"lineNumber":5,"author":{"gitId":"Jajared"},"content":"\u003e TA Helper is more than just a tool; it\u0027s your ultimate companion in navigating the complexities of teaching assistance in computer science modules. Embrace the simplicity and efficiency of managing your classes with TA Helper today!","lastModifiedDate":"2024-02-25"},{"lineNumber":6,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":7,"author":{"gitId":"Jajared"},"content":"TA Helper is a comprehensive tool designed to significantly ease the administrative and organizational challenges faced by Teaching Assistants (TAs) handling computer science modules. With its core focus on facilitating the management of student groups and enhancing the efficiency of classroom administration, TA Helper stands as an essential platform for TAs who are tasked with overseeing numerous classes and students.","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"![Ui](docs/images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":11,"author":{"gitId":"Jajared"},"content":"## User Profile","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"Jajared"},"content":"- **Target Users:** Teaching Assistants for Computer Science Modules","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"Jajared"},"content":"- **Key Challenges:**","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"Jajared"},"content":" - Managing multiple classes and a diverse student body.","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"Jajared"},"content":" - Forming student teams for projects or assignments while ensuring fairness.","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"Jajared"},"content":" - Keeping track of student details, progress, grades, and attendance across different modules.","lastModifiedDate":"2024-02-25"},{"lineNumber":18,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":19,"author":{"gitId":"Jajared"},"content":"## Problem Statement","lastModifiedDate":"2024-02-25"},{"lineNumber":20,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":21,"author":{"gitId":"Jajared"},"content":"Teaching Assistants often grapple with the complexities of generating and assigning students to teams within their classes. The situation is compounded when TAs manage multiple classes, necessitating a streamlined method to oversee various nominal rolls. A unified platform that provides a holistic view of all student information, across every class, is crucial for effective student management. Additionally, the random yet fair formation of student teams for assessments poses a significant challenge.","lastModifiedDate":"2024-02-25"},{"lineNumber":22,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":23,"author":{"gitId":"Jajared"},"content":"## Value Proposition","lastModifiedDate":"2024-02-25"},{"lineNumber":24,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":25,"author":{"gitId":"Jajared"},"content":"**TA Helper** offers a centralized and user-friendly solution for TAs to manage student information akin to a nominal roll. Its features are tailored to address the specific needs of TAs teaching computer science modules, including but not limited to:","lastModifiedDate":"2024-02-25"},{"lineNumber":26,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"Jajared"},"content":"- **Centralized Student Information:** Store and access contact details and other vital information of students enrolled in the modules you teach, all in one place.","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"Jajared"},"content":"- **Progress Tracking:** Monitor and record the progress of each student, including grades and attendance, ensuring a comprehensive overview of each individual\u0027s academic journey.","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"Jajared"},"content":"- **Multiple Tabs for Different Modules:** Seamlessly manage different groups of students across various modules you\u0027re teaching, with dedicated tabs for each class.","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"Jajared"},"content":"- **Random Team Generator:** Enhance fairness in assessments by utilizing the optional random team generator, which includes features for adding preferences to accommodate specific grouping needs.","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":32,"author":{"gitId":"Jajared"},"content":"## Scope","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"Jajared"},"content":"The primary scope of **TA Helper** includes:","lastModifiedDate":"2024-02-25"},{"lineNumber":35,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":36,"author":{"gitId":"Jajared"},"content":"- Managing contact details of students for each module taught by a TA.","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"Jajared"},"content":"- Additional functionalities to track student progress, input grades, and monitor attendance.","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"Jajared"},"content":"- Optional feature to generate random teams for projects or assignments, considering fairness and preferences.","lastModifiedDate":"2024-02-25"},{"lineNumber":39,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":40,"author":{"gitId":"Jajared"},"content":"## Getting Started","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"Jajared"},"content":"To get started with TA Helper, follow these simple steps: To be updated","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":44,"author":{"gitId":"Jajared"},"content":"## References","lastModifiedDate":"2024-02-25"},{"lineNumber":45,"author":{"gitId":"Jajared"},"content":"This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-02-25"}],"authorContributionMap":{"-":5,"Jajared":40}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"About Us\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"# About Us","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"-"},"content":"We are a team based in the [School of Computing, National University of Singapore](http://www.comp.nus.edu.sg).","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":10,"author":{"gitId":"-"},"content":"## Project team","lastModifiedDate":"2020-06-07"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"Jajared"},"content":"### Jared Wong","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":14,"author":{"gitId":"Jajared"},"content":"\u003cimg src\u003d\"images/jajared.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"Jajared"},"content":"[[homepage](https://jajared.vercel.app/)]","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"Jajared"},"content":"[[github](https://github.com/Jajared)]","lastModifiedDate":"2024-02-25"},{"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":"Jajared"},"content":"- Role: Team Lead","lastModifiedDate":"2024-03-05"},{"lineNumber":21,"author":{"gitId":"Jajared"},"content":"- Responsibilities: Overall project coordination and ensure the team is doing well.","lastModifiedDate":"2024-03-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":23,"author":{"gitId":"Jajared"},"content":"### Zack Tay","lastModifiedDate":"2024-02-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":25,"author":{"gitId":"Jajared"},"content":"\u003cimg src\u003d\"images/zack-tay.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":27,"author":{"gitId":"Zack-Tay"},"content":"[[github](http://github.com/Zack-Tay)]","lastModifiedDate":"2024-02-28"},{"lineNumber":28,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"Jajared"},"content":"- Role: Code quality","lastModifiedDate":"2024-03-05"},{"lineNumber":31,"author":{"gitId":"Jajared"},"content":"- Responsibilities: Looks after code quality, ensures adherence to coding standards, etc. Also in charge of reviewing PRs and testing of project code before upload","lastModifiedDate":"2024-03-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":33,"author":{"gitId":"Jajared"},"content":"### Tan Qin Xu","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":35,"author":{"gitId":"Jajared"},"content":"\u003cimg src\u003d\"images/qinxutan.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":37,"author":{"gitId":"qinxutan"},"content":"[[github](http://github.com/qinxutan)] [[portfolio](team/johndoe.md)]","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"Jajared"},"content":"- Role: Documentation","lastModifiedDate":"2024-03-05"},{"lineNumber":40,"author":{"gitId":"Jajared"},"content":"- Responsibilities: Responsible for the quality of various project documents, including README, User Guide and Developer Guide.","lastModifiedDate":"2024-03-05"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"Jajared"},"content":"### Whelan Low","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"whelan-low"},"content":"\u003cimg src\u003d\"images/whelan-low.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"whelan-low"},"content":"[[github](http://github.com/whelan-low)]","lastModifiedDate":"2024-02-25"},{"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":"Jajared"},"content":"- Role: Deliverables and deadlines","lastModifiedDate":"2024-03-05"},{"lineNumber":50,"author":{"gitId":"Jajared"},"content":"- Responsibilities: Ensure project deliverables are done on time and in the right format. In charge of submitting the deliverables","lastModifiedDate":"2024-03-05"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"Jajared"},"content":"### Mahadhir","lastModifiedDate":"2024-02-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"mahadhir247"},"content":"\u003cimg src\u003d\"images/mahadhir247.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-28"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":56,"author":{"gitId":"mahadhir247"},"content":"[[github](http://github.com/mahadhir247)]","lastModifiedDate":"2024-02-28"},{"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":"Jajared"},"content":"- Role: Code quality","lastModifiedDate":"2024-03-05"},{"lineNumber":60,"author":{"gitId":"Jajared"},"content":"- Responsibilities: Looks after code quality, ensures adherence to coding standards, etc. Also in charge of reviewing PRs and testing of project code before upload","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"qinxutan":1,"Zack-Tay":1,"-":34,"Jajared":20,"mahadhir247":2,"whelan-low":2}},{"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":"qinxutan"},"content":"* has a need to manage a significant number of students\u0027 contacts","lastModifiedDate":"2024-02-25"},{"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":"qinxutan"},"content":"**Value proposition**: manage students\u0027contacts faster than a typical mouse/GUI driven app","lastModifiedDate":"2024-02-25"},{"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":"qinxutan"},"content":"|----------|---------|--------------------------------------------------------------------------------|-------------------------------------------------------------------------|","lastModifiedDate":"2024-02-25"},{"lineNumber":292,"author":{"gitId":"qinxutan"},"content":"| `* * *` | TA | add new students to a class | maintain an up-to-date list of enrolled students. |","lastModifiedDate":"2024-03-05"},{"lineNumber":293,"author":{"gitId":"qinxutan"},"content":"| `* * *` | TA | add partial info of students | still add students even if I don’t have all their information. |","lastModifiedDate":"2024-03-05"},{"lineNumber":294,"author":{"gitId":"qinxutan"},"content":"| `* * *` | TA | delete a student from my class if they drop the module/class | keep my class list accurate and up-to-date. |","lastModifiedDate":"2024-03-05"},{"lineNumber":295,"author":{"gitId":"qinxutan"},"content":"| `* * ` | TA | search for my students based on their NUS ID, emails, names or tutorial groups | locate details of students without having to go through the entire list |","lastModifiedDate":"2024-02-25"},{"lineNumber":296,"author":{"gitId":"qinxutan"},"content":"| `* * *` | TA | view all students and their particulars | have a comprehensive overview of the enrolled students in my class. |","lastModifiedDate":"2024-03-05"},{"lineNumber":297,"author":{"gitId":"qinxutan"},"content":"| `* *` | TA | add/remove different modules I am teaching | manage my teaching assignments efficiently. |","lastModifiedDate":"2024-03-05"},{"lineNumber":298,"author":{"gitId":"qinxutan"},"content":"| `* * *` | TA | view all the tutorial classes and their information | visibility into the schedule and details of all tutorial classes. |","lastModifiedDate":"2024-03-05"},{"lineNumber":299,"author":{"gitId":"qinxutan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":300,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":301,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":302,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":303,"author":{"gitId":"-"},"content":"### Use cases","lastModifiedDate":"2020-06-07"},{"lineNumber":304,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":305,"author":{"gitId":"qinxutan"},"content":"(For all use cases below, the **System** is the `TA Helper` and the **Actor** is the `TA`, unless specified otherwise)","lastModifiedDate":"2024-02-25"},{"lineNumber":306,"author":{"gitId":"qinxutan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":307,"author":{"gitId":"qinxutan"},"content":"**Use case 1: Add new students**","lastModifiedDate":"2024-02-25"},{"lineNumber":308,"author":{"gitId":"qinxutan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":309,"author":{"gitId":"Zack-Tay"},"content":"**MSS:**","lastModifiedDate":"2024-03-04"},{"lineNumber":310,"author":{"gitId":"Zack-Tay"},"content":"1. TA specifies the student to be added.","lastModifiedDate":"2024-03-04"},{"lineNumber":311,"author":{"gitId":"Zack-Tay"},"content":"2. TAHelper adds the student to the TA\u0027s list of students.","lastModifiedDate":"2024-03-04"},{"lineNumber":312,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":313,"author":{"gitId":"Zack-Tay"},"content":"**Extensions:**","lastModifiedDate":"2024-03-04"},{"lineNumber":314,"author":{"gitId":"Zack-Tay"},"content":"- 1a: Student\u0027s name, email, id is not specified.","lastModifiedDate":"2024-03-04"},{"lineNumber":315,"author":{"gitId":"Zack-Tay"},"content":" - 1a1. Returns an error that tells the TA to specify the missing field.","lastModifiedDate":"2024-03-04"},{"lineNumber":316,"author":{"gitId":"Zack-Tay"},"content":" - Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":317,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":318,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":319,"author":{"gitId":"Zack-Tay"},"content":"- 1b: The current email or id already exists in the list.","lastModifiedDate":"2024-03-04"},{"lineNumber":320,"author":{"gitId":"Zack-Tay"},"content":" - 1b1. Returns an error indicating that there is an existing entry with the same value.","lastModifiedDate":"2024-03-04"},{"lineNumber":321,"author":{"gitId":"Zack-Tay"},"content":" - Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":322,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":323,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":324,"author":{"gitId":"Zack-Tay"},"content":"- 2a: Student\u0027s tutorial class is not specified.","lastModifiedDate":"2024-03-04"},{"lineNumber":325,"author":{"gitId":"Zack-Tay"},"content":" - 2a1. TAHelper adds this student into a list of all students the TA has.","lastModifiedDate":"2024-03-04"},{"lineNumber":326,"author":{"gitId":"Zack-Tay"},"content":" - 2a2. Student will not be placed under any tutorial group.","lastModifiedDate":"2024-03-04"},{"lineNumber":327,"author":{"gitId":"Zack-Tay"},"content":" - Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":328,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":329,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":330,"author":{"gitId":"Zack-Tay"},"content":"- 2b: The input command /add_student is wrongly specified.","lastModifiedDate":"2024-03-04"},{"lineNumber":331,"author":{"gitId":"Zack-Tay"},"content":" - 2b1. Return an error indicating command not recognised.","lastModifiedDate":"2024-03-04"},{"lineNumber":332,"author":{"gitId":"Zack-Tay"},"content":" - Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":333,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":334,"author":{"gitId":"qinxutan"},"content":"**Use case 2: Delete students**","lastModifiedDate":"2024-02-25"},{"lineNumber":335,"author":{"gitId":"qinxutan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":336,"author":{"gitId":"Zack-Tay"},"content":"**MSS:**","lastModifiedDate":"2024-03-04"},{"lineNumber":337,"author":{"gitId":"Zack-Tay"},"content":"1. TA specifies the student to be deleted, either by student_id or student_email.","lastModifiedDate":"2024-03-04"},{"lineNumber":338,"author":{"gitId":"Zack-Tay"},"content":"2. TAHelper deletes the student from the TA\u0027s list of students and tutorial group (if it is specified).","lastModifiedDate":"2024-03-04"},{"lineNumber":339,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":340,"author":{"gitId":"Zack-Tay"},"content":"**Extensions:**","lastModifiedDate":"2024-03-04"},{"lineNumber":341,"author":{"gitId":"Zack-Tay"},"content":"- 2a: The attribute value specified does not exist in the system.","lastModifiedDate":"2024-03-04"},{"lineNumber":342,"author":{"gitId":"Zack-Tay"},"content":" - 2a1: Returns an error indicating that the value does not exist.","lastModifiedDate":"2024-03-04"},{"lineNumber":343,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":344,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":345,"author":{"gitId":"Zack-Tay"},"content":"- 2b: The input command /delete_student is wrongly specified.","lastModifiedDate":"2024-03-04"},{"lineNumber":346,"author":{"gitId":"Zack-Tay"},"content":" - 2b1: Returns an error indicating command not recognised.","lastModifiedDate":"2024-03-04"},{"lineNumber":347,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":348,"author":{"gitId":"qinxutan"},"content":"**Use case 3: Search for students**","lastModifiedDate":"2024-02-25"},{"lineNumber":349,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":350,"author":{"gitId":"Zack-Tay"},"content":"**MSS:**","lastModifiedDate":"2024-03-04"},{"lineNumber":351,"author":{"gitId":"Zack-Tay"},"content":"1. TA specifies the student\u0027s attribute to search by.","lastModifiedDate":"2024-03-04"},{"lineNumber":352,"author":{"gitId":"Zack-Tay"},"content":"2. TA specifies the attribute value to search by.","lastModifiedDate":"2024-03-04"},{"lineNumber":353,"author":{"gitId":"Zack-Tay"},"content":"3. TAHelpers generate a list of matching entries according to attribute and attribute value.","lastModifiedDate":"2024-03-04"},{"lineNumber":354,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":355,"author":{"gitId":"Zack-Tay"},"content":"**Extensions:**","lastModifiedDate":"2024-03-04"},{"lineNumber":356,"author":{"gitId":"Zack-Tay"},"content":"- 1a/2a: The attribute or attribute value is not specified.","lastModifiedDate":"2024-03-04"},{"lineNumber":357,"author":{"gitId":"Zack-Tay"},"content":" - 1a1/2a1. Returns an error that tells the TA to specify the missing field.","lastModifiedDate":"2024-03-04"},{"lineNumber":358,"author":{"gitId":"Zack-Tay"},"content":" - Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":359,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":360,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":361,"author":{"gitId":"Zack-Tay"},"content":"- 3a: Partial match","lastModifiedDate":"2024-03-04"},{"lineNumber":362,"author":{"gitId":"Zack-Tay"},"content":" - 3a1. will be processed accordingly","lastModifiedDate":"2024-03-04"},{"lineNumber":363,"author":{"gitId":"Zack-Tay"},"content":" - 3a2. TAHelper will display all matching results for that attribute value.","lastModifiedDate":"2024-03-04"},{"lineNumber":364,"author":{"gitId":"Zack-Tay"},"content":" - Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":365,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":366,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":367,"author":{"gitId":"Zack-Tay"},"content":"- 3b: The input command /search_student is wrongly specified.","lastModifiedDate":"2024-03-04"},{"lineNumber":368,"author":{"gitId":"Zack-Tay"},"content":" - 3b1. Return an error indicating command not recognised.","lastModifiedDate":"2024-03-04"},{"lineNumber":369,"author":{"gitId":"Zack-Tay"},"content":" - Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":370,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":371,"author":{"gitId":"qinxutan"},"content":"**Use case 4: View all students**","lastModifiedDate":"2024-02-25"},{"lineNumber":372,"author":{"gitId":"qinxutan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":373,"author":{"gitId":"Zack-Tay"},"content":"**MSS:**","lastModifiedDate":"2024-03-04"},{"lineNumber":374,"author":{"gitId":"Zack-Tay"},"content":"1. TA specifies the command /list_students and enters.","lastModifiedDate":"2024-03-04"},{"lineNumber":375,"author":{"gitId":"Zack-Tay"},"content":"2. TAHelper displays student\u0027s name, email, student id and tutorial class for each student.","lastModifiedDate":"2024-03-04"},{"lineNumber":376,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":377,"author":{"gitId":"Zack-Tay"},"content":"**Extensions:**","lastModifiedDate":"2024-03-04"},{"lineNumber":378,"author":{"gitId":"Zack-Tay"},"content":"- 1a: The input command /list_student is wrongly specified.","lastModifiedDate":"2024-03-04"},{"lineNumber":379,"author":{"gitId":"Zack-Tay"},"content":" - 1a1. Returns an error indicating command not recognised.","lastModifiedDate":"2024-03-04"},{"lineNumber":380,"author":{"gitId":"Zack-Tay"},"content":" - Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":381,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":382,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":383,"author":{"gitId":"Zack-Tay"},"content":"- 2a: Additional arguments is specified after the command.","lastModifiedDate":"2024-03-04"},{"lineNumber":384,"author":{"gitId":"Zack-Tay"},"content":" - 2a1: TAHelper will ignore those arguments and execute /list_students as usual.","lastModifiedDate":"2024-03-04"},{"lineNumber":385,"author":{"gitId":"Zack-Tay"},"content":" - Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":386,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":387,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":388,"author":{"gitId":"qinxutan"},"content":"**Use case 5: Add new tutorial class**","lastModifiedDate":"2024-02-25"},{"lineNumber":389,"author":{"gitId":"qinxutan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":390,"author":{"gitId":"whelan-low"},"content":"**MSS:**","lastModifiedDate":"2024-02-29"},{"lineNumber":391,"author":{"gitId":"Zack-Tay"},"content":"1. TA specifies the tutorial class to be added","lastModifiedDate":"2024-03-04"},{"lineNumber":392,"author":{"gitId":"whelan-low"},"content":"2. TAHelper adds the tutorial class","lastModifiedDate":"2024-02-29"},{"lineNumber":393,"author":{"gitId":"whelan-low"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":394,"author":{"gitId":"whelan-low"},"content":"**Extensions:**","lastModifiedDate":"2024-02-29"},{"lineNumber":395,"author":{"gitId":"whelan-low"},"content":"- 2a: The tutorial class is not specified.","lastModifiedDate":"2024-02-29"},{"lineNumber":396,"author":{"gitId":"Zack-Tay"},"content":" - 2a1: Returns an error indicating that user has to specify tutorial class.","lastModifiedDate":"2024-03-04"},{"lineNumber":397,"author":{"gitId":"whelan-low"},"content":" - Use case ends","lastModifiedDate":"2024-02-29"},{"lineNumber":398,"author":{"gitId":"whelan-low"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":399,"author":{"gitId":"qinxutan"},"content":"**Use case 6: Delete tutorial class**","lastModifiedDate":"2024-02-25"},{"lineNumber":400,"author":{"gitId":"qinxutan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":401,"author":{"gitId":"whelan-low"},"content":"**MSS:**","lastModifiedDate":"2024-02-29"},{"lineNumber":402,"author":{"gitId":"whelan-low"},"content":"1. User specifies the tutorial class to be deleted","lastModifiedDate":"2024-02-29"},{"lineNumber":403,"author":{"gitId":"whelan-low"},"content":"2. TAHelper deletes the tutorial class","lastModifiedDate":"2024-02-29"},{"lineNumber":404,"author":{"gitId":"whelan-low"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":405,"author":{"gitId":"whelan-low"},"content":"**Extensions:**","lastModifiedDate":"2024-02-29"},{"lineNumber":406,"author":{"gitId":"whelan-low"},"content":"- 2a: The tutorial class is not specified.","lastModifiedDate":"2024-02-29"},{"lineNumber":407,"author":{"gitId":"whelan-low"},"content":" - Returns an error. Use case ends.","lastModifiedDate":"2024-02-29"},{"lineNumber":408,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":409,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":410,"author":{"gitId":"whelan-low"},"content":"- 3a: The tutorial class does not exist.","lastModifiedDate":"2024-02-29"},{"lineNumber":411,"author":{"gitId":"whelan-low"},"content":" - Returns an error, and shows the list of tutorial classes available for that module. Use case ends.","lastModifiedDate":"2024-02-29"},{"lineNumber":412,"author":{"gitId":"whelan-low"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":413,"author":{"gitId":"qinxutan"},"content":"**Use case 7: View all classes**","lastModifiedDate":"2024-02-25"},{"lineNumber":414,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":415,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2020-05-23"},{"lineNumber":416,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":417,"author":{"gitId":"qinxutan"},"content":"1. TA requests to list classes","lastModifiedDate":"2024-02-25"},{"lineNumber":418,"author":{"gitId":"qinxutan"},"content":"2. AddressBook shows a list of all available classes","lastModifiedDate":"2024-02-25"},{"lineNumber":419,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":420,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":421,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":422,"author":{"gitId":"-"},"content":"**Extensions**","lastModifiedDate":"2020-05-23"},{"lineNumber":423,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":424,"author":{"gitId":"-"},"content":"* 2a. The list is empty.","lastModifiedDate":"2020-05-23"},{"lineNumber":425,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":426,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":427,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":428,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":429,"author":{"gitId":"qinxutan"},"content":"* *a. The input format is invalid.","lastModifiedDate":"2024-02-25"},{"lineNumber":430,"author":{"gitId":"qinxutan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":431,"author":{"gitId":"qinxutan"},"content":" * *a1. AddressBook shows an error message.","lastModifiedDate":"2024-02-25"},{"lineNumber":432,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":433,"author":{"gitId":"qinxutan"},"content":" Use case resumes at next step.","lastModifiedDate":"2024-02-25"},{"lineNumber":434,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":435,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":436,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":437,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":438,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":439,"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":440,"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":441,"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":442,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":443,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":444,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":445,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":446,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":447,"author":{"gitId":"-"},"content":"* **Mainstream OS**: Windows, Linux, Unix, MacOS","lastModifiedDate":"2024-02-09"},{"lineNumber":448,"author":{"gitId":"-"},"content":"* **Private contact detail**: A contact detail that is not meant to be shared with others","lastModifiedDate":"2020-05-23"},{"lineNumber":449,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":450,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":451,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":452,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":453,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":454,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":455,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":456,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":457,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":458,"author":{"gitId":"-"},"content":"**Note:** These instructions only provide a starting point for testers to work on;","lastModifiedDate":"2023-09-12"},{"lineNumber":459,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":460,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":461,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":462,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":463,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":464,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":465,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":466,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":467,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":468,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":469,"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":470,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":471,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":472,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":473,"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":474,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":475,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":476,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","lastModifiedDate":"2020-05-23"},{"lineNumber":477,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":478,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":479,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":480,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":481,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":482,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":483,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":484,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":485,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":486,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":487,"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":488,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":489,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":490,"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":491,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":492,"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":493,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":494,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":495,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":496,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":497,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":498,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":499,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":500,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":501,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":502,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":503,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"qinxutan":31,"Zack-Tay":76,"-":379,"whelan-low":17}},{"path":"docs/UserGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"User Guide\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":" pageNav: 3","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":7,"author":{"gitId":"-"},"content":"# AB-3 User Guide","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"AddressBook Level 3 (AB3) is a **desktop app for managing contacts, optimized for use via a Line Interface** (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast, AB3 can get your contact management tasks done faster than traditional GUI apps.","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":"\u003c!-- * Table of Contents --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003cpage-nav-print /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":14,"author":{"gitId":"Jajared"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"-"},"content":"## Quick start","lastModifiedDate":"2020-05-23"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"1. Ensure you have Java `11` or above installed in your Computer.","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"-"},"content":"1. Download the latest `addressbook.jar` from [here](https://github.com/se-edu/addressbook-level3/releases).","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"1. Copy the file to the folder you want to use as the _home folder_ for your AddressBook.","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"-"},"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":25,"author":{"gitId":"-"},"content":" A GUI similar to the below should appear in a few seconds. Note how the app contains some sample data.\u003cbr\u003e","lastModifiedDate":"2023-01-01"},{"lineNumber":26,"author":{"gitId":"-"},"content":" ![Ui](images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":"1. Type the command in the command box and press Enter to execute it. e.g. typing **`help`** and pressing Enter will open the help window.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":29,"author":{"gitId":"-"},"content":" Some example commands you can try:","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"Jajared"},"content":" - `list` : Lists all contacts.","lastModifiedDate":"2024-03-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":33,"author":{"gitId":"Jajared"},"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":"2024-03-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":35,"author":{"gitId":"Jajared"},"content":" - `delete 3` : Deletes the 3rd contact shown in the current list.","lastModifiedDate":"2024-03-05"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":37,"author":{"gitId":"Jajared"},"content":" - `clear` : Deletes all contacts.","lastModifiedDate":"2024-03-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"Jajared"},"content":" - `exit` : Exits the app.","lastModifiedDate":"2024-03-05"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":41,"author":{"gitId":"-"},"content":"1. Refer to the [Features](#features) below for details of each command.","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"Jajared"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":"## Features","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"-"},"content":"**Notes about the command format:**\u003cbr\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"Jajared"},"content":"- Words in `UPPER_CASE` are the parameters to be supplied by the user.\u003cbr\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":52,"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":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"Jajared"},"content":"- Items in square brackets are optional.\u003cbr\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":55,"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":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":57,"author":{"gitId":"Jajared"},"content":"- Items with `…`​ after them can be used multiple times including zero times.\u003cbr\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":58,"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":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":60,"author":{"gitId":"Jajared"},"content":"- Parameters can be in any order.\u003cbr\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":61,"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":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":63,"author":{"gitId":"Jajared"},"content":"- Extraneous parameters for commands that do not take in parameters (such as `help`, `list`, `exit` and `clear`) will be ignored.\u003cbr\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":64,"author":{"gitId":"-"},"content":" e.g. if the command specifies `help 123`, it will be interpreted as `help`.","lastModifiedDate":"2021-02-03"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-02-03"},{"lineNumber":66,"author":{"gitId":"Jajared"},"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":"2024-03-05"},{"lineNumber":67,"author":{"gitId":"-"},"content":" \u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":69,"author":{"gitId":"qinxutan"},"content":"### Adding new students : `add`","lastModifiedDate":"2024-02-25"},{"lineNumber":70,"author":{"gitId":"qinxutan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":71,"author":{"gitId":"Jajared"},"content":"### Deleting students : `delete_student`","lastModifiedDate":"2024-03-05"},{"lineNumber":72,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":73,"author":{"gitId":"Jajared"},"content":"Delete a student contact based on the parameter specified by the user.","lastModifiedDate":"2024-03-05"},{"lineNumber":74,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":75,"author":{"gitId":"Jajared"},"content":"Format: `/delete_student id/STUDENT_ID email/EMAIL`","lastModifiedDate":"2024-03-05"},{"lineNumber":76,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":77,"author":{"gitId":"Jajared"},"content":"- The following parameters to delete a student contact are supported:","lastModifiedDate":"2024-03-05"},{"lineNumber":78,"author":{"gitId":"Jajared"},"content":" 1. Student ID","lastModifiedDate":"2024-03-05"},{"lineNumber":79,"author":{"gitId":"Jajared"},"content":" 2. Email","lastModifiedDate":"2024-03-05"},{"lineNumber":80,"author":{"gitId":"Jajared"},"content":"- Leading/trailing spaces are removed","lastModifiedDate":"2024-03-05"},{"lineNumber":81,"author":{"gitId":"Jajared"},"content":"- The parameter is case insensitive","lastModifiedDate":"2024-03-05"},{"lineNumber":82,"author":{"gitId":"Jajared"},"content":"- If none of the paremeters or an invalid parameter is specified, the command will return an error message indicating that a valid parameter must be provided.","lastModifiedDate":"2024-03-05"},{"lineNumber":83,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":84,"author":{"gitId":"Jajared"},"content":"Expected output:","lastModifiedDate":"2024-03-05"},{"lineNumber":85,"author":{"gitId":"Jajared"},"content":"Upon successful deletion, the command will return a confirmation messaging stating that the specified student contact has been removed.","lastModifiedDate":"2024-03-05"},{"lineNumber":86,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":87,"author":{"gitId":"Jajared"},"content":"Examples:","lastModifiedDate":"2024-03-05"},{"lineNumber":88,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":89,"author":{"gitId":"Jajared"},"content":"- Delete by student ID: `/delete_student id/A01234567X`","lastModifiedDate":"2024-03-05"},{"lineNumber":90,"author":{"gitId":"Jajared"},"content":"- Delete by email: `/delete_student email/e0123456@u.nus.edu`","lastModifiedDate":"2024-03-05"},{"lineNumber":91,"author":{"gitId":"qinxutan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":92,"author":{"gitId":"qinxutan"},"content":"### Searching for students : `search`","lastModifiedDate":"2024-02-25"},{"lineNumber":93,"author":{"gitId":"qinxutan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":94,"author":{"gitId":"Jajared"},"content":"### Listing all students : `list_student`","lastModifiedDate":"2024-03-05"},{"lineNumber":95,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":96,"author":{"gitId":"Jajared"},"content":"View the list of all students available","lastModifiedDate":"2024-03-05"},{"lineNumber":97,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":98,"author":{"gitId":"Jajared"},"content":"Format: `/list_student`","lastModifiedDate":"2024-03-05"},{"lineNumber":99,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":100,"author":{"gitId":"Jajared"},"content":"Expected output:","lastModifiedDate":"2024-03-05"},{"lineNumber":101,"author":{"gitId":"Jajared"},"content":"The command will display the list of all students along with their student information. If there are no existing students, the command will return a message indicating that there are no students currently.","lastModifiedDate":"2024-03-05"},{"lineNumber":102,"author":{"gitId":"qinxutan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":103,"author":{"gitId":"whelan-low"},"content":"### Adding new tutorial class : `add_class`","lastModifiedDate":"2024-02-29"},{"lineNumber":104,"author":{"gitId":"qinxutan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":105,"author":{"gitId":"whelan-low"},"content":"Adds a tutorial class with the specified module code and name.","lastModifiedDate":"2024-02-29"},{"lineNumber":106,"author":{"gitId":"qinxutan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":107,"author":{"gitId":"whelan-low"},"content":"Format: `/add_class MODULE_CODE TUTORIAL_CLASS`","lastModifiedDate":"2024-02-29"},{"lineNumber":108,"author":{"gitId":"whelan-low"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":109,"author":{"gitId":"whelan-low"},"content":"- If none of the parameters is specified, or if only one is specified, returns an error.","lastModifiedDate":"2024-02-29"},{"lineNumber":110,"author":{"gitId":"whelan-low"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":111,"author":{"gitId":"whelan-low"},"content":"Examples:","lastModifiedDate":"2024-02-29"},{"lineNumber":112,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":113,"author":{"gitId":"whelan-low"},"content":"- `/add_class CS2103T T10`","lastModifiedDate":"2024-02-29"},{"lineNumber":114,"author":{"gitId":"whelan-low"},"content":"- `/add_class CS2109S T01`","lastModifiedDate":"2024-02-29"},{"lineNumber":115,"author":{"gitId":"whelan-low"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":116,"author":{"gitId":"whelan-low"},"content":"### Deleting tutorial class : `delete_class`","lastModifiedDate":"2024-02-29"},{"lineNumber":117,"author":{"gitId":"whelan-low"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":118,"author":{"gitId":"whelan-low"},"content":"Deletes a specified tutorial class from the list of classes.","lastModifiedDate":"2024-02-29"},{"lineNumber":119,"author":{"gitId":"whelan-low"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":120,"author":{"gitId":"whelan-low"},"content":"Format: `/delete_class MODULE_CODE TUTORIAL_CLASS`","lastModifiedDate":"2024-02-29"},{"lineNumber":121,"author":{"gitId":"whelan-low"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":122,"author":{"gitId":"whelan-low"},"content":"- If the module code does not exist, it returns an error.","lastModifiedDate":"2024-02-29"},{"lineNumber":123,"author":{"gitId":"whelan-low"},"content":"- If the tutorial class within that module code does not exist, it returns an error and the list of tutorial classes in that module code.","lastModifiedDate":"2024-02-29"},{"lineNumber":124,"author":{"gitId":"whelan-low"},"content":"- If no parameters are specified, returns an error","lastModifiedDate":"2024-02-29"},{"lineNumber":125,"author":{"gitId":"whelan-low"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":126,"author":{"gitId":"whelan-low"},"content":"Examples:","lastModifiedDate":"2024-02-29"},{"lineNumber":127,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":128,"author":{"gitId":"whelan-low"},"content":"- `/delete_class CS2103T T10`","lastModifiedDate":"2024-02-29"},{"lineNumber":129,"author":{"gitId":"whelan-low"},"content":"- `/delete_class CS2109S T01`","lastModifiedDate":"2024-02-29"},{"lineNumber":130,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":131,"author":{"gitId":"qinxutan"},"content":"### Listing all classes: `list`","lastModifiedDate":"2024-02-25"},{"lineNumber":132,"author":{"gitId":"qinxutan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":133,"author":{"gitId":"qinxutan"},"content":"Shows a list of all persons in the address book.","lastModifiedDate":"2024-02-25"},{"lineNumber":134,"author":{"gitId":"qinxutan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":135,"author":{"gitId":"qinxutan"},"content":"Format: `list_class`","lastModifiedDate":"2024-02-25"},{"lineNumber":136,"author":{"gitId":"qinxutan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":137,"author":{"gitId":"qinxutan"},"content":"**BELOW ARE JUST FORMATS FROM ORIGINAL AD3.","lastModifiedDate":"2024-02-25"},{"lineNumber":138,"author":{"gitId":"qinxutan"},"content":"DELETE AFT LAST PERSON IS DONE WITH FEATURES.**","lastModifiedDate":"2024-02-25"},{"lineNumber":139,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":140,"author":{"gitId":"-"},"content":"### Viewing help : `help`","lastModifiedDate":"2020-05-23"},{"lineNumber":141,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":142,"author":{"gitId":"-"},"content":"Shows a message explaning how to access the help page.","lastModifiedDate":"2020-05-23"},{"lineNumber":143,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":144,"author":{"gitId":"-"},"content":"![help message](images/helpMessage.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":145,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":146,"author":{"gitId":"-"},"content":"Format: `help`","lastModifiedDate":"2020-05-23"},{"lineNumber":147,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":148,"author":{"gitId":"-"},"content":"### Adding a person: `add`","lastModifiedDate":"2020-05-23"},{"lineNumber":149,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":150,"author":{"gitId":"-"},"content":"Adds a person to the address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":151,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":152,"author":{"gitId":"-"},"content":"Format: `add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]…​`","lastModifiedDate":"2020-05-23"},{"lineNumber":153,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":154,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":155,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":156,"author":{"gitId":"-"},"content":"**Tip:** A person can have any number of tags (including 0)","lastModifiedDate":"2023-09-12"},{"lineNumber":157,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":158,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":159,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":160,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":161,"author":{"gitId":"Jajared"},"content":"- `add n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01`","lastModifiedDate":"2024-03-05"},{"lineNumber":162,"author":{"gitId":"Jajared"},"content":"- `add n/Betsy Crowe t/friend e/betsycrowe@example.com a/Newgate Prison p/1234567 t/criminal`","lastModifiedDate":"2024-03-05"},{"lineNumber":163,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":164,"author":{"gitId":"-"},"content":"### Editing a person : `edit`","lastModifiedDate":"2020-05-23"},{"lineNumber":165,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":166,"author":{"gitId":"-"},"content":"Edits an existing person in the address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":167,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":168,"author":{"gitId":"-"},"content":"Format: `edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [t/TAG]…​`","lastModifiedDate":"2020-05-23"},{"lineNumber":169,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":170,"author":{"gitId":"Jajared"},"content":"- Edits the person at the specified `INDEX`. The index refers to the index number shown in the displayed person list. The index **must be a positive integer** 1, 2, 3, …​","lastModifiedDate":"2024-03-05"},{"lineNumber":171,"author":{"gitId":"Jajared"},"content":"- At least one of the optional fields must be provided.","lastModifiedDate":"2024-03-05"},{"lineNumber":172,"author":{"gitId":"Jajared"},"content":"- Existing values will be updated to the input values.","lastModifiedDate":"2024-03-05"},{"lineNumber":173,"author":{"gitId":"Jajared"},"content":"- When editing tags, the existing tags of the person will be removed i.e adding of tags is not cumulative.","lastModifiedDate":"2024-03-05"},{"lineNumber":174,"author":{"gitId":"Jajared"},"content":"- You can remove all the person’s tags by typing `t/` without","lastModifiedDate":"2024-03-05"},{"lineNumber":175,"author":{"gitId":"-"},"content":" specifying any tags after it.","lastModifiedDate":"2020-05-23"},{"lineNumber":176,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":177,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":178,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":179,"author":{"gitId":"Jajared"},"content":"- `edit 1 p/91234567 e/johndoe@example.com` Edits the phone number and email address of the 1st person to be `91234567` and `johndoe@example.com` respectively.","lastModifiedDate":"2024-03-05"},{"lineNumber":180,"author":{"gitId":"Jajared"},"content":"- `edit 2 n/Betsy Crower t/` Edits the name of the 2nd person to be `Betsy Crower` and clears all existing tags.","lastModifiedDate":"2024-03-05"},{"lineNumber":181,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":182,"author":{"gitId":"-"},"content":"### Locating persons by name: `find`","lastModifiedDate":"2020-05-23"},{"lineNumber":183,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":184,"author":{"gitId":"-"},"content":"Finds persons whose names contain any of the given keywords.","lastModifiedDate":"2020-05-23"},{"lineNumber":185,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":186,"author":{"gitId":"-"},"content":"Format: `find KEYWORD [MORE_KEYWORDS]`","lastModifiedDate":"2020-05-23"},{"lineNumber":187,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":188,"author":{"gitId":"Jajared"},"content":"- The search is case-insensitive. e.g `hans` will match `Hans`","lastModifiedDate":"2024-03-05"},{"lineNumber":189,"author":{"gitId":"Jajared"},"content":"- The order of the keywords does not matter. e.g. `Hans Bo` will match `Bo Hans`","lastModifiedDate":"2024-03-05"},{"lineNumber":190,"author":{"gitId":"Jajared"},"content":"- Only the name is searched.","lastModifiedDate":"2024-03-05"},{"lineNumber":191,"author":{"gitId":"Jajared"},"content":"- Only full words will be matched e.g. `Han` will not match `Hans`","lastModifiedDate":"2024-03-05"},{"lineNumber":192,"author":{"gitId":"Jajared"},"content":"- Persons matching at least one keyword will be returned (i.e. `OR` search).","lastModifiedDate":"2024-03-05"},{"lineNumber":193,"author":{"gitId":"-"},"content":" e.g. `Hans Bo` will return `Hans Gruber`, `Bo Yang`","lastModifiedDate":"2020-05-23"},{"lineNumber":194,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":195,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":196,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":197,"author":{"gitId":"Jajared"},"content":"- `find John` returns `john` and `John Doe`","lastModifiedDate":"2024-03-05"},{"lineNumber":198,"author":{"gitId":"Jajared"},"content":"- `find alex david` returns `Alex Yeoh`, `David Li`\u003cbr\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":199,"author":{"gitId":"-"},"content":" ![result for \u0027find alex david\u0027](images/findAlexDavidResult.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":200,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":201,"author":{"gitId":"-"},"content":"### Deleting a person : `delete`","lastModifiedDate":"2020-05-23"},{"lineNumber":202,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":203,"author":{"gitId":"-"},"content":"Deletes the specified person from the address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":204,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":205,"author":{"gitId":"-"},"content":"Format: `delete INDEX`","lastModifiedDate":"2020-05-23"},{"lineNumber":206,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":207,"author":{"gitId":"Jajared"},"content":"- Deletes the person at the specified `INDEX`.","lastModifiedDate":"2024-03-05"},{"lineNumber":208,"author":{"gitId":"Jajared"},"content":"- The index refers to the index number shown in the displayed person list.","lastModifiedDate":"2024-03-05"},{"lineNumber":209,"author":{"gitId":"Jajared"},"content":"- The index **must be a positive integer** 1, 2, 3, …​","lastModifiedDate":"2024-03-05"},{"lineNumber":210,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":211,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":212,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":213,"author":{"gitId":"Jajared"},"content":"- `list` followed by `delete 2` deletes the 2nd person in the address book.","lastModifiedDate":"2024-03-05"},{"lineNumber":214,"author":{"gitId":"Jajared"},"content":"- `find Betsy` followed by `delete 1` deletes the 1st person in the results of the `find` command.","lastModifiedDate":"2024-03-05"},{"lineNumber":215,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":216,"author":{"gitId":"-"},"content":"### Clearing all entries : `clear`","lastModifiedDate":"2020-05-23"},{"lineNumber":217,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":218,"author":{"gitId":"-"},"content":"Clears all entries from the address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":219,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":220,"author":{"gitId":"-"},"content":"Format: `clear`","lastModifiedDate":"2020-05-23"},{"lineNumber":221,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":222,"author":{"gitId":"-"},"content":"### Exiting the program : `exit`","lastModifiedDate":"2020-05-23"},{"lineNumber":223,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":224,"author":{"gitId":"-"},"content":"Exits the program.","lastModifiedDate":"2020-05-23"},{"lineNumber":225,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":226,"author":{"gitId":"-"},"content":"Format: `exit`","lastModifiedDate":"2020-05-23"},{"lineNumber":227,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":228,"author":{"gitId":"qinxutan"},"content":"### Viewing all classes","lastModifiedDate":"2024-02-25"},{"lineNumber":229,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":230,"author":{"gitId":"qinxutan"},"content":"Shows all tutorial classes available.","lastModifiedDate":"2024-02-25"},{"lineNumber":231,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":232,"author":{"gitId":"qinxutan"},"content":"Format: `list`","lastModifiedDate":"2024-02-25"},{"lineNumber":233,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":234,"author":{"gitId":"Jajared"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":235,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":236,"author":{"gitId":"-"},"content":"## FAQ","lastModifiedDate":"2020-05-23"},{"lineNumber":237,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":238,"author":{"gitId":"-"},"content":"**Q**: How do I transfer my data to another Computer?\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":239,"author":{"gitId":"-"},"content":"**A**: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous AddressBook home folder.","lastModifiedDate":"2020-05-23"},{"lineNumber":240,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":241,"author":{"gitId":"Jajared"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":242,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":243,"author":{"gitId":"-"},"content":"## Known issues","lastModifiedDate":"2023-09-08"},{"lineNumber":244,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":245,"author":{"gitId":"-"},"content":"1. **When using multiple screens**, if you move the application to a secondary screen, and later switch to using only the primary screen, the GUI will open off-screen. The remedy is to delete the `preferences.json` file created by the application before running the application again.","lastModifiedDate":"2023-09-08"},{"lineNumber":246,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":247,"author":{"gitId":"Jajared"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":248,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":249,"author":{"gitId":"-"},"content":"## Command summary","lastModifiedDate":"2020-05-23"},{"lineNumber":250,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":251,"author":{"gitId":"Jajared"},"content":"| Action | Format, Examples |","lastModifiedDate":"2024-03-05"},{"lineNumber":252,"author":{"gitId":"Jajared"},"content":"| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |","lastModifiedDate":"2024-03-05"},{"lineNumber":253,"author":{"gitId":"Jajared"},"content":"| **Add New Students** | `add_student /name \u003cstudent_name\u003e /email \u003cstudent_email\u003e /id \u003cstudent_id\u003e /tc \u003ctutorial_class\u003e` \u003cbr\u003e e.g., `add_student /name Dohn Joe /email johndoe@gmail.com /id A0123456A /tc CS2103T T09` |","lastModifiedDate":"2024-03-05"},{"lineNumber":254,"author":{"gitId":"Jajared"},"content":"| **Delete students** | `delete_student \u003c/id, /email\u003e \u003cid or email\u003e`\u003cbr\u003e e.g., `delete_student /id A0259209B` or `/delete_student email johndoe@gmail.com` |","lastModifiedDate":"2024-03-05"},{"lineNumber":255,"author":{"gitId":"Jajared"},"content":"| **Search for students** | `search_student \u003c/id, /email, /tc, /name\u003e \u003csearch_query\u003e`\u003cbr\u003e e.g.,`search_student /id A0123456A` |","lastModifiedDate":"2024-03-05"},{"lineNumber":256,"author":{"gitId":"Jajared"},"content":"| **View all students** | `list_student` |","lastModifiedDate":"2024-03-05"},{"lineNumber":257,"author":{"gitId":"Jajared"},"content":"| **Add new tutorial class** | `add_class \u003cmodule_code\u003e \u003ctutorial_class\u003e` \u003cbr\u003e e.g., `add_class CS2103T T09` |","lastModifiedDate":"2024-03-05"},{"lineNumber":258,"author":{"gitId":"Jajared"},"content":"| **Delete tutorial class** | `delete_class \u003cmodule_code\u003e \u003ctutorial_class\u003e` \u003cbr\u003e e.g., `delete_class CS2103T T09` |","lastModifiedDate":"2024-03-05"},{"lineNumber":259,"author":{"gitId":"Jajared"},"content":"| **View all classes** | `list_class` |","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"qinxutan":19,"-":137,"Jajared":80,"whelan-low":23}}] +[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"[![CI Status](https://github.com/se-edu/addressbook-level3/workflows/Java%20CI/badge.svg)](https://github.com/se-edu/addressbook-level3/actions)","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":"[![codecov](https://codecov.io/gh/AY2324S2-CS2103T-T09-4/tp/graph/badge.svg?token\u003dWAIOG42WJK)](https://codecov.io/gh/AY2324S2-CS2103T-T09-4/tp)","lastModifiedDate":"2024-02-17"},{"lineNumber":3,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":4,"author":{"gitId":"Jajared"},"content":"# TA Helper","lastModifiedDate":"2024-02-25"},{"lineNumber":5,"author":{"gitId":"Jajared"},"content":"\u003e TA Helper is more than just a tool; it\u0027s your ultimate companion in navigating the complexities of teaching assistance in computer science modules. Embrace the simplicity and efficiency of managing your classes with TA Helper today!","lastModifiedDate":"2024-02-25"},{"lineNumber":6,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":7,"author":{"gitId":"Jajared"},"content":"TA Helper is a comprehensive tool designed to significantly ease the administrative and organizational challenges faced by Teaching Assistants (TAs) handling computer science modules. With its core focus on facilitating the management of student groups and enhancing the efficiency of classroom administration, TA Helper stands as an essential platform for TAs who are tasked with overseeing numerous classes and students.","lastModifiedDate":"2024-02-25"},{"lineNumber":8,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"![Ui](docs/images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":11,"author":{"gitId":"Jajared"},"content":"## User Profile","lastModifiedDate":"2024-02-25"},{"lineNumber":12,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"Jajared"},"content":"- **Target Users:** Teaching Assistants for Computer Science Modules","lastModifiedDate":"2024-02-25"},{"lineNumber":14,"author":{"gitId":"Jajared"},"content":"- **Key Challenges:**","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"Jajared"},"content":" - Managing multiple classes and a diverse student body.","lastModifiedDate":"2024-02-25"},{"lineNumber":16,"author":{"gitId":"Jajared"},"content":" - Forming student teams for projects or assignments while ensuring fairness.","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"Jajared"},"content":" - Keeping track of student details, progress, grades, and attendance across different modules.","lastModifiedDate":"2024-02-25"},{"lineNumber":18,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":19,"author":{"gitId":"Jajared"},"content":"## Problem Statement","lastModifiedDate":"2024-02-25"},{"lineNumber":20,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":21,"author":{"gitId":"Jajared"},"content":"Teaching Assistants often grapple with the complexities of generating and assigning students to teams within their classes. The situation is compounded when TAs manage multiple classes, necessitating a streamlined method to oversee various nominal rolls. A unified platform that provides a holistic view of all student information, across every class, is crucial for effective student management. Additionally, the random yet fair formation of student teams for assessments poses a significant challenge.","lastModifiedDate":"2024-02-25"},{"lineNumber":22,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":23,"author":{"gitId":"Jajared"},"content":"## Value Proposition","lastModifiedDate":"2024-02-25"},{"lineNumber":24,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":25,"author":{"gitId":"Jajared"},"content":"**TA Helper** offers a centralized and user-friendly solution for TAs to manage student information akin to a nominal roll. Its features are tailored to address the specific needs of TAs teaching computer science modules, including but not limited to:","lastModifiedDate":"2024-02-25"},{"lineNumber":26,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":27,"author":{"gitId":"Jajared"},"content":"- **Centralized Student Information:** Store and access contact details and other vital information of students enrolled in the modules you teach, all in one place.","lastModifiedDate":"2024-02-25"},{"lineNumber":28,"author":{"gitId":"Jajared"},"content":"- **Progress Tracking:** Monitor and record the progress of each student, including grades and attendance, ensuring a comprehensive overview of each individual\u0027s academic journey.","lastModifiedDate":"2024-02-25"},{"lineNumber":29,"author":{"gitId":"Jajared"},"content":"- **Multiple Tabs for Different Modules:** Seamlessly manage different groups of students across various modules you\u0027re teaching, with dedicated tabs for each class.","lastModifiedDate":"2024-02-25"},{"lineNumber":30,"author":{"gitId":"Jajared"},"content":"- **Random Team Generator:** Enhance fairness in assessments by utilizing the optional random team generator, which includes features for adding preferences to accommodate specific grouping needs.","lastModifiedDate":"2024-02-25"},{"lineNumber":31,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":32,"author":{"gitId":"Jajared"},"content":"## Scope","lastModifiedDate":"2024-02-25"},{"lineNumber":33,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"Jajared"},"content":"The primary scope of **TA Helper** includes:","lastModifiedDate":"2024-02-25"},{"lineNumber":35,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":36,"author":{"gitId":"Jajared"},"content":"- Managing contact details of students for each module taught by a TA.","lastModifiedDate":"2024-02-25"},{"lineNumber":37,"author":{"gitId":"Jajared"},"content":"- Additional functionalities to track student progress, input grades, and monitor attendance.","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"Jajared"},"content":"- Optional feature to generate random teams for projects or assignments, considering fairness and preferences.","lastModifiedDate":"2024-02-25"},{"lineNumber":39,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":40,"author":{"gitId":"Jajared"},"content":"## Getting Started","lastModifiedDate":"2024-02-25"},{"lineNumber":41,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":42,"author":{"gitId":"Jajared"},"content":"To get started with TA Helper, follow these simple steps: To be updated","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":44,"author":{"gitId":"Jajared"},"content":"## References","lastModifiedDate":"2024-02-25"},{"lineNumber":45,"author":{"gitId":"Jajared"},"content":"This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-02-25"}],"authorContributionMap":{"-":5,"Jajared":40}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"About Us\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"# About Us","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"-"},"content":"We are a team based in the [School of Computing, National University of Singapore](http://www.comp.nus.edu.sg).","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":10,"author":{"gitId":"-"},"content":"## Project team","lastModifiedDate":"2020-06-07"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"Jajared"},"content":"### Jared Wong","lastModifiedDate":"2024-02-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":14,"author":{"gitId":"Jajared"},"content":"\u003cimg src\u003d\"images/jajared.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"Jajared"},"content":"[[homepage](https://jajared.vercel.app/)]","lastModifiedDate":"2024-02-25"},{"lineNumber":17,"author":{"gitId":"Jajared"},"content":"[[github](https://github.com/Jajared)]","lastModifiedDate":"2024-02-25"},{"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":"Jajared"},"content":"- Role: Team Lead","lastModifiedDate":"2024-03-05"},{"lineNumber":21,"author":{"gitId":"Jajared"},"content":"- Responsibilities: Overall project coordination and ensure the team is doing well.","lastModifiedDate":"2024-03-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":23,"author":{"gitId":"Jajared"},"content":"### Zack Tay","lastModifiedDate":"2024-02-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":25,"author":{"gitId":"Jajared"},"content":"\u003cimg src\u003d\"images/zack-tay.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":27,"author":{"gitId":"Zack-Tay"},"content":"[[github](http://github.com/Zack-Tay)]","lastModifiedDate":"2024-02-28"},{"lineNumber":28,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"Jajared"},"content":"- Role: Code quality","lastModifiedDate":"2024-03-05"},{"lineNumber":31,"author":{"gitId":"Jajared"},"content":"- Responsibilities: Looks after code quality, ensures adherence to coding standards, etc. Also in charge of reviewing PRs and testing of project code before upload","lastModifiedDate":"2024-03-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":33,"author":{"gitId":"Jajared"},"content":"### Tan Qin Xu","lastModifiedDate":"2024-02-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":35,"author":{"gitId":"Jajared"},"content":"\u003cimg src\u003d\"images/qinxutan.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":37,"author":{"gitId":"qinxutan"},"content":"[[github](http://github.com/qinxutan)] [[portfolio](team/johndoe.md)]","lastModifiedDate":"2024-02-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"Jajared"},"content":"- Role: Documentation","lastModifiedDate":"2024-03-05"},{"lineNumber":40,"author":{"gitId":"Jajared"},"content":"- Responsibilities: Responsible for the quality of various project documents, including README, User Guide and Developer Guide.","lastModifiedDate":"2024-03-05"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"Jajared"},"content":"### Whelan Low","lastModifiedDate":"2024-02-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"whelan-low"},"content":"\u003cimg src\u003d\"images/whelan-low.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"whelan-low"},"content":"[[github](http://github.com/whelan-low)]","lastModifiedDate":"2024-02-25"},{"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":"Jajared"},"content":"- Role: Deliverables and deadlines","lastModifiedDate":"2024-03-05"},{"lineNumber":50,"author":{"gitId":"Jajared"},"content":"- Responsibilities: Ensure project deliverables are done on time and in the right format. In charge of submitting the deliverables","lastModifiedDate":"2024-03-05"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"Jajared"},"content":"### Mahadhir","lastModifiedDate":"2024-02-25"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"mahadhir247"},"content":"\u003cimg src\u003d\"images/mahadhir247.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-02-28"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":56,"author":{"gitId":"mahadhir247"},"content":"[[github](http://github.com/mahadhir247)]","lastModifiedDate":"2024-02-28"},{"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":"Jajared"},"content":"- Role: Code quality","lastModifiedDate":"2024-03-05"},{"lineNumber":60,"author":{"gitId":"Jajared"},"content":"- Responsibilities: Looks after code quality, ensures adherence to coding standards, etc. Also in charge of reviewing PRs and testing of project code before upload","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"qinxutan":1,"Zack-Tay":1,"-":34,"Jajared":20,"mahadhir247":2,"whelan-low":2}},{"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":"Jajared"},"content":"---","lastModifiedDate":"2024-03-05"},{"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":"Jajared"},"content":"---","lastModifiedDate":"2024-03-05"},{"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":"Jajared"},"content":"---","lastModifiedDate":"2024-03-05"},{"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":"Jajared"},"content":"The **_Architecture Diagram_** given above explains the high-level design of the App.","lastModifiedDate":"2024-03-05"},{"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":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":40,"author":{"gitId":"Jajared"},"content":"- At app launch, it initializes the other components in the correct sequence, and connects them up with each other.","lastModifiedDate":"2024-03-05"},{"lineNumber":41,"author":{"gitId":"Jajared"},"content":"- At shut down, it shuts down the other components and invokes cleanup methods where necessary.","lastModifiedDate":"2024-03-05"},{"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":"Jajared"},"content":"- [**`UI`**](#ui-component): The UI of the App.","lastModifiedDate":"2024-03-05"},{"lineNumber":46,"author":{"gitId":"Jajared"},"content":"- [**`Logic`**](#logic-component): The command executor.","lastModifiedDate":"2024-03-05"},{"lineNumber":47,"author":{"gitId":"Jajared"},"content":"- [**`Model`**](#model-component): Holds the data of the App in memory.","lastModifiedDate":"2024-03-05"},{"lineNumber":48,"author":{"gitId":"Jajared"},"content":"- [**`Storage`**](#storage-component): Reads data from, and writes data to, the hard disk.","lastModifiedDate":"2024-03-05"},{"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":"Jajared"},"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":"2024-03-05"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":56,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ArchitectureSequenceDiagram.puml\" width\u003d\"574\" /\u003e","lastModifiedDate":"2023-09-12"},{"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":"Jajared"},"content":"- defines its _API_ in an `interface` with the same name as the Component.","lastModifiedDate":"2024-03-05"},{"lineNumber":61,"author":{"gitId":"Jajared"},"content":"- implements its functionality using a concrete `{Component Name}Manager` class (which follows the corresponding API `interface` mentioned in the previous point.","lastModifiedDate":"2024-03-05"},{"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":"\u003cpuml src\u003d\"diagrams/ComponentManagers.puml\" width\u003d\"300\" /\u003e","lastModifiedDate":"2023-09-12"},{"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":"\u003cpuml src\u003d\"diagrams/UiClassDiagram.puml\" alt\u003d\"Structure of the UI Component\"/\u003e","lastModifiedDate":"2023-09-12"},{"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":"Jajared"},"content":"- executes user commands using the `Logic` component.","lastModifiedDate":"2024-03-05"},{"lineNumber":82,"author":{"gitId":"Jajared"},"content":"- listens for changes to `Model` data so that the UI can be updated with the modified data.","lastModifiedDate":"2024-03-05"},{"lineNumber":83,"author":{"gitId":"Jajared"},"content":"- keeps a reference to the `Logic` component, because the `UI` relies on the `Logic` to execute commands.","lastModifiedDate":"2024-03-05"},{"lineNumber":84,"author":{"gitId":"Jajared"},"content":"- depends on some classes in the `Model` component, as it displays `Person` object residing in the `Model`.","lastModifiedDate":"2024-03-05"},{"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":"\u003cpuml src\u003d\"diagrams/LogicClassDiagram.puml\" width\u003d\"550\"/\u003e","lastModifiedDate":"2023-09-12"},{"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":"\u003cpuml src\u003d\"diagrams/DeleteSequenceDiagram.puml\" alt\u003d\"Interactions Inside the Logic Component for the `delete 1` Command\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":97,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":98,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":99,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":100,"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":101,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":102,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":103,"author":{"gitId":"-"},"content":"How the `Logic` component works:","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"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":106,"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":107,"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":108,"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":109,"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":110,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"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":112,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":113,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ParserClasses.puml\" width\u003d\"600\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":114,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":115,"author":{"gitId":"-"},"content":"How the parsing works:","lastModifiedDate":"2021-07-31"},{"lineNumber":116,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":117,"author":{"gitId":"Jajared"},"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":"2024-03-05"},{"lineNumber":118,"author":{"gitId":"Jajared"},"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":"2024-03-05"},{"lineNumber":119,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":120,"author":{"gitId":"-"},"content":"### Model component","lastModifiedDate":"2021-07-31"},{"lineNumber":121,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":122,"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":123,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":124,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ModelClassDiagram.puml\" width\u003d\"450\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":125,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":126,"author":{"gitId":"-"},"content":"The `Model` component,","lastModifiedDate":"2021-07-31"},{"lineNumber":127,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":128,"author":{"gitId":"Jajared"},"content":"- stores the address book data i.e., all `Person` objects (which are contained in a `UniquePersonList` object).","lastModifiedDate":"2024-03-05"},{"lineNumber":129,"author":{"gitId":"Jajared"},"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":"2024-03-05"},{"lineNumber":130,"author":{"gitId":"Jajared"},"content":"- stores a `UserPref` object that represents the user’s preferences. This is exposed to the outside as a `ReadOnlyUserPref` objects.","lastModifiedDate":"2024-03-05"},{"lineNumber":131,"author":{"gitId":"Jajared"},"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":"2024-03-05"},{"lineNumber":132,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":133,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":134,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":135,"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":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":137,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/BetterModelClassDiagram.puml\" width\u003d\"450\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":138,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":139,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":140,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":141,"author":{"gitId":"-"},"content":"### Storage component","lastModifiedDate":"2020-05-23"},{"lineNumber":142,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":143,"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":144,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":145,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/StorageClassDiagram.puml\" width\u003d\"550\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":146,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":147,"author":{"gitId":"-"},"content":"The `Storage` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":148,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":149,"author":{"gitId":"Jajared"},"content":"- can save both address book data and user preference data in JSON format, and read them back into corresponding objects.","lastModifiedDate":"2024-03-05"},{"lineNumber":150,"author":{"gitId":"Jajared"},"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":"2024-03-05"},{"lineNumber":151,"author":{"gitId":"Jajared"},"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":"2024-03-05"},{"lineNumber":152,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":153,"author":{"gitId":"-"},"content":"### Common classes","lastModifiedDate":"2020-05-23"},{"lineNumber":154,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":155,"author":{"gitId":"-"},"content":"Classes used by multiple components are in the `seedu.addressbook.commons` package.","lastModifiedDate":"2020-05-23"},{"lineNumber":156,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":157,"author":{"gitId":"Jajared"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":158,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":159,"author":{"gitId":"-"},"content":"## **Implementation**","lastModifiedDate":"2020-05-23"},{"lineNumber":160,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":161,"author":{"gitId":"-"},"content":"This section describes some noteworthy details on how certain features are implemented.","lastModifiedDate":"2020-05-23"},{"lineNumber":162,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":163,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Undo/redo feature","lastModifiedDate":"2020-06-07"},{"lineNumber":164,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":165,"author":{"gitId":"-"},"content":"#### Proposed Implementation","lastModifiedDate":"2020-05-23"},{"lineNumber":166,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":167,"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":168,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":169,"author":{"gitId":"Jajared"},"content":"- `VersionedAddressBook#commit()` — Saves the current address book state in its history.","lastModifiedDate":"2024-03-05"},{"lineNumber":170,"author":{"gitId":"Jajared"},"content":"- `VersionedAddressBook#undo()` — Restores the previous address book state from its history.","lastModifiedDate":"2024-03-05"},{"lineNumber":171,"author":{"gitId":"Jajared"},"content":"- `VersionedAddressBook#redo()` — Restores a previously undone address book state from its history.","lastModifiedDate":"2024-03-05"},{"lineNumber":172,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":173,"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":174,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":175,"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":176,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":177,"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":178,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":179,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState0.puml\" alt\u003d\"UndoRedoState0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":180,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":181,"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":182,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":183,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState1.puml\" alt\u003d\"UndoRedoState1\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":184,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":185,"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":186,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":187,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState2.puml\" alt\u003d\"UndoRedoState2\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":188,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":189,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":190,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":191,"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":192,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":193,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":194,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":195,"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":196,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":197,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState3.puml\" alt\u003d\"UndoRedoState3\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":198,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":199,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":200,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":201,"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":202,"author":{"gitId":"-"},"content":"than attempting to perform the undo.","lastModifiedDate":"2020-05-23"},{"lineNumber":203,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":204,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":205,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":206,"author":{"gitId":"-"},"content":"The following sequence diagram shows how an undo operation goes through the `Logic` component:","lastModifiedDate":"2024-02-09"},{"lineNumber":207,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":208,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoSequenceDiagram-Logic.puml\" alt\u003d\"UndoSequenceDiagram-Logic\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":209,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":210,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":211,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":212,"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":213,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":214,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":215,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":216,"author":{"gitId":"-"},"content":"Similarly, how an undo operation goes through the `Model` component is shown below:","lastModifiedDate":"2024-02-09"},{"lineNumber":217,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":218,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoSequenceDiagram-Model.puml\" alt\u003d\"UndoSequenceDiagram-Model\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":219,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":220,"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":221,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":222,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":223,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":224,"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":225,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":226,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":227,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":228,"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":229,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":230,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState4.puml\" alt\u003d\"UndoRedoState4\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":231,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":232,"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":233,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":234,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState5.puml\" alt\u003d\"UndoRedoState5\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":235,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":236,"author":{"gitId":"-"},"content":"The following activity diagram summarizes what happens when a user executes a new command:","lastModifiedDate":"2020-05-23"},{"lineNumber":237,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":238,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/CommitActivityDiagram.puml\" width\u003d\"250\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":239,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":240,"author":{"gitId":"-"},"content":"#### Design considerations:","lastModifiedDate":"2021-07-31"},{"lineNumber":241,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":242,"author":{"gitId":"-"},"content":"**Aspect: How undo \u0026 redo executes:**","lastModifiedDate":"2021-07-31"},{"lineNumber":243,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":244,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":245,"author":{"gitId":"-"},"content":"* **Alternative 1 (current choice):** Saves the entire address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":246,"author":{"gitId":"-"},"content":" * Pros: Easy to implement.","lastModifiedDate":"2020-05-23"},{"lineNumber":247,"author":{"gitId":"-"},"content":" * Cons: May have performance issues in terms of memory usage.","lastModifiedDate":"2020-05-23"},{"lineNumber":248,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":249,"author":{"gitId":"Jajared"},"content":"- **Alternative 2:** Individual command knows how to undo/redo by","lastModifiedDate":"2024-03-05"},{"lineNumber":250,"author":{"gitId":"-"},"content":" itself.","lastModifiedDate":"2020-05-23"},{"lineNumber":251,"author":{"gitId":"-"},"content":" * Pros: Will use less memory (e.g. for `delete`, just save the person being deleted).","lastModifiedDate":"2020-05-23"},{"lineNumber":252,"author":{"gitId":"-"},"content":" * Cons: We must ensure that the implementation of each individual command are correct.","lastModifiedDate":"2020-05-23"},{"lineNumber":253,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":254,"author":{"gitId":"-"},"content":"_{more aspects and alternatives to be added}_","lastModifiedDate":"2020-05-23"},{"lineNumber":255,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":256,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Data archiving","lastModifiedDate":"2020-05-23"},{"lineNumber":257,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":258,"author":{"gitId":"-"},"content":"_{Explain here how the data archiving feature will be implemented}_","lastModifiedDate":"2020-05-23"},{"lineNumber":259,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":260,"author":{"gitId":"Jajared"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":261,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":262,"author":{"gitId":"-"},"content":"## **Documentation, logging, testing, configuration, dev-ops**","lastModifiedDate":"2020-06-07"},{"lineNumber":263,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":264,"author":{"gitId":"Jajared"},"content":"- [Documentation guide](Documentation.md)","lastModifiedDate":"2024-03-05"},{"lineNumber":265,"author":{"gitId":"Jajared"},"content":"- [Testing guide](Testing.md)","lastModifiedDate":"2024-03-05"},{"lineNumber":266,"author":{"gitId":"Jajared"},"content":"- [Logging guide](Logging.md)","lastModifiedDate":"2024-03-05"},{"lineNumber":267,"author":{"gitId":"Jajared"},"content":"- [Configuration guide](Configuration.md)","lastModifiedDate":"2024-03-05"},{"lineNumber":268,"author":{"gitId":"Jajared"},"content":"- [DevOps guide](DevOps.md)","lastModifiedDate":"2024-03-05"},{"lineNumber":269,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":270,"author":{"gitId":"Jajared"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":271,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":272,"author":{"gitId":"-"},"content":"## **Appendix: Requirements**","lastModifiedDate":"2020-05-23"},{"lineNumber":273,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":274,"author":{"gitId":"-"},"content":"### Product scope","lastModifiedDate":"2020-05-23"},{"lineNumber":275,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":276,"author":{"gitId":"-"},"content":"**Target user profile**:","lastModifiedDate":"2020-05-23"},{"lineNumber":277,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":278,"author":{"gitId":"Jajared"},"content":"- has a need to manage a significant number of students\u0027 contacts","lastModifiedDate":"2024-03-05"},{"lineNumber":279,"author":{"gitId":"Jajared"},"content":"- prefer desktop apps over other types","lastModifiedDate":"2024-03-05"},{"lineNumber":280,"author":{"gitId":"Jajared"},"content":"- can type fast","lastModifiedDate":"2024-03-05"},{"lineNumber":281,"author":{"gitId":"Jajared"},"content":"- prefers typing to mouse interactions","lastModifiedDate":"2024-03-05"},{"lineNumber":282,"author":{"gitId":"Jajared"},"content":"- is reasonably comfortable using CLI apps","lastModifiedDate":"2024-03-05"},{"lineNumber":283,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":284,"author":{"gitId":"qinxutan"},"content":"**Value proposition**: manage students\u0027contacts faster than a typical mouse/GUI driven app","lastModifiedDate":"2024-02-25"},{"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":"qinxutan"},"content":"|----------|---------|--------------------------------------------------------------------------------|-------------------------------------------------------------------------|","lastModifiedDate":"2024-02-25"},{"lineNumber":292,"author":{"gitId":"qinxutan"},"content":"| `* * *` | TA | add new students to a class | maintain an up-to-date list of enrolled students. |","lastModifiedDate":"2024-03-05"},{"lineNumber":293,"author":{"gitId":"qinxutan"},"content":"| `* * *` | TA | add partial info of students | still add students even if I don’t have all their information. |","lastModifiedDate":"2024-03-05"},{"lineNumber":294,"author":{"gitId":"qinxutan"},"content":"| `* * *` | TA | delete a student from my class if they drop the module/class | keep my class list accurate and up-to-date. |","lastModifiedDate":"2024-03-05"},{"lineNumber":295,"author":{"gitId":"qinxutan"},"content":"| `* * ` | TA | search for my students based on their NUS ID, emails, names or tutorial groups | locate details of students without having to go through the entire list |","lastModifiedDate":"2024-02-25"},{"lineNumber":296,"author":{"gitId":"qinxutan"},"content":"| `* * *` | TA | view all students and their particulars | have a comprehensive overview of the enrolled students in my class. |","lastModifiedDate":"2024-03-05"},{"lineNumber":297,"author":{"gitId":"qinxutan"},"content":"| `* *` | TA | add/remove different modules I am teaching | manage my teaching assignments efficiently. |","lastModifiedDate":"2024-03-05"},{"lineNumber":298,"author":{"gitId":"qinxutan"},"content":"| `* * *` | TA | view all the tutorial classes and their information | visibility into the schedule and details of all tutorial classes. |","lastModifiedDate":"2024-03-05"},{"lineNumber":299,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":300,"author":{"gitId":"Jajared"},"content":"_{More to be added}_","lastModifiedDate":"2024-03-05"},{"lineNumber":301,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":302,"author":{"gitId":"-"},"content":"### Use cases","lastModifiedDate":"2020-06-07"},{"lineNumber":303,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":304,"author":{"gitId":"qinxutan"},"content":"(For all use cases below, the **System** is the `TA Helper` and the **Actor** is the `TA`, unless specified otherwise)","lastModifiedDate":"2024-02-25"},{"lineNumber":305,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":306,"author":{"gitId":"Jajared"},"content":"#### Use case 1: Add new students","lastModifiedDate":"2024-03-05"},{"lineNumber":307,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":308,"author":{"gitId":"Zack-Tay"},"content":"**MSS:**","lastModifiedDate":"2024-03-04"},{"lineNumber":309,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":310,"author":{"gitId":"Jajared"},"content":"1. User specifies the student to be added.","lastModifiedDate":"2024-03-05"},{"lineNumber":311,"author":{"gitId":"Jajared"},"content":"2. System adds the student to the list of students.","lastModifiedDate":"2024-03-05"},{"lineNumber":312,"author":{"gitId":"Jajared"},"content":"3. System indicates successful addition of new student.","lastModifiedDate":"2024-03-05"},{"lineNumber":313,"author":{"gitId":"Jajared"},"content":"Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":314,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":315,"author":{"gitId":"Jajared"},"content":"**Extensions:**","lastModifiedDate":"2024-03-05"},{"lineNumber":316,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":317,"author":{"gitId":"Jajared"},"content":"- 1a. Student\u0027s name, email, id is not specified.","lastModifiedDate":"2024-03-05"},{"lineNumber":318,"author":{"gitId":"Jajared"},"content":" - 1a1. Returns an error that informs the user to specify the missing field(s).","lastModifiedDate":"2024-03-05"},{"lineNumber":319,"author":{"gitId":"Jajared"},"content":" - Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":320,"author":{"gitId":"Jajared"},"content":"- 1b. The specified email and/or id is tagged to an existing student in the list.","lastModifiedDate":"2024-03-05"},{"lineNumber":321,"author":{"gitId":"Zack-Tay"},"content":" - 1b1. Returns an error indicating that there is an existing entry with the same value.","lastModifiedDate":"2024-03-04"},{"lineNumber":322,"author":{"gitId":"Zack-Tay"},"content":" - Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":323,"author":{"gitId":"Jajared"},"content":"- 1c. Invalid input command.","lastModifiedDate":"2024-03-05"},{"lineNumber":324,"author":{"gitId":"Jajared"},"content":" - 1c1. Return an error indicating that command is not recognised and provides the correct command format.","lastModifiedDate":"2024-03-05"},{"lineNumber":325,"author":{"gitId":"Jajared"},"content":" - Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":326,"author":{"gitId":"Jajared"},"content":"- 2a. Student\u0027s tutorial class is not specified.","lastModifiedDate":"2024-03-05"},{"lineNumber":327,"author":{"gitId":"Jajared"},"content":" - 2a1. System adds student into the list of students.","lastModifiedDate":"2024-03-05"},{"lineNumber":328,"author":{"gitId":"Zack-Tay"},"content":" - 2a2. Student will not be placed under any tutorial group.","lastModifiedDate":"2024-03-04"},{"lineNumber":329,"author":{"gitId":"Zack-Tay"},"content":" - Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":330,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":331,"author":{"gitId":"Jajared"},"content":"\u003cbr\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":332,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":333,"author":{"gitId":"Jajared"},"content":"#### Use case 2: Delete students","lastModifiedDate":"2024-03-05"},{"lineNumber":334,"author":{"gitId":"qinxutan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":335,"author":{"gitId":"Zack-Tay"},"content":"**MSS:**","lastModifiedDate":"2024-03-04"},{"lineNumber":336,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":337,"author":{"gitId":"Jajared"},"content":"1. User enters the command `/delete_student` and specifies the student to be deleted by the specified parameter.","lastModifiedDate":"2024-03-05"},{"lineNumber":338,"author":{"gitId":"Jajared"},"content":"2. System deletes the student from the list of students and tutorial group (if any).","lastModifiedDate":"2024-03-05"},{"lineNumber":339,"author":{"gitId":"Jajared"},"content":"Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":340,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":341,"author":{"gitId":"Jajared"},"content":"**Extensions:**","lastModifiedDate":"2024-03-05"},{"lineNumber":342,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":343,"author":{"gitId":"Jajared"},"content":"- 1a. User specifies to delete student by student ID.","lastModifiedDate":"2024-03-05"},{"lineNumber":344,"author":{"gitId":"Jajared"},"content":" - 1a1. Student ID does not exist in the system.","lastModifiedDate":"2024-03-05"},{"lineNumber":345,"author":{"gitId":"Jajared"},"content":" - 1a1.1: Returns an error indicating that the student with the provided ID does not exist.","lastModifiedDate":"2024-03-05"},{"lineNumber":346,"author":{"gitId":"Jajared"},"content":" - Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":347,"author":{"gitId":"Jajared"},"content":"- 1b. User specifies to delete student by email.","lastModifiedDate":"2024-03-05"},{"lineNumber":348,"author":{"gitId":"Jajared"},"content":" - 1b1. Email does not exist in the system.","lastModifiedDate":"2024-03-05"},{"lineNumber":349,"author":{"gitId":"Jajared"},"content":" - 1b1.1. Returns an error indicating that the student with the provided email does not exist.","lastModifiedDate":"2024-03-05"},{"lineNumber":350,"author":{"gitId":"Jajared"},"content":" - Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":351,"author":{"gitId":"Jajared"},"content":"- 1c. Invalid input command. - 1c1: Returns an error indicating command not recognised and provides the correct command format.","lastModifiedDate":"2024-03-05"},{"lineNumber":352,"author":{"gitId":"Jajared"},"content":" \u003cbr\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":353,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":354,"author":{"gitId":"Jajared"},"content":"#### Use case 3: Search for students","lastModifiedDate":"2024-03-05"},{"lineNumber":355,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":356,"author":{"gitId":"Zack-Tay"},"content":"**MSS:**","lastModifiedDate":"2024-03-04"},{"lineNumber":357,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":358,"author":{"gitId":"Jajared"},"content":"1. User enters the command `/search_student` and specifies the student to be searched by the specified parameter.","lastModifiedDate":"2024-03-05"},{"lineNumber":359,"author":{"gitId":"Jajared"},"content":"2. System generates a list of matching entries according to specified parameters.","lastModifiedDate":"2024-03-05"},{"lineNumber":360,"author":{"gitId":"Jajared"},"content":"Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":361,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":362,"author":{"gitId":"Jajared"},"content":"**Extensions:**","lastModifiedDate":"2024-03-05"},{"lineNumber":363,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":364,"author":{"gitId":"Jajared"},"content":"- 1a. Parameter not specified","lastModifiedDate":"2024-03-05"},{"lineNumber":365,"author":{"gitId":"Jajared"},"content":" - 1a1/2a1. Returns an error indicating that the user needs to specify valid fields.","lastModifiedDate":"2024-03-05"},{"lineNumber":366,"author":{"gitId":"Zack-Tay"},"content":" - Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":367,"author":{"gitId":"Jajared"},"content":"- 1b. Invalid input command.","lastModifiedDate":"2024-03-05"},{"lineNumber":368,"author":{"gitId":"Jajared"},"content":" - 1b1. Return an error indicating command not recognised and provides the correct command format.","lastModifiedDate":"2024-03-05"},{"lineNumber":369,"author":{"gitId":"Zack-Tay"},"content":" - Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":370,"author":{"gitId":"Jajared"},"content":"- 2a. Partial match for specified parameter. - 2a1. System will display all matching results for the specified value.","lastModifiedDate":"2024-03-05"},{"lineNumber":371,"author":{"gitId":"Jajared"},"content":" \u003cbr\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":372,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":373,"author":{"gitId":"Jajared"},"content":"#### Use case 4: View all students","lastModifiedDate":"2024-03-05"},{"lineNumber":374,"author":{"gitId":"qinxutan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":375,"author":{"gitId":"Zack-Tay"},"content":"**MSS:**","lastModifiedDate":"2024-03-04"},{"lineNumber":376,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":377,"author":{"gitId":"Jajared"},"content":"1. User enters the command `/list_student`","lastModifiedDate":"2024-03-05"},{"lineNumber":378,"author":{"gitId":"Jajared"},"content":"2. System displays all students information (name, email, student id and tutorial class).","lastModifiedDate":"2024-03-05"},{"lineNumber":379,"author":{"gitId":"Jajared"},"content":"Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":380,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":381,"author":{"gitId":"Jajared"},"content":"**Extensions:**","lastModifiedDate":"2024-03-05"},{"lineNumber":382,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":383,"author":{"gitId":"Jajared"},"content":"- 1a. Invalid input command.","lastModifiedDate":"2024-03-05"},{"lineNumber":384,"author":{"gitId":"Jajared"},"content":" - 1a1. Return an error indicating command not recognised and provides the correct command format.","lastModifiedDate":"2024-03-05"},{"lineNumber":385,"author":{"gitId":"Zack-Tay"},"content":" - Use case ends.","lastModifiedDate":"2024-03-04"},{"lineNumber":386,"author":{"gitId":"Jajared"},"content":"- 1b. Additional arguments are specified after the command.","lastModifiedDate":"2024-03-05"},{"lineNumber":387,"author":{"gitId":"Jajared"},"content":" - 1b1. System will ignore those arguments and execute /list_students as usual.","lastModifiedDate":"2024-03-05"},{"lineNumber":388,"author":{"gitId":"Jajared"},"content":"- 2a. No existing students in the list.","lastModifiedDate":"2024-03-05"},{"lineNumber":389,"author":{"gitId":"Jajared"},"content":" - 2a1. System will return a message indicating that there are no students in the list. ","lastModifiedDate":"2024-03-05"},{"lineNumber":390,"author":{"gitId":"Jajared"},"content":" \u003cbr\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":391,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":392,"author":{"gitId":"Jajared"},"content":"#### Use case 5: Add new tutorial class","lastModifiedDate":"2024-03-05"},{"lineNumber":393,"author":{"gitId":"qinxutan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":394,"author":{"gitId":"whelan-low"},"content":"**MSS:**","lastModifiedDate":"2024-02-29"},{"lineNumber":395,"author":{"gitId":"whelan-low"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":396,"author":{"gitId":"Jajared"},"content":"1. User enters the command `/add_class` and specifies the tutorial class details to be added.","lastModifiedDate":"2024-03-05"},{"lineNumber":397,"author":{"gitId":"Jajared"},"content":"2. System adds the tutorial class.","lastModifiedDate":"2024-03-05"},{"lineNumber":398,"author":{"gitId":"Jajared"},"content":"Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":399,"author":{"gitId":"whelan-low"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":400,"author":{"gitId":"whelan-low"},"content":"**Extensions:**","lastModifiedDate":"2024-02-29"},{"lineNumber":401,"author":{"gitId":"Zack-Tay"},"content":"","lastModifiedDate":"2024-03-04"},{"lineNumber":402,"author":{"gitId":"Jajared"},"content":"- 1a. Invalid input command.","lastModifiedDate":"2024-03-05"},{"lineNumber":403,"author":{"gitId":"Jajared"},"content":" - 1a1. Return an error indicating command not recognised and provides the correct command format.","lastModifiedDate":"2024-03-05"},{"lineNumber":404,"author":{"gitId":"Jajared"},"content":" - Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":405,"author":{"gitId":"Jajared"},"content":"- 1b. Invalid tutorial class attributes are specified.","lastModifiedDate":"2024-03-05"},{"lineNumber":406,"author":{"gitId":"Jajared"},"content":" - 2a1. Returns an error indicating that user has to specify tutorial class in the correct format.","lastModifiedDate":"2024-03-05"},{"lineNumber":407,"author":{"gitId":"Jajared"},"content":" - Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":408,"author":{"gitId":"Jajared"},"content":"- 1c. The specified tutorial class already exists. - 1c1: Returns an error indicating that the tutorial class already exists. - Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":409,"author":{"gitId":"Jajared"},"content":" \u003cbr\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":410,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":411,"author":{"gitId":"Jajared"},"content":"#### Use case 6: Delete tutorial class","lastModifiedDate":"2024-03-05"},{"lineNumber":412,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":413,"author":{"gitId":"Jajared"},"content":"**MSS:**","lastModifiedDate":"2024-03-05"},{"lineNumber":414,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":415,"author":{"gitId":"Jajared"},"content":"1. User enters the command `/delete_class` and specifies the tutorial class to be deleted.","lastModifiedDate":"2024-03-05"},{"lineNumber":416,"author":{"gitId":"Jajared"},"content":"2. System deletes the tutorial class.","lastModifiedDate":"2024-03-05"},{"lineNumber":417,"author":{"gitId":"-"},"content":"Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":418,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":419,"author":{"gitId":"Jajared"},"content":"**Extensions:**","lastModifiedDate":"2024-03-05"},{"lineNumber":420,"author":{"gitId":"Jajared"},"content":"- 1a. Invalid input command.","lastModifiedDate":"2024-03-05"},{"lineNumber":421,"author":{"gitId":"Jajared"},"content":" - 1a1. Return an error indicating command not recognised and provides the correct command format.","lastModifiedDate":"2024-03-05"},{"lineNumber":422,"author":{"gitId":"Jajared"},"content":" - Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":423,"author":{"gitId":"Jajared"},"content":"- 1b. The tutorial class specified does not exist.","lastModifiedDate":"2024-03-05"},{"lineNumber":424,"author":{"gitId":"Jajared"},"content":" - 1b1. Returns an error indicating invalid tutorial class and shows the list of tutorial classes available.","lastModifiedDate":"2024-03-05"},{"lineNumber":425,"author":{"gitId":"Jajared"},"content":" - Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":426,"author":{"gitId":"Jajared"},"content":"\u003cbr\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":427,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":428,"author":{"gitId":"Jajared"},"content":"#### Use case 7: View all classes","lastModifiedDate":"2024-03-05"},{"lineNumber":429,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":430,"author":{"gitId":"Jajared"},"content":"**MSS**","lastModifiedDate":"2024-03-05"},{"lineNumber":431,"author":{"gitId":"Jajared"},"content":"1. User enters the command `/list_class`.","lastModifiedDate":"2024-03-05"},{"lineNumber":432,"author":{"gitId":"Jajared"},"content":"2. System shows a list of all available classes.","lastModifiedDate":"2024-03-05"},{"lineNumber":433,"author":{"gitId":"-"},"content":"Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":434,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":435,"author":{"gitId":"Jajared"},"content":"**Extensions**","lastModifiedDate":"2024-03-05"},{"lineNumber":436,"author":{"gitId":"Jajared"},"content":"- 1a. Invalid input command.","lastModifiedDate":"2024-03-05"},{"lineNumber":437,"author":{"gitId":"Jajared"},"content":" - 1a1. Return an error indicating command not recognised and provides the correct command format.","lastModifiedDate":"2024-03-05"},{"lineNumber":438,"author":{"gitId":"Jajared"},"content":" - Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":439,"author":{"gitId":"Jajared"},"content":"- 1b. Additional arguments are specified after the command.","lastModifiedDate":"2024-03-05"},{"lineNumber":440,"author":{"gitId":"Jajared"},"content":" - 1b1. System will ignore those arguments and execute /list_students as usual.","lastModifiedDate":"2024-03-05"},{"lineNumber":441,"author":{"gitId":"Jajared"},"content":"- 2a. There are no existing classes.","lastModifiedDate":"2024-03-05"},{"lineNumber":442,"author":{"gitId":"Jajared"},"content":" - 2a1. System will return a message indicating that there are no existing classes in the list.","lastModifiedDate":"2024-03-05"},{"lineNumber":443,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":444,"author":{"gitId":"qinxutan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":445,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":446,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":447,"author":{"gitId":"Jajared"},"content":"_{More to be added}_","lastModifiedDate":"2024-03-05"},{"lineNumber":448,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":449,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":450,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":451,"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":452,"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":453,"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":454,"author":{"gitId":"Zack-Tay"},"content":"4. Should respond to user inputs within approximately 2-3 seconds.","lastModifiedDate":"2024-03-05"},{"lineNumber":455,"author":{"gitId":"Zack-Tay"},"content":"5. Should not depend on internet access to accomplish its core purpose.","lastModifiedDate":"2024-03-05"},{"lineNumber":456,"author":{"gitId":"Zack-Tay"},"content":"6. Should provide a simple and user-friendly GUI, focusing on readability and ease of use.","lastModifiedDate":"2024-03-05"},{"lineNumber":457,"author":{"gitId":"Zack-Tay"},"content":"7. Should be usable by a person who is TA-ing for the first time.","lastModifiedDate":"2024-03-05"},{"lineNumber":458,"author":{"gitId":"Zack-Tay"},"content":"8. Should provide comprehensive error messages and guidelines to recover from errors due to user input.","lastModifiedDate":"2024-03-05"},{"lineNumber":459,"author":{"gitId":"Zack-Tay"},"content":"9. Should provide a comprehensive and well-designed user documentation to guide users on how to use TAHelper.","lastModifiedDate":"2024-03-05"},{"lineNumber":460,"author":{"gitId":"Zack-Tay"},"content":"10. Should provide a comprehensive and well-designed developer documentation to guide developer on how to improve and develop TAHelper further.","lastModifiedDate":"2024-03-05"},{"lineNumber":461,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":462,"author":{"gitId":"Jajared"},"content":"_{More to be added}_","lastModifiedDate":"2024-03-05"},{"lineNumber":463,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":464,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":465,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":466,"author":{"gitId":"-"},"content":"* **Mainstream OS**: Windows, Linux, Unix, MacOS","lastModifiedDate":"2024-02-09"},{"lineNumber":467,"author":{"gitId":"-"},"content":"* **Private contact detail**: A contact detail that is not meant to be shared with others","lastModifiedDate":"2020-05-23"},{"lineNumber":468,"author":{"gitId":"Zack-Tay"},"content":"* **TA (Teaching Assistant)**: An individual who is responsible for teaching a tutorial class of University students.","lastModifiedDate":"2024-03-05"},{"lineNumber":469,"author":{"gitId":"Zack-Tay"},"content":"* **TAHelper**: A contact management application to help TAs keep track of students in classes they teach","lastModifiedDate":"2024-03-05"},{"lineNumber":470,"author":{"gitId":"Zack-Tay"},"content":"* **GUI**: Graphical User Interface","lastModifiedDate":"2024-03-05"},{"lineNumber":471,"author":{"gitId":"Zack-Tay"},"content":"* **MSS**: Main Success Scenario","lastModifiedDate":"2024-03-05"},{"lineNumber":472,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":473,"author":{"gitId":"Jajared"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":474,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":475,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":476,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":477,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":478,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":479,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":480,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":481,"author":{"gitId":"-"},"content":"**Note:** These instructions only provide a starting point for testers to work on;","lastModifiedDate":"2023-09-12"},{"lineNumber":482,"author":{"gitId":"Jajared"},"content":"testers are expected to do more _exploratory_ testing.","lastModifiedDate":"2024-03-05"},{"lineNumber":483,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":484,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":485,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":486,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":487,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":488,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":489,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":490,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":491,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":492,"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":493,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":494,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":495,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":496,"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":497,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":498,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":499,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","lastModifiedDate":"2020-05-23"},{"lineNumber":500,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":501,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":502,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":503,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":504,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":505,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":506,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":507,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":508,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":509,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":510,"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":511,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":512,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":513,"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":514,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":515,"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":516,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":517,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":518,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":519,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":520,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":521,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":522,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":523,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":524,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":525,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":526,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"qinxutan":14,"Zack-Tay":32,"-":333,"Jajared":143,"whelan-low":4}},{"path":"docs/UserGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":" layout: default.md","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":" title: \"User Guide\"","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":" pageNav: 3","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":7,"author":{"gitId":"-"},"content":"# AB-3 User Guide","lastModifiedDate":"2023-09-12"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"AddressBook Level 3 (AB3) is a **desktop app for managing contacts, optimized for use via a Line Interface** (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast, AB3 can get your contact management tasks done faster than traditional GUI apps.","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":"\u003c!-- * Table of Contents --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"-"},"content":"\u003cpage-nav-print /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":14,"author":{"gitId":"Jajared"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"-"},"content":"## Quick start","lastModifiedDate":"2020-05-23"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"1. Ensure you have Java `11` or above installed in your Computer.","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"-"},"content":"1. Download the latest `addressbook.jar` from [here](https://github.com/se-edu/addressbook-level3/releases).","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"1. Copy the file to the folder you want to use as the _home folder_ for your AddressBook.","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"-"},"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":25,"author":{"gitId":"-"},"content":" A GUI similar to the below should appear in a few seconds. Note how the app contains some sample data.\u003cbr\u003e","lastModifiedDate":"2023-01-01"},{"lineNumber":26,"author":{"gitId":"-"},"content":" ![Ui](images/Ui.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":"1. Type the command in the command box and press Enter to execute it. e.g. typing **`help`** and pressing Enter will open the help window.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":29,"author":{"gitId":"-"},"content":" Some example commands you can try:","lastModifiedDate":"2020-05-23"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"Jajared"},"content":" - `list` : Lists all contacts.","lastModifiedDate":"2024-03-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":33,"author":{"gitId":"Jajared"},"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":"2024-03-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":35,"author":{"gitId":"Jajared"},"content":" - `delete 3` : Deletes the 3rd contact shown in the current list.","lastModifiedDate":"2024-03-05"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":37,"author":{"gitId":"Jajared"},"content":" - `clear` : Deletes all contacts.","lastModifiedDate":"2024-03-05"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"Jajared"},"content":" - `exit` : Exits the app.","lastModifiedDate":"2024-03-05"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":41,"author":{"gitId":"-"},"content":"1. Refer to the [Features](#features) below for details of each command.","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"Jajared"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"-"},"content":"## Features","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"-"},"content":"**Notes about the command format:**\u003cbr\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"Jajared"},"content":"- Words in `UPPER_CASE` are the parameters to be supplied by the user.\u003cbr\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":52,"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":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"Jajared"},"content":"- Items in square brackets are optional.\u003cbr\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":55,"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":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":57,"author":{"gitId":"Jajared"},"content":"- Items with `…`​ after them can be used multiple times including zero times.\u003cbr\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":58,"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":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":60,"author":{"gitId":"Jajared"},"content":"- Parameters can be in any order.\u003cbr\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":61,"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":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":63,"author":{"gitId":"Jajared"},"content":"- Extraneous parameters for commands that do not take in parameters (such as `help`, `list`, `exit` and `clear`) will be ignored.\u003cbr\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":64,"author":{"gitId":"-"},"content":" e.g. if the command specifies `help 123`, it will be interpreted as `help`.","lastModifiedDate":"2021-02-03"},{"lineNumber":65,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-02-03"},{"lineNumber":66,"author":{"gitId":"Jajared"},"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":"2024-03-05"},{"lineNumber":67,"author":{"gitId":"-"},"content":" \u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":69,"author":{"gitId":"qinxutan"},"content":"### Adding new students : `add`","lastModifiedDate":"2024-02-25"},{"lineNumber":70,"author":{"gitId":"qinxutan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":71,"author":{"gitId":"Jajared"},"content":"### Deleting students : `delete_student`","lastModifiedDate":"2024-03-05"},{"lineNumber":72,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":73,"author":{"gitId":"Jajared"},"content":"Delete a student contact based on the parameter specified by the user.","lastModifiedDate":"2024-03-05"},{"lineNumber":74,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":75,"author":{"gitId":"Jajared"},"content":"Format: `/delete_student id/STUDENT_ID email/EMAIL`","lastModifiedDate":"2024-03-05"},{"lineNumber":76,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":77,"author":{"gitId":"Jajared"},"content":"- The following parameters to delete a student contact are supported:","lastModifiedDate":"2024-03-05"},{"lineNumber":78,"author":{"gitId":"Jajared"},"content":" 1. Student ID","lastModifiedDate":"2024-03-05"},{"lineNumber":79,"author":{"gitId":"Jajared"},"content":" 2. Email","lastModifiedDate":"2024-03-05"},{"lineNumber":80,"author":{"gitId":"Jajared"},"content":"- Leading/trailing spaces are removed","lastModifiedDate":"2024-03-05"},{"lineNumber":81,"author":{"gitId":"Jajared"},"content":"- The parameter is case insensitive","lastModifiedDate":"2024-03-05"},{"lineNumber":82,"author":{"gitId":"Jajared"},"content":"- If none of the paremeters or an invalid parameter is specified, the command will return an error message indicating that a valid parameter must be provided.","lastModifiedDate":"2024-03-05"},{"lineNumber":83,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":84,"author":{"gitId":"Jajared"},"content":"Expected output:","lastModifiedDate":"2024-03-05"},{"lineNumber":85,"author":{"gitId":"Jajared"},"content":"Upon successful deletion, the command will return a confirmation messaging stating that the specified student contact has been removed.","lastModifiedDate":"2024-03-05"},{"lineNumber":86,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":87,"author":{"gitId":"Jajared"},"content":"Examples:","lastModifiedDate":"2024-03-05"},{"lineNumber":88,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":89,"author":{"gitId":"Jajared"},"content":"- Delete by student ID: `/delete_student id/A01234567X`","lastModifiedDate":"2024-03-05"},{"lineNumber":90,"author":{"gitId":"Jajared"},"content":"- Delete by email: `/delete_student email/e0123456@u.nus.edu`","lastModifiedDate":"2024-03-05"},{"lineNumber":91,"author":{"gitId":"qinxutan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":92,"author":{"gitId":"qinxutan"},"content":"### Searching for students : `search`","lastModifiedDate":"2024-02-25"},{"lineNumber":93,"author":{"gitId":"qinxutan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":94,"author":{"gitId":"Jajared"},"content":"### Listing all students : `list_student`","lastModifiedDate":"2024-03-05"},{"lineNumber":95,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":96,"author":{"gitId":"Jajared"},"content":"View the list of all students available","lastModifiedDate":"2024-03-05"},{"lineNumber":97,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":98,"author":{"gitId":"Jajared"},"content":"Format: `/list_student`","lastModifiedDate":"2024-03-05"},{"lineNumber":99,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":100,"author":{"gitId":"Jajared"},"content":"Expected output:","lastModifiedDate":"2024-03-05"},{"lineNumber":101,"author":{"gitId":"Jajared"},"content":"The command will display the list of all students along with their student information. If there are no existing students, the command will return a message indicating that there are no students currently.","lastModifiedDate":"2024-03-05"},{"lineNumber":102,"author":{"gitId":"qinxutan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":103,"author":{"gitId":"whelan-low"},"content":"### Adding new tutorial class : `add_class`","lastModifiedDate":"2024-02-29"},{"lineNumber":104,"author":{"gitId":"qinxutan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":105,"author":{"gitId":"whelan-low"},"content":"Adds a tutorial class with the specified module code and name.","lastModifiedDate":"2024-02-29"},{"lineNumber":106,"author":{"gitId":"qinxutan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":107,"author":{"gitId":"whelan-low"},"content":"Format: `/add_class MODULE_CODE TUTORIAL_CLASS`","lastModifiedDate":"2024-02-29"},{"lineNumber":108,"author":{"gitId":"whelan-low"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":109,"author":{"gitId":"whelan-low"},"content":"- If none of the parameters is specified, or if only one is specified, returns an error.","lastModifiedDate":"2024-02-29"},{"lineNumber":110,"author":{"gitId":"whelan-low"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":111,"author":{"gitId":"whelan-low"},"content":"Examples:","lastModifiedDate":"2024-02-29"},{"lineNumber":112,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":113,"author":{"gitId":"whelan-low"},"content":"- `/add_class CS2103T T10`","lastModifiedDate":"2024-02-29"},{"lineNumber":114,"author":{"gitId":"whelan-low"},"content":"- `/add_class CS2109S T01`","lastModifiedDate":"2024-02-29"},{"lineNumber":115,"author":{"gitId":"whelan-low"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":116,"author":{"gitId":"whelan-low"},"content":"### Deleting tutorial class : `delete_class`","lastModifiedDate":"2024-02-29"},{"lineNumber":117,"author":{"gitId":"whelan-low"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":118,"author":{"gitId":"whelan-low"},"content":"Deletes a specified tutorial class from the list of classes.","lastModifiedDate":"2024-02-29"},{"lineNumber":119,"author":{"gitId":"whelan-low"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":120,"author":{"gitId":"whelan-low"},"content":"Format: `/delete_class MODULE_CODE TUTORIAL_CLASS`","lastModifiedDate":"2024-02-29"},{"lineNumber":121,"author":{"gitId":"whelan-low"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":122,"author":{"gitId":"whelan-low"},"content":"- If the module code does not exist, it returns an error.","lastModifiedDate":"2024-02-29"},{"lineNumber":123,"author":{"gitId":"whelan-low"},"content":"- If the tutorial class within that module code does not exist, it returns an error and the list of tutorial classes in that module code.","lastModifiedDate":"2024-02-29"},{"lineNumber":124,"author":{"gitId":"whelan-low"},"content":"- If no parameters are specified, returns an error","lastModifiedDate":"2024-02-29"},{"lineNumber":125,"author":{"gitId":"whelan-low"},"content":"","lastModifiedDate":"2024-02-29"},{"lineNumber":126,"author":{"gitId":"whelan-low"},"content":"Examples:","lastModifiedDate":"2024-02-29"},{"lineNumber":127,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":128,"author":{"gitId":"whelan-low"},"content":"- `/delete_class CS2103T T10`","lastModifiedDate":"2024-02-29"},{"lineNumber":129,"author":{"gitId":"whelan-low"},"content":"- `/delete_class CS2109S T01`","lastModifiedDate":"2024-02-29"},{"lineNumber":130,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":131,"author":{"gitId":"qinxutan"},"content":"### Listing all classes: `list`","lastModifiedDate":"2024-02-25"},{"lineNumber":132,"author":{"gitId":"qinxutan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":133,"author":{"gitId":"qinxutan"},"content":"Shows a list of all persons in the address book.","lastModifiedDate":"2024-02-25"},{"lineNumber":134,"author":{"gitId":"qinxutan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":135,"author":{"gitId":"qinxutan"},"content":"Format: `list_class`","lastModifiedDate":"2024-02-25"},{"lineNumber":136,"author":{"gitId":"qinxutan"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":137,"author":{"gitId":"qinxutan"},"content":"**BELOW ARE JUST FORMATS FROM ORIGINAL AD3.","lastModifiedDate":"2024-02-25"},{"lineNumber":138,"author":{"gitId":"qinxutan"},"content":"DELETE AFT LAST PERSON IS DONE WITH FEATURES.**","lastModifiedDate":"2024-02-25"},{"lineNumber":139,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-25"},{"lineNumber":140,"author":{"gitId":"-"},"content":"### Viewing help : `help`","lastModifiedDate":"2020-05-23"},{"lineNumber":141,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":142,"author":{"gitId":"-"},"content":"Shows a message explaning how to access the help page.","lastModifiedDate":"2020-05-23"},{"lineNumber":143,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":144,"author":{"gitId":"-"},"content":"![help message](images/helpMessage.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":145,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":146,"author":{"gitId":"-"},"content":"Format: `help`","lastModifiedDate":"2020-05-23"},{"lineNumber":147,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":148,"author":{"gitId":"-"},"content":"### Adding a person: `add`","lastModifiedDate":"2020-05-23"},{"lineNumber":149,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":150,"author":{"gitId":"-"},"content":"Adds a person to the address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":151,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":152,"author":{"gitId":"-"},"content":"Format: `add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]…​`","lastModifiedDate":"2020-05-23"},{"lineNumber":153,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":154,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"tip\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":155,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":156,"author":{"gitId":"-"},"content":"**Tip:** A person can have any number of tags (including 0)","lastModifiedDate":"2023-09-12"},{"lineNumber":157,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":158,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":159,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":160,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":161,"author":{"gitId":"Jajared"},"content":"- `add n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01`","lastModifiedDate":"2024-03-05"},{"lineNumber":162,"author":{"gitId":"Jajared"},"content":"- `add n/Betsy Crowe t/friend e/betsycrowe@example.com a/Newgate Prison p/1234567 t/criminal`","lastModifiedDate":"2024-03-05"},{"lineNumber":163,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":164,"author":{"gitId":"-"},"content":"### Editing a person : `edit`","lastModifiedDate":"2020-05-23"},{"lineNumber":165,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":166,"author":{"gitId":"-"},"content":"Edits an existing person in the address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":167,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":168,"author":{"gitId":"-"},"content":"Format: `edit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [t/TAG]…​`","lastModifiedDate":"2020-05-23"},{"lineNumber":169,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":170,"author":{"gitId":"Jajared"},"content":"- Edits the person at the specified `INDEX`. The index refers to the index number shown in the displayed person list. The index **must be a positive integer** 1, 2, 3, …​","lastModifiedDate":"2024-03-05"},{"lineNumber":171,"author":{"gitId":"Jajared"},"content":"- At least one of the optional fields must be provided.","lastModifiedDate":"2024-03-05"},{"lineNumber":172,"author":{"gitId":"Jajared"},"content":"- Existing values will be updated to the input values.","lastModifiedDate":"2024-03-05"},{"lineNumber":173,"author":{"gitId":"Jajared"},"content":"- When editing tags, the existing tags of the person will be removed i.e adding of tags is not cumulative.","lastModifiedDate":"2024-03-05"},{"lineNumber":174,"author":{"gitId":"Jajared"},"content":"- You can remove all the person’s tags by typing `t/` without","lastModifiedDate":"2024-03-05"},{"lineNumber":175,"author":{"gitId":"-"},"content":" specifying any tags after it.","lastModifiedDate":"2020-05-23"},{"lineNumber":176,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":177,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":178,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":179,"author":{"gitId":"Jajared"},"content":"- `edit 1 p/91234567 e/johndoe@example.com` Edits the phone number and email address of the 1st person to be `91234567` and `johndoe@example.com` respectively.","lastModifiedDate":"2024-03-05"},{"lineNumber":180,"author":{"gitId":"Jajared"},"content":"- `edit 2 n/Betsy Crower t/` Edits the name of the 2nd person to be `Betsy Crower` and clears all existing tags.","lastModifiedDate":"2024-03-05"},{"lineNumber":181,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":182,"author":{"gitId":"-"},"content":"### Locating persons by name: `find`","lastModifiedDate":"2020-05-23"},{"lineNumber":183,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":184,"author":{"gitId":"-"},"content":"Finds persons whose names contain any of the given keywords.","lastModifiedDate":"2020-05-23"},{"lineNumber":185,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":186,"author":{"gitId":"-"},"content":"Format: `find KEYWORD [MORE_KEYWORDS]`","lastModifiedDate":"2020-05-23"},{"lineNumber":187,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":188,"author":{"gitId":"Jajared"},"content":"- The search is case-insensitive. e.g `hans` will match `Hans`","lastModifiedDate":"2024-03-05"},{"lineNumber":189,"author":{"gitId":"Jajared"},"content":"- The order of the keywords does not matter. e.g. `Hans Bo` will match `Bo Hans`","lastModifiedDate":"2024-03-05"},{"lineNumber":190,"author":{"gitId":"Jajared"},"content":"- Only the name is searched.","lastModifiedDate":"2024-03-05"},{"lineNumber":191,"author":{"gitId":"Jajared"},"content":"- Only full words will be matched e.g. `Han` will not match `Hans`","lastModifiedDate":"2024-03-05"},{"lineNumber":192,"author":{"gitId":"Jajared"},"content":"- Persons matching at least one keyword will be returned (i.e. `OR` search).","lastModifiedDate":"2024-03-05"},{"lineNumber":193,"author":{"gitId":"-"},"content":" e.g. `Hans Bo` will return `Hans Gruber`, `Bo Yang`","lastModifiedDate":"2020-05-23"},{"lineNumber":194,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":195,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":196,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":197,"author":{"gitId":"Jajared"},"content":"- `find John` returns `john` and `John Doe`","lastModifiedDate":"2024-03-05"},{"lineNumber":198,"author":{"gitId":"Jajared"},"content":"- `find alex david` returns `Alex Yeoh`, `David Li`\u003cbr\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":199,"author":{"gitId":"-"},"content":" ![result for \u0027find alex david\u0027](images/findAlexDavidResult.png)","lastModifiedDate":"2020-05-23"},{"lineNumber":200,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":201,"author":{"gitId":"-"},"content":"### Deleting a person : `delete`","lastModifiedDate":"2020-05-23"},{"lineNumber":202,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":203,"author":{"gitId":"-"},"content":"Deletes the specified person from the address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":204,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":205,"author":{"gitId":"-"},"content":"Format: `delete INDEX`","lastModifiedDate":"2020-05-23"},{"lineNumber":206,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":207,"author":{"gitId":"Jajared"},"content":"- Deletes the person at the specified `INDEX`.","lastModifiedDate":"2024-03-05"},{"lineNumber":208,"author":{"gitId":"Jajared"},"content":"- The index refers to the index number shown in the displayed person list.","lastModifiedDate":"2024-03-05"},{"lineNumber":209,"author":{"gitId":"Jajared"},"content":"- The index **must be a positive integer** 1, 2, 3, …​","lastModifiedDate":"2024-03-05"},{"lineNumber":210,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":211,"author":{"gitId":"-"},"content":"Examples:","lastModifiedDate":"2020-05-23"},{"lineNumber":212,"author":{"gitId":"Jajared"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":213,"author":{"gitId":"Jajared"},"content":"- `list` followed by `delete 2` deletes the 2nd person in the address book.","lastModifiedDate":"2024-03-05"},{"lineNumber":214,"author":{"gitId":"Jajared"},"content":"- `find Betsy` followed by `delete 1` deletes the 1st person in the results of the `find` command.","lastModifiedDate":"2024-03-05"},{"lineNumber":215,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":216,"author":{"gitId":"-"},"content":"### Clearing all entries : `clear`","lastModifiedDate":"2020-05-23"},{"lineNumber":217,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":218,"author":{"gitId":"-"},"content":"Clears all entries from the address book.","lastModifiedDate":"2020-05-23"},{"lineNumber":219,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":220,"author":{"gitId":"-"},"content":"Format: `clear`","lastModifiedDate":"2020-05-23"},{"lineNumber":221,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":222,"author":{"gitId":"-"},"content":"### Exiting the program : `exit`","lastModifiedDate":"2020-05-23"},{"lineNumber":223,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":224,"author":{"gitId":"-"},"content":"Exits the program.","lastModifiedDate":"2020-05-23"},{"lineNumber":225,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":226,"author":{"gitId":"-"},"content":"Format: `exit`","lastModifiedDate":"2020-05-23"},{"lineNumber":227,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":228,"author":{"gitId":"qinxutan"},"content":"### Viewing all classes","lastModifiedDate":"2024-02-25"},{"lineNumber":229,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":230,"author":{"gitId":"qinxutan"},"content":"Shows all tutorial classes available.","lastModifiedDate":"2024-02-25"},{"lineNumber":231,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":232,"author":{"gitId":"qinxutan"},"content":"Format: `list`","lastModifiedDate":"2024-02-25"},{"lineNumber":233,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":234,"author":{"gitId":"Jajared"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":235,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":236,"author":{"gitId":"-"},"content":"## FAQ","lastModifiedDate":"2020-05-23"},{"lineNumber":237,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":238,"author":{"gitId":"-"},"content":"**Q**: How do I transfer my data to another Computer?\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":239,"author":{"gitId":"-"},"content":"**A**: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous AddressBook home folder.","lastModifiedDate":"2020-05-23"},{"lineNumber":240,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":241,"author":{"gitId":"Jajared"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":242,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":243,"author":{"gitId":"-"},"content":"## Known issues","lastModifiedDate":"2023-09-08"},{"lineNumber":244,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":245,"author":{"gitId":"-"},"content":"1. **When using multiple screens**, if you move the application to a secondary screen, and later switch to using only the primary screen, the GUI will open off-screen. The remedy is to delete the `preferences.json` file created by the application before running the application again.","lastModifiedDate":"2023-09-08"},{"lineNumber":246,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":247,"author":{"gitId":"Jajared"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":248,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-08"},{"lineNumber":249,"author":{"gitId":"-"},"content":"## Command summary","lastModifiedDate":"2020-05-23"},{"lineNumber":250,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":251,"author":{"gitId":"Jajared"},"content":"| Action | Format, Examples |","lastModifiedDate":"2024-03-05"},{"lineNumber":252,"author":{"gitId":"Jajared"},"content":"| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |","lastModifiedDate":"2024-03-05"},{"lineNumber":253,"author":{"gitId":"Jajared"},"content":"| **Add New Students** | `add_student /name \u003cstudent_name\u003e /email \u003cstudent_email\u003e /id \u003cstudent_id\u003e /tc \u003ctutorial_class\u003e` \u003cbr\u003e e.g., `add_student /name Dohn Joe /email johndoe@gmail.com /id A0123456A /tc CS2103T T09` |","lastModifiedDate":"2024-03-05"},{"lineNumber":254,"author":{"gitId":"Jajared"},"content":"| **Delete students** | `delete_student \u003c/id, /email\u003e \u003cid or email\u003e`\u003cbr\u003e e.g., `delete_student /id A0259209B` or `/delete_student email johndoe@gmail.com` |","lastModifiedDate":"2024-03-05"},{"lineNumber":255,"author":{"gitId":"Jajared"},"content":"| **Search for students** | `search_student \u003c/id, /email, /tc, /name\u003e \u003csearch_query\u003e`\u003cbr\u003e e.g.,`search_student /id A0123456A` |","lastModifiedDate":"2024-03-05"},{"lineNumber":256,"author":{"gitId":"Jajared"},"content":"| **View all students** | `list_student` |","lastModifiedDate":"2024-03-05"},{"lineNumber":257,"author":{"gitId":"Jajared"},"content":"| **Add new tutorial class** | `add_class \u003cmodule_code\u003e \u003ctutorial_class\u003e` \u003cbr\u003e e.g., `add_class CS2103T T09` |","lastModifiedDate":"2024-03-05"},{"lineNumber":258,"author":{"gitId":"Jajared"},"content":"| **Delete tutorial class** | `delete_class \u003cmodule_code\u003e \u003ctutorial_class\u003e` \u003cbr\u003e e.g., `delete_class CS2103T T09` |","lastModifiedDate":"2024-03-05"},{"lineNumber":259,"author":{"gitId":"Jajared"},"content":"| **View all classes** | `list_class` |","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"qinxutan":19,"-":137,"Jajared":80,"whelan-low":23}}] diff --git a/AY2324S2-CS2103T-T09-4_tp_master/commits.json b/AY2324S2-CS2103T-T09-4_tp_master/commits.json index ddca7b0f..08c44e30 100644 --- a/AY2324S2-CS2103T-T09-4_tp_master/commits.json +++ b/AY2324S2-CS2103T-T09-4_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"qinxutan":[{"date":"2024-02-25","commitResults":[{"hash":"8cf8561c7e10bfff4fa6fc2f18d6c9dd01fb85a6","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"7b8fb6cc9a5f60b76e537592ec7eb9dd9c641e06","isMergeCommit":true,"messageTitle":"Merge pull request #16 from qinxutan/update-aboutus","messageBody":"Update AboutUs.md","fileTypesAndContributionMap":{}},{"hash":"9ba53f8ad0bea91b3574e3021ddb93e2d9fb2831","isMergeCommit":true,"messageTitle":"Merge pull request #1 from AY2324S2-CS2103T-T09-4/master","messageBody":"Merge updates","fileTypesAndContributionMap":{}},{"hash":"13310ca30632f59453ae7af56a79f1273d579e24","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"b5d4ef6f2d25acef07fb77067b9aa4f42ddf8e5b","isMergeCommit":true,"messageTitle":"Merge pull request #18 from qinxutan/update-aboutus","messageBody":"Update AboutUs.md","fileTypesAndContributionMap":{}},{"hash":"7c49fe99cc4929cae3ac8b8ad88a98ce12ea52fc","isMergeCommit":false,"messageTitle":"Edit UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":10,"deletions":23}}},{"hash":"5953e52547f50c92a46d63d5033290df9a8a4d1e","isMergeCommit":true,"messageTitle":"Merge pull request #19 from qinxutan/update-userguide","messageBody":"Edit UserGuide.md","fileTypesAndContributionMap":{}},{"hash":"322ed9a1ee050961b6a2de83a47fd609d9a010b7","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":32,"deletions":19}}},{"hash":"66b392245bd82e6b4623866838c4c4de7bda58c9","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":23,"deletions":6}}},{"hash":"47c1a3a8b831393efbd00cda9c4dd2c3fd207b7a","isMergeCommit":true,"messageTitle":"Merge pull request #20 from qinxutan/update-developerguide","messageBody":"Update DeveloperGuide.md","fileTypesAndContributionMap":{}},{"hash":"8d33257b0c6979035a45cdc8d2e61c6744fd017e","isMergeCommit":true,"messageTitle":"Merge pull request #21 from qinxutan/update-userguide","messageBody":"Update UserGuide.md","fileTypesAndContributionMap":{}}]},{"date":"2024-03-05","commitResults":[{"hash":"f0887f9aee1f9d42fb27c8655ba1e1e4593aa3e2","isMergeCommit":true,"messageTitle":"Merge pull request #2 from AY2324S2-CS2103T-T09-4/master","messageBody":"merge","fileTypesAndContributionMap":{}},{"hash":"f55ae2dd8279bb7ed9b18d5116bd694b87a2e2af","isMergeCommit":true,"messageTitle":"Merge pull request #33 from Jajared/jared/update-about-us","messageBody":"Update about us","fileTypesAndContributionMap":{}},{"hash":"14b76a0aef7cded69a32b4c11a9039eba0cdb6d7","isMergeCommit":true,"messageTitle":"Merge pull request #3 from AY2324S2-CS2103T-T09-4/master","messageBody":"Merge","fileTypesAndContributionMap":{}},{"hash":"d2dc77c45f9d0017b974509201e34a98761715e5","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into jared/update-ug-view-students","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a29fd7a4a309efd94b08a3c4381f87a8bef16348","isMergeCommit":true,"messageTitle":"Merge pull request #35 from Jajared/jared/update-ug-view-students","messageBody":"Update user guide for view students and delete student","fileTypesAndContributionMap":{}},{"hash":"47c27cc8483bcd310fe4f924318d9feda18afd76","isMergeCommit":false,"messageTitle":"Update User Stories","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":6}}},{"hash":"725f019bb0766e132855c54f7db5bc594f465392","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into update-userguide","messageBody":"","fileTypesAndContributionMap":{}}]}],"Zack-Tay":[{"date":"2024-02-28","commitResults":[{"hash":"124e22b073232d9f0175858f6f45acc08554b81a","isMergeCommit":false,"messageTitle":"Update AboutUs.md and Add profile image (#22)","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}}]},{"date":"2024-03-04","commitResults":[{"hash":"80ed63422879aa59e7c881c7571644b9d1bca339","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md define use cases (#29)","messageBody":"* Define use cases 1 to 4 of TAHelper.\r\n* Add extensions to handle exception cases.","fileTypesAndContributionMap":{"docs":{"insertions":79,"deletions":3}}}]},{"date":"2024-03-05","commitResults":[{"hash":"130dc070adaff01de9751263860d1f5a8c3759a2","isMergeCommit":true,"messageTitle":"Merge pull request #36 from qinxutan/update-userguide","messageBody":"Update User Stories in DeveloperGuide.md","fileTypesAndContributionMap":{}}]}],"Jajared":[{"date":"2024-02-25","commitResults":[{"hash":"7b58c9a89dddf1ab0b9c028c86724e4fde40f9c1","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":9,"deletions":9}}},{"hash":"9df8ccacfe7bef4b106a55d0386fcdfc4b74805e","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":40,"deletions":10}}}]},{"date":"2024-03-05","commitResults":[{"hash":"2c481ab2424fbce6d8aa94e6971600dced4758bc","isMergeCommit":false,"messageTitle":"refactor: Update user image","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":14,"deletions":13}}},{"hash":"0e57535769744904ec281aef2e61fca0ff87f9a8","isMergeCommit":false,"messageTitle":"docs: Update ug for view students and delete student","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":84,"deletions":54}}}]}],"mahadhir247":[{"date":"2024-02-28","commitResults":[{"hash":"724c28bc143ea9be0650fb3ca3c36a0aeb076a3c","isMergeCommit":false,"messageTitle":"Add profile picture and Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"e1e643722b1c58bbf1b2226aca7c2f09ae64b12f","isMergeCommit":true,"messageTitle":"Merge pull request #23 from mahadhir247/master","messageBody":"Add profile picture and Update AboutUs.md","fileTypesAndContributionMap":{}}]}],"whelan-low":[{"date":"2024-02-25","commitResults":[{"hash":"8ef80750b53c2f5bc5b75948023b8b9dea6d3bb2","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"758d9336292f5f444d18c572fda28b62cc1396d3","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"c59bb41cc1b3aa6fbb17955a02e8312b6c9ffb3a","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"c77d366cb59bb562cb3137a30dd231a1d92be3af","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":5}}},{"hash":"c67b3a97551c9b4a118d76e38cd25a515ddb9a6a","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":5}}},{"hash":"66220294ee0622a4d6b9257e20682ab23a58500d","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":2}}}]},{"date":"2024-02-29","commitResults":[{"hash":"3f01b06e9f785754de7d4ed7805e1159a883c4ef","isMergeCommit":false,"messageTitle":"Added user guide section for add and delete classes (#25)","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":23,"deletions":2}}},{"hash":"b783a968501fdb14e2b65105b639747afb0c2a54","isMergeCommit":false,"messageTitle":"Update Use cases for developer guide (#24)","messageBody":"Co-authored-by: Jajabonks \u003c84561814+Jajared@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"docs":{"insertions":18,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"qinxutan":{"docs":51,"functional-code":0,"test-code":0},"Zack-Tay":{"docs":77,"functional-code":0,"test-code":0},"Jajared":{"docs":140,"functional-code":0,"test-code":0},"mahadhir247":{"docs":2,"functional-code":0,"test-code":0},"whelan-low":{"docs":42,"functional-code":0,"test-code":0}},"authorContributionVariance":{"qinxutan":1109.2427,"Zack-Tay":510.30563,"Jajared":2277.0762,"mahadhir247":1.2222221,"whelan-low":192.07635},"authorDisplayNameMap":{"qinxutan":"CS2103T-T09-4 TAN ..N XU","Zack-Tay":"CS2103T-T09-4 TAY .. KAI","Jajared":"CS2103T-T09-4 JARE.. JIE","mahadhir247":"CS2103T-T09-4 MAHA..MAIL","whelan-low":"CS2103T-T09-4 LOW ..ELAN"}} +{"authorDailyContributionsMap":{"qinxutan":[{"date":"2024-02-25","commitResults":[{"hash":"8cf8561c7e10bfff4fa6fc2f18d6c9dd01fb85a6","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"7b8fb6cc9a5f60b76e537592ec7eb9dd9c641e06","isMergeCommit":true,"messageTitle":"Merge pull request #16 from qinxutan/update-aboutus","messageBody":"Update AboutUs.md","fileTypesAndContributionMap":{}},{"hash":"9ba53f8ad0bea91b3574e3021ddb93e2d9fb2831","isMergeCommit":true,"messageTitle":"Merge pull request #1 from AY2324S2-CS2103T-T09-4/master","messageBody":"Merge updates","fileTypesAndContributionMap":{}},{"hash":"13310ca30632f59453ae7af56a79f1273d579e24","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"b5d4ef6f2d25acef07fb77067b9aa4f42ddf8e5b","isMergeCommit":true,"messageTitle":"Merge pull request #18 from qinxutan/update-aboutus","messageBody":"Update AboutUs.md","fileTypesAndContributionMap":{}},{"hash":"7c49fe99cc4929cae3ac8b8ad88a98ce12ea52fc","isMergeCommit":false,"messageTitle":"Edit UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":10,"deletions":23}}},{"hash":"5953e52547f50c92a46d63d5033290df9a8a4d1e","isMergeCommit":true,"messageTitle":"Merge pull request #19 from qinxutan/update-userguide","messageBody":"Edit UserGuide.md","fileTypesAndContributionMap":{}},{"hash":"322ed9a1ee050961b6a2de83a47fd609d9a010b7","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":32,"deletions":19}}},{"hash":"66b392245bd82e6b4623866838c4c4de7bda58c9","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":23,"deletions":6}}},{"hash":"47c1a3a8b831393efbd00cda9c4dd2c3fd207b7a","isMergeCommit":true,"messageTitle":"Merge pull request #20 from qinxutan/update-developerguide","messageBody":"Update DeveloperGuide.md","fileTypesAndContributionMap":{}},{"hash":"8d33257b0c6979035a45cdc8d2e61c6744fd017e","isMergeCommit":true,"messageTitle":"Merge pull request #21 from qinxutan/update-userguide","messageBody":"Update UserGuide.md","fileTypesAndContributionMap":{}}]},{"date":"2024-03-05","commitResults":[{"hash":"f0887f9aee1f9d42fb27c8655ba1e1e4593aa3e2","isMergeCommit":true,"messageTitle":"Merge pull request #2 from AY2324S2-CS2103T-T09-4/master","messageBody":"merge","fileTypesAndContributionMap":{}},{"hash":"f55ae2dd8279bb7ed9b18d5116bd694b87a2e2af","isMergeCommit":true,"messageTitle":"Merge pull request #33 from Jajared/jared/update-about-us","messageBody":"Update about us","fileTypesAndContributionMap":{}},{"hash":"14b76a0aef7cded69a32b4c11a9039eba0cdb6d7","isMergeCommit":true,"messageTitle":"Merge pull request #3 from AY2324S2-CS2103T-T09-4/master","messageBody":"Merge","fileTypesAndContributionMap":{}},{"hash":"d2dc77c45f9d0017b974509201e34a98761715e5","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into jared/update-ug-view-students","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a29fd7a4a309efd94b08a3c4381f87a8bef16348","isMergeCommit":true,"messageTitle":"Merge pull request #35 from Jajared/jared/update-ug-view-students","messageBody":"Update user guide for view students and delete student","fileTypesAndContributionMap":{}},{"hash":"47c27cc8483bcd310fe4f924318d9feda18afd76","isMergeCommit":false,"messageTitle":"Update User Stories","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":6}}},{"hash":"725f019bb0766e132855c54f7db5bc594f465392","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into update-userguide","messageBody":"","fileTypesAndContributionMap":{}}]}],"Zack-Tay":[{"date":"2024-02-28","commitResults":[{"hash":"124e22b073232d9f0175858f6f45acc08554b81a","isMergeCommit":false,"messageTitle":"Update AboutUs.md and Add profile image (#22)","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}}]},{"date":"2024-03-04","commitResults":[{"hash":"80ed63422879aa59e7c881c7571644b9d1bca339","isMergeCommit":false,"messageTitle":"Update DeveloperGuide.md define use cases (#29)","messageBody":"* Define use cases 1 to 4 of TAHelper.\r\n* Add extensions to handle exception cases.","fileTypesAndContributionMap":{"docs":{"insertions":79,"deletions":3}}}]},{"date":"2024-03-05","commitResults":[{"hash":"130dc070adaff01de9751263860d1f5a8c3759a2","isMergeCommit":true,"messageTitle":"Merge pull request #36 from qinxutan/update-userguide","messageBody":"Update User Stories in DeveloperGuide.md","fileTypesAndContributionMap":{}},{"hash":"79f9ea1582e2978dcf7046b75c30232524c16f66","isMergeCommit":false,"messageTitle":"Update Glossary and NFR in DeveloperGuide.md (#38)","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":30,"deletions":19}}},{"hash":"0e6ea15cb7625ebd488f75efe48860533ca2a66b","isMergeCommit":true,"messageTitle":"Merge pull request #37 from Jajared/jared/update-dg-use-cases","messageBody":"Update use cases in developers guide","fileTypesAndContributionMap":{}}]}],"Jajared":[{"date":"2024-02-25","commitResults":[{"hash":"7b58c9a89dddf1ab0b9c028c86724e4fde40f9c1","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":9,"deletions":9}}},{"hash":"9df8ccacfe7bef4b106a55d0386fcdfc4b74805e","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":40,"deletions":10}}}]},{"date":"2024-03-05","commitResults":[{"hash":"2c481ab2424fbce6d8aa94e6971600dced4758bc","isMergeCommit":false,"messageTitle":"refactor: Update user image","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":14,"deletions":13}}},{"hash":"0e57535769744904ec281aef2e61fca0ff87f9a8","isMergeCommit":false,"messageTitle":"docs: Update ug for view students and delete student","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":84,"deletions":54}}},{"hash":"f0ba81f55907ab163736d13709c05e038e8cbbdf","isMergeCommit":false,"messageTitle":"docs: Update use cases","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":160,"deletions":148}}},{"hash":"4de84173a251707c6d7e179f8282d808db565cfb","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into jared/update-dg-use-cases","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0525f4d849bb83c1ae2232fd5d8bcaf479d48b9e","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into jared/update-dg-use-cases","messageBody":"","fileTypesAndContributionMap":{}}]}],"mahadhir247":[{"date":"2024-02-28","commitResults":[{"hash":"724c28bc143ea9be0650fb3ca3c36a0aeb076a3c","isMergeCommit":false,"messageTitle":"Add profile picture and Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"e1e643722b1c58bbf1b2226aca7c2f09ae64b12f","isMergeCommit":true,"messageTitle":"Merge pull request #23 from mahadhir247/master","messageBody":"Add profile picture and Update AboutUs.md","fileTypesAndContributionMap":{}}]}],"whelan-low":[{"date":"2024-02-25","commitResults":[{"hash":"8ef80750b53c2f5bc5b75948023b8b9dea6d3bb2","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"758d9336292f5f444d18c572fda28b62cc1396d3","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"c59bb41cc1b3aa6fbb17955a02e8312b6c9ffb3a","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"c77d366cb59bb562cb3137a30dd231a1d92be3af","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":5}}},{"hash":"c67b3a97551c9b4a118d76e38cd25a515ddb9a6a","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":5}}},{"hash":"66220294ee0622a4d6b9257e20682ab23a58500d","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":2}}}]},{"date":"2024-02-29","commitResults":[{"hash":"3f01b06e9f785754de7d4ed7805e1159a883c4ef","isMergeCommit":false,"messageTitle":"Added user guide section for add and delete classes (#25)","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":23,"deletions":2}}},{"hash":"b783a968501fdb14e2b65105b639747afb0c2a54","isMergeCommit":false,"messageTitle":"Update Use cases for developer guide (#24)","messageBody":"Co-authored-by: Jajabonks \u003c84561814+Jajared@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"docs":{"insertions":18,"deletions":0}}}]}]},"authorFileTypeContributionMap":{"qinxutan":{"docs":34,"functional-code":0,"test-code":0},"Zack-Tay":{"docs":33,"functional-code":0,"test-code":0},"Jajared":{"docs":283,"functional-code":0,"test-code":0},"mahadhir247":{"docs":2,"functional-code":0,"test-code":0},"whelan-low":{"docs":29,"functional-code":0,"test-code":0}},"authorContributionVariance":{"qinxutan":1109.2427,"Zack-Tay":635.1875,"Jajared":16996.908,"mahadhir247":1.2222221,"whelan-low":192.07635},"authorDisplayNameMap":{"qinxutan":"CS2103T-T09-4 TAN ..N XU","Zack-Tay":"CS2103T-T09-4 TAY .. KAI","Jajared":"CS2103T-T09-4 JARE.. JIE","mahadhir247":"CS2103T-T09-4 MAHA..MAIL","whelan-low":"CS2103T-T09-4 LOW ..ELAN"}} diff --git a/AY2324S2-CS2103T-T13-3_tp_master/authorship.json b/AY2324S2-CS2103T-T13-3_tp_master/authorship.json index e10d7ecd..eef7f9e2 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":"ibnu2651"},"content":"### Jane Doe","lastModifiedDate":"2024-03-03"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/johndoe.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2020-06-17"},{"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":"ibnu2651"},"content":"* Role: Team Lead","lastModifiedDate":"2024-03-03"},{"lineNumber":42,"author":{"gitId":"-"},"content":"* Responsibilities: UI","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"kaiyi27":4,"ibnu2651":6,"-":32}},{"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":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":386,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":387,"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":388,"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":389,"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":390,"author":{"gitId":"ibnu2651"},"content":"4. The response to any use action should become visible within 5 seconds.","lastModifiedDate":"2024-03-03"},{"lineNumber":391,"author":{"gitId":"ibnu2651"},"content":"5. Should have a user-friendly interface that is easy to navigate and understand.","lastModifiedDate":"2024-03-03"},{"lineNumber":392,"author":{"gitId":"ibnu2651"},"content":"6. Should be stable and not crash or lose data under normal use.","lastModifiedDate":"2024-03-03"},{"lineNumber":393,"author":{"gitId":"ibnu2651"},"content":"","lastModifiedDate":"2024-03-03"},{"lineNumber":394,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":395,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":396,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":397,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":398,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":399,"author":{"gitId":"-"},"content":"* **Mainstream OS**: Windows, Linux, Unix, MacOS","lastModifiedDate":"2024-02-09"},{"lineNumber":400,"author":{"gitId":"-"},"content":"* **Private contact detail**: A contact detail that is not meant to be shared with others","lastModifiedDate":"2020-05-23"},{"lineNumber":401,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":402,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":403,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":404,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":405,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":406,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":407,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":408,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":409,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":410,"author":{"gitId":"-"},"content":"**Note:** These instructions only provide a starting point for testers to work on;","lastModifiedDate":"2023-09-12"},{"lineNumber":411,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":412,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":413,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":414,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":415,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":416,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":417,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":418,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":419,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":420,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":421,"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":422,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":423,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":424,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":425,"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":426,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":427,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":428,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","lastModifiedDate":"2020-05-23"},{"lineNumber":429,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":430,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":431,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":432,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":433,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":434,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":435,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":436,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":437,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":438,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":439,"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":440,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":441,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":442,"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":443,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":444,"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":445,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":446,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":447,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":448,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":449,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":450,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":451,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":452,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":453,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":454,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":455,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"kaiyi27":49,"ibnu2651":20,"-":386}},{"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":"-"},"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}}] diff --git a/AY2324S2-CS2103T-T13-3_tp_master/commits.json b/AY2324S2-CS2103T-T13-3_tp_master/commits.json index 55be90c3..3c4aeb4b 100644 --- a/AY2324S2-CS2103T-T13-3_tp_master/commits.json +++ b/AY2324S2-CS2103T-T13-3_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Shauryan123":[],"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}}}]}],"justincred":[]},"authorFileTypeContributionMap":{"Shauryan123":{"docs":0,"functional-code":0,"test-code":0},"kaiyi27":{"docs":53,"functional-code":0,"test-code":0},"ibnu2651":{"docs":29,"functional-code":0,"test-code":0},"justincred":{"docs":0,"functional-code":0,"test-code":0}},"authorContributionVariance":{"Shauryan123":0.0,"kaiyi27":266.49,"ibnu2651":324.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":{}}]}],"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"}} diff --git a/AY2324S2-CS2103T-T15-1_tp_master/authorship.json b/AY2324S2-CS2103T-T15-1_tp_master/authorship.json index e2ad7867..96db15f4 100644 --- a/AY2324S2-CS2103T-T15-1_tp_master/authorship.json +++ b/AY2324S2-CS2103T-T15-1_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":"ararchch"},"content":"[![codecov](https://codecov.io/gh/AY2324S2-CS2103T-T15-1/tp/graph/badge.svg?token\u003dTJTWL1WNJF)](https://codecov.io/gh/AY2324S2-CS2103T-T15-1/tp)","lastModifiedDate":"2024-02-26"},{"lineNumber":4,"author":{"gitId":"ararchch"},"content":"","lastModifiedDate":"2024-02-26"},{"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":{"-":14,"ararchch":2}},{"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":"alfaloo"},"content":"### Zhiyang Lu","lastModifiedDate":"2024-03-03"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":14,"author":{"gitId":"alfaloo"},"content":"\u003cimg src\u003d\"images/alfaloo.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-03"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"alfaloo"},"content":"[[homepage](www.linkedin.com/in/zhiyanglu)]","lastModifiedDate":"2024-03-03"},{"lineNumber":17,"author":{"gitId":"alfaloo"},"content":"[[github](https://github.com/alfaloo)]","lastModifiedDate":"2024-03-03"},{"lineNumber":18,"author":{"gitId":"alfaloo"},"content":"[[portfolio](https://github.com/alfaloo/CV/blob/main/Zhiyang_Lu_Resume.pdf)]","lastModifiedDate":"2024-03-03"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"officialchengyud"},"content":"* Role: Deliverables and Deadline / Integration","lastModifiedDate":"2024-03-05"},{"lineNumber":21,"author":{"gitId":"officialchengyud"},"content":"* Responsibilities: Ensure project deliverables are done on time and in the right format. In charge of versioning of the code, maintaining the code repository, integrating various parts of the software to create a whole.","lastModifiedDate":"2024-03-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"officialchengyud"},"content":"### Cheng-Yu Dong","lastModifiedDate":"2024-03-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":25,"author":{"gitId":"officialchengyud"},"content":"\u003cimg src\u003d\"images/officialchengyud.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"officialchengyud"},"content":"[[github](https://github.com/officialchengyud)]","lastModifiedDate":"2024-03-05"},{"lineNumber":29,"author":{"gitId":"officialchengyud"},"content":"[[portfolio](www.linkedin.com/in/dongchengyu)]","lastModifiedDate":"2024-03-05"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":31,"author":{"gitId":"officialchengyud"},"content":"* Role: Code Quality / Integration","lastModifiedDate":"2024-03-05"},{"lineNumber":32,"author":{"gitId":"officialchengyud"},"content":"* Responsibilities: Looks after code quality, ensures adherence to coding standards, etc. In charge of versioning of the code, maintaining the code repository, integrating various parts of the software to create a whole.","lastModifiedDate":"2024-03-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"Kappaccinoh"},"content":"### Lim Jia Wei","lastModifiedDate":"2024-03-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"Kappaccinoh"},"content":"\u003cimg src\u003d\"images/kappaccinoh.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"Kappaccinoh"},"content":"[[github](http://github.com/Kappaccinoh)] [[portfolio](https://www.linkedin.com/in/jia-wei-lim-747037181/)]","lastModifiedDate":"2024-03-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":40,"author":{"gitId":"Kappaccinoh"},"content":"* Role: Scheduling / Testing","lastModifiedDate":"2024-03-05"},{"lineNumber":41,"author":{"gitId":"Kappaccinoh"},"content":"* Responsibilities: Ensures the testing of the project is done properly and on time. In charge of defining, assigning, and tracking project tasks.","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"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":"### James Doe","lastModifiedDate":"2020-06-17"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/johndoe.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2020-06-17"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":57,"author":{"gitId":"-"},"content":"[[github](http://github.com/johndoe)]","lastModifiedDate":"2020-06-17"},{"lineNumber":58,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":60,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":61,"author":{"gitId":"-"},"content":"* Responsibilities: UI","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"alfaloo":5,"officialchengyud":8,"Kappaccinoh":5,"-":43}}] +[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"ararchch"},"content":"[![CI Status](https://github.com/AY2324S2-CS2103T-T15-1/tp/workflows/Java%20CI/badge.svg)](https://github.com/AY2324S2-CS2103T-T15-1/tp/actions)","lastModifiedDate":"2024-03-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":3,"author":{"gitId":"ararchch"},"content":"[![codecov](https://codecov.io/gh/AY2324S2-CS2103T-T15-1/tp/graph/badge.svg?token\u003dTJTWL1WNJF)](https://codecov.io/gh/AY2324S2-CS2103T-T15-1/tp)","lastModifiedDate":"2024-02-26"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-26"},{"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":"ararchch"},"content":"# MediCLI: Hospital Patient Management System","lastModifiedDate":"2024-03-05"},{"lineNumber":8,"author":{"gitId":"ararchch"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":9,"author":{"gitId":"ararchch"},"content":"MediCLI is a patient management system designed for hospitals. MediCLI enables the management of patient, doctor, and appointment data.","lastModifiedDate":"2024-03-05"},{"lineNumber":10,"author":{"gitId":"ararchch"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":11,"author":{"gitId":"ararchch"},"content":"## Example usages:","lastModifiedDate":"2024-03-05"},{"lineNumber":12,"author":{"gitId":"ararchch"},"content":"1. Used by hospital clerks to manage hospital records for relevant stake holders.","lastModifiedDate":"2024-03-05"},{"lineNumber":13,"author":{"gitId":"ararchch"},"content":"2. Core functions offered include add, delete, query for patients, doctors and appointments.","lastModifiedDate":"2024-03-05"},{"lineNumber":14,"author":{"gitId":"ararchch"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":15,"author":{"gitId":"ararchch"},"content":"## Context of the project","lastModifiedDate":"2024-03-05"},{"lineNumber":16,"author":{"gitId":"ararchch"},"content":"* The project simulates an ongoing software project for a desktop application (called _MediCLI_) used for managing contact details.","lastModifiedDate":"2024-03-05"},{"lineNumber":17,"author":{"gitId":"ararchch"},"content":" * It is **written in OOP fashion**. It is meant as a project for a SE module to teach basic SE principles.","lastModifiedDate":"2024-03-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":" * It comes with a **reasonable level of user and developer documentation**.","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"ararchch"},"content":"* For the detailed documentation of this project, see the **[MediCLI Product Website](https://ay2324s2-cs2103t-t15-1.github.io/tp/UserGuide.html)**.","lastModifiedDate":"2024-03-05"},{"lineNumber":20,"author":{"gitId":"ararchch"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":21,"author":{"gitId":"ararchch"},"content":"This project is based on the AddressBook-Level3 project created by the [SE-EDU initiative](https://se-education.org).","lastModifiedDate":"2024-03-05"},{"lineNumber":22,"author":{"gitId":"ararchch"},"content":"","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"-":5,"ararchch":17}},{"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":"alfaloo"},"content":"### Zhiyang Lu","lastModifiedDate":"2024-03-03"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":14,"author":{"gitId":"alfaloo"},"content":"\u003cimg src\u003d\"images/alfaloo.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-03"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"alfaloo"},"content":"[[homepage](www.linkedin.com/in/zhiyanglu)]","lastModifiedDate":"2024-03-03"},{"lineNumber":17,"author":{"gitId":"alfaloo"},"content":"[[github](https://github.com/alfaloo)]","lastModifiedDate":"2024-03-03"},{"lineNumber":18,"author":{"gitId":"alfaloo"},"content":"[[portfolio](https://github.com/alfaloo/CV/blob/main/Zhiyang_Lu_Resume.pdf)]","lastModifiedDate":"2024-03-03"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"officialchengyud"},"content":"* Role: Deliverables and Deadline / Integration","lastModifiedDate":"2024-03-05"},{"lineNumber":21,"author":{"gitId":"officialchengyud"},"content":"* Responsibilities: Ensure project deliverables are done on time and in the right format. In charge of versioning of the code, maintaining the code repository, integrating various parts of the software to create a whole.","lastModifiedDate":"2024-03-05"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"officialchengyud"},"content":"### Cheng-Yu Dong","lastModifiedDate":"2024-03-05"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":25,"author":{"gitId":"officialchengyud"},"content":"\u003cimg src\u003d\"images/officialchengyud.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"officialchengyud"},"content":"[[github](https://github.com/officialchengyud)]","lastModifiedDate":"2024-03-05"},{"lineNumber":29,"author":{"gitId":"officialchengyud"},"content":"[[portfolio](www.linkedin.com/in/dongchengyu)]","lastModifiedDate":"2024-03-05"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":31,"author":{"gitId":"officialchengyud"},"content":"* Role: Code Quality / Integration","lastModifiedDate":"2024-03-05"},{"lineNumber":32,"author":{"gitId":"officialchengyud"},"content":"* Responsibilities: Looks after code quality, ensures adherence to coding standards, etc. In charge of versioning of the code, maintaining the code repository, integrating various parts of the software to create a whole.","lastModifiedDate":"2024-03-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":34,"author":{"gitId":"Kappaccinoh"},"content":"### Lim Jia Wei","lastModifiedDate":"2024-03-05"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":36,"author":{"gitId":"Kappaccinoh"},"content":"\u003cimg src\u003d\"images/kappaccinoh.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"Kappaccinoh"},"content":"[[github](http://github.com/Kappaccinoh)] [[portfolio](https://www.linkedin.com/in/jia-wei-lim-747037181/)]","lastModifiedDate":"2024-03-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":40,"author":{"gitId":"Kappaccinoh"},"content":"* Role: Scheduling / Testing","lastModifiedDate":"2024-03-05"},{"lineNumber":41,"author":{"gitId":"Kappaccinoh"},"content":"* Responsibilities: Ensures the testing of the project is done properly and on time. In charge of defining, assigning, and tracking project tasks.","lastModifiedDate":"2024-03-05"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":43,"author":{"gitId":"ararchch"},"content":"### Archit Goswami","lastModifiedDate":"2024-03-05"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":45,"author":{"gitId":"ararchch"},"content":"\u003cimg src\u003d\"images/ararchch.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"ararchch"},"content":"[[github](http://github.com/ararchch)]","lastModifiedDate":"2024-03-05"},{"lineNumber":48,"author":{"gitId":"ararchch"},"content":"[[portfolio](https://www.linkedin.com/in/architgos)]","lastModifiedDate":"2024-03-05"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":50,"author":{"gitId":"ararchch"},"content":"* Role: Team Lead, Documentation","lastModifiedDate":"2024-03-05"},{"lineNumber":51,"author":{"gitId":"ararchch"},"content":"* Responsibilities: Coordinating with team members, ensuring code is well documented.","lastModifiedDate":"2024-03-05"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"Alteqa"},"content":"### Eugene Luke Sim Ek Jin","lastModifiedDate":"2024-03-05"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"Alteqa"},"content":"\u003cimg src\u003d\"images/alteqa.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":57,"author":{"gitId":"Alteqa"},"content":"[[github](http://github.com/alteqa)]","lastModifiedDate":"2024-03-05"},{"lineNumber":58,"author":{"gitId":"Alteqa"},"content":"[[portfolio](https://www.linkedin.com/in/eugene-sim-866677188/)]","lastModifiedDate":"2024-03-05"},{"lineNumber":59,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":60,"author":{"gitId":"Alteqa"},"content":"* Role: Documentation, Testing, Intellij / Github Expert","lastModifiedDate":"2024-03-05"},{"lineNumber":61,"author":{"gitId":"Alteqa"},"content":"* Responsibilities: Ensures the testing of the project is done properly and on time. Responsible for the quality of various project documents. ","lastModifiedDate":"2024-03-05"},{"lineNumber":62,"author":{"gitId":"Alteqa"},"content":"* Helps other team member with matters related to Intellij, Github and Sourcetree tool.","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"Alteqa":7,"alfaloo":5,"officialchengyud":8,"Kappaccinoh":5,"-":31,"ararchch":6}},{"path":"docs/DeveloperGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":"layout: page","lastModifiedDate":"2020-05-23"},{"lineNumber":3,"author":{"gitId":"-"},"content":"title: Developer Guide","lastModifiedDate":"2020-05-23"},{"lineNumber":4,"author":{"gitId":"-"},"content":"---","lastModifiedDate":"2020-05-23"},{"lineNumber":5,"author":{"gitId":"-"},"content":"* Table of Contents","lastModifiedDate":"2020-05-23"},{"lineNumber":6,"author":{"gitId":"-"},"content":"{:toc}","lastModifiedDate":"2020-05-23"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":8,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":10,"author":{"gitId":"-"},"content":"## **Acknowledgements**","lastModifiedDate":"2021-07-30"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":12,"author":{"gitId":"-"},"content":"* {list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the original source as well}","lastModifiedDate":"2021-07-30"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":14,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2021-07-30"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":16,"author":{"gitId":"-"},"content":"## **Setting up, getting started**","lastModifiedDate":"2020-05-23"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"Refer to the guide [_Setting up and getting started_](SettingUp.md).","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":20,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"## **Design**","lastModifiedDate":"2020-05-23"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":"\u003cdiv markdown\u003d\"span\" class\u003d\"alert alert-primary\"\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"-"},"content":":bulb: **Tip:** The `.puml` files used to create diagrams in this document `docs/diagrams` folder. Refer to the [_PlantUML Tutorial_ at se-edu/guides](https://se-education.org/guides/tutorials/plantUml.html) to learn how to create and edit diagrams.","lastModifiedDate":"2023-09-03"},{"lineNumber":27,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":29,"author":{"gitId":"-"},"content":"### Architecture","lastModifiedDate":"2021-07-31"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/ArchitectureDiagram.png\" width\u003d\"280\" /\u003e","lastModifiedDate":"2021-07-31"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":33,"author":{"gitId":"-"},"content":"The ***Architecture Diagram*** given above explains the high-level design of the App.","lastModifiedDate":"2021-07-31"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":35,"author":{"gitId":"-"},"content":"Given below is a quick overview of main components and how they interact with each other.","lastModifiedDate":"2021-07-31"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":37,"author":{"gitId":"-"},"content":"**Main components of the architecture**","lastModifiedDate":"2021-07-31"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":39,"author":{"gitId":"-"},"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":"alfaloo"},"content":"|-----------|--------------------------------------------|--------------------------------------------|-------------------------------------------------------------------|","lastModifiedDate":"2024-03-05"},{"lineNumber":280,"author":{"gitId":"alfaloo"},"content":"| `* * *` | hospital clerk | add patients | handle incoming patients when handling emergency call-ins |","lastModifiedDate":"2024-03-05"},{"lineNumber":281,"author":{"gitId":"alfaloo"},"content":"| `* * *` | hospital clerk | delete patients | remove old patients to prevent clogging of system |","lastModifiedDate":"2024-03-05"},{"lineNumber":282,"author":{"gitId":"alfaloo"},"content":"| `* * *` | hospital clerk | add doctors | register new doctors as they get hired |","lastModifiedDate":"2024-03-05"},{"lineNumber":283,"author":{"gitId":"alfaloo"},"content":"| `* * *` | hospital clerk | delete doctors | remove previous doctors that have left the hospital |","lastModifiedDate":"2024-03-05"},{"lineNumber":284,"author":{"gitId":"alfaloo"},"content":"| `* * *` | hospital clerk | create appointments | arrange a meeting time between a doctor and a patient |","lastModifiedDate":"2024-03-05"},{"lineNumber":285,"author":{"gitId":"alfaloo"},"content":"| `* * *` | hospital clerk | delete appointments | remove a meeting time if either party becomes unavailable |","lastModifiedDate":"2024-03-05"},{"lineNumber":286,"author":{"gitId":"alfaloo"},"content":"| `* * *` | hospital clerk | query patient by name | retrieve their relevant information |","lastModifiedDate":"2024-03-05"},{"lineNumber":287,"author":{"gitId":"alfaloo"},"content":"| `* * *` | hospital clerk | query doctor by name | retrieve their relevant information |","lastModifiedDate":"2024-03-05"},{"lineNumber":288,"author":{"gitId":"alfaloo"},"content":"| `* *` | hospital clerk | query appointment by patient | look up what appointments a patient has to attend |","lastModifiedDate":"2024-03-05"},{"lineNumber":289,"author":{"gitId":"alfaloo"},"content":"| `* *` | hospital clerk | query appointment by doctor | look up what appointments a doctor has to service |","lastModifiedDate":"2024-03-05"},{"lineNumber":290,"author":{"gitId":"alfaloo"},"content":"| `*` | hospital clerk | query patient by other fields | retrieve patient information through other fields if they call-in |","lastModifiedDate":"2024-03-05"},{"lineNumber":291,"author":{"gitId":"alfaloo"},"content":"| `*` | hospital clerk | find available timings to book appointment | schedule a time that suits both the patient and doctor |","lastModifiedDate":"2024-03-05"},{"lineNumber":292,"author":{"gitId":"-"},"content":"","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":"officialchengyud"},"content":"(For all use cases below, the **System** is the `mediCLI` and the **Actor** is the `hospital clerk`, unless specified otherwise)","lastModifiedDate":"2024-03-05"},{"lineNumber":297,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":298,"author":{"gitId":"officialchengyud"},"content":"**Use case: Add a patient**","lastModifiedDate":"2024-03-05"},{"lineNumber":299,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":300,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2020-05-23"},{"lineNumber":301,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":302,"author":{"gitId":"officialchengyud"},"content":"1. Hospital clerk enters patient data","lastModifiedDate":"2024-03-05"},{"lineNumber":303,"author":{"gitId":"officialchengyud"},"content":"2. mediCLI adds the patient into database","lastModifiedDate":"2024-03-05"},{"lineNumber":304,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":305,"author":{"gitId":"-"},"content":"Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":306,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":307,"author":{"gitId":"-"},"content":"**Extensions**","lastModifiedDate":"2020-05-23"},{"lineNumber":308,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":309,"author":{"gitId":"officialchengyud"},"content":"* 1a. The entered patient data is not in the correct format","lastModifiedDate":"2024-03-05"},{"lineNumber":310,"author":{"gitId":"officialchengyud"},"content":" * *1a1. mediCLI shows an error message","lastModifiedDate":"2024-03-05"},{"lineNumber":311,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"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":"","lastModifiedDate":"2020-05-23"},{"lineNumber":316,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":317,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":318,"author":{"gitId":"officialchengyud"},"content":"**Use case: Delete a patient**","lastModifiedDate":"2024-03-05"},{"lineNumber":319,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":320,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":321,"author":{"gitId":"officialchengyud"},"content":"**MSS**","lastModifiedDate":"2024-03-05"},{"lineNumber":322,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":323,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":324,"author":{"gitId":"officialchengyud"},"content":"1. Hospital clerk requests to list persons","lastModifiedDate":"2024-03-05"},{"lineNumber":325,"author":{"gitId":"officialchengyud"},"content":"2. mediCLI shows a list of persons","lastModifiedDate":"2024-03-05"},{"lineNumber":326,"author":{"gitId":"officialchengyud"},"content":"3. Hospital clerk requests to delete a specific patient in the list","lastModifiedDate":"2024-03-05"},{"lineNumber":327,"author":{"gitId":"officialchengyud"},"content":"4. mediCLI deletes the patient","lastModifiedDate":"2024-03-05"},{"lineNumber":328,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":329,"author":{"gitId":"officialchengyud"},"content":"Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":330,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":331,"author":{"gitId":"-"},"content":"**Extensions**","lastModifiedDate":"2024-03-05"},{"lineNumber":332,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":333,"author":{"gitId":"-"},"content":"* 2a. The list is empty.","lastModifiedDate":"2024-03-05"},{"lineNumber":334,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":335,"author":{"gitId":"officialchengyud"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":336,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":337,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":338,"author":{"gitId":"-"},"content":"* 3a. The given index is invalid.","lastModifiedDate":"2024-03-05"},{"lineNumber":339,"author":{"gitId":"officialchengyud"},"content":" * 3a1. mediCLI shows an error message.","lastModifiedDate":"2024-03-05"},{"lineNumber":340,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":341,"author":{"gitId":"officialchengyud"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":342,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":343,"author":{"gitId":"officialchengyud"},"content":"**Use case: Create an appointment**","lastModifiedDate":"2024-03-05"},{"lineNumber":344,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":345,"author":{"gitId":"officialchengyud"},"content":"**MSS**","lastModifiedDate":"2024-03-05"},{"lineNumber":346,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":347,"author":{"gitId":"officialchengyud"},"content":"1. Hospital clerk needs to create appointment between doctor and patient","lastModifiedDate":"2024-03-05"},{"lineNumber":348,"author":{"gitId":"officialchengyud"},"content":"2. Hospital clerk enters doctor and patient details","lastModifiedDate":"2024-03-05"},{"lineNumber":349,"author":{"gitId":"officialchengyud"},"content":"3. mediCLI creates the appointment","lastModifiedDate":"2024-03-05"},{"lineNumber":350,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":351,"author":{"gitId":"officialchengyud"},"content":"Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":352,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":353,"author":{"gitId":"officialchengyud"},"content":"**Use case: Delete an appointment**","lastModifiedDate":"2024-03-05"},{"lineNumber":354,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":355,"author":{"gitId":"officialchengyud"},"content":"**MSS**","lastModifiedDate":"2024-03-05"},{"lineNumber":356,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":357,"author":{"gitId":"officialchengyud"},"content":"1. Hospital clerk needs to delete appointment between doctor and patient","lastModifiedDate":"2024-03-05"},{"lineNumber":358,"author":{"gitId":"officialchengyud"},"content":"2. Hospital clerk enters appointment id","lastModifiedDate":"2024-03-05"},{"lineNumber":359,"author":{"gitId":"officialchengyud"},"content":"3. mediCLI deletes the appointment","lastModifiedDate":"2024-03-05"},{"lineNumber":360,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":361,"author":{"gitId":"officialchengyud"},"content":"Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":362,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":363,"author":{"gitId":"officialchengyud"},"content":"**Use case: Query patient by name**","lastModifiedDate":"2024-03-05"},{"lineNumber":364,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":365,"author":{"gitId":"officialchengyud"},"content":"**MSS**","lastModifiedDate":"2024-03-05"},{"lineNumber":366,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":367,"author":{"gitId":"officialchengyud"},"content":"1. Hospital clerk needs to search for patient","lastModifiedDate":"2024-03-05"},{"lineNumber":368,"author":{"gitId":"officialchengyud"},"content":"2. Hospital clerk enters patient name","lastModifiedDate":"2024-03-05"},{"lineNumber":369,"author":{"gitId":"officialchengyud"},"content":"3. mediCLI lists patients with supplied name","lastModifiedDate":"2024-03-05"},{"lineNumber":370,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":371,"author":{"gitId":"officialchengyud"},"content":"Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":372,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":373,"author":{"gitId":"officialchengyud"},"content":"**Extensions**","lastModifiedDate":"2024-03-05"},{"lineNumber":374,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":375,"author":{"gitId":"officialchengyud"},"content":"* 3a. The list is empty","lastModifiedDate":"2024-03-05"},{"lineNumber":376,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":377,"author":{"gitId":"officialchengyud"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":378,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":379,"author":{"gitId":"officialchengyud"},"content":"**Use case: Query appointments by patient**","lastModifiedDate":"2024-03-05"},{"lineNumber":380,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":381,"author":{"gitId":"officialchengyud"},"content":"**MSS**","lastModifiedDate":"2024-03-05"},{"lineNumber":382,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":383,"author":{"gitId":"officialchengyud"},"content":"1. Hospital clerk needs to search for appointment by patient","lastModifiedDate":"2024-03-05"},{"lineNumber":384,"author":{"gitId":"officialchengyud"},"content":"2. Hospital clerk enters patient name","lastModifiedDate":"2024-03-05"},{"lineNumber":385,"author":{"gitId":"officialchengyud"},"content":"3. mediCLI lists relevant appointments","lastModifiedDate":"2024-03-05"},{"lineNumber":386,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":387,"author":{"gitId":"officialchengyud"},"content":"Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":388,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":389,"author":{"gitId":"officialchengyud"},"content":"**Extensions**","lastModifiedDate":"2024-03-05"},{"lineNumber":390,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":391,"author":{"gitId":"officialchengyud"},"content":"* 3a. The list is empty","lastModifiedDate":"2024-03-05"},{"lineNumber":392,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":393,"author":{"gitId":"officialchengyud"},"content":" Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":394,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":395,"author":{"gitId":"officialchengyud"},"content":"**Use case: Query appointments by doctor**","lastModifiedDate":"2024-03-05"},{"lineNumber":396,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":397,"author":{"gitId":"officialchengyud"},"content":"**MSS**","lastModifiedDate":"2024-03-05"},{"lineNumber":398,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":399,"author":{"gitId":"officialchengyud"},"content":"1. Hospital clerk needs to search for appointment by doctor","lastModifiedDate":"2024-03-05"},{"lineNumber":400,"author":{"gitId":"officialchengyud"},"content":"2. Hospital clerk enters doctor name","lastModifiedDate":"2024-03-05"},{"lineNumber":401,"author":{"gitId":"officialchengyud"},"content":"3. mediCLI lists relevant appointments","lastModifiedDate":"2024-03-05"},{"lineNumber":402,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":403,"author":{"gitId":"officialchengyud"},"content":"Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":404,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":405,"author":{"gitId":"officialchengyud"},"content":"**Extensions**","lastModifiedDate":"2024-03-05"},{"lineNumber":406,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":407,"author":{"gitId":"officialchengyud"},"content":"* 3a. The list is empty","lastModifiedDate":"2024-03-05"},{"lineNumber":408,"author":{"gitId":"officialchengyud"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":409,"author":{"gitId":"officialchengyud"},"content":"Use case ends.","lastModifiedDate":"2024-03-05"},{"lineNumber":410,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":411,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":412,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":413,"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":414,"author":{"gitId":"officialchengyud"},"content":"2. Should be able to hold up to 1000 medical staff without a noticeable sluggishness in performance for typical usage.","lastModifiedDate":"2024-03-05"},{"lineNumber":415,"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":416,"author":{"gitId":"officialchengyud"},"content":"4. mediCLI should be easy to integrate with existing medical database systems so that staff can immediately switch to the new app.","lastModifiedDate":"2024-03-05"},{"lineNumber":417,"author":{"gitId":"officialchengyud"},"content":"5. Comprehensive documentation should be provided, including user guides, command references, and troubleshooting resources.","lastModifiedDate":"2024-03-05"},{"lineNumber":418,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":419,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":420,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":421,"author":{"gitId":"officialchengyud"},"content":"* **Private contact detail**: A contact detail that is not meant to be shared with others.","lastModifiedDate":"2024-03-05"},{"lineNumber":422,"author":{"gitId":"officialchengyud"},"content":"* **CLI**: Command Line Interface, a way of interacting with a computer program where the user enters commands into a terminal or command prompt.","lastModifiedDate":"2024-03-05"},{"lineNumber":423,"author":{"gitId":"officialchengyud"},"content":"* **GUI**: Graphical User Interface, a way of interacting with a computer program using graphical elements such as windows, buttons, and menus.","lastModifiedDate":"2024-03-05"},{"lineNumber":424,"author":{"gitId":"officialchengyud"},"content":"* **JSON**: JSON: JavaScript Object Notation, a lightweight data interchange format used to store and exchange data.","lastModifiedDate":"2024-03-05"},{"lineNumber":425,"author":{"gitId":"officialchengyud"},"content":"* **API**: Application Programming Interface, a set of rules and protocols for building and interacting with software applications.","lastModifiedDate":"2024-03-05"},{"lineNumber":426,"author":{"gitId":"officialchengyud"},"content":"* **UI**: User Interface, the visual part of a computer program that allows users to interact with it.","lastModifiedDate":"2024-03-05"},{"lineNumber":427,"author":{"gitId":"officialchengyud"},"content":"* **XML**: Extensible Markup Language, a markup language that defines rules for encoding documents in a format that is both human-readable and machine-readable.","lastModifiedDate":"2024-03-05"},{"lineNumber":428,"author":{"gitId":"officialchengyud"},"content":"* **MSS**: Main Success Scenario, the primary flow of events in a use case that leads to the desired outcome.","lastModifiedDate":"2024-03-05"},{"lineNumber":429,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":430,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":431,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":432,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":433,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":434,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":435,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":436,"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":437,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":438,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":439,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":440,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":441,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":442,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":443,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":444,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":445,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":446,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":447,"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":448,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":449,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":450,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":451,"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":452,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":453,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":454,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","lastModifiedDate":"2020-05-23"},{"lineNumber":455,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":456,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":457,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":458,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":459,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":460,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":461,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":462,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":463,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":464,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":465,"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":466,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":467,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":468,"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":469,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":470,"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":471,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":472,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":473,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":474,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":475,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":476,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":477,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":478,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":479,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":480,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":481,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"alfaloo":13,"officialchengyud":100,"-":368}}] diff --git a/AY2324S2-CS2103T-T15-1_tp_master/commits.json b/AY2324S2-CS2103T-T15-1_tp_master/commits.json index fc1e437a..0a8ad419 100644 --- a/AY2324S2-CS2103T-T15-1_tp_master/commits.json +++ b/AY2324S2-CS2103T-T15-1_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Alteqa":[],"alfaloo":[{"date":"2024-03-03","commitResults":[{"hash":"67b95db78d73eb8635635ca4c5415b5438516e99","isMergeCommit":false,"messageTitle":"Update AboutUs documentation","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":6}}}]}],"officialchengyud":[{"date":"2024-03-05","commitResults":[{"hash":"5e92fb214c54e73b8d07aadb638f01ebecb60ae4","isMergeCommit":true,"messageTitle":"Merge pull request #7 from alfaloo/documentation","messageBody":"Update AboutUs documentation","fileTypesAndContributionMap":{}},{"hash":"9cead3d4996ecdeeb1936418d00555e658f03d62","isMergeCommit":false,"messageTitle":"Add About Us","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":9,"deletions":8}}}]}],"Kappaccinoh":[{"date":"2024-03-05","commitResults":[{"hash":"4f2a67784cede5e06c110b64a665cdf519448a92","isMergeCommit":false,"messageTitle":"update about us","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":5}}}]}],"ararchch":[{"date":"2024-02-26","commitResults":[{"hash":"4815323a42e4bcdb030bfb7a0081fa34b1c4bcae","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"Include codecov badge","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":0}}}]},{"date":"2024-03-05","commitResults":[{"hash":"e2e7a4e1b616a7178867dcf6e961be95e8e0a374","isMergeCommit":true,"messageTitle":"Merge pull request #28 from Kappaccinoh/branch-update-documentation","messageBody":"update about us","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Alteqa":{"docs":0,"functional-code":0,"test-code":0},"alfaloo":{"docs":5,"functional-code":0,"test-code":0},"officialchengyud":{"docs":8,"functional-code":0,"test-code":0},"Kappaccinoh":{"docs":5,"functional-code":0,"test-code":0},"ararchch":{"docs":2,"functional-code":0,"test-code":0}},"authorContributionVariance":{"Alteqa":0.0,"alfaloo":12.909724,"officialchengyud":22.076387,"Kappaccinoh":7.6388893,"ararchch":0.3055555},"authorDisplayNameMap":{"Alteqa":"CS2103T-T15-1 EUGE.. JIN","alfaloo":"CS2103T-T15-1 LU Z..YANG","officialchengyud":"CS2103T-T15-1 DONG..G-YU","Kappaccinoh":"CS2103T-T15-1 LIM .. WEI","ararchch":"CS2103T-T15-1 ARCH..WAMI"}} +{"authorDailyContributionsMap":{"Alteqa":[{"date":"2024-03-05","commitResults":[{"hash":"f3a22a71b09ec1851a4a6bed96d3e3ef2d344de5","isMergeCommit":false,"messageTitle":"Update aboutus page","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":6}}},{"hash":"af990f6864612ba6553dc906d77db4201b7cbfae","isMergeCommit":true,"messageTitle":"Merge pull request #37 from ararchch/branch-Readme","messageBody":"Update readme","fileTypesAndContributionMap":{}}]}],"alfaloo":[{"date":"2024-03-03","commitResults":[{"hash":"67b95db78d73eb8635635ca4c5415b5438516e99","isMergeCommit":false,"messageTitle":"Update AboutUs documentation","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":6}}}]},{"date":"2024-03-05","commitResults":[{"hash":"15b0836221d5cd1b2f0614a68c5d81d799313ab3","isMergeCommit":true,"messageTitle":"Merge pull request #34 from ararchch/branch-AboutUs","messageBody":"Update AboutUs","fileTypesAndContributionMap":{}},{"hash":"dc4191e7a68ba6a6642962d792c02675d9b628c5","isMergeCommit":false,"messageTitle":"Update developer guide to include relevant user stories","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":14,"deletions":8}}},{"hash":"6f1721ae252b0664ac762c147271b4f8c70c3e04","isMergeCommit":true,"messageTitle":"Merge pull request #39 from Alteqa/master","messageBody":"Update aboutus page","fileTypesAndContributionMap":{}}]}],"officialchengyud":[{"date":"2024-03-05","commitResults":[{"hash":"5e92fb214c54e73b8d07aadb638f01ebecb60ae4","isMergeCommit":true,"messageTitle":"Merge pull request #7 from alfaloo/documentation","messageBody":"Update AboutUs documentation","fileTypesAndContributionMap":{}},{"hash":"9cead3d4996ecdeeb1936418d00555e658f03d62","isMergeCommit":false,"messageTitle":"Add About Us","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":9,"deletions":8}}},{"hash":"a1cb74ea322fb115fcf8aab068623f37f1e78782","isMergeCommit":false,"messageTitle":"Update DG Use Cases","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":31,"deletions":6}}},{"hash":"2e763e9695a1f0a62afd50f19c1fa5b4ff8cddd2","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S2-CS2103T-T15-1/tp into branch-update-DG","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1ccbfeea2bfdd2eb7ed2a3293e6c4c1a85b28964","isMergeCommit":false,"messageTitle":"Update DG for Use Cases, NFR and Glossary","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":91,"deletions":23}}}]}],"Kappaccinoh":[{"date":"2024-03-05","commitResults":[{"hash":"4f2a67784cede5e06c110b64a665cdf519448a92","isMergeCommit":false,"messageTitle":"update about us","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":5}}}]}],"ararchch":[{"date":"2024-02-26","commitResults":[{"hash":"4815323a42e4bcdb030bfb7a0081fa34b1c4bcae","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"Include codecov badge","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":0}}}]},{"date":"2024-03-05","commitResults":[{"hash":"e2e7a4e1b616a7178867dcf6e961be95e8e0a374","isMergeCommit":true,"messageTitle":"Merge pull request #28 from Kappaccinoh/branch-update-documentation","messageBody":"update about us","fileTypesAndContributionMap":{}},{"hash":"868c7c546955b704f7809899cfd9d8d688807c8e","isMergeCommit":false,"messageTitle":"Update AboutUs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":6}}},{"hash":"97666b31c575f594a6d4b1fdb9d81a99ded1b9bb","isMergeCommit":true,"messageTitle":"Merge pull request #30 from Kappaccinoh/updateReadMe","messageBody":"added updated UI","fileTypesAndContributionMap":{}},{"hash":"397f9e5471058db0f2be88a4c1ddcda7125903e5","isMergeCommit":true,"messageTitle":"Merge pull request #35 from alfaloo/documentation","messageBody":"Update developer guide to include relevant user stories","fileTypesAndContributionMap":{}},{"hash":"e3c1b682dccab422e90d69e6a3b08e75c88391d7","isMergeCommit":false,"messageTitle":"Update readme","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":16,"deletions":10}}}]}]},"authorFileTypeContributionMap":{"Alteqa":{"docs":7,"functional-code":0,"test-code":0},"alfaloo":{"docs":18,"functional-code":0,"test-code":0},"officialchengyud":{"docs":108,"functional-code":0,"test-code":0},"Kappaccinoh":{"docs":5,"functional-code":0,"test-code":0},"ararchch":{"docs":23,"functional-code":0,"test-code":0}},"authorContributionVariance":{"Alteqa":12.909722,"alfaloo":45.909725,"officialchengyud":2156.0,"Kappaccinoh":7.6388893,"ararchch":109.555565},"authorDisplayNameMap":{"Alteqa":"CS2103T-T15-1 EUGE.. JIN","alfaloo":"CS2103T-T15-1 LU Z..YANG","officialchengyud":"CS2103T-T15-1 DONG..G-YU","Kappaccinoh":"CS2103T-T15-1 LIM .. WEI","ararchch":"CS2103T-T15-1 ARCH..WAMI"}} diff --git a/AY2324S2-CS2103T-T16-3_tp_master/authorship.json b/AY2324S2-CS2103T-T16-3_tp_master/authorship.json index eb8e5084..ac84ed95 100644 --- a/AY2324S2-CS2103T-T16-3_tp_master/authorship.json +++ b/AY2324S2-CS2103T-T16-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":"[![codecov](https://codecov.io/gh/AY2324S2-CS2103T-T17-4/tp/graph/badge.svg?token\u003dLPV8FKMOGM)](https://codecov.io/gh/AY2324S2-CS2103T-T16-3/tp)","lastModifiedDate":"2024-02-13"},{"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":"maze508"},"content":"# Gourmet Grid","lastModifiedDate":"2024-03-05"},{"lineNumber":7,"author":{"gitId":"maze508"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":8,"author":{"gitId":"maze508"},"content":"## Description","lastModifiedDate":"2024-03-05"},{"lineNumber":9,"author":{"gitId":"maze508"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":10,"author":{"gitId":"maze508"},"content":"* The project simulates an ongoing software project for a desktop application (called _Gourmet Grid_) used for managing contact details.","lastModifiedDate":"2024-03-05"},{"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":"maze508"},"content":"* It is named `Gourmet Grid`","lastModifiedDate":"2024-03-05"},{"lineNumber":14,"author":{"gitId":"maze508"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":15,"author":{"gitId":"maze508"},"content":"## Main Features","lastModifiedDate":"2024-03-05"},{"lineNumber":16,"author":{"gitId":"maze508"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":17,"author":{"gitId":"maze508"},"content":"#### List All Contacts ","lastModifiedDate":"2024-03-05"},{"lineNumber":18,"author":{"gitId":"maze508"},"content":"\u003eFormat: `list`","lastModifiedDate":"2024-03-05"},{"lineNumber":19,"author":{"gitId":"maze508"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":20,"author":{"gitId":"maze508"},"content":"#### Add New Contacts","lastModifiedDate":"2024-03-05"},{"lineNumber":21,"author":{"gitId":"maze508"},"content":"\u003eFormat: `add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]`","lastModifiedDate":"2024-03-05"},{"lineNumber":22,"author":{"gitId":"maze508"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":23,"author":{"gitId":"maze508"},"content":"#### Delete Contacts","lastModifiedDate":"2024-03-05"},{"lineNumber":24,"author":{"gitId":"maze508"},"content":"\u003eFormat: `delete INDEX`","lastModifiedDate":"2024-03-05"},{"lineNumber":25,"author":{"gitId":"maze508"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":26,"author":{"gitId":"maze508"},"content":"#### Search Contacts By Name","lastModifiedDate":"2024-03-05"},{"lineNumber":27,"author":{"gitId":"maze508"},"content":"\u003eFormat: `find n/NAME`","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"-":7,"maze508":20}},{"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":"","lastModifiedDate":"2020-06-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":"## Project team","lastModifiedDate":"2020-06-07"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":13,"author":{"gitId":"gavingoh99"},"content":"### Sun Ruiheng","lastModifiedDate":"2024-03-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":15,"author":{"gitId":"gavingoh99"},"content":"\u003cimg src\u003d\"images/sunruiheng.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":17,"author":{"gitId":"gavingoh99"},"content":"[[github](https://github.com/sun-ruiheng)]","lastModifiedDate":"2024-03-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"gavingoh99"},"content":"* Role: Developer, Java Expert","lastModifiedDate":"2024-03-05"},{"lineNumber":20,"author":{"gitId":"gavingoh99"},"content":"* Responsibilities: Deliverables and deadlines","lastModifiedDate":"2024-03-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"gavingoh99"},"content":"### Gavin Goh","lastModifiedDate":"2024-03-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"gavingoh99"},"content":"\u003cimg src\u003d\"images/gavingoh.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"gavingoh99"},"content":"[[github](http://github.com/gavingoh99)]","lastModifiedDate":"2024-03-05"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":29,"author":{"gitId":"gavingoh99"},"content":"* Responsibilities: Scheduling and tracking","lastModifiedDate":"2024-03-05"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"gavingoh99"},"content":"### Ma Ze Xuan","lastModifiedDate":"2024-03-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":33,"author":{"gitId":"gavingoh99"},"content":"\u003cimg src\u003d\"images/mazexuan.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":35,"author":{"gitId":"gavingoh99"},"content":"[[github](http://github.com/maze508)]","lastModifiedDate":"2024-03-05"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":37,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"gavingoh99"},"content":"* Responsibilities: Testing","lastModifiedDate":"2024-03-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":40,"author":{"gitId":"gavingoh99"},"content":"### Tan Guan Quan","lastModifiedDate":"2024-03-05"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"gavingoh99"},"content":"\u003cimg src\u003d\"images/tanguanquan.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"gavingoh99"},"content":"[[github](http://github.com/guanquann)]","lastModifiedDate":"2024-03-05"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"gavingoh99"},"content":"* Responsibilities: Integration","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"gavingoh99":17,"-":30}},{"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":"maze508"},"content":"# Gourmet Grid","lastModifiedDate":"2024-03-05"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c!-- * Table of Contents --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003cpage-nav-print /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"-"},"content":"--------------------------------------------------------------------------------------------------------------------","lastModifiedDate":"2020-05-23"},{"lineNumber":13,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":14,"author":{"gitId":"-"},"content":"## **Acknowledgements**","lastModifiedDate":"2021-07-30"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-30"},{"lineNumber":16,"author":{"gitId":"-"},"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":"guanquann"},"content":"* regularly receives deliveries of supplies from different suppliers","lastModifiedDate":"2024-03-05"},{"lineNumber":278,"author":{"gitId":"guanquann"},"content":"* troublesome to make orders when supplies are running low","lastModifiedDate":"2024-03-05"},{"lineNumber":279,"author":{"gitId":"guanquann"},"content":"* has some favorite and some not great customers","lastModifiedDate":"2024-03-05"},{"lineNumber":280,"author":{"gitId":"-"},"content":"* has a need to manage a significant number of contacts","lastModifiedDate":"2020-05-23"},{"lineNumber":281,"author":{"gitId":"-"},"content":"* prefer desktop apps over other types","lastModifiedDate":"2020-05-23"},{"lineNumber":282,"author":{"gitId":"-"},"content":"* can type fast","lastModifiedDate":"2020-05-23"},{"lineNumber":283,"author":{"gitId":"-"},"content":"* prefers typing to mouse interactions","lastModifiedDate":"2020-05-26"},{"lineNumber":284,"author":{"gitId":"-"},"content":"* is reasonably comfortable using CLI apps","lastModifiedDate":"2020-05-23"},{"lineNumber":285,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":286,"author":{"gitId":"guanquann"},"content":"**Value proposition**: ","lastModifiedDate":"2024-03-05"},{"lineNumber":287,"author":{"gitId":"guanquann"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":288,"author":{"gitId":"guanquann"},"content":"* Our product is specifically tailored to restaurant owners like Bob who juggle multiple suppliers and customer relationships by streamlining daily delivery management, simplifying tracking supplier schedules and enabling personalised engagement with regulars.","lastModifiedDate":"2024-03-05"},{"lineNumber":289,"author":{"gitId":"guanquann"},"content":"* Focusing on a small number of stable suppliers, it centralises contacts and smoothens day-to-day tasks.","lastModifiedDate":"2024-03-05"},{"lineNumber":290,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":291,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":292,"author":{"gitId":"-"},"content":"### User stories","lastModifiedDate":"2020-06-07"},{"lineNumber":293,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":294,"author":{"gitId":"-"},"content":"Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unlikely to have) - `*`","lastModifiedDate":"2020-05-23"},{"lineNumber":295,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":296,"author":{"gitId":"-"},"content":"| Priority | As a …​ | I want to …​ | So that I can…​ |","lastModifiedDate":"2020-05-23"},{"lineNumber":297,"author":{"gitId":"guanquann"},"content":"|----------|----------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------|","lastModifiedDate":"2024-03-05"},{"lineNumber":298,"author":{"gitId":"guanquann"},"content":"| `* * *` | restaurant owner | add contacts with detailed information | better manage relationship with suppliers and customers |","lastModifiedDate":"2024-03-05"},{"lineNumber":299,"author":{"gitId":"guanquann"},"content":"| `* * *` | restaurant owner | immediately see a list of contact | contact / check on these parties quickly |","lastModifiedDate":"2024-03-05"},{"lineNumber":300,"author":{"gitId":"guanquann"},"content":"| `* * *` | restaurant owner | search by name | quickly find the person I want to contact |","lastModifiedDate":"2024-03-05"},{"lineNumber":301,"author":{"gitId":"guanquann"},"content":"| `* * *` | long time user | delete contacts | keep my address book relevant and clean |","lastModifiedDate":"2024-03-05"},{"lineNumber":302,"author":{"gitId":"guanquann"},"content":"| `* *` | potential user exploring the app | see examples with sample data on the app | easily visualize how the app will look like when handling data that is typical for my use case |","lastModifiedDate":"2024-03-05"},{"lineNumber":303,"author":{"gitId":"guanquann"},"content":"| `* *` | potential user exploring the app | delete all sample data | easily add my own data to a clean slate |","lastModifiedDate":"2024-03-05"},{"lineNumber":304,"author":{"gitId":"guanquann"},"content":"| `* *` | long time user | edit contact details | keep my address book up to date |","lastModifiedDate":"2024-03-05"},{"lineNumber":305,"author":{"gitId":"guanquann"},"content":"| `* *` | restaurant owner | keep track of temporary contacts | easily check on the status of my incoming deliveries with the deliverymen responsible |","lastModifiedDate":"2024-03-05"},{"lineNumber":306,"author":{"gitId":"guanquann"},"content":"| `* *` | frequent user | immediately see a list of important / frequent contacts that I view | contact / check on these parties quickly |","lastModifiedDate":"2024-03-05"},{"lineNumber":307,"author":{"gitId":"guanquann"},"content":"| `* *` | restaurant owner | favourite certain contacts | have quicker and more efficient access to contact |","lastModifiedDate":"2024-03-05"},{"lineNumber":308,"author":{"gitId":"guanquann"},"content":"| `* *` | long time user | search by notes or tag to quickly find specific details about customer preferences (i.e allergies) and delivery details (i.e slow delivery) | |","lastModifiedDate":"2024-03-05"},{"lineNumber":309,"author":{"gitId":"guanquann"},"content":"| `* *` | long time user | filter search base on a specific criteria (like vegan supplier) to better plan deliveries | |","lastModifiedDate":"2024-03-05"},{"lineNumber":310,"author":{"gitId":"guanquann"},"content":"| `*` | careless user | undo my orders/contacts | reduces the number of actions I have to take |","lastModifiedDate":"2024-03-05"},{"lineNumber":311,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":312,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":313,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":314,"author":{"gitId":"-"},"content":"### Use cases","lastModifiedDate":"2020-06-07"},{"lineNumber":315,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":316,"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":317,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":318,"author":{"gitId":"-"},"content":"**Use case: Delete a person**","lastModifiedDate":"2020-05-23"},{"lineNumber":319,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":320,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2020-05-23"},{"lineNumber":321,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":322,"author":{"gitId":"-"},"content":"1. User requests to list persons","lastModifiedDate":"2020-05-23"},{"lineNumber":323,"author":{"gitId":"-"},"content":"2. AddressBook shows a list of persons","lastModifiedDate":"2020-05-23"},{"lineNumber":324,"author":{"gitId":"-"},"content":"3. User requests to delete a specific person in the list","lastModifiedDate":"2020-05-23"},{"lineNumber":325,"author":{"gitId":"-"},"content":"4. AddressBook deletes the person","lastModifiedDate":"2020-05-23"},{"lineNumber":326,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":327,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":328,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":329,"author":{"gitId":"-"},"content":"**Extensions**","lastModifiedDate":"2020-05-23"},{"lineNumber":330,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":331,"author":{"gitId":"-"},"content":"* 2a. The list is empty.","lastModifiedDate":"2020-05-23"},{"lineNumber":332,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":333,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":334,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":335,"author":{"gitId":"-"},"content":"* 3a. The given index is invalid.","lastModifiedDate":"2020-05-23"},{"lineNumber":336,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":337,"author":{"gitId":"-"},"content":" * 3a1. AddressBook shows an error message.","lastModifiedDate":"2020-05-23"},{"lineNumber":338,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":339,"author":{"gitId":"-"},"content":" Use case resumes at step 2.","lastModifiedDate":"2020-05-23"},{"lineNumber":340,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":341,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":342,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":343,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":344,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":345,"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":346,"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":347,"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":348,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":349,"author":{"gitId":"-"},"content":"*{More to be added}*","lastModifiedDate":"2020-05-23"},{"lineNumber":350,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":351,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":352,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":353,"author":{"gitId":"-"},"content":"* **Mainstream OS**: Windows, Linux, Unix, MacOS","lastModifiedDate":"2024-02-09"},{"lineNumber":354,"author":{"gitId":"-"},"content":"* **Private contact detail**: A contact detail that is not meant to be shared with others","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":"","lastModifiedDate":"2020-05-23"},{"lineNumber":358,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":359,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":360,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":361,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":362,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":363,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":364,"author":{"gitId":"-"},"content":"**Note:** These instructions only provide a starting point for testers to work on;","lastModifiedDate":"2023-09-12"},{"lineNumber":365,"author":{"gitId":"-"},"content":"testers are expected to do more *exploratory* testing.","lastModifiedDate":"2020-05-23"},{"lineNumber":366,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":367,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":368,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":369,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":370,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":371,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":372,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":373,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":374,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":375,"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":376,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":377,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":378,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":379,"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":380,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":381,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":382,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","lastModifiedDate":"2020-05-23"},{"lineNumber":383,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":384,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":385,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":386,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":387,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":388,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":389,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":390,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":391,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":392,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":393,"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":394,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":395,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":396,"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":397,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":398,"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":399,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":400,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":401,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":402,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":403,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":404,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":405,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":406,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":407,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","lastModifiedDate":"2020-05-23"},{"lineNumber":408,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":409,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"}],"authorContributionMap":{"guanquann":21,"-":387,"maze508":1}}] +[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"[![CI Status](https://github.com/se-edu/addressbook-level3/workflows/Java%20CI/badge.svg)](https://github.com/se-edu/addressbook-level3/actions)","lastModifiedDate":"2020-05-23"},{"lineNumber":2,"author":{"gitId":"-"},"content":"[![codecov](https://codecov.io/gh/AY2324S2-CS2103T-T17-4/tp/graph/badge.svg?token\u003dLPV8FKMOGM)](https://codecov.io/gh/AY2324S2-CS2103T-T16-3/tp)","lastModifiedDate":"2024-02-13"},{"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":"maze508"},"content":"# Gourmet Grid","lastModifiedDate":"2024-03-05"},{"lineNumber":7,"author":{"gitId":"maze508"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":8,"author":{"gitId":"maze508"},"content":"## Description","lastModifiedDate":"2024-03-05"},{"lineNumber":9,"author":{"gitId":"maze508"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":10,"author":{"gitId":"maze508"},"content":"* The project simulates an ongoing software project for a desktop application (called _Gourmet Grid_) used for managing contact details.","lastModifiedDate":"2024-03-05"},{"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":"maze508"},"content":"* It is named `Gourmet Grid`","lastModifiedDate":"2024-03-05"},{"lineNumber":14,"author":{"gitId":"maze508"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":15,"author":{"gitId":"maze508"},"content":"## Main Features","lastModifiedDate":"2024-03-05"},{"lineNumber":16,"author":{"gitId":"maze508"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":17,"author":{"gitId":"maze508"},"content":"#### List All Contacts ","lastModifiedDate":"2024-03-05"},{"lineNumber":18,"author":{"gitId":"maze508"},"content":"\u003eFormat: `list`","lastModifiedDate":"2024-03-05"},{"lineNumber":19,"author":{"gitId":"maze508"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":20,"author":{"gitId":"maze508"},"content":"#### Add New Contacts","lastModifiedDate":"2024-03-05"},{"lineNumber":21,"author":{"gitId":"maze508"},"content":"\u003eFormat: `add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [t/TAG]`","lastModifiedDate":"2024-03-05"},{"lineNumber":22,"author":{"gitId":"maze508"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":23,"author":{"gitId":"maze508"},"content":"#### Delete Contacts","lastModifiedDate":"2024-03-05"},{"lineNumber":24,"author":{"gitId":"maze508"},"content":"\u003eFormat: `delete INDEX`","lastModifiedDate":"2024-03-05"},{"lineNumber":25,"author":{"gitId":"maze508"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":26,"author":{"gitId":"maze508"},"content":"#### Search Contacts By Name","lastModifiedDate":"2024-03-05"},{"lineNumber":27,"author":{"gitId":"maze508"},"content":"\u003eFormat: `find n/NAME`","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"-":7,"maze508":20}},{"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":"","lastModifiedDate":"2020-06-17"},{"lineNumber":11,"author":{"gitId":"-"},"content":"## Project team","lastModifiedDate":"2020-06-07"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":13,"author":{"gitId":"gavingoh99"},"content":"### Sun Ruiheng","lastModifiedDate":"2024-03-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":15,"author":{"gitId":"gavingoh99"},"content":"\u003cimg src\u003d\"images/sunruiheng.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":17,"author":{"gitId":"gavingoh99"},"content":"[[github](https://github.com/sun-ruiheng)]","lastModifiedDate":"2024-03-05"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":19,"author":{"gitId":"gavingoh99"},"content":"* Role: Developer, Java Expert","lastModifiedDate":"2024-03-05"},{"lineNumber":20,"author":{"gitId":"gavingoh99"},"content":"* Responsibilities: Deliverables and deadlines","lastModifiedDate":"2024-03-05"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":22,"author":{"gitId":"gavingoh99"},"content":"### Gavin Goh","lastModifiedDate":"2024-03-05"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":24,"author":{"gitId":"gavingoh99"},"content":"\u003cimg src\u003d\"images/gavingoh.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":26,"author":{"gitId":"gavingoh99"},"content":"[[github](http://github.com/gavingoh99)]","lastModifiedDate":"2024-03-05"},{"lineNumber":27,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":28,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":29,"author":{"gitId":"gavingoh99"},"content":"* Responsibilities: Scheduling and tracking","lastModifiedDate":"2024-03-05"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":31,"author":{"gitId":"gavingoh99"},"content":"### Ma Ze Xuan","lastModifiedDate":"2024-03-05"},{"lineNumber":32,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":33,"author":{"gitId":"gavingoh99"},"content":"\u003cimg src\u003d\"images/mazexuan.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":35,"author":{"gitId":"gavingoh99"},"content":"[[github](http://github.com/maze508)]","lastModifiedDate":"2024-03-05"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":37,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":38,"author":{"gitId":"gavingoh99"},"content":"* Responsibilities: Testing","lastModifiedDate":"2024-03-05"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":40,"author":{"gitId":"gavingoh99"},"content":"### Tan Guan Quan","lastModifiedDate":"2024-03-05"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":42,"author":{"gitId":"gavingoh99"},"content":"\u003cimg src\u003d\"images/tanguanquan.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-05"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":44,"author":{"gitId":"gavingoh99"},"content":"[[github](http://github.com/guanquann)]","lastModifiedDate":"2024-03-05"},{"lineNumber":45,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":46,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"gavingoh99"},"content":"* Responsibilities: Integration","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"gavingoh99":17,"-":30}},{"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":"maze508"},"content":"# Gourmet Grid","lastModifiedDate":"2024-03-05"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":9,"author":{"gitId":"-"},"content":"\u003c!-- * Table of Contents --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":"\u003cpage-nav-print /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":12,"author":{"gitId":"sun-ruiheng"},"content":"---","lastModifiedDate":"2024-03-05"},{"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":"sun-ruiheng"},"content":"---","lastModifiedDate":"2024-03-05"},{"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":"sun-ruiheng"},"content":"---","lastModifiedDate":"2024-03-05"},{"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":"sun-ruiheng"},"content":"The **_Architecture Diagram_** given above explains the high-level design of the App.","lastModifiedDate":"2024-03-05"},{"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":"sun-ruiheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":40,"author":{"gitId":"sun-ruiheng"},"content":"- At app launch, it initializes the other components in the correct sequence, and connects them up with each other.","lastModifiedDate":"2024-03-05"},{"lineNumber":41,"author":{"gitId":"sun-ruiheng"},"content":"- At shut down, it shuts down the other components and invokes cleanup methods where necessary.","lastModifiedDate":"2024-03-05"},{"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":"sun-ruiheng"},"content":"- [**`UI`**](#ui-component): The UI of the App.","lastModifiedDate":"2024-03-05"},{"lineNumber":46,"author":{"gitId":"sun-ruiheng"},"content":"- [**`Logic`**](#logic-component): The command executor.","lastModifiedDate":"2024-03-05"},{"lineNumber":47,"author":{"gitId":"sun-ruiheng"},"content":"- [**`Model`**](#model-component): Holds the data of the App in memory.","lastModifiedDate":"2024-03-05"},{"lineNumber":48,"author":{"gitId":"sun-ruiheng"},"content":"- [**`Storage`**](#storage-component): Reads data from, and writes data to, the hard disk.","lastModifiedDate":"2024-03-05"},{"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":"sun-ruiheng"},"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":"2024-03-05"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":56,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ArchitectureSequenceDiagram.puml\" width\u003d\"574\" /\u003e","lastModifiedDate":"2023-09-12"},{"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":"sun-ruiheng"},"content":"- defines its _API_ in an `interface` with the same name as the Component.","lastModifiedDate":"2024-03-05"},{"lineNumber":61,"author":{"gitId":"sun-ruiheng"},"content":"- implements its functionality using a concrete `{Component Name}Manager` class (which follows the corresponding API `interface` mentioned in the previous point.","lastModifiedDate":"2024-03-05"},{"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":"\u003cpuml src\u003d\"diagrams/ComponentManagers.puml\" width\u003d\"300\" /\u003e","lastModifiedDate":"2023-09-12"},{"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":"\u003cpuml src\u003d\"diagrams/UiClassDiagram.puml\" alt\u003d\"Structure of the UI Component\"/\u003e","lastModifiedDate":"2023-09-12"},{"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":"sun-ruiheng"},"content":"- executes user commands using the `Logic` component.","lastModifiedDate":"2024-03-05"},{"lineNumber":82,"author":{"gitId":"sun-ruiheng"},"content":"- listens for changes to `Model` data so that the UI can be updated with the modified data.","lastModifiedDate":"2024-03-05"},{"lineNumber":83,"author":{"gitId":"sun-ruiheng"},"content":"- keeps a reference to the `Logic` component, because the `UI` relies on the `Logic` to execute commands.","lastModifiedDate":"2024-03-05"},{"lineNumber":84,"author":{"gitId":"sun-ruiheng"},"content":"- depends on some classes in the `Model` component, as it displays `Person` object residing in the `Model`.","lastModifiedDate":"2024-03-05"},{"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":"\u003cpuml src\u003d\"diagrams/LogicClassDiagram.puml\" width\u003d\"550\"/\u003e","lastModifiedDate":"2023-09-12"},{"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":"\u003cpuml src\u003d\"diagrams/DeleteSequenceDiagram.puml\" alt\u003d\"Interactions Inside the Logic Component for the `delete 1` Command\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":97,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":98,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":99,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":100,"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":101,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":102,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":103,"author":{"gitId":"-"},"content":"How the `Logic` component works:","lastModifiedDate":"2023-09-03"},{"lineNumber":104,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":105,"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":106,"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":107,"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":108,"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":109,"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":110,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-03"},{"lineNumber":111,"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":112,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":113,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ParserClasses.puml\" width\u003d\"600\"/\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":114,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":115,"author":{"gitId":"-"},"content":"How the parsing works:","lastModifiedDate":"2021-07-31"},{"lineNumber":116,"author":{"gitId":"sun-ruiheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":117,"author":{"gitId":"sun-ruiheng"},"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":"2024-03-05"},{"lineNumber":118,"author":{"gitId":"sun-ruiheng"},"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":"2024-03-05"},{"lineNumber":119,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":120,"author":{"gitId":"-"},"content":"### Model component","lastModifiedDate":"2021-07-31"},{"lineNumber":121,"author":{"gitId":"sun-ruiheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":122,"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":123,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":124,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/ModelClassDiagram.puml\" width\u003d\"450\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":125,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":126,"author":{"gitId":"-"},"content":"The `Model` component,","lastModifiedDate":"2021-07-31"},{"lineNumber":127,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":128,"author":{"gitId":"sun-ruiheng"},"content":"- stores the address book data i.e., all `Person` objects (which are contained in a `UniquePersonList` object).","lastModifiedDate":"2024-03-05"},{"lineNumber":129,"author":{"gitId":"sun-ruiheng"},"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":"2024-03-05"},{"lineNumber":130,"author":{"gitId":"sun-ruiheng"},"content":"- stores a `UserPref` object that represents the user’s preferences. This is exposed to the outside as a `ReadOnlyUserPref` objects.","lastModifiedDate":"2024-03-05"},{"lineNumber":131,"author":{"gitId":"sun-ruiheng"},"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":"2024-03-05"},{"lineNumber":132,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":133,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":134,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":135,"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":136,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":137,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/BetterModelClassDiagram.puml\" width\u003d\"450\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":138,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":139,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":140,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":141,"author":{"gitId":"-"},"content":"### Storage component","lastModifiedDate":"2020-05-23"},{"lineNumber":142,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":143,"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":144,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":145,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/StorageClassDiagram.puml\" width\u003d\"550\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":146,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2021-07-31"},{"lineNumber":147,"author":{"gitId":"-"},"content":"The `Storage` component,","lastModifiedDate":"2020-05-23"},{"lineNumber":148,"author":{"gitId":"sun-ruiheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":149,"author":{"gitId":"sun-ruiheng"},"content":"- can save both address book data and user preference data in JSON format, and read them back into corresponding objects.","lastModifiedDate":"2024-03-05"},{"lineNumber":150,"author":{"gitId":"sun-ruiheng"},"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":"2024-03-05"},{"lineNumber":151,"author":{"gitId":"sun-ruiheng"},"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":"2024-03-05"},{"lineNumber":152,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":153,"author":{"gitId":"-"},"content":"### Common classes","lastModifiedDate":"2020-05-23"},{"lineNumber":154,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":155,"author":{"gitId":"-"},"content":"Classes used by multiple components are in the `seedu.addressbook.commons` package.","lastModifiedDate":"2020-05-23"},{"lineNumber":156,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":157,"author":{"gitId":"sun-ruiheng"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":158,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":159,"author":{"gitId":"-"},"content":"## **Implementation**","lastModifiedDate":"2020-05-23"},{"lineNumber":160,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":161,"author":{"gitId":"-"},"content":"This section describes some noteworthy details on how certain features are implemented.","lastModifiedDate":"2020-05-23"},{"lineNumber":162,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":163,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Undo/redo feature","lastModifiedDate":"2020-06-07"},{"lineNumber":164,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":165,"author":{"gitId":"-"},"content":"#### Proposed Implementation","lastModifiedDate":"2020-05-23"},{"lineNumber":166,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":167,"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":168,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":169,"author":{"gitId":"sun-ruiheng"},"content":"- `VersionedAddressBook#commit()` — Saves the current address book state in its history.","lastModifiedDate":"2024-03-05"},{"lineNumber":170,"author":{"gitId":"sun-ruiheng"},"content":"- `VersionedAddressBook#undo()` — Restores the previous address book state from its history.","lastModifiedDate":"2024-03-05"},{"lineNumber":171,"author":{"gitId":"sun-ruiheng"},"content":"- `VersionedAddressBook#redo()` — Restores a previously undone address book state from its history.","lastModifiedDate":"2024-03-05"},{"lineNumber":172,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":173,"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":174,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":175,"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":176,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":177,"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":178,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":179,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState0.puml\" alt\u003d\"UndoRedoState0\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":180,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":181,"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":182,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":183,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState1.puml\" alt\u003d\"UndoRedoState1\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":184,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":185,"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":186,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":187,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState2.puml\" alt\u003d\"UndoRedoState2\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":188,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":189,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":190,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":191,"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":192,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":193,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":194,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":195,"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":196,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":197,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState3.puml\" alt\u003d\"UndoRedoState3\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":198,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":199,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":200,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":201,"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":202,"author":{"gitId":"-"},"content":"than attempting to perform the undo.","lastModifiedDate":"2020-05-23"},{"lineNumber":203,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":204,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":205,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":206,"author":{"gitId":"-"},"content":"The following sequence diagram shows how an undo operation goes through the `Logic` component:","lastModifiedDate":"2024-02-09"},{"lineNumber":207,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":208,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoSequenceDiagram-Logic.puml\" alt\u003d\"UndoSequenceDiagram-Logic\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":209,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":210,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":211,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":212,"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":213,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":214,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":215,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":216,"author":{"gitId":"-"},"content":"Similarly, how an undo operation goes through the `Model` component is shown below:","lastModifiedDate":"2024-02-09"},{"lineNumber":217,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":218,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoSequenceDiagram-Model.puml\" alt\u003d\"UndoSequenceDiagram-Model\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":219,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-02-09"},{"lineNumber":220,"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":221,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":222,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":223,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":224,"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":225,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":226,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":227,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":228,"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":229,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":230,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState4.puml\" alt\u003d\"UndoRedoState4\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":231,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":232,"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":233,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":234,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/UndoRedoState5.puml\" alt\u003d\"UndoRedoState5\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":235,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":236,"author":{"gitId":"-"},"content":"The following activity diagram summarizes what happens when a user executes a new command:","lastModifiedDate":"2020-05-23"},{"lineNumber":237,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":238,"author":{"gitId":"-"},"content":"\u003cpuml src\u003d\"diagrams/CommitActivityDiagram.puml\" width\u003d\"250\" /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":239,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":240,"author":{"gitId":"-"},"content":"#### Design considerations:","lastModifiedDate":"2021-07-31"},{"lineNumber":241,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":242,"author":{"gitId":"-"},"content":"**Aspect: How undo \u0026 redo executes:**","lastModifiedDate":"2021-07-31"},{"lineNumber":243,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":244,"author":{"gitId":"sun-ruiheng"},"content":"- **Alternative 1 (current choice):** Saves the entire address book.","lastModifiedDate":"2024-03-05"},{"lineNumber":245,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":246,"author":{"gitId":"sun-ruiheng"},"content":" - Pros: Easy to implement.","lastModifiedDate":"2024-03-05"},{"lineNumber":247,"author":{"gitId":"sun-ruiheng"},"content":" - Cons: May have performance issues in terms of memory usage.","lastModifiedDate":"2024-03-05"},{"lineNumber":248,"author":{"gitId":"sun-ruiheng"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":249,"author":{"gitId":"sun-ruiheng"},"content":"- **Alternative 2:** Individual command knows how to undo/redo by","lastModifiedDate":"2024-03-05"},{"lineNumber":250,"author":{"gitId":"-"},"content":" itself.","lastModifiedDate":"2020-05-23"},{"lineNumber":251,"author":{"gitId":"sun-ruiheng"},"content":" - Pros: Will use less memory (e.g. for `delete`, just save the person being deleted).","lastModifiedDate":"2024-03-05"},{"lineNumber":252,"author":{"gitId":"sun-ruiheng"},"content":" - Cons: We must ensure that the implementation of each individual command are correct.","lastModifiedDate":"2024-03-05"},{"lineNumber":253,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":254,"author":{"gitId":"-"},"content":"_{more aspects and alternatives to be added}_","lastModifiedDate":"2020-05-23"},{"lineNumber":255,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":256,"author":{"gitId":"-"},"content":"### \\[Proposed\\] Data archiving","lastModifiedDate":"2020-05-23"},{"lineNumber":257,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":258,"author":{"gitId":"-"},"content":"_{Explain here how the data archiving feature will be implemented}_","lastModifiedDate":"2020-05-23"},{"lineNumber":259,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":260,"author":{"gitId":"sun-ruiheng"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":261,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":262,"author":{"gitId":"-"},"content":"## **Documentation, logging, testing, configuration, dev-ops**","lastModifiedDate":"2020-06-07"},{"lineNumber":263,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":264,"author":{"gitId":"sun-ruiheng"},"content":"- [Documentation guide](Documentation.md)","lastModifiedDate":"2024-03-05"},{"lineNumber":265,"author":{"gitId":"sun-ruiheng"},"content":"- [Testing guide](Testing.md)","lastModifiedDate":"2024-03-05"},{"lineNumber":266,"author":{"gitId":"sun-ruiheng"},"content":"- [Logging guide](Logging.md)","lastModifiedDate":"2024-03-05"},{"lineNumber":267,"author":{"gitId":"sun-ruiheng"},"content":"- [Configuration guide](Configuration.md)","lastModifiedDate":"2024-03-05"},{"lineNumber":268,"author":{"gitId":"sun-ruiheng"},"content":"- [DevOps guide](DevOps.md)","lastModifiedDate":"2024-03-05"},{"lineNumber":269,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":270,"author":{"gitId":"sun-ruiheng"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":271,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":272,"author":{"gitId":"-"},"content":"## **Appendix: Requirements**","lastModifiedDate":"2020-05-23"},{"lineNumber":273,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":274,"author":{"gitId":"-"},"content":"### Product scope","lastModifiedDate":"2020-05-23"},{"lineNumber":275,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":276,"author":{"gitId":"-"},"content":"**Target user profile**:","lastModifiedDate":"2020-05-23"},{"lineNumber":277,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":278,"author":{"gitId":"sun-ruiheng"},"content":"- regularly receives deliveries of supplies from different suppliers","lastModifiedDate":"2024-03-05"},{"lineNumber":279,"author":{"gitId":"sun-ruiheng"},"content":"- troublesome to make orders when supplies are running low","lastModifiedDate":"2024-03-05"},{"lineNumber":280,"author":{"gitId":"sun-ruiheng"},"content":"- has some favorite and some not great customers","lastModifiedDate":"2024-03-05"},{"lineNumber":281,"author":{"gitId":"sun-ruiheng"},"content":"- has a need to manage a significant number of contacts","lastModifiedDate":"2024-03-05"},{"lineNumber":282,"author":{"gitId":"sun-ruiheng"},"content":"- prefer desktop apps over other types","lastModifiedDate":"2024-03-05"},{"lineNumber":283,"author":{"gitId":"sun-ruiheng"},"content":"- can type fast","lastModifiedDate":"2024-03-05"},{"lineNumber":284,"author":{"gitId":"sun-ruiheng"},"content":"- prefers typing to mouse interactions","lastModifiedDate":"2024-03-05"},{"lineNumber":285,"author":{"gitId":"sun-ruiheng"},"content":"- is reasonably comfortable using CLI apps","lastModifiedDate":"2024-03-05"},{"lineNumber":286,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":287,"author":{"gitId":"guanquann"},"content":"**Value proposition**:","lastModifiedDate":"2024-03-05"},{"lineNumber":288,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":289,"author":{"gitId":"sun-ruiheng"},"content":"- Our product is specifically tailored to restaurant owners like Bob who juggle multiple suppliers and customer relationships by streamlining daily delivery management, simplifying tracking supplier schedules and enabling personalised engagement with regulars.","lastModifiedDate":"2024-03-05"},{"lineNumber":290,"author":{"gitId":"sun-ruiheng"},"content":"- Focusing on a small number of stable suppliers, it centralises contacts and smoothens day-to-day tasks.","lastModifiedDate":"2024-03-05"},{"lineNumber":291,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":292,"author":{"gitId":"-"},"content":"### User stories","lastModifiedDate":"2020-06-07"},{"lineNumber":293,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":294,"author":{"gitId":"-"},"content":"Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unlikely to have) - `*`","lastModifiedDate":"2020-05-23"},{"lineNumber":295,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":296,"author":{"gitId":"-"},"content":"| Priority | As a …​ | I want to …​ | So that I can…​ |","lastModifiedDate":"2020-05-23"},{"lineNumber":297,"author":{"gitId":"sun-ruiheng"},"content":"| -------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |","lastModifiedDate":"2024-03-05"},{"lineNumber":298,"author":{"gitId":"guanquann"},"content":"| `* * *` | restaurant owner | add contacts with detailed information | better manage relationship with suppliers and customers |","lastModifiedDate":"2024-03-05"},{"lineNumber":299,"author":{"gitId":"guanquann"},"content":"| `* * *` | restaurant owner | immediately see a list of contact | contact / check on these parties quickly |","lastModifiedDate":"2024-03-05"},{"lineNumber":300,"author":{"gitId":"guanquann"},"content":"| `* * *` | restaurant owner | search by name | quickly find the person I want to contact |","lastModifiedDate":"2024-03-05"},{"lineNumber":301,"author":{"gitId":"guanquann"},"content":"| `* * *` | long time user | delete contacts | keep my address book relevant and clean |","lastModifiedDate":"2024-03-05"},{"lineNumber":302,"author":{"gitId":"guanquann"},"content":"| `* *` | potential user exploring the app | see examples with sample data on the app | easily visualize how the app will look like when handling data that is typical for my use case |","lastModifiedDate":"2024-03-05"},{"lineNumber":303,"author":{"gitId":"guanquann"},"content":"| `* *` | potential user exploring the app | delete all sample data | easily add my own data to a clean slate |","lastModifiedDate":"2024-03-05"},{"lineNumber":304,"author":{"gitId":"guanquann"},"content":"| `* *` | long time user | edit contact details | keep my address book up to date |","lastModifiedDate":"2024-03-05"},{"lineNumber":305,"author":{"gitId":"guanquann"},"content":"| `* *` | restaurant owner | keep track of temporary contacts | easily check on the status of my incoming deliveries with the deliverymen responsible |","lastModifiedDate":"2024-03-05"},{"lineNumber":306,"author":{"gitId":"guanquann"},"content":"| `* *` | frequent user | immediately see a list of important / frequent contacts that I view | contact / check on these parties quickly |","lastModifiedDate":"2024-03-05"},{"lineNumber":307,"author":{"gitId":"guanquann"},"content":"| `* *` | restaurant owner | favourite certain contacts | have quicker and more efficient access to contact |","lastModifiedDate":"2024-03-05"},{"lineNumber":308,"author":{"gitId":"guanquann"},"content":"| `* *` | long time user | search by notes or tag to quickly find specific details about customer preferences (i.e allergies) and delivery details (i.e slow delivery) | |","lastModifiedDate":"2024-03-05"},{"lineNumber":309,"author":{"gitId":"guanquann"},"content":"| `* *` | long time user | filter search base on a specific criteria (like vegan supplier) to better plan deliveries | |","lastModifiedDate":"2024-03-05"},{"lineNumber":310,"author":{"gitId":"guanquann"},"content":"| `*` | careless user | undo my orders/contacts | reduces the number of actions I have to take |","lastModifiedDate":"2024-03-05"},{"lineNumber":311,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":312,"author":{"gitId":"sun-ruiheng"},"content":"_{More to be added}_","lastModifiedDate":"2024-03-05"},{"lineNumber":313,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":314,"author":{"gitId":"-"},"content":"### Use cases","lastModifiedDate":"2020-06-07"},{"lineNumber":315,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":316,"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":317,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":318,"author":{"gitId":"-"},"content":"**Use case: Delete a person**","lastModifiedDate":"2020-05-23"},{"lineNumber":319,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":320,"author":{"gitId":"-"},"content":"**MSS**","lastModifiedDate":"2020-05-23"},{"lineNumber":321,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":322,"author":{"gitId":"-"},"content":"1. User requests to list persons","lastModifiedDate":"2020-05-23"},{"lineNumber":323,"author":{"gitId":"-"},"content":"2. AddressBook shows a list of persons","lastModifiedDate":"2020-05-23"},{"lineNumber":324,"author":{"gitId":"-"},"content":"3. User requests to delete a specific person in the list","lastModifiedDate":"2020-05-23"},{"lineNumber":325,"author":{"gitId":"-"},"content":"4. AddressBook deletes the person","lastModifiedDate":"2020-05-23"},{"lineNumber":326,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":327,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":328,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":329,"author":{"gitId":"-"},"content":"**Extensions**","lastModifiedDate":"2020-05-23"},{"lineNumber":330,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":331,"author":{"gitId":"sun-ruiheng"},"content":"- 2a. The list is empty.","lastModifiedDate":"2024-03-05"},{"lineNumber":332,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":333,"author":{"gitId":"-"},"content":" Use case ends.","lastModifiedDate":"2020-05-23"},{"lineNumber":334,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":335,"author":{"gitId":"sun-ruiheng"},"content":"- 3a. The given index is invalid.","lastModifiedDate":"2024-03-05"},{"lineNumber":336,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":337,"author":{"gitId":"sun-ruiheng"},"content":" - 3a1. AddressBook shows an error message.","lastModifiedDate":"2024-03-05"},{"lineNumber":338,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":339,"author":{"gitId":"-"},"content":" Use case resumes at step 2.","lastModifiedDate":"2020-05-23"},{"lineNumber":340,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":341,"author":{"gitId":"sun-ruiheng"},"content":"_{More to be added}_","lastModifiedDate":"2024-03-05"},{"lineNumber":342,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":343,"author":{"gitId":"-"},"content":"### Non-Functional Requirements","lastModifiedDate":"2020-05-23"},{"lineNumber":344,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":345,"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":346,"author":{"gitId":"sun-ruiheng"},"content":"2. Should be able to hold up to a reasonable number of contacts with their corresponding information reliably without detriment to performance.","lastModifiedDate":"2024-03-05"},{"lineNumber":347,"author":{"gitId":"sun-ruiheng"},"content":"3. A user with above average typing speed for regular English text should be able to accomplish most of the tasks faster using commands than using the mouse.","lastModifiedDate":"2024-03-05"},{"lineNumber":348,"author":{"gitId":"sun-ruiheng"},"content":"4. Should work consistently regardless of environment, such as the settings of the phone running it (within reasonable bounds).","lastModifiedDate":"2024-03-05"},{"lineNumber":349,"author":{"gitId":"sun-ruiheng"},"content":"5. Users should easily navigate the app with minimal hesitance.","lastModifiedDate":"2024-03-05"},{"lineNumber":350,"author":{"gitId":"sun-ruiheng"},"content":"6. Should remain functional and fully usable in the event that the user enters unexpected inputs, with appropriate error statement displayed before the app returns to a functional state to continue running.","lastModifiedDate":"2024-03-05"},{"lineNumber":351,"author":{"gitId":"sun-ruiheng"},"content":"7. Should update automatically or have a good way to manually update in case of time zone changes.","lastModifiedDate":"2024-03-05"},{"lineNumber":352,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":353,"author":{"gitId":"sun-ruiheng"},"content":"_{More to be added}_","lastModifiedDate":"2024-03-05"},{"lineNumber":354,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":355,"author":{"gitId":"-"},"content":"### Glossary","lastModifiedDate":"2020-05-23"},{"lineNumber":356,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":357,"author":{"gitId":"sun-ruiheng"},"content":"- **Mainstream OS**: Windows, Linux, Unix, MacOS","lastModifiedDate":"2024-03-05"},{"lineNumber":358,"author":{"gitId":"sun-ruiheng"},"content":"- **Reasonable Number of Contacts**: Set to be 100 for now","lastModifiedDate":"2024-03-05"},{"lineNumber":359,"author":{"gitId":"sun-ruiheng"},"content":"- **Hesitance**: Time spent deliberating by user due to uncertainty of UI interactions","lastModifiedDate":"2024-03-05"},{"lineNumber":360,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":361,"author":{"gitId":"sun-ruiheng"},"content":"---","lastModifiedDate":"2024-03-05"},{"lineNumber":362,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":363,"author":{"gitId":"-"},"content":"## **Appendix: Instructions for manual testing**","lastModifiedDate":"2020-05-23"},{"lineNumber":364,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":365,"author":{"gitId":"-"},"content":"Given below are instructions to test the app manually.","lastModifiedDate":"2020-05-23"},{"lineNumber":366,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":367,"author":{"gitId":"-"},"content":"\u003cbox type\u003d\"info\" seamless\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":368,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":369,"author":{"gitId":"-"},"content":"**Note:** These instructions only provide a starting point for testers to work on;","lastModifiedDate":"2023-09-12"},{"lineNumber":370,"author":{"gitId":"sun-ruiheng"},"content":"testers are expected to do more _exploratory_ testing.","lastModifiedDate":"2024-03-05"},{"lineNumber":371,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":372,"author":{"gitId":"-"},"content":"\u003c/box\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":373,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":374,"author":{"gitId":"-"},"content":"### Launch and shutdown","lastModifiedDate":"2020-05-23"},{"lineNumber":375,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":376,"author":{"gitId":"-"},"content":"1. Initial launch","lastModifiedDate":"2020-05-23"},{"lineNumber":377,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":378,"author":{"gitId":"-"},"content":" 1. Download the jar file and copy into an empty folder","lastModifiedDate":"2020-05-23"},{"lineNumber":379,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":380,"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":381,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":382,"author":{"gitId":"-"},"content":"1. Saving window preferences","lastModifiedDate":"2020-05-23"},{"lineNumber":383,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":384,"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":385,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":386,"author":{"gitId":"-"},"content":" 1. Re-launch the app by double-clicking the jar file.\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":387,"author":{"gitId":"-"},"content":" Expected: The most recent window size and location is retained.","lastModifiedDate":"2020-05-23"},{"lineNumber":388,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":389,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":390,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":391,"author":{"gitId":"-"},"content":"### Deleting a person","lastModifiedDate":"2020-05-23"},{"lineNumber":392,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":393,"author":{"gitId":"-"},"content":"1. Deleting a person while all persons are being shown","lastModifiedDate":"2020-05-23"},{"lineNumber":394,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":395,"author":{"gitId":"-"},"content":" 1. Prerequisites: List all persons using the `list` command. Multiple persons in the list.","lastModifiedDate":"2020-05-23"},{"lineNumber":396,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":397,"author":{"gitId":"-"},"content":" 1. Test case: `delete 1`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":398,"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":399,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":400,"author":{"gitId":"-"},"content":" 1. Test case: `delete 0`\u003cbr\u003e","lastModifiedDate":"2020-05-23"},{"lineNumber":401,"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":402,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":403,"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":404,"author":{"gitId":"-"},"content":" Expected: Similar to previous.","lastModifiedDate":"2020-05-23"},{"lineNumber":405,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":406,"author":{"gitId":"-"},"content":"1. _{ more test cases …​ }_","lastModifiedDate":"2020-05-23"},{"lineNumber":407,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":408,"author":{"gitId":"-"},"content":"### Saving data","lastModifiedDate":"2020-05-23"},{"lineNumber":409,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":410,"author":{"gitId":"-"},"content":"1. Dealing with missing/corrupted data files","lastModifiedDate":"2020-05-23"},{"lineNumber":411,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":412,"author":{"gitId":"-"},"content":" 1. _{explain how to simulate a missing/corrupted file, and the expected behavior}_","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"}],"authorContributionMap":{"guanquann":14,"sun-ruiheng":76,"-":323,"maze508":1}}] diff --git a/AY2324S2-CS2103T-T16-3_tp_master/commits.json b/AY2324S2-CS2103T-T16-3_tp_master/commits.json index 4fcdd2e4..8106a9d9 100644 --- a/AY2324S2-CS2103T-T16-3_tp_master/commits.json +++ b/AY2324S2-CS2103T-T16-3_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"guanquann":[{"date":"2024-03-05","commitResults":[{"hash":"139d797ba4cbe08d2bcad8c79c3be0032195856f","isMergeCommit":true,"messageTitle":"Merge pull request #13 from maze508/master","messageBody":"Update README and Add Ui Mockup","fileTypesAndContributionMap":{}},{"hash":"52a5b35dca429d7ed887c1013b5d61f3b61dd98b","isMergeCommit":false,"messageTitle":"Update developer documentation to include user stories and use cases","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":22,"deletions":9}}},{"hash":"460ea80babd93776196a996fe204a92c97e1648d","isMergeCommit":true,"messageTitle":"Merge pull request #16 from maze508/readme_ui","messageBody":"Update README and Ui Mockup","fileTypesAndContributionMap":{}}]}],"sun-ruiheng":[{"date":"2024-03-05","commitResults":[{"hash":"39eade0c06b3772f0b8648f7927db4f416acc51c","isMergeCommit":true,"messageTitle":"Merge pull request #15 from guanquann/user-stories-use-cases","messageBody":"Update developer documentation to include user stories and use cases","fileTypesAndContributionMap":{}}]}],"gavingoh99":[{"date":"2024-03-05","commitResults":[{"hash":"27c0cb119cd49ac19672fa715eb56fe26cdea59d","isMergeCommit":false,"messageTitle":"docs: update aboutus","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":17,"deletions":31}}},{"hash":"dc2f56f31797b6e6bf7a44a95523b6e8bf060efa","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into updateAboutUs","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"66df7655f7238ce4c46eb18e7e9e27a64e52b522","isMergeCommit":false,"messageTitle":"docs: update member name","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]}],"maze508":[{"date":"2024-03-05","commitResults":[{"hash":"e8a5e5cb0820e2e44c1b42fe6dec38cdcd4cba1b","isMergeCommit":false,"messageTitle":"Update README","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":21,"deletions":9}}},{"hash":"ce96723309ebc5114f4e124a916d07121ceda732","isMergeCommit":true,"messageTitle":"Merge pull request #14 from gavingoh99/updateAboutUs","messageBody":"Update AboutUs","fileTypesAndContributionMap":{}},{"hash":"912bf611b080dbbee5e23d6b8a9194701cfb721c","isMergeCommit":false,"messageTitle":"Update README","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"guanquann":{"docs":21,"functional-code":0,"test-code":0},"sun-ruiheng":{"docs":0,"functional-code":0,"test-code":0},"gavingoh99":{"docs":17,"functional-code":0,"test-code":0},"maze508":{"docs":21,"functional-code":0,"test-code":0}},"authorContributionVariance":{"guanquann":73.40972,"sun-ruiheng":0.0,"gavingoh99":190.97221,"maze508":78.22222},"authorDisplayNameMap":{"guanquann":"CS2103T-T16-3 TAN ..QUAN","sun-ruiheng":"CS2103T-T16-3 SUN ..HENG","gavingoh99":"CS2103T-T16-3 GAVI..HONG","maze508":"CS2103T-T16-3 MA Z..XUAN"}} +{"authorDailyContributionsMap":{"guanquann":[{"date":"2024-03-05","commitResults":[{"hash":"139d797ba4cbe08d2bcad8c79c3be0032195856f","isMergeCommit":true,"messageTitle":"Merge pull request #13 from maze508/master","messageBody":"Update README and Add Ui Mockup","fileTypesAndContributionMap":{}},{"hash":"52a5b35dca429d7ed887c1013b5d61f3b61dd98b","isMergeCommit":false,"messageTitle":"Update developer documentation to include user stories and use cases","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":22,"deletions":9}}},{"hash":"460ea80babd93776196a996fe204a92c97e1648d","isMergeCommit":true,"messageTitle":"Merge pull request #16 from maze508/readme_ui","messageBody":"Update README and Ui Mockup","fileTypesAndContributionMap":{}}]}],"sun-ruiheng":[{"date":"2024-03-05","commitResults":[{"hash":"39eade0c06b3772f0b8648f7927db4f416acc51c","isMergeCommit":true,"messageTitle":"Merge pull request #15 from guanquann/user-stories-use-cases","messageBody":"Update developer documentation to include user stories and use cases","fileTypesAndContributionMap":{}},{"hash":"f3577046717c48010c2a1b85be18498e6e7f4de1","isMergeCommit":false,"messageTitle":"Update NFRs and Glossary","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":580,"deletions":0},"docs":{"insertions":79,"deletions":74}}},{"hash":"db411e4ba136783bfc4884417585152af124c85d","isMergeCommit":false,"messageTitle":"Add NFRs","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":0,"deletions":580}}}]}],"gavingoh99":[{"date":"2024-03-05","commitResults":[{"hash":"27c0cb119cd49ac19672fa715eb56fe26cdea59d","isMergeCommit":false,"messageTitle":"docs: update aboutus","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":17,"deletions":31}}},{"hash":"dc2f56f31797b6e6bf7a44a95523b6e8bf060efa","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into updateAboutUs","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"66df7655f7238ce4c46eb18e7e9e27a64e52b522","isMergeCommit":false,"messageTitle":"docs: update member name","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"478c29119233e77284f65b3551a0fad684569fff","isMergeCommit":true,"messageTitle":"Merge pull request #19 from sun-ruiheng/Branch-v1.1-NFR-Glossary","messageBody":"Edit NFRs and Glossary","fileTypesAndContributionMap":{}}]}],"maze508":[{"date":"2024-03-05","commitResults":[{"hash":"e8a5e5cb0820e2e44c1b42fe6dec38cdcd4cba1b","isMergeCommit":false,"messageTitle":"Update README","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":21,"deletions":9}}},{"hash":"ce96723309ebc5114f4e124a916d07121ceda732","isMergeCommit":true,"messageTitle":"Merge pull request #14 from gavingoh99/updateAboutUs","messageBody":"Update AboutUs","fileTypesAndContributionMap":{}},{"hash":"912bf611b080dbbee5e23d6b8a9194701cfb721c","isMergeCommit":false,"messageTitle":"Update README","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"guanquann":{"docs":14,"functional-code":0,"test-code":0},"sun-ruiheng":{"docs":76,"functional-code":0,"test-code":0},"gavingoh99":{"docs":17,"functional-code":0,"test-code":0},"maze508":{"docs":21,"functional-code":0,"test-code":0}},"authorContributionVariance":{"guanquann":73.40972,"sun-ruiheng":131692.08,"gavingoh99":190.97221,"maze508":78.22222},"authorDisplayNameMap":{"guanquann":"CS2103T-T16-3 TAN ..QUAN","sun-ruiheng":"CS2103T-T16-3 SUN ..HENG","gavingoh99":"CS2103T-T16-3 GAVI..HONG","maze508":"CS2103T-T16-3 MA Z..XUAN"}} diff --git a/AY2324S2-CS2103T-W10-4_tp_master/authorship.json b/AY2324S2-CS2103T-W10-4_tp_master/authorship.json index fa7f8393..3bb21dcd 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":"-"},"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":"-"},"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":"-"},"content":"### Jean Doe","lastModifiedDate":"2020-06-17"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/johndoe.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2020-06-17"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":49,"author":{"gitId":"-"},"content":"[[github](http://github.com/johndoe)]","lastModifiedDate":"2020-06-17"},{"lineNumber":50,"author":{"gitId":"-"},"content":"[[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-05-23"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":"* Responsibilities: Dev Ops + Threading","lastModifiedDate":"2020-05-23"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":55,"author":{"gitId":"tohlh"},"content":"### Toh Li Heng","lastModifiedDate":"2024-03-04"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":57,"author":{"gitId":"tohlh"},"content":"\u003cimg src\u003d\"images/tohlh.jpg\" width\u003d\"200px\"\u003e","lastModifiedDate":"2024-03-04"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":59,"author":{"gitId":"tohlh"},"content":"[[homepage](http://tohlh.github.io)]","lastModifiedDate":"2024-03-04"},{"lineNumber":60,"author":{"gitId":"tohlh"},"content":"[[github](http://github.com/tohlh)]","lastModifiedDate":"2024-03-04"},{"lineNumber":61,"author":{"gitId":"tohlh"},"content":"[[portfolio](team/tohlh.md)]","lastModifiedDate":"2024-03-04"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":63,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":64,"author":{"gitId":"tohlh"},"content":"* Responsibilities: Dev Ops + Development","lastModifiedDate":"2024-03-04"}],"authorContributionMap":{"STELLA-LYE":6,"-":52,"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/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":"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 5c5ae4d3..48f26360 100644 --- a/AY2324S2-CS2103T-W10-4_tp_master/commits.json +++ b/AY2324S2-CS2103T-W10-4_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"doyelee0313":[],"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":0,"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":0.0,"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}}}]}],"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"}} diff --git a/AY2324S2-CS2103T-W12-1_tp_master/authorship.json b/AY2324S2-CS2103T-W12-1_tp_master/authorship.json index 656a1562..6e2d8914 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":"ReganChoy"},"content":"","lastModifiedDate":"2024-03-05"},{"lineNumber":36,"author":{"gitId":"ReganChoy"},"content":"### Regan Choy","lastModifiedDate":"2024-03-05"},{"lineNumber":37,"author":{"gitId":"ReganChoy"},"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":"ReganChoy"},"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":"-"},"content":"### Johnny Doe","lastModifiedDate":"2020-05-23"},{"lineNumber":47,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":48,"author":{"gitId":"-"},"content":"\u003cimg src\u003d\"images/johndoe.png\" width\u003d\"200px\"\u003e","lastModifiedDate":"2020-06-17"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":50,"author":{"gitId":"-"},"content":"[[github](http://github.com/johndoe)] [[portfolio](team/johndoe.md)]","lastModifiedDate":"2020-06-17"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-23"},{"lineNumber":52,"author":{"gitId":"-"},"content":"* Role: Developer","lastModifiedDate":"2020-05-23"},{"lineNumber":53,"author":{"gitId":"-"},"content":"* Responsibilities: Data","lastModifiedDate":"2020-05-23"},{"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":12,"-":56}},{"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/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}}] diff --git a/AY2324S2-CS2103T-W12-1_tp_master/commits.json b/AY2324S2-CS2103T-W12-1_tp_master/commits.json index 55538f08..00ecea3f 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":"7609ad60931949f6f6a8e02bfd363e0736272924","isMergeCommit":true,"messageTitle":"Merge pull request #47 from ReganChoy/branch_aboutus","messageBody":"Add ReganChoy AboutUs Info","fileTypesAndContributionMap":{}}]}],"yorklim":[]},"authorFileTypeContributionMap":{"getsquared":{"docs":95,"functional-code":0,"test-code":0},"ReganChoy":{"docs":58,"functional-code":0,"test-code":0},"solomonng2001":{"docs":0,"functional-code":0,"test-code":0},"yorklim":{"docs":0,"functional-code":0,"test-code":0}},"authorContributionVariance":{"getsquared":1100.0,"ReganChoy":14694.555,"solomonng2001":0.0,"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":"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"}} diff --git a/AY2324S2-CS2103T-W13-3_tp_master/authorship.json b/AY2324S2-CS2103T-W13-3_tp_master/authorship.json index 38182a87..5fb5fe76 100644 --- a/AY2324S2-CS2103T-W13-3_tp_master/authorship.json +++ b/AY2324S2-CS2103T-W13-3_tp_master/authorship.json @@ -1 +1 @@ -[{"path":"docs/_markbind/layouts/default.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003chead-bottom\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003clink rel\u003d\"stylesheet\" href\u003d\"{{baseUrl}}/stylesheets/main.css\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003c/head-bottom\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cheader sticky\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cnavbar type\u003d\"dark\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"HongRay"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"{{baseUrl}}/index.html\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003eRainbow Dragon\u003c/a\u003e","lastModifiedDate":"2024-02-23"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/index.html\" class\u003d\"nav-link\"\u003eHome\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/UserGuide.html\" class\u003d\"nav-link\"\u003eUser Guide\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/DeveloperGuide.html\" class\u003d\"nav-link\"\u003eDeveloper Guide\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/AboutUs.html\" class\u003d\"nav-link\"\u003eAbout Us\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"https://github.com/se-edu/addressbook-level3\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003e\u003cmd\u003e:fab-github:\u003c/md\u003e\u003c/a\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003cli slot\u003d\"right\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003cform class\u003d\"navbar-form\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\" menu-align-right\u003e\u003c/searchbar\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003c/form\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003c/navbar\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"-"},"content":"\u003c/header\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"flex-body\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"site-nav\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"site-nav-top\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"fw-bold mb-2\" style\u003d\"font-size: 1.25rem;\"\u003eSite Map\u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003csite-nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"-"},"content":"* [Home]({{ baseUrl }}/index.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"-"},"content":"* [User Guide]({{ baseUrl }}/UserGuide.html) :expanded:","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * [Quick Start]({{ baseUrl }}/UserGuide.html#quick-start)","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"-"},"content":" * [Features]({{ baseUrl }}/UserGuide.html#features)","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * [FAQ]({{ baseUrl }}/UserGuide.html#faq)","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * [Command Summary]({{ baseUrl }}/UserGuide.html#faq)","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"-"},"content":"* [Developer Guide]({{ baseUrl }}/DeveloperGuide.html) :expanded:","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * [Acknowledgements]({{ baseUrl }}/DeveloperGuide.html#acknowledgements)","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * [Setting Up]({{ baseUrl }}/DeveloperGuide.html#setting-up-getting-started)","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"-"},"content":" * [Design]({{ baseUrl }}/DeveloperGuide.html#design)","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * [Implementation]({{ baseUrl }}/DeveloperGuide.html#implementation)","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"-"},"content":" * [Documentation, logging, testing, configuration, dev-ops]({{ baseUrl }}/DeveloperGuide.html#documentation-logging-testing-configuration-dev-ops)","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * [Appendix: Requirements]({{ baseUrl }}/DeveloperGuide.html#appendix-requirements)","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * [Appendix: Instructions for manual testing]({{ baseUrl }}/DeveloperGuide.html#appendix-instructions-for-manual-testing)","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"-"},"content":"* Tutorials","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * [Tracing code]({{ baseUrl }}/tutorials/TracingCode.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"-"},"content":" * [Adding a command]({{ baseUrl }}/tutorials/AddRemark.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"-"},"content":" * [Removing Fields]({{ baseUrl }}/tutorials/RemovingFields.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* [About Us]({{ baseUrl }}/AboutUs.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003c/site-nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003c/nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003cdiv id\u003d\"content-wrapper\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"-"},"content":" {{ content }}","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"page-nav\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"-"},"content":" \u003cpage-nav /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"-"},"content":" \u003c/nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"-"},"content":" \u003cscroll-top-button\u003e\u003c/scroll-top-button\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"-"},"content":"\u003cfooter\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u003c!-- Support MarkBind by including a link to us on your landing page! --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"text-center\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"-"},"content":" \u003csmall\u003e[\u003cmd\u003e**Powered by**\u003c/md\u003e \u003cimg src\u003d\"https://markbind.org/favicon.ico\" width\u003d\"30\"\u003e {{MarkBind}}, generated on {{timestamp}}]\u003c/small\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"-"},"content":"\u003c/footer\u003e","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"HongRay":1,"-":66}},{"path":"members/Cedricaca.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"Cedricaca"},"content":"I am bad at CS lol","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"Cedricaca":1}}] +[{"path":"docs/_markbind/layouts/default.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"\u003chead-bottom\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":2,"author":{"gitId":"-"},"content":" \u003clink rel\u003d\"stylesheet\" href\u003d\"{{baseUrl}}/stylesheets/main.css\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":3,"author":{"gitId":"-"},"content":"\u003c/head-bottom\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":5,"author":{"gitId":"-"},"content":"\u003cheader sticky\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":6,"author":{"gitId":"-"},"content":" \u003cnavbar type\u003d\"dark\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":7,"author":{"gitId":"HongRay"},"content":" \u003ca slot\u003d\"brand\" href\u003d\"{{baseUrl}}/index.html\" title\u003d\"Home\" class\u003d\"navbar-brand\"\u003eRainbow Dragon\u003c/a\u003e","lastModifiedDate":"2024-02-23"},{"lineNumber":8,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/index.html\" class\u003d\"nav-link\"\u003eHome\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2024-02-09"},{"lineNumber":9,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/UserGuide.html\" class\u003d\"nav-link\"\u003eUser Guide\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/DeveloperGuide.html\" class\u003d\"nav-link\"\u003eDeveloper Guide\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":11,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"{{baseUrl}}/AboutUs.html\" class\u003d\"nav-link\"\u003eAbout Us\u003c/a\u003e\u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":12,"author":{"gitId":"-"},"content":" \u003cli\u003e\u003ca href\u003d\"https://github.com/se-edu/addressbook-level3\" target\u003d\"_blank\" class\u003d\"nav-link\"\u003e\u003cmd\u003e:fab-github:\u003c/md\u003e\u003c/a\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003cli slot\u003d\"right\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003cform class\u003d\"navbar-form\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":16,"author":{"gitId":"-"},"content":" \u003csearchbar :data\u003d\"searchData\" placeholder\u003d\"Search\" :on-hit\u003d\"searchCallback\" menu-align-right\u003e\u003c/searchbar\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003c/form\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":18,"author":{"gitId":"-"},"content":" \u003c/li\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":19,"author":{"gitId":"-"},"content":" \u003c/navbar\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":20,"author":{"gitId":"-"},"content":"\u003c/header\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":22,"author":{"gitId":"-"},"content":"\u003cdiv id\u003d\"flex-body\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":23,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"site-nav\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":24,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"site-nav-top\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":25,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"fw-bold mb-2\" style\u003d\"font-size: 1.25rem;\"\u003eSite Map\u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":26,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":27,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":28,"author":{"gitId":"-"},"content":" \u003csite-nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":29,"author":{"gitId":"-"},"content":"* [Home]({{ baseUrl }}/index.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":30,"author":{"gitId":"-"},"content":"* [User Guide]({{ baseUrl }}/UserGuide.html) :expanded:","lastModifiedDate":"2023-09-12"},{"lineNumber":31,"author":{"gitId":"-"},"content":" * [Quick Start]({{ baseUrl }}/UserGuide.html#quick-start)","lastModifiedDate":"2023-09-12"},{"lineNumber":32,"author":{"gitId":"-"},"content":" * [Features]({{ baseUrl }}/UserGuide.html#features)","lastModifiedDate":"2023-09-12"},{"lineNumber":33,"author":{"gitId":"-"},"content":" * [FAQ]({{ baseUrl }}/UserGuide.html#faq)","lastModifiedDate":"2023-09-12"},{"lineNumber":34,"author":{"gitId":"-"},"content":" * [Command Summary]({{ baseUrl }}/UserGuide.html#faq)","lastModifiedDate":"2023-09-12"},{"lineNumber":35,"author":{"gitId":"-"},"content":"* [Developer Guide]({{ baseUrl }}/DeveloperGuide.html) :expanded:","lastModifiedDate":"2023-09-12"},{"lineNumber":36,"author":{"gitId":"-"},"content":" * [Acknowledgements]({{ baseUrl }}/DeveloperGuide.html#acknowledgements)","lastModifiedDate":"2023-09-12"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * [Setting Up]({{ baseUrl }}/DeveloperGuide.html#setting-up-getting-started)","lastModifiedDate":"2023-09-12"},{"lineNumber":38,"author":{"gitId":"-"},"content":" * [Design]({{ baseUrl }}/DeveloperGuide.html#design)","lastModifiedDate":"2023-09-12"},{"lineNumber":39,"author":{"gitId":"-"},"content":" * [Implementation]({{ baseUrl }}/DeveloperGuide.html#implementation)","lastModifiedDate":"2023-09-12"},{"lineNumber":40,"author":{"gitId":"-"},"content":" * [Documentation, logging, testing, configuration, dev-ops]({{ baseUrl }}/DeveloperGuide.html#documentation-logging-testing-configuration-dev-ops)","lastModifiedDate":"2023-09-12"},{"lineNumber":41,"author":{"gitId":"-"},"content":" * [Appendix: Requirements]({{ baseUrl }}/DeveloperGuide.html#appendix-requirements)","lastModifiedDate":"2023-09-12"},{"lineNumber":42,"author":{"gitId":"-"},"content":" * [Appendix: Instructions for manual testing]({{ baseUrl }}/DeveloperGuide.html#appendix-instructions-for-manual-testing)","lastModifiedDate":"2023-09-12"},{"lineNumber":43,"author":{"gitId":"-"},"content":"* Tutorials","lastModifiedDate":"2023-09-12"},{"lineNumber":44,"author":{"gitId":"-"},"content":" * [Tracing code]({{ baseUrl }}/tutorials/TracingCode.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":45,"author":{"gitId":"-"},"content":" * [Adding a command]({{ baseUrl }}/tutorials/AddRemark.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":46,"author":{"gitId":"-"},"content":" * [Removing Fields]({{ baseUrl }}/tutorials/RemovingFields.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* [About Us]({{ baseUrl }}/AboutUs.html)","lastModifiedDate":"2023-09-12"},{"lineNumber":48,"author":{"gitId":"-"},"content":" \u003c/site-nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":49,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":50,"author":{"gitId":"-"},"content":" \u003c/nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":51,"author":{"gitId":"-"},"content":" \u003cdiv id\u003d\"content-wrapper\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":52,"author":{"gitId":"-"},"content":" {{ content }}","lastModifiedDate":"2023-09-12"},{"lineNumber":53,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":54,"author":{"gitId":"-"},"content":" \u003cnav id\u003d\"page-nav\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":55,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"nav-component slim-scroll\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":56,"author":{"gitId":"-"},"content":" \u003cpage-nav /\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":57,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":58,"author":{"gitId":"-"},"content":" \u003c/nav\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":59,"author":{"gitId":"-"},"content":" \u003cscroll-top-button\u003e\u003c/scroll-top-button\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":60,"author":{"gitId":"-"},"content":"\u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":61,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-09-12"},{"lineNumber":62,"author":{"gitId":"-"},"content":"\u003cfooter\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":63,"author":{"gitId":"-"},"content":" \u003c!-- Support MarkBind by including a link to us on your landing page! --\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":64,"author":{"gitId":"-"},"content":" \u003cdiv class\u003d\"text-center\"\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":65,"author":{"gitId":"-"},"content":" \u003csmall\u003e[\u003cmd\u003e**Powered by**\u003c/md\u003e \u003cimg src\u003d\"https://markbind.org/favicon.ico\" width\u003d\"30\"\u003e {{MarkBind}}, generated on {{timestamp}}]\u003c/small\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":66,"author":{"gitId":"-"},"content":" \u003c/div\u003e","lastModifiedDate":"2023-09-12"},{"lineNumber":67,"author":{"gitId":"-"},"content":"\u003c/footer\u003e","lastModifiedDate":"2023-09-12"}],"authorContributionMap":{"HongRay":1,"-":66}},{"path":"members/Cedricaca.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"Xuyan0518"},"content":"","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"Xuyan0518":1}},{"path":"members/Xuyan.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"Xuyan0518"},"content":"","lastModifiedDate":"2024-03-05"}],"authorContributionMap":{"Xuyan0518":1}}] diff --git a/AY2324S2-CS2103T-W13-3_tp_master/commits.json b/AY2324S2-CS2103T-W13-3_tp_master/commits.json index 5da96615..95e66bf6 100644 --- a/AY2324S2-CS2103T-W13-3_tp_master/commits.json +++ b/AY2324S2-CS2103T-W13-3_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"ChenXy128":[],"HongRay":[{"date":"2024-02-23","commitResults":[{"hash":"5cb5fb2f021702e67ed979849d0260edf5d40e3e","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/switch-docs-to-markbind\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8aa20a20638241550b26b946f95396caa93462c5","isMergeCommit":false,"messageTitle":"Update default.md","messageBody":"changed name as instructed","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2024-03-05","commitResults":[{"hash":"d222d5a78b1f54f40d7c08b05d08c888db67b1d4","isMergeCommit":false,"messageTitle":"Add file and directory","messageBody":"Added file and directory as instructed\n","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":0}}},{"hash":"ab256704770f2944a8c727cbf1afdbf2c1f1002d","isMergeCommit":true,"messageTitle":"Merge pull request #9 from HongRay/add-{Hong-Ray}-info","messageBody":"Add file and directory","fileTypesAndContributionMap":{}}]}],"Cedricaca":[{"date":"2024-03-05","commitResults":[{"hash":"02c4c145b6d0093392ac59f7518d5255ffcc2c1d","isMergeCommit":false,"messageTitle":"added Cedricaca.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":0}}},{"hash":"f91d437165e6bec5614c30bf9c86e3e7e11fabff","isMergeCommit":true,"messageTitle":"Merge pull request #1 from Cedricaca/add-Cedricaca-info","messageBody":"added Cedricaca.md","fileTypesAndContributionMap":{}}]}],"Xuyan0518":[],"NusMinato":[{"date":"2024-03-05","commitResults":[{"hash":"59731184317b43e1dba4ed38d563e3e3f94aa0e2","isMergeCommit":false,"messageTitle":"Add Chengzhen.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":0}}},{"hash":"c6e9dce85a8b3662b7ff1615aee4ad230a17dd36","isMergeCommit":true,"messageTitle":"Merge branch \u0027AY2324S2-CS2103T-W13-3:master\u0027 into add-LiChengzhen-info","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f98dbe670e6d4b3e2ba166b4a88b6e4ba79b7703","isMergeCommit":true,"messageTitle":"Merge pull request #16 from NusMinato/add-LiChengzhen-info","messageBody":"Add Chengzhen.md","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"ChenXy128":{"docs":0,"functional-code":0,"test-code":0},"HongRay":{"docs":1,"functional-code":0,"test-code":0},"Cedricaca":{"docs":1,"functional-code":0,"test-code":0},"Xuyan0518":{"docs":0,"functional-code":0,"test-code":0},"NusMinato":{"docs":0,"functional-code":0,"test-code":0}},"authorContributionVariance":{"ChenXy128":0.0,"HongRay":0.30555546,"Cedricaca":0.07638889,"Xuyan0518":0.0,"NusMinato":0.0},"authorDisplayNameMap":{"ChenXy128":"CS2103T-W13-3 CHEN..YANG","HongRay":"CS2103T-W13-3 NG H.. RAY","Cedricaca":"CS2103T-W13-3 TAN ..DRIC","Xuyan0518":"CS2103T-W13-3 ZHOU..UYAN","NusMinato":"CS2103T-W13-3 LI C..ZHEN"}} +{"authorDailyContributionsMap":{"ChenXy128":[{"date":"2024-03-05","commitResults":[{"hash":"9cdae2465e4f80a615ef0e48602418efe2ee10a7","isMergeCommit":false,"messageTitle":"Adds Xiaoyang.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":0}}},{"hash":"ced41adcc920ff00527dcfc1c65456a5603aed6a","isMergeCommit":false,"messageTitle":"Adds Xiaoyang.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":0}}},{"hash":"b9dbfcb6defd121cbd84cfe0bbaa2297884c549d","isMergeCommit":false,"messageTitle":"Adds Xiaoyang.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":0}}}]}],"HongRay":[{"date":"2024-02-23","commitResults":[{"hash":"5cb5fb2f021702e67ed979849d0260edf5d40e3e","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/switch-docs-to-markbind\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8aa20a20638241550b26b946f95396caa93462c5","isMergeCommit":false,"messageTitle":"Update default.md","messageBody":"changed name as instructed","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2024-03-05","commitResults":[{"hash":"d222d5a78b1f54f40d7c08b05d08c888db67b1d4","isMergeCommit":false,"messageTitle":"Add file and directory","messageBody":"Added file and directory as instructed\n","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":0}}},{"hash":"ab256704770f2944a8c727cbf1afdbf2c1f1002d","isMergeCommit":true,"messageTitle":"Merge pull request #9 from HongRay/add-{Hong-Ray}-info","messageBody":"Add file and directory","fileTypesAndContributionMap":{}},{"hash":"3dcc30e3f73c2ea967c4390fed5f23023ba10632","isMergeCommit":true,"messageTitle":"Merge pull request #19 from ChenXy128/XiaoyangMd","messageBody":"Adds Xiaoyang.md","fileTypesAndContributionMap":{}},{"hash":"cc8f9f3874934289f827d29f87aa5959b1b4634d","isMergeCommit":true,"messageTitle":"Merge pull request #20 from Xuyan0518/add-xuyan-info","messageBody":"Add xuyan.md","fileTypesAndContributionMap":{}}]}],"Cedricaca":[{"date":"2024-03-05","commitResults":[{"hash":"02c4c145b6d0093392ac59f7518d5255ffcc2c1d","isMergeCommit":false,"messageTitle":"added Cedricaca.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":0}}},{"hash":"f91d437165e6bec5614c30bf9c86e3e7e11fabff","isMergeCommit":true,"messageTitle":"Merge pull request #1 from Cedricaca/add-Cedricaca-info","messageBody":"added Cedricaca.md","fileTypesAndContributionMap":{}}]}],"Xuyan0518":[{"date":"2024-03-05","commitResults":[{"hash":"4706acec585f0c2ef225a373b892e396e850de0e","isMergeCommit":false,"messageTitle":"Add Xuyan.md","messageBody":"Xuyan.md contains some info about me.\n","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":0}}},{"hash":"8e3b91ad6cbe7f841088d84c96834db3aff20f96","isMergeCommit":false,"messageTitle":"Add Xuyan.md","messageBody":"Xuyan.md contains some info about me.\n","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"431230b78209461b1ff05e5c9f0f930f60b88fc6","isMergeCommit":false,"messageTitle":"Add Xuyan.md","messageBody":"Xuyan.md contains some info about me.\n","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]}],"NusMinato":[{"date":"2024-03-05","commitResults":[{"hash":"59731184317b43e1dba4ed38d563e3e3f94aa0e2","isMergeCommit":false,"messageTitle":"Add Chengzhen.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":0,"deletions":0}}},{"hash":"c6e9dce85a8b3662b7ff1615aee4ad230a17dd36","isMergeCommit":true,"messageTitle":"Merge branch \u0027AY2324S2-CS2103T-W13-3:master\u0027 into add-LiChengzhen-info","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f98dbe670e6d4b3e2ba166b4a88b6e4ba79b7703","isMergeCommit":true,"messageTitle":"Merge pull request #16 from NusMinato/add-LiChengzhen-info","messageBody":"Add Chengzhen.md","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"ChenXy128":{"docs":0,"functional-code":0,"test-code":0},"HongRay":{"docs":1,"functional-code":0,"test-code":0},"Cedricaca":{"docs":0,"functional-code":0,"test-code":0},"Xuyan0518":{"docs":2,"functional-code":0,"test-code":0},"NusMinato":{"docs":0,"functional-code":0,"test-code":0}},"authorContributionVariance":{"ChenXy128":0.0,"HongRay":0.30555546,"Cedricaca":0.07638889,"Xuyan0518":1.9097223,"NusMinato":0.0},"authorDisplayNameMap":{"ChenXy128":"CS2103T-W13-3 CHEN..YANG","HongRay":"CS2103T-W13-3 NG H.. RAY","Cedricaca":"CS2103T-W13-3 TAN ..DRIC","Xuyan0518":"CS2103T-W13-3 ZHOU..UYAN","NusMinato":"CS2103T-W13-3 LI C..ZHEN"}} diff --git a/archive.zip b/archive.zip index 33d14cd0..3e052a23 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 3955e4bd..f924974f 100644 --- a/reposense-logs/reposense.log.0 +++ b/reposense-logs/reposense.log.0 @@ -1,42 +1,42 @@ -Mar 05, 2024 2:46:45 PM reposense.system.LogsManager addFileHandler +Mar 05, 2024 4:17:41 PM reposense.system.LogsManager addFileHandler INFO: Log temp folder has been successfully created -Mar 05, 2024 2:46:45 PM reposense.parser.CsvParser validateHeader +Mar 05, 2024 4:17:41 PM reposense.parser.CsvParser validateHeader INFO: Parsed header of CSV file, repo-config.csv, and recognized columns: Ignore Standalone Config, Repository's Location, Branch, Shallow Cloning, File formats, Ignore Glob List, Ignore Authors List, Find Previous Authors, Ignore Commits List -Mar 05, 2024 2:46:45 PM reposense.parser.RepoConfigCsvParser matchValueAndKeyword +Mar 05, 2024 4:17:41 PM 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 2:46:45 PM reposense.parser.CsvParser validateHeader +Mar 05, 2024 4:17:42 PM reposense.parser.CsvParser validateHeader INFO: Parsed header of CSV file, author-config.csv, and recognized columns: Author's Emails, Repository's Location, Author's GitHub ID, Branch, Author's Display Name, Ignore Glob List, Author's Git Author Name -Mar 05, 2024 2:46:45 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 05, 2024 4:17:42 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias guohuang found. The alias will belong to the last author - guohuang88 -Mar 05, 2024 2:46:45 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 05, 2024 4:17:42 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias amanzainal found. The alias will belong to the last author - amanzainal -Mar 05, 2024 2:46:45 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 05, 2024 4:17:42 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias shuyuan found. The alias will belong to the last author - legionlegion -Mar 05, 2024 2:46:45 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 05, 2024 4:17:42 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias alphajae11 found. The alias will belong to the last author - alphajae11 -Mar 05, 2024 2:46:45 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 05, 2024 4:17:42 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jayne1010 found. The alias will belong to the last author - Jayne1010 -Mar 05, 2024 2:46:45 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 05, 2024 4:17:42 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias miffi found. The alias will belong to the last author - miffi -Mar 05, 2024 2:46:45 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 05, 2024 4:17:42 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias windofbitter found. The alias will belong to the last author - Windofbitter -Mar 05, 2024 2:46:45 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 05, 2024 4:17:42 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias guohuang found. The alias will belong to the last author - guohuang88 -Mar 05, 2024 2:46:45 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 05, 2024 4:17:42 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias amanzainal found. The alias will belong to the last author - amanzainal -Mar 05, 2024 2:46:45 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 05, 2024 4:17:42 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias shuyuan found. The alias will belong to the last author - legionlegion -Mar 05, 2024 2:46:45 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 05, 2024 4:17:42 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias alphajae11 found. The alias will belong to the last author - alphajae11 -Mar 05, 2024 2:46:45 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 05, 2024 4:17:42 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias windofbitter found. The alias will belong to the last author - Windofbitter -Mar 05, 2024 2:46:45 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 05, 2024 4:17:42 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias jayne1010 found. The alias will belong to the last author - Jayne1010 -Mar 05, 2024 2:46:45 PM reposense.model.AuthorConfiguration checkDuplicateAliases +Mar 05, 2024 4:17:42 PM reposense.model.AuthorConfiguration checkDuplicateAliases WARNING: Duplicate alias miffi found. The alias will belong to the last author - miffi -Mar 05, 2024 2:46:45 PM reposense.parser.CsvParser validateHeader +Mar 05, 2024 4:17:42 PM 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 2:46:45 PM reposense.git.GitConfig getGlobalGitLfsConfig +Mar 05, 2024 4:17:42 PM reposense.git.GitConfig getGlobalGitLfsConfig WARNING: Could not get global git lfs config java.lang.RuntimeException: reposense.system.CommandRunnerProcessException: Error returned from command git config --global --list on path . : fatal: unable to read config file '/home/runner/.gitconfig': No such file or directory @@ -52,1455 +52,1481 @@ 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 2:46:45 PM reposense.report.RepoCloner spawnCloneProcess +Mar 05, 2024 4:17:42 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T16-1/tp.git... -Mar 05, 2024 2:46:45 PM reposense.report.RepoCloner spawnCloneProcess +Mar 05, 2024 4:17:42 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F13-3/tp.git... -Mar 05, 2024 2:46:45 PM reposense.report.RepoCloner spawnCloneProcess +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 2:46:45 PM reposense.report.RepoCloner spawnCloneProcess +Mar 05, 2024 4:17:42 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F15-2/tp.git... -Mar 05, 2024 2:46:45 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:17:42 PM 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 INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F15-2/tp.git to complete... -Mar 05, 2024 2:46:45 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W10-4/tp.git to complete... -Mar 05, 2024 2:46:45 PM reposense.report.RepoCloner waitForCloneProcess +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 2:46:45 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T16-1/tp.git to complete... -Mar 05, 2024 2:46:46 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:17:42 PM 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 INFO: Cloning of https://github.com/AY2324S2-CS2103-F15-2/tp.git completed! -Mar 05, 2024 2:46:46 PM reposense.report.RepoCloner spawnCloneProcess +Mar 05, 2024 4:17:43 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F10-3/tp.git... -Mar 05, 2024 2:46:46 PM reposense.report.ReportGenerator analyzeRepos +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 2:46:46 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:17:43 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F10-3/tp.git to complete... -Mar 05, 2024 2:46:46 PM reposense.report.ReportGenerator updateRepoConfig +Mar 05, 2024 4:17:43 PM 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 2:46:46 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 05, 2024 4:17:43 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F15-2/tp.git (master)... -Mar 05, 2024 2:46:46 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F13-3/tp.git completed! -Mar 05, 2024 2:46:46 PM reposense.report.RepoCloner spawnCloneProcess +Mar 05, 2024 4:17:43 PM 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 INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W13-4/tp.git... -Mar 05, 2024 2:46:46 PM reposense.report.ReportGenerator analyzeRepos -INFO: [2/92] Analyzing https://github.com/AY2324S2-CS2103T-F13-3/tp.git (master)... -Mar 05, 2024 2:46:46 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:17:43 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W13-4/tp.git to complete... -Mar 05, 2024 2:46:46 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W10-4/tp.git completed! -Mar 05, 2024 2:46:46 PM reposense.report.RepoCloner spawnCloneProcess +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 INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F10-2/tp.git... -Mar 05, 2024 2:46:46 PM reposense.report.RepoCloner waitForCloneProcess +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 INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F10-2/tp.git to complete... -Mar 05, 2024 2:46:46 PM reposense.report.ReportGenerator analyzeRepos -INFO: [3/92] Analyzing https://github.com/AY2324S2-CS2103T-W10-4/tp.git (master)... -Mar 05, 2024 2:46:46 PM reposense.report.ReportGenerator updateRepoConfig +Mar 05, 2024 4:17:44 PM 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 2:46:46 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 05, 2024 4:17:44 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F13-3/tp.git (master)... -Mar 05, 2024 2:46:46 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T16-1/tp.git completed! -Mar 05, 2024 2:46:47 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F15-3/tp.git... -Mar 05, 2024 2:46:47 PM reposense.report.ReportGenerator analyzeRepos -INFO: [4/92] Analyzing https://github.com/AY2324S2-CS2103T-T16-1/tp.git (master)... -Mar 05, 2024 2:46:47 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 2:46:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W10-4/tp.git (master)... -Mar 05, 2024 2:46:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F15-2/tp.git (master)... -Mar 05, 2024 2:46:47 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F15-3/tp.git to complete... -Mar 05, 2024 2:46:47 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 2:46:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T16-1/tp.git (master)... -Mar 05, 2024 2:46:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F15-2/tp.git (master)... -Mar 05, 2024 2:46:47 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103-F15-2/tp.git (master) completed! -Mar 05, 2024 2:46:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W10-4/tp.git (master)... -Mar 05, 2024 2:46:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T16-1/tp.git (master)... -Mar 05, 2024 2:46:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 05, 2024 4:17:44 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F13-3/tp.git (master)... -Mar 05, 2024 2:46:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W10-4/tp.git (master)... -Mar 05, 2024 2:46:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T16-1/tp.git (master)... -Mar 05, 2024 2:46:47 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W10-4/tp.git (master) completed! -Mar 05, 2024 2:46:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 05, 2024 4:17:44 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F13-3/tp.git (master)... -Mar 05, 2024 2:46:47 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T16-1/tp.git (master) completed! -Mar 05, 2024 2:46:48 PM reposense.report.ReportGenerator analyzeRepo +Mar 05, 2024 4:17:44 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-F13-3/tp.git (master) completed! -Mar 05, 2024 2:46:48 PM reposense.report.RepoCloner waitForCloneProcess +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 2:46:48 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F15-1/tp.git... -Mar 05, 2024 2:46:48 PM reposense.report.ReportGenerator analyzeRepos -INFO: [5/92] Analyzing https://github.com/AY2324S2-CS2103T-F10-3/tp.git (master)... -Mar 05, 2024 2:46:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F15-1/tp.git to complete... -Mar 05, 2024 2:46:48 PM reposense.report.ReportGenerator updateRepoConfig +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 2:46:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +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 2:46:48 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:17:44 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-W13-4/tp.git completed! -Mar 05, 2024 2:46:48 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T16-2/tp.git... -Mar 05, 2024 2:46:48 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 05, 2024 4:17:44 PM 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 +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 +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 2:46:48 PM reposense.report.ReportGenerator analyzeRepos -INFO: [6/92] Analyzing https://github.com/AY2324S2-CS2103T-W13-4/tp.git (master)... -Mar 05, 2024 2:46:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T16-2/tp.git to complete... -Mar 05, 2024 2:46:48 PM reposense.report.ReportGenerator updateRepoConfig +Mar 05, 2024 4:17:44 PM 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 2:46:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 05, 2024 4:17:44 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W13-4/tp.git (master)... -Mar 05, 2024 2:46:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103-F15-3/tp.git completed! -Mar 05, 2024 2:46:48 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +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 2:46:48 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T10-1/tp.git... -Mar 05, 2024 2:46:48 PM reposense.report.ReportGenerator analyzeRepos -INFO: [7/92] Analyzing https://github.com/AY2324S2-CS2103-F15-3/tp.git (master)... -Mar 05, 2024 2:46:48 PM reposense.report.ReportGenerator analyzeRepo +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 2:46:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F10-2/tp.git completed! -Mar 05, 2024 2:46:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T10-1/tp.git to complete... -Mar 05, 2024 2:46:48 PM reposense.report.ReportGenerator analyzeRepos -INFO: [8/92] Analyzing https://github.com/AY2324S2-CS2103T-F10-2/tp.git (master)... -Mar 05, 2024 2:46:48 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F13-2/tp.git... -Mar 05, 2024 2:46:48 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F13-2/tp.git to complete... -Mar 05, 2024 2:46:48 PM 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 2:46:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F15-3/tp.git (master)... -Mar 05, 2024 2:46:48 PM reposense.commits.CommitInfoExtractor extractCommitInfos +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 2:46:48 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 2:46:48 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F10-2/tp.git (master)... -Mar 05, 2024 2:46:48 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +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 2:46:48 PM reposense.report.ReportGenerator analyzeRepo +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 2:46:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos +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 +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 +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 +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 +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 INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F15-3/tp.git (master)... -Mar 05, 2024 2:46:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F10-2/tp.git (master)... -Mar 05, 2024 2:46:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +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 INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F15-3/tp.git (master)... -Mar 05, 2024 2:46:49 PM reposense.report.ReportGenerator analyzeRepo +Mar 05, 2024 4:17:46 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103-F15-3/tp.git (master) completed! -Mar 05, 2024 2:46:49 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103-F15-1/tp.git completed! -Mar 05, 2024 2:46:49 PM reposense.report.ReportGenerator analyzeRepos -INFO: [9/92] Analyzing https://github.com/AY2324S2-CS2103-F15-1/tp.git (master)... -Mar 05, 2024 2:46:49 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F13-4/tp.git... -Mar 05, 2024 2:46:49 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F10-2/tp.git (master)... -Mar 05, 2024 2:46:49 PM reposense.report.RepoCloner waitForCloneProcess +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 INFO: Cloning of https://github.com/AY2324S2-CS2103T-T16-2/tp.git completed! -Mar 05, 2024 2:46:49 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F13-4/tp.git to complete... -Mar 05, 2024 2:46:49 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W10-3/tp.git... -Mar 05, 2024 2:46:49 PM reposense.report.ReportGenerator analyzeRepos -INFO: [10/92] Analyzing https://github.com/AY2324S2-CS2103T-T16-2/tp.git (master)... -Mar 05, 2024 2:46:49 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W10-3/tp.git to complete... -Mar 05, 2024 2:46:49 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F10-2/tp.git (master) completed! -Mar 05, 2024 2:46:49 PM reposense.report.ReportGenerator updateRepoConfig +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 INFO: https://github.com/AY2324S2-CS2103T-T16-2/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 2:46:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 05, 2024 4:17:47 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T16-2/tp.git (master)... -Mar 05, 2024 2:46:49 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 2:46:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F15-1/tp.git (master)... -Mar 05, 2024 2:46:49 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 05, 2024 4:17:47 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T16-2/tp.git (master)... -Mar 05, 2024 2:46:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 05, 2024 4:17:47 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T16-2/tp.git (master)... -Mar 05, 2024 2:46:50 PM reposense.report.ReportGenerator analyzeRepo +Mar 05, 2024 4:17:47 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T16-2/tp.git (master) completed! -Mar 05, 2024 2:46:50 PM reposense.report.RepoCloner waitForCloneProcess +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 INFO: Cloning of https://github.com/AY2324S2-CS2103T-F13-2/tp.git completed! -Mar 05, 2024 2:46:50 PM reposense.report.ReportGenerator analyzeRepos -INFO: [11/92] Analyzing https://github.com/AY2324S2-CS2103T-F13-2/tp.git (master)... -Mar 05, 2024 2:46:50 PM reposense.report.RepoCloner spawnCloneProcess +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 2:46:50 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:17:49 PM 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 INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T13-2/tp.git to complete... -Mar 05, 2024 2:46:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F15-1/tp.git (master)... -Mar 05, 2024 2:46:50 PM reposense.report.ReportGenerator updateRepoConfig +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 INFO: https://github.com/AY2324S2-CS2103T-F13-2/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 2:46:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 05, 2024 4:17:49 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F13-2/tp.git (master)... -Mar 05, 2024 2:46:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F15-1/tp.git (master)... -Mar 05, 2024 2:46:50 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103-F15-1/tp.git (master) completed! -Mar 05, 2024 2:46:50 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T10-1/tp.git completed! -Mar 05, 2024 2:46:50 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F13-2/tp.git (master)... -Mar 05, 2024 2:46:50 PM reposense.report.ReportGenerator analyzeRepos -INFO: [12/92] Analyzing https://github.com/AY2324S2-CS2103T-T10-1/tp.git (master)... -Mar 05, 2024 2:46:50 PM reposense.report.RepoCloner spawnCloneProcess +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 2:46:50 PM reposense.report.RepoCloner waitForCloneProcess +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 INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T13-1/tp.git to complete... -Mar 05, 2024 2:46:51 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W10-3/tp.git completed! -Mar 05, 2024 2:46:51 PM reposense.report.RepoCloner spawnCloneProcess +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 INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T10-2/tp.git... -Mar 05, 2024 2:46:51 PM reposense.report.ReportGenerator analyzeRepos -INFO: [13/92] Analyzing https://github.com/AY2324S2-CS2103T-W10-3/tp.git (master)... -Mar 05, 2024 2:46:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +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 +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 +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 +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 +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 2:46:51 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F13-4/tp.git completed! -Mar 05, 2024 2:46:51 PM reposense.report.ReportGenerator analyzeRepo +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 2:46:51 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T10-2/tp.git to complete... -Mar 05, 2024 2:46:51 PM reposense.report.ReportGenerator updateRepoConfig +Mar 05, 2024 4:17:50 PM 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 2:46:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 05, 2024 4:17:50 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W10-3/tp.git (master)... -Mar 05, 2024 2:46:51 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F13-1/tp.git... -Mar 05, 2024 2:46:51 PM reposense.report.ReportGenerator analyzeRepos -INFO: [14/92] Analyzing https://github.com/AY2324S2-CS2103T-F13-4/tp.git (master)... -Mar 05, 2024 2:46:51 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F13-1/tp.git to complete... -Mar 05, 2024 2:46:51 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 2:46:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T10-1/tp.git (master)... -Mar 05, 2024 2:46:51 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 2:46:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F13-4/tp.git (master)... -Mar 05, 2024 2:46:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos +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 INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W10-3/tp.git (master)... -Mar 05, 2024 2:46:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 05, 2024 4:17:50 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W10-3/tp.git (master)... -Mar 05, 2024 2:46:51 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F13-4/tp.git (master)... -Mar 05, 2024 2:46:51 PM reposense.report.ReportGenerator analyzeRepo +Mar 05, 2024 4:17:50 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-W10-3/tp.git (master) completed! -Mar 05, 2024 2:46:51 PM reposense.report.RepoCloner waitForCloneProcess +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 2:46:51 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F15-4/tp.git... -Mar 05, 2024 2:46:51 PM reposense.report.ReportGenerator analyzeRepos +Mar 05, 2024 4:17:51 PM reposense.report.ReportGenerator analyzeRepos INFO: [15/92] Analyzing https://github.com/AY2324S2-CS2103T-T13-2/tp.git (master)... -Mar 05, 2024 2:46:51 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:17:51 PM 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 INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F15-4/tp.git to complete... -Mar 05, 2024 2:46:51 PM reposense.report.ReportGenerator updateRepoConfig +Mar 05, 2024 4:17:51 PM 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 2:46:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 05, 2024 4:17:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T13-2/tp.git (master)... -Mar 05, 2024 2:46:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F13-4/tp.git (master)... -Mar 05, 2024 2:46:51 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F13-4/tp.git (master) completed! -Mar 05, 2024 2:46:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T13-2/tp.git (master)... -Mar 05, 2024 2:46:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T13-2/tp.git (master)... -Mar 05, 2024 2:46:52 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T13-2/tp.git (master) completed! -Mar 05, 2024 2:46:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T10-1/tp.git (master)... -Mar 05, 2024 2:46:52 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T10-2/tp.git completed! -Mar 05, 2024 2:46:52 PM reposense.report.ReportGenerator analyzeRepos -INFO: [16/92] Analyzing https://github.com/AY2324S2-CS2103T-T10-2/tp.git (master)... -Mar 05, 2024 2:46:52 PM reposense.report.RepoCloner spawnCloneProcess +Mar 05, 2024 4:17:51 PM 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 +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 INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W13-3/tp.git... -Mar 05, 2024 2:46:52 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:17:51 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W13-3/tp.git to complete... -Mar 05, 2024 2:46:52 PM 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 2:46:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T10-2/tp.git (master)... -Mar 05, 2024 2:46:52 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T13-1/tp.git completed! -Mar 05, 2024 2:46:52 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W13-2/tp.git... -Mar 05, 2024 2:46:52 PM reposense.report.ReportGenerator analyzeRepos -INFO: [17/92] Analyzing https://github.com/AY2324S2-CS2103T-T13-1/tp.git (master)... -Mar 05, 2024 2:46:52 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W13-2/tp.git to complete... -Mar 05, 2024 2:46:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T10-1/tp.git (master)... -Mar 05, 2024 2:46:52 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T10-1/tp.git (master) completed! -Mar 05, 2024 2:46:52 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F13-1/tp.git completed! -Mar 05, 2024 2:46:52 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T10-2/tp.git (master)... -Mar 05, 2024 2:46:52 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T16-4/tp.git... -Mar 05, 2024 2:46:52 PM reposense.report.ReportGenerator analyzeRepos -INFO: [18/92] Analyzing https://github.com/AY2324S2-CS2103T-F13-1/tp.git (master)... -Mar 05, 2024 2:46:52 PM reposense.report.ReportGenerator updateRepoConfig +Mar 05, 2024 4:17:51 PM 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 2:46:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 05, 2024 4:17:51 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T13-1/tp.git (master)... -Mar 05, 2024 2:46:52 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T16-4/tp.git to complete... -Mar 05, 2024 2:46:52 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 2:46:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F13-1/tp.git (master)... -Mar 05, 2024 2:46:52 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T10-2/tp.git (master)... -Mar 05, 2024 2:46:52 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T10-2/tp.git (master) completed! -Mar 05, 2024 2:46:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 05, 2024 4:17:51 PM 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 +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 +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 +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 +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 2:46:53 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 05, 2024 4:17:51 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T13-1/tp.git (master)... -Mar 05, 2024 2:46:53 PM reposense.report.ReportGenerator analyzeRepo +Mar 05, 2024 4:17:51 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T13-1/tp.git (master) completed! -Mar 05, 2024 2:46:53 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:17:51 PM 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 +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 +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 INFO: Cloning of https://github.com/AY2324S2-CS2103-F15-4/tp.git completed! -Mar 05, 2024 2:46:53 PM reposense.report.ReportGenerator analyzeRepos +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 2:46:53 PM reposense.report.RepoCloner spawnCloneProcess +Mar 05, 2024 4:17:52 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W10-1/tp.git... -Mar 05, 2024 2:46:53 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:17:52 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W10-1/tp.git to complete... -Mar 05, 2024 2:46:53 PM reposense.report.ReportGenerator updateRepoConfig +Mar 05, 2024 4:17:52 PM 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 2:46:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 05, 2024 4:17:52 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F15-4/tp.git (master)... -Mar 05, 2024 2:46:53 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W13-2/tp.git completed! -Mar 05, 2024 2:46:53 PM reposense.report.ReportGenerator analyzeRepos -INFO: [20/92] Analyzing https://github.com/AY2324S2-CS2103T-W13-2/tp.git (master)... -Mar 05, 2024 2:46:53 PM reposense.report.RepoCloner spawnCloneProcess +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 +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 INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T13-3/tp.git... -Mar 05, 2024 2:46:53 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:17:53 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T13-3/tp.git to complete... -Mar 05, 2024 2:46:53 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W13-3/tp.git completed! -Mar 05, 2024 2:46:53 PM reposense.report.ReportGenerator analyzeRepos -INFO: [21/92] Analyzing https://github.com/AY2324S2-CS2103T-W13-3/tp.git (master)... -Mar 05, 2024 2:46:53 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T13-4/tp.git... -Mar 05, 2024 2:46: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 2:46:53 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 2:46:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W13-2/tp.git (master)... -Mar 05, 2024 2:46:53 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T16-4/tp.git completed! -Mar 05, 2024 2:46:54 PM 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 2:46:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W13-3/tp.git (master)... -Mar 05, 2024 2:46:54 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W10-2/tp.git... -Mar 05, 2024 2:46: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 2:46:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F15-4/tp.git (master)... -Mar 05, 2024 2:46:54 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W13-2/tp.git (master)... -Mar 05, 2024 2:46:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +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 2:46:54 PM reposense.report.ReportGenerator analyzeRepo +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 2:46:54 PM reposense.report.ReportGenerator analyzeRepos -INFO: [22/92] Analyzing https://github.com/AY2324S2-CS2103T-T16-4/tp.git (master)... -Mar 05, 2024 2:46:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W13-2/tp.git (master)... -Mar 05, 2024 2:46:54 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W13-2/tp.git (master) completed! -Mar 05, 2024 2:46:54 PM reposense.report.ReportGenerator updateRepoConfig +Mar 05, 2024 4:17:53 PM 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 +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 +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 INFO: https://github.com/AY2324S2-CS2103T-T16-4/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 2:46:54 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 05, 2024 4:17:53 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T16-4/tp.git (master)... -Mar 05, 2024 2:46:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 05, 2024 4:17:53 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T16-4/tp.git (master)... -Mar 05, 2024 2:46:55 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W10-1/tp.git completed! -Mar 05, 2024 2:46:55 PM reposense.report.ReportGenerator analyzeRepos -INFO: [23/92] Analyzing https://github.com/AY2324S2-CS2103T-W10-1/tp.git (master)... -Mar 05, 2024 2:46:55 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F10-1/tp.git... -Mar 05, 2024 2:46:55 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F10-1/tp.git to complete... -Mar 05, 2024 2:46:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W13-3/tp.git (master)... -Mar 05, 2024 2:46:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 05, 2024 4:17:54 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T16-4/tp.git (master)... -Mar 05, 2024 2:46:55 PM reposense.report.ReportGenerator analyzeRepo +Mar 05, 2024 4:17:54 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T16-4/tp.git (master) completed! -Mar 05, 2024 2:46:55 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T13-4/tp.git completed! -Mar 05, 2024 2:46:55 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:17:54 PM 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 +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 +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 INFO: Cloning of https://github.com/AY2324S2-CS2103T-T13-3/tp.git completed! -Mar 05, 2024 2:46:55 PM reposense.report.ReportGenerator analyzeRepos -INFO: [24/92] Analyzing https://github.com/AY2324S2-CS2103T-T13-4/tp.git (master)... -Mar 05, 2024 2:46:55 PM reposense.report.RepoCloner spawnCloneProcess +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 +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 +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 +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 +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 +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 +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 +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 +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 2:46:55 PM reposense.report.RepoCloner waitForCloneProcess +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 2:46:55 PM 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 2:46:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W10-1/tp.git (master)... -Mar 05, 2024 2:46:55 PM reposense.report.RepoCloner spawnCloneProcess +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 2:46:55 PM reposense.report.RepoCloner waitForCloneProcess +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 2:46:55 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W10-2/tp.git completed! -Mar 05, 2024 2:46:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W13-3/tp.git (master)... -Mar 05, 2024 2:46:55 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W13-3/tp.git (master) completed! -Mar 05, 2024 2:46:55 PM reposense.report.ReportGenerator updateRepoConfig +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 2:46:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +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 2:46:55 PM reposense.report.RepoCloner spawnCloneProcess +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 +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 +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 2:46:55 PM reposense.report.ReportGenerator analyzeRepos -INFO: [25/92] Analyzing https://github.com/AY2324S2-CS2103T-T13-3/tp.git (master)... -Mar 05, 2024 2:46:55 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F13-1/tp.git (master)... -Mar 05, 2024 2:46:55 PM reposense.report.RepoCloner waitForCloneProcess +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 2:46:55 PM 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 2:46:55 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T13-3/tp.git (master)... -Mar 05, 2024 2:46:55 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F13-1/tp.git (master)... -Mar 05, 2024 2:46:55 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F13-1/tp.git (master) completed! -Mar 05, 2024 2:46:55 PM reposense.report.ReportGenerator analyzeRepos -INFO: [26/92] Analyzing https://github.com/AY2324S2-CS2103T-W10-2/tp.git (master)... -Mar 05, 2024 2:46:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T13-4/tp.git (master)... -Mar 05, 2024 2:46:56 PM reposense.report.ReportGenerator updateRepoConfig +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 2:46:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +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 2:46:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W10-1/tp.git (master)... -Mar 05, 2024 2:46:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T13-3/tp.git (master)... -Mar 05, 2024 2:46:56 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:17:56 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-F10-1/tp.git completed! -Mar 05, 2024 2:46:56 PM reposense.report.RepoCloner spawnCloneProcess +Mar 05, 2024 4:17:56 PM 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 INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T10-3/tp.git... -Mar 05, 2024 2:46:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W10-1/tp.git (master)... -Mar 05, 2024 2:46:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T13-4/tp.git (master)... -Mar 05, 2024 2:46:56 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T13-4/tp.git (master) completed! -Mar 05, 2024 2:46:56 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W10-1/tp.git (master) completed! -Mar 05, 2024 2:46:56 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:17:56 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T10-3/tp.git to complete... -Mar 05, 2024 2:46:56 PM reposense.report.ReportGenerator analyzeRepos -INFO: [27/92] Analyzing https://github.com/AY2324S2-CS2103T-F10-1/tp.git (master)... -Mar 05, 2024 2:46:56 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F10-4/tp.git completed! -Mar 05, 2024 2:46:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T13-3/tp.git (master)... -Mar 05, 2024 2:46:56 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T13-3/tp.git (master) completed! -Mar 05, 2024 2:46:56 PM reposense.report.ReportGenerator analyzeRepos -INFO: [28/92] Analyzing https://github.com/AY2324S2-CS2103T-F10-4/tp.git (master)... -Mar 05, 2024 2:46:56 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F09-1/tp.git... -Mar 05, 2024 2:46: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 2:46:56 PM reposense.report.ReportGenerator updateRepoConfig +Mar 05, 2024 4:17:56 PM 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 2:46:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 05, 2024 4:17:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F10-1/tp.git (master)... -Mar 05, 2024 2:46:56 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 2:46:56 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F10-4/tp.git (master)... -Mar 05, 2024 2:46:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos +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 2:46:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 05, 2024 4:17:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F10-1/tp.git (master)... -Mar 05, 2024 2:46:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +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 2:46:56 PM reposense.report.ReportGenerator analyzeRepo +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 2:46:56 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F10-4/tp.git (master)... -Mar 05, 2024 2:46:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 05, 2024 4:17:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F10-1/tp.git (master)... -Mar 05, 2024 2:46:56 PM reposense.report.ReportGenerator analyzeRepo +Mar 05, 2024 4:17:56 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-F10-1/tp.git (master) completed! -Mar 05, 2024 2:46:56 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F10-4/tp.git (master)... -Mar 05, 2024 2:46:57 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F10-4/tp.git (master) completed! -Mar 05, 2024 2:46:57 PM reposense.report.RepoCloner waitForCloneProcess +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 INFO: Cloning of https://github.com/AY2324S2-CS2103T-T16-3/tp.git completed! -Mar 05, 2024 2:46:57 PM reposense.report.ReportGenerator analyzeRepos -INFO: [29/92] Analyzing https://github.com/AY2324S2-CS2103T-T16-3/tp.git (master)... -Mar 05, 2024 2:46:57 PM reposense.report.RepoCloner spawnCloneProcess +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 +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 +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 2:46:57 PM reposense.report.RepoCloner waitForCloneProcess +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 2:46:57 PM reposense.report.RepoCloner waitForCloneProcess +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 2:46:57 PM reposense.report.ReportGenerator analyzeRepos +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 2:46:57 PM reposense.report.RepoCloner spawnCloneProcess +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 2:46:57 PM reposense.report.RepoCloner waitForCloneProcess +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 2:46:57 PM 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 2:46:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T16-3/tp.git (master)... -Mar 05, 2024 2:46:57 PM reposense.report.ReportGenerator updateRepoConfig +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 2:46:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +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 2:46:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T16-3/tp.git (master)... -Mar 05, 2024 2:46:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos +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 INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F09-3/tp.git (master)... -Mar 05, 2024 2:46:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T16-3/tp.git (master)... -Mar 05, 2024 2:46:57 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T16-3/tp.git (master) completed! -Mar 05, 2024 2:46:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 05, 2024 4:17:57 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F09-3/tp.git (master)... -Mar 05, 2024 2:46:57 PM reposense.report.ReportGenerator analyzeRepo +Mar 05, 2024 4:17:57 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103-F09-3/tp.git (master) completed! -Mar 05, 2024 2:46:57 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:17:57 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-T10-3/tp.git completed! -Mar 05, 2024 2:46:57 PM reposense.report.ReportGenerator analyzeRepos +Mar 05, 2024 4:17:57 PM reposense.report.ReportGenerator analyzeRepos INFO: [31/92] Analyzing https://github.com/AY2324S2-CS2103T-T10-3/tp.git (master)... -Mar 05, 2024 2:46:57 PM reposense.report.RepoCloner spawnCloneProcess +Mar 05, 2024 4:17:57 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T09-4/tp.git... -Mar 05, 2024 2:46:57 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:17:57 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T09-4/tp.git to complete... -Mar 05, 2024 2:46:57 PM reposense.report.ReportGenerator updateRepoConfig +Mar 05, 2024 4:17:57 PM 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 2:46:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 05, 2024 4:17:57 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T10-3/tp.git (master)... -Mar 05, 2024 2:46:57 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103-F09-1/tp.git completed! -Mar 05, 2024 2:46:57 PM reposense.report.ReportGenerator analyzeRepos -INFO: [32/92] Analyzing https://github.com/AY2324S2-CS2103-F09-1/tp.git (master)... -Mar 05, 2024 2:46:57 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F08-4/tp.git... -Mar 05, 2024 2:46:57 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F08-4/tp.git to complete... -Mar 05, 2024 2:46:58 PM 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 2:46:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F09-1/tp.git (master)... -Mar 05, 2024 2:46:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 05, 2024 4:17:57 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T10-3/tp.git (master)... -Mar 05, 2024 2:46:58 PM reposense.report.RepoCloner waitForCloneProcess +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 INFO: Cloning of https://github.com/AY2324S2-CS2103-F09-4/tp.git completed! -Mar 05, 2024 2:46:58 PM reposense.report.ReportGenerator analyzeRepos -INFO: [33/92] Analyzing https://github.com/AY2324S2-CS2103-F09-4/tp.git (master)... -Mar 05, 2024 2:46:58 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T09-3/tp.git... -Mar 05, 2024 2:46:58 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T09-3/tp.git to complete... -Mar 05, 2024 2:46:58 PM reposense.report.ReportGenerator updateRepoConfig +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 +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 +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 2:46:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +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 2:46:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T10-3/tp.git (master)... -Mar 05, 2024 2:46:58 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T10-3/tp.git (master) completed! -Mar 05, 2024 2:46:58 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103-F09-2/tp.git completed! -Mar 05, 2024 2:46:58 PM reposense.report.ReportGenerator analyzeRepos -INFO: [34/92] Analyzing https://github.com/AY2324S2-CS2103-F09-2/tp.git (master)... -Mar 05, 2024 2:46:58 PM reposense.report.RepoCloner spawnCloneProcess +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 +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 +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 INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T12-4/tp.git... -Mar 05, 2024 2:46:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F09-1/tp.git (master)... -Mar 05, 2024 2:46:58 PM reposense.report.RepoCloner waitForCloneProcess +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 INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T12-4/tp.git to complete... -Mar 05, 2024 2:46:58 PM 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 2:46:58 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F09-2/tp.git (master)... -Mar 05, 2024 2:46:58 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F09-1/tp.git (master)... -Mar 05, 2024 2:46:58 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103-F09-1/tp.git (master) completed! -Mar 05, 2024 2:46:58 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F09-2/tp.git (master)... -Mar 05, 2024 2:46:59 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F09-2/tp.git (master)... -Mar 05, 2024 2:46:59 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103-F09-2/tp.git (master) completed! -Mar 05, 2024 2:46:59 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103-F08-4/tp.git completed! -Mar 05, 2024 2:46:59 PM reposense.report.ReportGenerator analyzeRepos -INFO: [35/92] Analyzing https://github.com/AY2324S2-CS2103-F08-4/tp.git (master)... -Mar 05, 2024 2:46:59 PM reposense.report.RepoCloner spawnCloneProcess +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 2:46:59 PM reposense.report.RepoCloner waitForCloneProcess +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 2:46:59 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T09-4/tp.git completed! -Mar 05, 2024 2:46:59 PM reposense.report.RepoCloner spawnCloneProcess +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 2:46:59 PM reposense.report.ReportGenerator analyzeRepos -INFO: [36/92] Analyzing https://github.com/AY2324S2-CS2103T-T09-4/tp.git (master)... -Mar 05, 2024 2:46:59 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 2:46:59 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F08-4/tp.git (master)... -Mar 05, 2024 2:46:59 PM reposense.report.RepoCloner waitForCloneProcess +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 2:46: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 2:46: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 2:46:59 PM reposense.commits.CommitInfoExtractor extractCommitInfos +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 2:47:00 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 05, 2024 4:18:00 PM 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 +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 +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 +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 2:47:00 PM reposense.report.ReportGenerator analyzeRepo +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 2:47:00 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T12-4/tp.git completed! -Mar 05, 2024 2:47:00 PM reposense.report.ReportGenerator analyzeRepos -INFO: [37/92] Analyzing https://github.com/AY2324S2-CS2103T-T12-4/tp.git (master)... -Mar 05, 2024 2:47:00 PM reposense.report.RepoCloner spawnCloneProcess +Mar 05, 2024 4:18:00 PM 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 +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 +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 +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 INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W11-3/tp.git... -Mar 05, 2024 2:47:00 PM reposense.report.RepoCloner waitForCloneProcess +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 INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W11-3/tp.git to complete... -Mar 05, 2024 2:47:00 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F09-4/tp.git (master)... -Mar 05, 2024 2:47:00 PM reposense.report.ReportGenerator updateRepoConfig +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 INFO: https://github.com/AY2324S2-CS2103T-T12-4/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 2:47:00 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 05, 2024 4:18:03 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T12-4/tp.git (master)... -Mar 05, 2024 2:47:00 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T09-4/tp.git (master)... -Mar 05, 2024 2:47:00 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F09-4/tp.git (master)... -Mar 05, 2024 2:47:00 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103-F09-4/tp.git (master) completed! -Mar 05, 2024 2:47:00 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T09-4/tp.git (master)... -Mar 05, 2024 2:47:00 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T09-4/tp.git (master) completed! -Mar 05, 2024 2:47:00 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:18:03 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103-F08-2/tp.git completed! -Mar 05, 2024 2:47:00 PM reposense.report.ReportGenerator analyzeRepos -INFO: [38/92] Analyzing https://github.com/AY2324S2-CS2103-F08-2/tp.git (master)... -Mar 05, 2024 2:47:00 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W09-3/tp.git... -Mar 05, 2024 2:47:00 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W09-3/tp.git to complete... -Mar 05, 2024 2:47:01 PM reposense.report.ReportGenerator updateRepoConfig +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 +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 +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 INFO: https://github.com/AY2324S2-CS2103-F08-2/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 2:47:01 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 05, 2024 4:18:03 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F08-2/tp.git (master)... -Mar 05, 2024 2:47:01 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W11-1/tp.git completed! -Mar 05, 2024 2:47:01 PM reposense.commits.CommitInfoExtractor extractCommitInfos +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 2:47:01 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T09-3/tp.git completed! -Mar 05, 2024 2:47:01 PM reposense.report.ReportGenerator analyzeRepos -INFO: [39/92] Analyzing https://github.com/AY2324S2-CS2103T-W11-1/tp.git (master)... -Mar 05, 2024 2:47:01 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F14-1/tp.git... -Mar 05, 2024 2:47:01 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T12-2/tp.git... -Mar 05, 2024 2:47:01 PM reposense.report.ReportGenerator analyzeRepos -INFO: [40/92] Analyzing https://github.com/AY2324S2-CS2103T-T09-3/tp.git (master)... -Mar 05, 2024 2:47:01 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F14-1/tp.git to complete... -Mar 05, 2024 2:47:01 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T12-2/tp.git to complete... -Mar 05, 2024 2:47:01 PM reposense.commits.CommitInfoExtractor extractCommitInfos +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 2:47:01 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 2:47:01 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W11-1/tp.git (master)... -Mar 05, 2024 2:47:01 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +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 2:47:01 PM reposense.report.ReportGenerator analyzeRepo +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 2:47:01 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T12-4/tp.git (master)... -Mar 05, 2024 2:47:01 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T12-4/tp.git (master) completed! -Mar 05, 2024 2:47:01 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 2:47:01 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T09-3/tp.git (master)... -Mar 05, 2024 2:47:01 PM reposense.report.RepoCloner waitForCloneProcess +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 +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 +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 INFO: Cloning of https://github.com/AY2324S2-CS2103T-W11-3/tp.git completed! -Mar 05, 2024 2:47:01 PM reposense.report.ReportGenerator analyzeRepos +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 2:47:01 PM reposense.report.RepoCloner spawnCloneProcess +Mar 05, 2024 4:18:03 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F14-3/tp.git... -Mar 05, 2024 2:47:01 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:18:03 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F14-3/tp.git to complete... -Mar 05, 2024 2:47:01 PM reposense.report.ReportGenerator updateRepoConfig +Mar 05, 2024 4:18:03 PM 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 2:47:01 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 05, 2024 4:18:03 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W11-3/tp.git (master)... -Mar 05, 2024 2:47:02 PM reposense.commits.CommitInfoExtractor extractCommitInfos +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 INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W11-3/tp.git (master)... -Mar 05, 2024 2:47:02 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:18:04 PM 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 +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 INFO: Cloning of https://github.com/AY2324S2-CS2103T-W09-3/tp.git completed! -Mar 05, 2024 2:47:02 PM reposense.report.ReportGenerator analyzeRepos +Mar 05, 2024 4:18:04 PM reposense.report.ReportGenerator analyzeRepos INFO: [42/92] Analyzing https://github.com/AY2324S2-CS2103T-W09-3/tp.git (master)... -Mar 05, 2024 2:47:02 PM reposense.report.RepoCloner spawnCloneProcess +Mar 05, 2024 4:18:04 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W09-1/tp.git... -Mar 05, 2024 2:47:02 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:18:04 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W09-1/tp.git to complete... -Mar 05, 2024 2:47:02 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W11-3/tp.git (master)... -Mar 05, 2024 2:47:02 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W11-3/tp.git (master) completed! -Mar 05, 2024 2:47:02 PM reposense.report.ReportGenerator updateRepoConfig +Mar 05, 2024 4:18:04 PM 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 2:47:02 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 05, 2024 4:18:04 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W09-3/tp.git (master)... -Mar 05, 2024 2:47:02 PM reposense.report.RepoCloner waitForCloneProcess +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 INFO: Cloning of https://github.com/AY2324S2-CS2103T-F14-1/tp.git completed! -Mar 05, 2024 2:47:02 PM reposense.report.ReportGenerator analyzeRepos +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 2:47:02 PM reposense.report.RepoCloner spawnCloneProcess +Mar 05, 2024 4:18:04 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T17-4/tp.git... -Mar 05, 2024 2:47:02 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:18:04 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T17-4/tp.git to complete... -Mar 05, 2024 2:47:02 PM reposense.report.ReportGenerator updateRepoConfig +Mar 05, 2024 4:18:04 PM 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 2:47:02 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 05, 2024 4:18:04 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F14-1/tp.git (master)... -Mar 05, 2024 2:47:02 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W11-1/tp.git (master)... -Mar 05, 2024 2:47:03 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W09-3/tp.git (master)... -Mar 05, 2024 2:47:03 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W11-1/tp.git (master)... -Mar 05, 2024 2:47:03 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W11-1/tp.git (master) completed! -Mar 05, 2024 2:47:03 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W09-3/tp.git (master)... -Mar 05, 2024 2:47:03 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W09-3/tp.git (master) completed! -Mar 05, 2024 2:47:03 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T09-3/tp.git (master)... -Mar 05, 2024 2:47:03 PM reposense.report.RepoCloner waitForCloneProcess +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 2:47:03 PM reposense.report.ReportGenerator analyzeRepos +Mar 05, 2024 4:18:05 PM reposense.report.ReportGenerator analyzeRepos INFO: [44/92] Analyzing https://github.com/AY2324S2-CS2103T-T12-2/tp.git (master)... -Mar 05, 2024 2:47:03 PM reposense.report.RepoCloner spawnCloneProcess +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 2:47:03 PM reposense.report.RepoCloner waitForCloneProcess +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 2:47:03 PM reposense.report.ReportGenerator updateRepoConfig +Mar 05, 2024 4:18:05 PM 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 2:47:03 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 05, 2024 4:18:05 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T12-2/tp.git (master)... -Mar 05, 2024 2:47:03 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T09-3/tp.git (master)... -Mar 05, 2024 2:47:03 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T09-3/tp.git (master) completed! -Mar 05, 2024 2:47:03 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W09-1/tp.git completed! -Mar 05, 2024 2:47:03 PM reposense.commits.CommitInfoExtractor extractCommitInfos +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 2:47:03 PM reposense.report.ReportGenerator analyzeRepos -INFO: [45/92] Analyzing https://github.com/AY2324S2-CS2103T-W09-1/tp.git (master)... -Mar 05, 2024 2:47:03 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T11-4/tp.git... -Mar 05, 2024 2:47:04 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T11-4/tp.git to complete... -Mar 05, 2024 2:47:04 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 2:47:04 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W09-1/tp.git (master)... -Mar 05, 2024 2:47:04 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +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 2:47:04 PM reposense.report.ReportGenerator analyzeRepo +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 2:47:04 PM reposense.report.RepoCloner waitForCloneProcess +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 2:47:04 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T17-2/tp.git... -Mar 05, 2024 2:47:04 PM reposense.report.ReportGenerator analyzeRepos -INFO: [46/92] Analyzing https://github.com/AY2324S2-CS2103T-T17-4/tp.git (master)... -Mar 05, 2024 2:47:04 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T17-2/tp.git to complete... -Mar 05, 2024 2:47:04 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F14-3/tp.git completed! -Mar 05, 2024 2:47:04 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W09-1/tp.git (master)... -Mar 05, 2024 2:47:04 PM reposense.report.ReportGenerator analyzeRepos -INFO: [47/92] Analyzing https://github.com/AY2324S2-CS2103T-F14-3/tp.git (master)... -Mar 05, 2024 2:47:04 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T08-3/tp.git... -Mar 05, 2024 2:47:04 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T08-3/tp.git to complete... -Mar 05, 2024 2:47:04 PM reposense.report.ReportGenerator updateRepoConfig +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 +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 +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 2:47:04 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +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 2:47:04 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W09-1/tp.git (master)... -Mar 05, 2024 2:47:04 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W09-1/tp.git (master) completed! -Mar 05, 2024 2:47:04 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 2:47:04 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F14-3/tp.git (master)... -Mar 05, 2024 2:47:04 PM reposense.commits.CommitInfoExtractor extractCommitInfos +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 2:47:04 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +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 2:47:04 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T11-2/tp.git completed! -Mar 05, 2024 2:47:04 PM reposense.report.ReportGenerator analyzeRepo +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 2:47:04 PM reposense.report.ReportGenerator analyzeRepos -INFO: [48/92] Analyzing https://github.com/AY2324S2-CS2103T-T11-2/tp.git (master)... -Mar 05, 2024 2:47:04 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T08-1/tp.git... -Mar 05, 2024 2:47:04 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T08-1/tp.git to complete... -Mar 05, 2024 2:47:04 PM reposense.report.ReportGenerator updateRepoConfig +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 +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 +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 +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 +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 +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 2:47:04 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +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 2:47:05 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T11-4/tp.git completed! -Mar 05, 2024 2:47:05 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 05, 2024 4:18:06 PM 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 +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 +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 2:47:05 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F12-4/tp.git... -Mar 05, 2024 2:47:05 PM reposense.report.ReportGenerator analyzeRepos -INFO: [49/92] Analyzing https://github.com/AY2324S2-CS2103T-T11-4/tp.git (master)... -Mar 05, 2024 2:47:05 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F12-4/tp.git to complete... -Mar 05, 2024 2:47:05 PM 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 2:47:05 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T11-4/tp.git (master)... -Mar 05, 2024 2:47:05 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +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 2:47:05 PM reposense.report.ReportGenerator analyzeRepo +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 2:47:05 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T17-2/tp.git completed! -Mar 05, 2024 2:47:05 PM reposense.report.ReportGenerator analyzeRepos -INFO: [50/92] Analyzing https://github.com/AY2324S2-CS2103T-T17-2/tp.git (master)... -Mar 05, 2024 2:47:05 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T14-1/tp.git... -Mar 05, 2024 2:47:05 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 05, 2024 4:18:07 PM 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 +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 +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 INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T11-4/tp.git (master)... -Mar 05, 2024 2:47:05 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F14-3/tp.git (master)... -Mar 05, 2024 2:47:05 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T14-1/tp.git to complete... -Mar 05, 2024 2:47:05 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 2:47:05 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T17-2/tp.git (master)... -Mar 05, 2024 2:47:05 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T08-3/tp.git completed! -Mar 05, 2024 2:47:05 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F12-2/tp.git... -Mar 05, 2024 2:47:05 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 05, 2024 4:18:07 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T11-4/tp.git (master)... -Mar 05, 2024 2:47:05 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F12-2/tp.git to complete... -Mar 05, 2024 2:47:05 PM reposense.report.ReportGenerator analyzeRepo +Mar 05, 2024 4:18:07 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T11-4/tp.git (master) completed! -Mar 05, 2024 2:47:05 PM reposense.report.ReportGenerator analyzeRepos -INFO: [51/92] Analyzing https://github.com/AY2324S2-CS2103T-T08-3/tp.git (master)... -Mar 05, 2024 2:47:05 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 05, 2024 4:18:07 PM 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 2:47:05 PM 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 2:47:05 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T08-3/tp.git (master)... -Mar 05, 2024 2:47:05 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F14-1/tp.git (master)... -Mar 05, 2024 2:47:06 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F14-3/tp.git (master)... -Mar 05, 2024 2:47:06 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F14-3/tp.git (master) completed! -Mar 05, 2024 2:47:06 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +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 2:47:06 PM reposense.report.ReportGenerator analyzeRepo +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 2:47:06 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T08-1/tp.git completed! -Mar 05, 2024 2:47:06 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W08-4/tp.git... -Mar 05, 2024 2:47:06 PM reposense.report.ReportGenerator analyzeRepos -INFO: [52/92] Analyzing https://github.com/AY2324S2-CS2103T-T08-1/tp.git (master)... -Mar 05, 2024 2:47:06 PM reposense.commits.CommitInfoExtractor extractCommitInfos +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 +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 +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 +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 +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 INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T08-3/tp.git (master)... -Mar 05, 2024 2:47:06 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W08-4/tp.git to complete... -Mar 05, 2024 2:47:06 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 2:47:06 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T08-1/tp.git (master)... -Mar 05, 2024 2:47:06 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F14-1/tp.git (master)... -Mar 05, 2024 2:47:06 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F14-1/tp.git (master) completed! -Mar 05, 2024 2:47:06 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +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 INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T08-3/tp.git (master)... -Mar 05, 2024 2:47:06 PM reposense.report.ReportGenerator analyzeRepo +Mar 05, 2024 4:18:08 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T08-3/tp.git (master) completed! -Mar 05, 2024 2:47:06 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F12-4/tp.git completed! -Mar 05, 2024 2:47:06 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W12-2/tp.git... -Mar 05, 2024 2:47:06 PM reposense.report.ReportGenerator analyzeRepos -INFO: [53/92] Analyzing https://github.com/AY2324S2-CS2103T-F12-4/tp.git (master)... -Mar 05, 2024 2:47:06 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W12-2/tp.git to complete... -Mar 05, 2024 2:47:06 PM reposense.commits.CommitInfoExtractor extractCommitInfos +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 INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T08-1/tp.git (master)... -Mar 05, 2024 2:47:06 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 2:47:06 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F12-4/tp.git (master)... -Mar 05, 2024 2:47:06 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 05, 2024 4:18:08 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T08-1/tp.git (master)... -Mar 05, 2024 2:47:06 PM reposense.report.ReportGenerator analyzeRepo +Mar 05, 2024 4:18:08 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T08-1/tp.git (master) completed! -Mar 05, 2024 2:47:06 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F12-4/tp.git (master)... -Mar 05, 2024 2:47:06 PM reposense.report.RepoCloner waitForCloneProcess +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 +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 +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 2:47:06 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F12-4/tp.git (master)... -Mar 05, 2024 2:47:06 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F12-4/tp.git (master) completed! -Mar 05, 2024 2:47:06 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W08-3/tp.git... -Mar 05, 2024 2:47:06 PM reposense.report.ReportGenerator analyzeRepos +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 2:47:06 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:18:09 PM 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 INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W08-3/tp.git to complete... -Mar 05, 2024 2:47:07 PM reposense.report.ReportGenerator updateRepoConfig +Mar 05, 2024 4:18:09 PM 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 2:47:07 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 05, 2024 4:18:09 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T14-1/tp.git (master)... -Mar 05, 2024 2:47:07 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F12-2/tp.git completed! -Mar 05, 2024 2:47:07 PM reposense.report.ReportGenerator analyzeRepos -INFO: [55/92] Analyzing https://github.com/AY2324S2-CS2103T-F12-2/tp.git (master)... -Mar 05, 2024 2:47:07 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W12-1/tp.git... -Mar 05, 2024 2:47:07 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W12-1/tp.git to complete... -Mar 05, 2024 2:47:07 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 2:47:07 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F12-2/tp.git (master)... -Mar 05, 2024 2:47:07 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T14-1/tp.git (master)... -Mar 05, 2024 2:47:07 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 05, 2024 4:18:09 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F12-2/tp.git (master)... -Mar 05, 2024 2:47:07 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:18:09 PM 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 +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 2:47:07 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +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 INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T14-1/tp.git (master)... -Mar 05, 2024 2:47:07 PM reposense.report.ReportGenerator analyzeRepo +Mar 05, 2024 4:18:10 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T14-1/tp.git (master) completed! -Mar 05, 2024 2:47:07 PM reposense.report.ReportGenerator analyzeRepos -INFO: [56/92] Analyzing https://github.com/AY2324S2-CS2103T-W08-4/tp.git (master)... -Mar 05, 2024 2:47:07 PM reposense.report.RepoCloner spawnCloneProcess +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 +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 +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 2:47:07 PM reposense.report.RepoCloner waitForCloneProcess +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 2:47:07 PM reposense.report.RepoCloner waitForCloneProcess +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 INFO: Cloning of https://github.com/AY2324S2-CS2103T-W12-2/tp.git completed! -Mar 05, 2024 2:47:07 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F12-2/tp.git (master)... -Mar 05, 2024 2:47:07 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F12-2/tp.git (master) completed! -Mar 05, 2024 2:47:07 PM 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 2:47:07 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W08-4/tp.git (master)... -Mar 05, 2024 2:47:07 PM reposense.report.ReportGenerator analyzeRepos +Mar 05, 2024 4:18:11 PM reposense.report.ReportGenerator analyzeRepos INFO: [57/92] Analyzing https://github.com/AY2324S2-CS2103T-W12-2/tp.git (master)... -Mar 05, 2024 2:47:07 PM reposense.report.RepoCloner spawnCloneProcess +Mar 05, 2024 4:18:11 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F14-4/tp.git... -Mar 05, 2024 2:47:07 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:18:11 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F14-4/tp.git to complete... -Mar 05, 2024 2:47:07 PM reposense.report.ReportGenerator updateRepoConfig +Mar 05, 2024 4:18:11 PM 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 2:47:07 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 05, 2024 4:18:11 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W12-2/tp.git (master)... -Mar 05, 2024 2:47:07 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W08-4/tp.git (master)... -Mar 05, 2024 2:47:07 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 05, 2024 4:18:11 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W12-2/tp.git (master)... -Mar 05, 2024 2:47:08 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 05, 2024 4:18:11 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W12-2/tp.git (master)... -Mar 05, 2024 2:47:08 PM reposense.report.ReportGenerator analyzeRepo +Mar 05, 2024 4:18:11 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-W12-2/tp.git (master) completed! -Mar 05, 2024 2:47:08 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W08-4/tp.git (master)... -Mar 05, 2024 2:47:08 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W08-4/tp.git (master) completed! -Mar 05, 2024 2:47:08 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:18:11 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-W08-3/tp.git completed! -Mar 05, 2024 2:47:08 PM reposense.report.ReportGenerator analyzeRepos +Mar 05, 2024 4:18:11 PM reposense.report.ReportGenerator analyzeRepos INFO: [58/92] Analyzing https://github.com/AY2324S2-CS2103T-W08-3/tp.git (master)... -Mar 05, 2024 2:47:08 PM reposense.report.RepoCloner spawnCloneProcess +Mar 05, 2024 4:18:11 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W08-2/tp.git... -Mar 05, 2024 2:47:08 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:18:11 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W08-2/tp.git to complete... -Mar 05, 2024 2:47:08 PM reposense.report.ReportGenerator updateRepoConfig +Mar 05, 2024 4:18:11 PM 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 2:47:08 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 05, 2024 4:18:11 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W08-3/tp.git (master)... -Mar 05, 2024 2:47:08 PM reposense.commits.CommitInfoExtractor extractCommitInfos +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 2:47:08 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +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 2:47:08 PM reposense.report.ReportGenerator analyzeRepo +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 2:47:08 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:18:12 PM reposense.report.RepoCloner waitForCloneProcess INFO: Cloning of https://github.com/AY2324S2-CS2103T-W12-1/tp.git completed! -Mar 05, 2024 2:47:08 PM reposense.report.ReportGenerator analyzeRepos +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 2:47:08 PM reposense.report.RepoCloner spawnCloneProcess +Mar 05, 2024 4:18:12 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F11-3/tp.git... -Mar 05, 2024 2:47:08 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:18:12 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F11-3/tp.git to complete... -Mar 05, 2024 2:47:08 PM reposense.report.ReportGenerator updateRepoConfig +Mar 05, 2024 4:18:12 PM 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 2:47:08 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 05, 2024 4:18:12 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W12-1/tp.git (master)... -Mar 05, 2024 2:47:08 PM reposense.report.RepoCloner waitForCloneProcess +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 INFO: Cloning of https://github.com/AY2324S2-CS2103T-F11-4/tp.git completed! -Mar 05, 2024 2:47:08 PM reposense.report.ReportGenerator analyzeRepos +Mar 05, 2024 4:18:12 PM reposense.report.ReportGenerator analyzeRepos INFO: [60/92] Analyzing https://github.com/AY2324S2-CS2103T-F11-4/tp.git (master)... -Mar 05, 2024 2:47:08 PM reposense.report.RepoCloner spawnCloneProcess +Mar 05, 2024 4:18:12 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T15-2/tp.git... -Mar 05, 2024 2:47:08 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:18:12 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T15-2/tp.git to complete... -Mar 05, 2024 2:47:08 PM reposense.report.ReportGenerator updateRepoConfig +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 2:47:08 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +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 2:47:08 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F14-4/tp.git completed! -Mar 05, 2024 2:47:08 PM reposense.report.ReportGenerator analyzeRepos -INFO: [61/92] Analyzing https://github.com/AY2324S2-CS2103T-F14-4/tp.git (master)... -Mar 05, 2024 2:47:08 PM reposense.report.RepoCloner spawnCloneProcess +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 INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-T14-1/tp.git... -Mar 05, 2024 2:47:08 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:18:12 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-T14-1/tp.git to complete... -Mar 05, 2024 2:47:09 PM reposense.report.ReportGenerator updateRepoConfig +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 +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 +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 +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 +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 +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 +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 +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 2:47:09 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +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 2:47:09 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W12-1/tp.git (master)... -Mar 05, 2024 2:47:09 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W12-1/tp.git (master)... -Mar 05, 2024 2:47:09 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W12-1/tp.git (master) completed! -Mar 05, 2024 2:47:09 PM reposense.commits.CommitInfoExtractor extractCommitInfos +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 2:47:09 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F11-4/tp.git (master)... -Mar 05, 2024 2:47:09 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W08-2/tp.git completed! -Mar 05, 2024 2:47:09 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +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 2:47:09 PM reposense.report.ReportGenerator analyzeRepo +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 2:47:09 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F11-2/tp.git... -Mar 05, 2024 2:47:09 PM reposense.report.ReportGenerator analyzeRepos -INFO: [62/92] Analyzing https://github.com/AY2324S2-CS2103T-W08-2/tp.git (master)... -Mar 05, 2024 2:47:09 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F11-2/tp.git to complete... -Mar 05, 2024 2:47:09 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F11-4/tp.git (master)... -Mar 05, 2024 2:47:09 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F11-4/tp.git (master) completed! -Mar 05, 2024 2:47:09 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 2:47:09 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W08-2/tp.git (master)... -Mar 05, 2024 2:47:10 PM reposense.report.RepoCloner waitForCloneProcess +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 INFO: Cloning of https://github.com/AY2324S2-CS2103T-T15-2/tp.git completed! -Mar 05, 2024 2:47:10 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F11-1/tp.git... -Mar 05, 2024 2:47:10 PM reposense.report.ReportGenerator analyzeRepos -INFO: [63/92] Analyzing https://github.com/AY2324S2-CS2103T-T15-2/tp.git (master)... -Mar 05, 2024 2:47:10 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F11-3/tp.git completed! -Mar 05, 2024 2:47:10 PM reposense.report.ReportGenerator analyzeRepos -INFO: [64/92] Analyzing https://github.com/AY2324S2-CS2103T-F11-3/tp.git (master)... -Mar 05, 2024 2:47:10 PM reposense.report.RepoCloner spawnCloneProcess +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 INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T15-3/tp.git... -Mar 05, 2024 2:47:10 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F11-1/tp.git to complete... -Mar 05, 2024 2:47:10 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:18:14 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T15-3/tp.git to complete... -Mar 05, 2024 2:47:10 PM reposense.report.ReportGenerator updateRepoConfig +Mar 05, 2024 4:18:14 PM 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 2:47:10 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 05, 2024 4:18:14 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T15-2/tp.git (master)... -Mar 05, 2024 2:47:10 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W08-2/tp.git (master)... -Mar 05, 2024 2:47:10 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 2:47:10 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F11-3/tp.git (master)... -Mar 05, 2024 2:47:10 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W08-2/tp.git (master)... -Mar 05, 2024 2:47:10 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W08-2/tp.git (master) completed! -Mar 05, 2024 2:47:10 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 05, 2024 4:18:14 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T15-2/tp.git (master)... -Mar 05, 2024 2:47:10 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F11-2/tp.git completed! -Mar 05, 2024 2:47:10 PM reposense.report.ReportGenerator analyzeRepos -INFO: [65/92] Analyzing https://github.com/AY2324S2-CS2103T-F11-2/tp.git (master)... -Mar 05, 2024 2:47:10 PM reposense.report.RepoCloner spawnCloneProcess +Mar 05, 2024 4:18:14 PM 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 INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T15-1/tp.git... -Mar 05, 2024 2:47:10 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 05, 2024 4:18:14 PM 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 +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 2:47:10 PM reposense.report.ReportGenerator analyzeRepo +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 2:47:10 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T15-1/tp.git to complete... -Mar 05, 2024 2:47:10 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103-T14-1/tp.git completed! -Mar 05, 2024 2:47:10 PM reposense.report.ReportGenerator analyzeRepos -INFO: [66/92] Analyzing https://github.com/AY2324S2-CS2103-T14-1/tp.git (master)... -Mar 05, 2024 2:47:10 PM reposense.report.RepoCloner spawnCloneProcess +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 +INFO: Cloning of https://github.com/AY2324S2-CS2103T-F11-2/tp.git completed! +Mar 05, 2024 4:18:15 PM 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 INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T09-1/tp.git... -Mar 05, 2024 2:47:10 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:18:15 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T09-1/tp.git to complete... -Mar 05, 2024 2:47:10 PM reposense.report.ReportGenerator updateRepoConfig +Mar 05, 2024 4:18:15 PM 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 2:47:10 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 05, 2024 4:18:15 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F11-2/tp.git (master)... -Mar 05, 2024 2:47:10 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 2:47:10 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-T14-1/tp.git (master)... -Mar 05, 2024 2:47:11 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 05, 2024 4:18:15 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F11-2/tp.git (master)... -Mar 05, 2024 2:47:11 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 05, 2024 4:18:15 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F11-2/tp.git (master)... -Mar 05, 2024 2:47:11 PM reposense.report.ReportGenerator analyzeRepo +Mar 05, 2024 4:18:15 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-F11-2/tp.git (master) completed! -Mar 05, 2024 2:47:11 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T15-3/tp.git completed! -Mar 05, 2024 2:47:11 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W12-4/tp.git... -Mar 05, 2024 2:47:11 PM reposense.report.ReportGenerator analyzeRepos -INFO: [67/92] Analyzing https://github.com/AY2324S2-CS2103T-T15-3/tp.git (master)... -Mar 05, 2024 2:47:11 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W12-4/tp.git to complete... -Mar 05, 2024 2:47:11 PM 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 2:47:11 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T15-3/tp.git (master)... -Mar 05, 2024 2:47:11 PM reposense.commits.CommitInfoExtractor extractCommitInfos +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 2:47:11 PM reposense.report.RepoCloner waitForCloneProcess +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 INFO: Cloning of https://github.com/AY2324S2-CS2103T-F11-1/tp.git completed! -Mar 05, 2024 2:47:11 PM reposense.report.ReportGenerator analyzeRepos -INFO: [68/92] Analyzing https://github.com/AY2324S2-CS2103T-F11-1/tp.git (master)... -Mar 05, 2024 2:47:11 PM reposense.report.RepoCloner spawnCloneProcess +Mar 05, 2024 4:18:15 PM 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 +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 +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 +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 2:47:11 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:18:16 PM 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 INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W12-3/tp.git to complete... -Mar 05, 2024 2:47:12 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-T14-1/tp.git (master)... -Mar 05, 2024 2:47:12 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103-T14-1/tp.git (master) completed! -Mar 05, 2024 2:47:12 PM reposense.report.RepoCloner waitForCloneProcess +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 2:47:12 PM reposense.report.ReportGenerator analyzeRepos +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 2:47:12 PM reposense.report.RepoCloner spawnCloneProcess +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 2:47:12 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T15-3/tp.git (master)... -Mar 05, 2024 2:47:12 PM reposense.report.RepoCloner waitForCloneProcess +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 2:47:12 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 2:47:12 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-F11-1/tp.git (master)... -Mar 05, 2024 2:47:12 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 2:47:12 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T15-1/tp.git (master)... -Mar 05, 2024 2:47:12 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T15-3/tp.git (master)... -Mar 05, 2024 2:47:12 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T15-3/tp.git (master) completed! -Mar 05, 2024 2:47:12 PM reposense.report.RepoCloner waitForCloneProcess +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 2:47:12 PM reposense.report.RepoCloner spawnCloneProcess +Mar 05, 2024 4:18:16 PM 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 +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 INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T15-4/tp.git... -Mar 05, 2024 2:47:12 PM reposense.report.ReportGenerator analyzeRepos +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 2:47:12 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:18:16 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T15-4/tp.git to complete... -Mar 05, 2024 2:47:12 PM reposense.report.ReportGenerator updateRepoConfig +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 INFO: https://github.com/AY2324S2-CS2103T-T09-1/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 2:47:12 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 05, 2024 4:18:16 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T09-1/tp.git (master)... -Mar 05, 2024 2:47:12 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F11-3/tp.git (master)... -Mar 05, 2024 2:47:12 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 05, 2024 4:18:16 PM 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 2:47:12 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F11-3/tp.git (master)... -Mar 05, 2024 2:47:12 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F11-3/tp.git (master) completed! -Mar 05, 2024 2:47:12 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F11-1/tp.git (master)... -Mar 05, 2024 2:47:12 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +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 +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 +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 2:47:12 PM reposense.report.ReportGenerator analyzeRepo +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 2:47:13 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T09-1/tp.git (master)... -Mar 05, 2024 2:47:13 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F11-1/tp.git (master)... -Mar 05, 2024 2:47:13 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F11-1/tp.git (master) completed! -Mar 05, 2024 2:47:13 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 05, 2024 4:18:16 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T09-1/tp.git (master)... -Mar 05, 2024 2:47:13 PM reposense.report.ReportGenerator analyzeRepo +Mar 05, 2024 4:18:16 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T09-1/tp.git (master) completed! -Mar 05, 2024 2:47:13 PM reposense.report.RepoCloner waitForCloneProcess +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 2:47:13 PM reposense.report.ReportGenerator analyzeRepos +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 2:47:13 PM reposense.report.RepoCloner spawnCloneProcess +Mar 05, 2024 4:18:17 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F08-3/tp.git... -Mar 05, 2024 2:47:13 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:18:17 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F08-3/tp.git to complete... -Mar 05, 2024 2:47:13 PM reposense.report.ReportGenerator updateRepoConfig +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 2:47:13 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +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 2:47:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T15-4/tp.git completed! -Mar 05, 2024 2:47:13 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103-F08-1/tp.git... -Mar 05, 2024 2:47:13 PM reposense.report.ReportGenerator analyzeRepos -INFO: [72/92] Analyzing https://github.com/AY2324S2-CS2103T-T15-4/tp.git (master)... -Mar 05, 2024 2:47:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103-F08-1/tp.git to complete... -Mar 05, 2024 2:47:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W12-3/tp.git completed! -Mar 05, 2024 2:47:13 PM reposense.commits.CommitInfoExtractor extractCommitInfos +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 2:47:13 PM 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 2:47:13 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T15-4/tp.git (master)... -Mar 05, 2024 2:47:13 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W08-1/tp.git... -Mar 05, 2024 2:47:13 PM reposense.report.ReportGenerator analyzeRepos -INFO: [73/92] Analyzing https://github.com/AY2324S2-CS2103T-W12-3/tp.git (master)... -Mar 05, 2024 2:47:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W08-1/tp.git to complete... -Mar 05, 2024 2:47:13 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 2:47:13 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W12-3/tp.git (master)... -Mar 05, 2024 2:47:13 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +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 2:47:13 PM reposense.report.ReportGenerator analyzeRepo +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 2:47:13 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T15-4/tp.git (master)... -Mar 05, 2024 2:47:13 PM reposense.report.RepoCloner waitForCloneProcess +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 2:47:13 PM reposense.report.ReportGenerator analyzeRepos -INFO: [74/92] Analyzing https://github.com/AY2324S2-CS2103T-W12-4/tp.git (master)... -Mar 05, 2024 2:47:13 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T12-1/tp.git... -Mar 05, 2024 2:47:13 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T12-1/tp.git to complete... -Mar 05, 2024 2:47:14 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T15-4/tp.git (master)... -Mar 05, 2024 2:47:14 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T15-4/tp.git (master) completed! -Mar 05, 2024 2:47:14 PM reposense.report.ReportGenerator updateRepoConfig +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 INFO: https://github.com/AY2324S2-CS2103T-W12-4/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 2:47:14 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 05, 2024 4:18:18 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W12-4/tp.git (master)... -Mar 05, 2024 2:47:14 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103-F08-3/tp.git completed! -Mar 05, 2024 2:47:14 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W11-2/tp.git... -Mar 05, 2024 2:47:14 PM reposense.report.ReportGenerator analyzeRepos -INFO: [75/92] Analyzing https://github.com/AY2324S2-CS2103-F08-3/tp.git (master)... -Mar 05, 2024 2:47:14 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W11-2/tp.git to complete... -Mar 05, 2024 2:47:14 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 2:47:14 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103-F08-3/tp.git (master)... -Mar 05, 2024 2:47:14 PM reposense.commits.CommitInfoExtractor extractCommitInfos +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 2:47:14 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W08-1/tp.git completed! -Mar 05, 2024 2:47:14 PM reposense.report.ReportGenerator analyzeRepos -INFO: [76/92] Analyzing https://github.com/AY2324S2-CS2103T-W08-1/tp.git (master)... -Mar 05, 2024 2:47:14 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W09-2/tp.git... -Mar 05, 2024 2:47:14 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W09-2/tp.git to complete... -Mar 05, 2024 2:47:14 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103-F08-1/tp.git completed! -Mar 05, 2024 2:47:14 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 2:47:14 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W08-1/tp.git (master)... -Mar 05, 2024 2:47:14 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +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 2:47:14 PM reposense.report.ReportGenerator analyzeRepo +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 2:47:14 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 05, 2024 4:18:18 PM 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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 2:47:15 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-W09-4/tp.git... -Mar 05, 2024 2:47:15 PM reposense.report.ReportGenerator analyzeRepos -INFO: [77/92] Analyzing https://github.com/AY2324S2-CS2103-F08-1/tp.git (master)... -Mar 05, 2024 2:47:15 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-W09-4/tp.git to complete... -Mar 05, 2024 2:47:15 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +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 2:47:15 PM reposense.report.ReportGenerator analyzeRepo +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 2:47:15 PM reposense.report.ReportGenerator updateRepoConfig +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 +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 +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 2:47:15 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +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 2:47:15 PM reposense.report.RepoCloner waitForCloneProcess +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 +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 +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 2:47:15 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T12-3/tp.git... -Mar 05, 2024 2:47:15 PM reposense.report.ReportGenerator analyzeRepos -INFO: [78/92] Analyzing https://github.com/AY2324S2-CS2103T-T12-1/tp.git (master)... -Mar 05, 2024 2:47:15 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T12-3/tp.git to complete... -Mar 05, 2024 2:47:15 PM reposense.report.ReportGenerator updateRepoConfig +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 +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 +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 INFO: https://github.com/AY2324S2-CS2103T-T12-1/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 2:47:15 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 05, 2024 4:18:20 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T12-1/tp.git (master)... -Mar 05, 2024 2:47:15 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W08-1/tp.git (master)... -Mar 05, 2024 2:47:15 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:18:20 PM 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 +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 +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 INFO: Cloning of https://github.com/AY2324S2-CS2103T-W11-2/tp.git completed! -Mar 05, 2024 2:47:15 PM reposense.report.RepoCloner spawnCloneProcess +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 INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F14-2/tp.git... -Mar 05, 2024 2:47:16 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:18:21 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F14-2/tp.git to complete... -Mar 05, 2024 2:47:16 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T12-1/tp.git (master)... -Mar 05, 2024 2:47:16 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W08-1/tp.git (master)... -Mar 05, 2024 2:47:16 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W08-1/tp.git (master) completed! -Mar 05, 2024 2:47:16 PM reposense.report.ReportGenerator analyzeRepos -INFO: [79/92] Analyzing https://github.com/AY2324S2-CS2103T-W11-2/tp.git (master)... -Mar 05, 2024 2:47:16 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W09-2/tp.git completed! -Mar 05, 2024 2:47:16 PM reposense.report.RepoCloner spawnCloneProcess +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 INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T11-3/tp.git... -Mar 05, 2024 2:47:16 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 2:47:16 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W11-2/tp.git (master)... -Mar 05, 2024 2:47:16 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T12-1/tp.git (master)... -Mar 05, 2024 2:47:16 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T12-1/tp.git (master) completed! -Mar 05, 2024 2:47:16 PM reposense.report.ReportGenerator analyzeRepos -INFO: [80/92] Analyzing https://github.com/AY2324S2-CS2103T-W09-2/tp.git (master)... -Mar 05, 2024 2:47:16 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:18:21 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T11-3/tp.git to complete... -Mar 05, 2024 2:47:16 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 2:47:16 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W09-2/tp.git (master)... -Mar 05, 2024 2:47:16 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W09-4/tp.git completed! -Mar 05, 2024 2:47:16 PM reposense.report.RepoCloner spawnCloneProcess +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 INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-F12-1/tp.git... -Mar 05, 2024 2:47:16 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:18:23 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-F12-1/tp.git to complete... -Mar 05, 2024 2:47:16 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W12-3/tp.git (master)... -Mar 05, 2024 2:47:16 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103-F08-1/tp.git (master)... -Mar 05, 2024 2:47:16 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W09-2/tp.git (master)... -Mar 05, 2024 2:47:16 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T12-3/tp.git completed! -Mar 05, 2024 2:47:16 PM reposense.report.RepoCloner spawnCloneProcess +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 INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T17-3/tp.git... -Mar 05, 2024 2:47:16 PM reposense.report.RepoCloner waitForCloneProcess +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 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'... @@ -1516,201 +1542,175 @@ 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 2:47:16 PM reposense.report.RepoCloner spawnCloneProcess +Mar 05, 2024 4:18:23 PM reposense.report.RepoCloner spawnCloneProcess INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T14-2/tp.git... -Mar 05, 2024 2:47:16 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T14-2/tp.git to complete... -Mar 05, 2024 2:47:16 PM reposense.report.RepoCloner waitForCloneProcess +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 2:47:16 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W12-3/tp.git (master)... -Mar 05, 2024 2:47:17 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W12-3/tp.git (master) completed! -Mar 05, 2024 2:47:17 PM reposense.report.ReportGenerator analyzeRepos -INFO: [81/92] Analyzing https://github.com/AY2324S2-CS2103T-W09-4/tp.git (master)... -Mar 05, 2024 2:47:17 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W09-2/tp.git (master)... -Mar 05, 2024 2:47:17 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W09-2/tp.git (master) completed! -Mar 05, 2024 2:47:17 PM reposense.report.ReportGenerator analyzeRepos -INFO: [82/92] Analyzing https://github.com/AY2324S2-CS2103T-T12-3/tp.git (master)... -Mar 05, 2024 2:47:17 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103-F08-1/tp.git (master)... -Mar 05, 2024 2:47:17 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103-F08-1/tp.git (master) completed! -Mar 05, 2024 2:47:17 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 2:47:17 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W09-4/tp.git (master)... -Mar 05, 2024 2:47:17 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 2:47:17 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T12-3/tp.git (master)... -Mar 05, 2024 2:47:17 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T12-3/tp.git (master)... -Mar 05, 2024 2:47:17 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W11-2/tp.git (master)... -Mar 05, 2024 2:47:17 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T12-3/tp.git (master)... -Mar 05, 2024 2:47:17 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T12-3/tp.git (master) completed! -Mar 05, 2024 2:47:17 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W11-2/tp.git (master)... -Mar 05, 2024 2:47:17 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W11-2/tp.git (master) completed! -Mar 05, 2024 2:47:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T11-3/tp.git completed! -Mar 05, 2024 2:47:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F14-2/tp.git completed! -Mar 05, 2024 2:47:17 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W09-4/tp.git (master)... -Mar 05, 2024 2:47:17 PM reposense.report.ReportGenerator analyzeRepos -INFO: [83/92] Analyzing https://github.com/AY2324S2-CS2103T-T11-3/tp.git (master)... -Mar 05, 2024 2:47:17 PM reposense.report.RepoCloner spawnCloneProcess +Mar 05, 2024 4:18:23 PM 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 2:47:17 PM reposense.report.RepoCloner spawnCloneProcess -INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T17-1/tp.git... -Mar 05, 2024 2:47:17 PM reposense.report.ReportGenerator analyzeRepos -INFO: [84/92] Analyzing https://github.com/AY2324S2-CS2103T-F14-2/tp.git (master)... -Mar 05, 2024 2:47:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T08-2/tp.git to complete... -Mar 05, 2024 2:47:17 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 2:47:17 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T11-3/tp.git (master)... -Mar 05, 2024 2:47:17 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T17-1/tp.git to complete... -Mar 05, 2024 2:47:18 PM reposense.report.ReportGenerator updateRepoConfig +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 2:47:18 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +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 2:47:18 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W09-4/tp.git (master)... -Mar 05, 2024 2:47:18 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W09-4/tp.git (master) completed! -Mar 05, 2024 2:47:18 PM reposense.report.RepoCloner waitForCloneProcess +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 +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 +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 INFO: Cloning of https://github.com/AY2324S2-CS2103T-T17-3/tp.git completed! -Mar 05, 2024 2:47:18 PM reposense.report.ReportGenerator analyzeRepos -INFO: [85/92] Analyzing https://github.com/AY2324S2-CS2103T-T17-3/tp.git (master)... -Mar 05, 2024 2:47:18 PM reposense.report.RepoCloner spawnCloneProcess +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 2:47:18 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T11-3/tp.git (master)... -Mar 05, 2024 2:47:18 PM reposense.report.RepoCloner waitForCloneProcess +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 2:47:18 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:18:25 PM 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 +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 INFO: Cloning of https://github.com/AY2324S2-CS2103T-T14-2/tp.git completed! -Mar 05, 2024 2:47:18 PM reposense.report.ReportGenerator analyzeRepos +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 2:47:18 PM reposense.report.RepoCloner spawnCloneProcess +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 2:47:18 PM 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 2:47:18 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T17-3/tp.git (master)... -Mar 05, 2024 2:47:18 PM reposense.report.RepoCloner waitForCloneProcess +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 2:47:18 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T11-3/tp.git (master)... -Mar 05, 2024 2:47:18 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T11-3/tp.git (master) completed! -Mar 05, 2024 2:47:18 PM reposense.report.ReportGenerator updateRepoConfig +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 INFO: https://github.com/AY2324S2-CS2103T-T14-2/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 2:47:18 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 05, 2024 4:18:25 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T14-2/tp.git (master)... -Mar 05, 2024 2:47:18 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-F14-2/tp.git (master)... -Mar 05, 2024 2:47:18 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-F14-2/tp.git (master)... -Mar 05, 2024 2:47:18 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-F14-2/tp.git (master) completed! -Mar 05, 2024 2:47:18 PM reposense.commits.CommitInfoExtractor extractCommitInfos +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 INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T14-2/tp.git (master)... -Mar 05, 2024 2:47:18 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T17-3/tp.git (master)... -Mar 05, 2024 2:47:18 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 05, 2024 4:18:25 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T14-2/tp.git (master)... -Mar 05, 2024 2:47:18 PM reposense.report.ReportGenerator analyzeRepo +Mar 05, 2024 4:18:25 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T14-2/tp.git (master) completed! -Mar 05, 2024 2:47:18 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T17-3/tp.git (master)... -Mar 05, 2024 2:47:18 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T17-3/tp.git (master) completed! -Mar 05, 2024 2:47:18 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T17-1/tp.git completed! -Mar 05, 2024 2:47:18 PM reposense.report.ReportGenerator analyzeRepos -INFO: [87/92] Analyzing https://github.com/AY2324S2-CS2103T-T17-1/tp.git (master)... -Mar 05, 2024 2:47:18 PM reposense.report.RepoCloner spawnCloneProcess +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 INFO: Cloning in parallel from https://github.com/AY2324S2-CS2103T-T11-1/tp.git... -Mar 05, 2024 2:47:18 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:18:25 PM reposense.report.RepoCloner waitForCloneProcess INFO: Waiting for cloning of https://github.com/AY2324S2-CS2103T-T11-1/tp.git to complete... -Mar 05, 2024 2:47:19 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-T08-2/tp.git completed! -Mar 05, 2024 2:47:19 PM reposense.report.ReportGenerator analyzeRepos -INFO: [88/92] Analyzing https://github.com/AY2324S2-CS2103T-T08-2/tp.git (master)... -Mar 05, 2024 2:47:19 PM reposense.report.ReportGenerator updateRepoConfig +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 +INFO: Cloning of https://github.com/AY2324S2-CS2103T-T17-1/tp.git completed! +Mar 05, 2024 4:18:26 PM 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 INFO: https://github.com/AY2324S2-CS2103T-T17-1/tp.git (master) does not contain a standalone config file. -Mar 05, 2024 2:47:19 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 05, 2024 4:18:26 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T17-1/tp.git (master)... -Mar 05, 2024 2:47:19 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 2:47:19 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T08-2/tp.git (master)... -Mar 05, 2024 2:47:19 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T08-2/tp.git (master)... -Mar 05, 2024 2:47:19 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 05, 2024 4:18:26 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T17-1/tp.git (master)... -Mar 05, 2024 2:47:19 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T08-2/tp.git (master)... -Mar 05, 2024 2:47:19 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-T08-2/tp.git (master) completed! -Mar 05, 2024 2:47:19 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-W13-1/tp.git completed! -Mar 05, 2024 2:47:19 PM reposense.report.ReportGenerator analyzeRepos -INFO: [89/92] Analyzing https://github.com/AY2324S2-CS2103T-W13-1/tp.git (master)... -Mar 05, 2024 2:47:19 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 05, 2024 4:18:26 PM 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 INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T17-1/tp.git (master)... -Mar 05, 2024 2:47:19 PM reposense.report.ReportGenerator analyzeRepo +Mar 05, 2024 4:18:26 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T17-1/tp.git (master) completed! -Mar 05, 2024 2:47:19 PM reposense.report.RepoCloner waitForCloneProcess -INFO: Cloning of https://github.com/AY2324S2-CS2103T-F12-3/tp.git completed! -Mar 05, 2024 2:47:19 PM reposense.report.ReportGenerator analyzeRepos -INFO: [90/92] Analyzing https://github.com/AY2324S2-CS2103T-F12-3/tp.git (master)... -Mar 05, 2024 2:47:19 PM 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 2:47:19 PM reposense.authorship.FileInfoExtractor extractTextFileInfos -INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-W13-1/tp.git (master)... -Mar 05, 2024 2:47:19 PM reposense.report.ReportGenerator updateRepoConfig +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 2:47:19 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +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 2:47:19 PM reposense.commits.CommitInfoExtractor extractCommitInfos -INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-W13-1/tp.git (master)... -Mar 05, 2024 2:47:19 PM reposense.commits.CommitInfoAnalyzer analyzeCommits -INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-W13-1/tp.git (master)... -Mar 05, 2024 2:47:19 PM reposense.report.ReportGenerator analyzeRepo -INFO: Analysis of https://github.com/AY2324S2-CS2103T-W13-1/tp.git (master) completed! -Mar 05, 2024 2:47:19 PM reposense.commits.CommitInfoExtractor extractCommitInfos +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 2:47:19 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +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 2:47:19 PM reposense.report.ReportGenerator analyzeRepo +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 2:47:19 PM reposense.report.RepoCloner waitForCloneProcess +Mar 05, 2024 4:18:26 PM 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 +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 +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 +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 +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 INFO: Cloning of https://github.com/AY2324S2-CS2103T-T11-1/tp.git completed! -Mar 05, 2024 2:47:19 PM reposense.report.ReportGenerator analyzeRepos +Mar 05, 2024 4:18:27 PM reposense.report.ReportGenerator analyzeRepos INFO: [91/92] Analyzing https://github.com/AY2324S2-CS2103T-T11-1/tp.git (master)... -Mar 05, 2024 2:47:19 PM reposense.report.ReportGenerator updateRepoConfig +Mar 05, 2024 4:18:27 PM 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 2:47:19 PM reposense.authorship.FileInfoExtractor extractTextFileInfos +Mar 05, 2024 4:18:27 PM reposense.authorship.FileInfoExtractor extractTextFileInfos INFO: Extracting relevant file info from https://github.com/AY2324S2-CS2103T-T11-1/tp.git (master)... -Mar 05, 2024 2:47:19 PM reposense.commits.CommitInfoExtractor extractCommitInfos +Mar 05, 2024 4:18:27 PM reposense.commits.CommitInfoExtractor extractCommitInfos INFO: Extracting commits info for https://github.com/AY2324S2-CS2103T-T11-1/tp.git (master)... -Mar 05, 2024 2:47:20 PM reposense.commits.CommitInfoAnalyzer analyzeCommits +Mar 05, 2024 4:18:27 PM reposense.commits.CommitInfoAnalyzer analyzeCommits INFO: Analyzing commits info for https://github.com/AY2324S2-CS2103T-T11-1/tp.git (master)... -Mar 05, 2024 2:47:20 PM reposense.report.ReportGenerator analyzeRepo +Mar 05, 2024 4:18:27 PM reposense.report.ReportGenerator analyzeRepo INFO: Analysis of https://github.com/AY2324S2-CS2103T-T11-1/tp.git (master) completed! -Mar 05, 2024 2:47:20 PM reposense.report.ReportGenerator generateReposReport +Mar 05, 2024 4:18:27 PM reposense.report.ReportGenerator generateReposReport INFO: The report is generated at /home/runner/work/tp-dashboard/tp-dashboard/reposense-report -Mar 05, 2024 2:47:20 PM reposense.RepoSense main -INFO: Elapsed processing time: 35.13 second(s) +Mar 05, 2024 4:18:27 PM reposense.RepoSense main +INFO: Elapsed processing time: 45.86 second(s) diff --git a/summary.json b/summary.json index c2265202..bad564e2 100644 --- a/summary.json +++ b/summary.json @@ -1 +1 @@ -{"repoSenseVersion":"bbb2f694a7","reportGeneratedTime":"Tue Mar 5 22:46:45 2024 UTC+08:00","reportGenerationTime":" 34.92 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-05","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 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"}}}