From 5ff11fb95379850f2b6aa37810211fcf9065eb3c Mon Sep 17 00:00:00 2001 From: butteredyakiimo <111829949+butteredyakiimo@users.noreply.github.com> Date: Wed, 8 Nov 2023 14:56:17 +0800 Subject: [PATCH] Add Stats implementation and diagrams --- docs/DeveloperGuide.md | 73 ++++++++++++++++-- docs/diagrams/StatsAvailSelfInvDiagram.puml | 41 ++++++++++ docs/diagrams/StatsAvailSequenceDiagram.puml | 74 +++++++++++++++++++ docs/diagrams/StatsClassDiagram.puml | 15 ++++ docs/images/StatsAvailSelfInvDiagram.png | Bin 0 -> 29699 bytes docs/images/StatsAvailSequenceDiagram.png | Bin 0 -> 38984 bytes docs/images/StatsClassDiagram.png | Bin 0 -> 12223 bytes 7 files changed, 195 insertions(+), 8 deletions(-) create mode 100644 docs/diagrams/StatsAvailSelfInvDiagram.puml create mode 100644 docs/diagrams/StatsAvailSequenceDiagram.puml create mode 100644 docs/diagrams/StatsClassDiagram.puml create mode 100644 docs/images/StatsAvailSelfInvDiagram.png create mode 100644 docs/images/StatsAvailSequenceDiagram.png create mode 100644 docs/images/StatsClassDiagram.png diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index b04b97a0dbe..202fd8fa627 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -216,6 +216,8 @@ The add feature ensures that user input is correctly parsed and validated, and i ### Delete feature +#### Implementation + The delete mechanism allows users to delete fosterers in the address book. This feature is facilitated by the `DeleteCommand`, `DeleteCommandParser` and `Indices` classes, to handle user input and delete the correct fosterers. This feature is implemented using the following components and operations: * `DeleteCommand` — The core component responsible for executing the deletion of fosterers in the address book. @@ -226,32 +228,87 @@ Given below is an example usage scenario and how the delete mechanism behaves at ![Interactions Inside the Logic Component for the `delete 1 2 3` Command](images/DeleteMultipleSequenceDiagram.png) +
:information_source: **Note:** The lifeline for `DeleteCommandParser` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram. +
+ Step 1. The user enters the delete command with at least one index. The `DeleteCommandParser` is invoked to parse the user's input. -Step 2. `DeleteCommandParser` will then invoke the `ParserUtil` to check for the validity of indices. If indices are invalid, the system will generate an error message. The error message will be displayed to the user, providing feedback about the issue and the specific constraints that are not met. +Step 2. `DeleteCommandParser` will then invoke the `ParserUtil` to check for the validity of indices (omitted from diagram for simplicity). If indices are invalid, the system will generate an error message. The error message will be displayed to the user, providing feedback about the issue and the specific constraints that are not met. -Step 3. If indices are valid, the `DeleteCommand` will then execute the deletion by obtaining the fosterers from last seen list, and then deleting them from the address book. This is done in the `execute` method of `DeleteCommand`. +Step 3. For each valid index, the `DeleteCommand` will execute the deletion by obtaining that fosterer from the list of unique persons in the address book, and then updating the model to remove the fosterer. This is done in the `execute` method of `DeleteCommand`. -Step 4. A success message is displayed to the user to confirm that the fosterers have been deleted from the address book. +Step 4. A success message is displayed to the user to confirm that the selected fosterers have been deleted from the address book. Therefore, by ensuring that the user input indices are correctly parsed and validated, this delete feature allows the user to delete multiple fosterers at once. - - #### Design considerations: **Aspect: How delete executes:** * **Alternative 1 (current choice):** Delete multiple fosterers at once. - * Pros: Avoid having to update the model multiple times for multiple delete commands. - * Cons: Slightly harder to implement. - + * Pros: Do not have to parse user input multiple times in order for the user to perform mass deletion. + * Cons: Slightly harder to implement. * **Alternative 2:** Delete only one fosterer at a time. * Pros: Easy to implement. * Cons: Overhead associated with a chain of delete commands should the user choose to perform multiple deletions. +### Statistics feature +#### Implementation + +The Statistics feature provides a summary of selected address book data to the user. The data we can provide insights to are those of available fosterers, current fosterers and housing type of fosterers. Statistics include _number_ and _percentage_ information.
+This is facilitated by the `StatsCommand`, `StatsAvailCommand`, `StatsCurrentCommand` and `StatsHousingCommand` classes, as well as the `StatsCommandParser` class. The relationship between the Stats command classes are shown below. +![StatsClassDiagram](images/StatsClassDiagram.png) + +* `StatsCommand` — This is an abstract class that contains utility methods used by its subclasses for percentage calculation. +* `StatsAvailCommand` — Contains methods to calculate statistics of available fosterers and the animals they can foster. +* `StatsCurrentCommand` — Contains methods to calculate statistics of current fosterers and the animals they are currently fostering. +* `StatsHousingCommand` — Contains methods to calculate statistics of the different housing types of fosterers. +* `StatsCommandParser` — Contains the parsing methods for string input of the user. It is in charge of parsing the type of statistics requested by the user, and creating the corresponding `StatsCommand`.
+ +Given below is an example usage scenario and how the statistics feature behaves at each step. It shows the execution of a `stats avail` command, which requests for statistics about the available fosterers. + +![Interactions Inside the Logic Component for the StatsAvailCommand](images/StatsAvailSequenceDiagram.png) + +![Self Invocation StatsAvail](images/StatsAvailSelfInvDiagram.png) + + +
:information_source: **Note:** The lifeline for `StatsCommandParser` should end at the destroy marker (X) but due to a limitation of PlantUML, the lifeline reaches the end of diagram. +
+ +Step 1. The user enters the `stats avail` command. The `StatsCommandParser` is invoked to parse the user's input. + +Step 2. `StatsCommandParser` will then parse the argument inputted with the `stats` command, in this case it is `avail`. If the argument is not `avail`, `curr` or `housing`, the `StatsCommandParser` will then generate an error message to the user, indicating that the requested statistic is not available. + +Step 3. The `StatsAvailCommand` will then call relevant methods to obtain the needed numbers and percentages, done in the `execute` command. + +Step 4. A success message with the statistics will then be displayed to the user. + +The other commands `stats curr` and `stats housing` have a similar execution path, replacing `StatsAvailCommand` with `StatsCurrCommand` and `StatsHousingCommand` respectively. + +#### Design considerations: + +**Aspect: How to display the statistics:** + +* **Alternative 1 (current choice):** Show the availability and current statistics separately. + * Pros: Displayed statistics are specific to the user's query, showing only the relevant data. + * Cons: Need to create more classes. + +* **Alternative 2:** Show availability and current statistics together. + * Pros: Easier to implement. + * Cons: Result message displayed will be very long, making the UI less desirable. + +**Aspect: Which list should the statistics be calculated from:** + +* **Alternative 1 (current choice):** Calculated from the currently displayed list. + * Pros: The resulting statistic corresponds to what the user sees, allowing for easy verification. + * Cons: The user may need to perform a find or list to query the list of interest before entering the stats command. + +* **Alternative 2:** Calculated from the main list of fosterers. + * Pros: The resulting statistic corresponds to the whole address book, which may cause less confusion for the user. + * Cons: Less flexibility for the user. + ### \[Proposed\] Undo/redo feature #### Proposed Implementation diff --git a/docs/diagrams/StatsAvailSelfInvDiagram.puml b/docs/diagrams/StatsAvailSelfInvDiagram.puml new file mode 100644 index 00000000000..5a00aab9209 --- /dev/null +++ b/docs/diagrams/StatsAvailSelfInvDiagram.puml @@ -0,0 +1,41 @@ +@startuml +!include style.puml + +skinparam ArrowFontStyle plain + +mainframe **sd** get availability statistics + +participant "a:StatsAvailCommand" as StatsAvailCommand LOGIC_COLOR + +StatsAvailCommand -> StatsAvailCommand : getAvailableFosterers(list) +activate StatsAvailCommand +StatsAvailCommand --> StatsAvailCommand : availableFosterers +deactivate StatsAvailCommand + +StatsAvailCommand -> StatsAvailCommand : getAbleDogCount(availableFosterers) +activate StatsAvailCommand +StatsAvailCommand --> StatsAvailCommand : ableDogCount +deactivate StatsAvailCommand + +StatsAvailCommand -> StatsAvailCommand : getAbleCatCount(availableFosterers) +activate StatsAvailCommand +StatsAvailCommand --> StatsAvailCommand : ableCatCount +deactivate StatsAvailCommand + +StatsAvailCommand -> StatsAvailCommand : calculatePercentage(availableCount, total) +activate StatsAvailCommand +StatsAvailCommand --> StatsAvailCommand +deactivate StatsAvailCommand + +StatsAvailCommand -> StatsAvailCommand : calculatePercentage(ableDogCount, availableCount) +activate StatsAvailCommand +StatsAvailCommand --> StatsAvailCommand +deactivate StatsAvailCommand + +StatsAvailCommand -> StatsAvailCommand : calculatePercentage(ableCatCount, availableCount) +activate StatsAvailCommand +StatsAvailCommand --> StatsAvailCommand +deactivate StatsAvailCommand +||| + +@enduml diff --git a/docs/diagrams/StatsAvailSequenceDiagram.puml b/docs/diagrams/StatsAvailSequenceDiagram.puml new file mode 100644 index 00000000000..193b89e09dc --- /dev/null +++ b/docs/diagrams/StatsAvailSequenceDiagram.puml @@ -0,0 +1,74 @@ +@startuml +!include style.puml +skinparam ArrowFontStyle plain + +box Logic LOGIC_COLOR_T1 +participant ":LogicManager" as LogicManager LOGIC_COLOR +participant ":AddressBookParser" as AddressBookParser LOGIC_COLOR +participant ":StatsCommandParser" as StatsCommandParser LOGIC_COLOR +participant "a:StatsAvailCommand" as StatsAvailCommand LOGIC_COLOR +participant ":CommandResult" as CommandResult LOGIC_COLOR +end box + +box Model MODEL_COLOR_T1 +participant ":Model" as Model MODEL_COLOR +end box + +[-> LogicManager : execute("stats avail") +activate LogicManager + +LogicManager -> AddressBookParser : parseCommand("stats avail") +activate AddressBookParser + +create StatsCommandParser +AddressBookParser -> StatsCommandParser +activate StatsCommandParser + +StatsCommandParser --> AddressBookParser +deactivate StatsCommandParser + +AddressBookParser -> StatsCommandParser : parse("avail") +activate StatsCommandParser + +create StatsAvailCommand +StatsCommandParser -> StatsAvailCommand +activate StatsAvailCommand + +StatsAvailCommand --> StatsCommandParser : a +deactivate StatsAvailCommand + +StatsCommandParser --> AddressBookParser : a +deactivate StatsCommandParser +'Hidden arrow to position the destroy marker below the end of the activation bar. +StatsCommandParser -[hidden]-> AddressBookParser +destroy StatsCommandParser + +AddressBookParser --> LogicManager : a +deactivate AddressBookParser + +LogicManager -> StatsAvailCommand : execute() +activate StatsAvailCommand + +StatsAvailCommand -> Model : getFilteredPersonList() +activate Model + +Model --> StatsAvailCommand : list +deactivate Model + +ref over StatsAvailCommand +get availability statistics +end ref + +create CommandResult +StatsAvailCommand -> CommandResult +activate CommandResult + +CommandResult --> StatsAvailCommand +deactivate CommandResult + +StatsAvailCommand --> LogicManager : result +deactivate StatsAvailCommand + +[<--LogicManager +deactivate LogicManager +@enduml diff --git a/docs/diagrams/StatsClassDiagram.puml b/docs/diagrams/StatsClassDiagram.puml new file mode 100644 index 00000000000..0280d1c77a0 --- /dev/null +++ b/docs/diagrams/StatsClassDiagram.puml @@ -0,0 +1,15 @@ +@startuml +!include style.puml +skinparam arrowThickness 1.1 +skinparam arrowColor LOGIC_COLOR +skinparam classBackgroundColor LOGIC_COLOR + +Class StatsCommand +Class "{abstract}\nCommand" as Command + +StatsCommand -up-|> Command +StatsAvailCommand -up-|> StatsCommand +StatsCurrentCommand -up-|> StatsCommand +StatsHousingCommand -up-|> StatsCommand + +@enduml diff --git a/docs/images/StatsAvailSelfInvDiagram.png b/docs/images/StatsAvailSelfInvDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..1a46c8dcfb06509729228052b0dee4ed8e6eaad3 GIT binary patch literal 29699 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 Hck6!u(-+Nj literal 0 HcmV?d00001 diff --git a/docs/images/StatsAvailSequenceDiagram.png b/docs/images/StatsAvailSequenceDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..3de964384809439f49a20070ec6f735ca710d127 GIT binary patch literal 38984 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 Ak^lez literal 0 HcmV?d00001 diff --git a/docs/images/StatsClassDiagram.png b/docs/images/StatsClassDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..1c284c85239ee83c8c3348e73ec707291c09e38b GIT binary patch literal 12223 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