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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