diff --git a/docs/DeveloperGuide.md b/docs/DeveloperGuide.md index 6bef44d0eac..78b407c1172 100644 --- a/docs/DeveloperGuide.md +++ b/docs/DeveloperGuide.md @@ -6,9 +6,6 @@ # WedLog Developer Guide - - - 1. [Acknowledgements](#1-acknowledgements)
2. [Setting up, getting started](#2-setting-up-getting-started)
3. [Design](#3-design)
@@ -54,7 +51,7 @@ 8.7. [Better duplicate detection for dietary requirements](#8-7-better-duplicate-detection-for-dietary-requirements)
8.8. [Allow resizing of all panels](#8-8-allow-resizing-of-all-panels)
8.9. [Remove full-screen support for help window (macOS)](#8-9-remove-full-screen-support-for-help-window-macos)
- 8.10. [Better colour scheme](#8-10-better-colour-scheme) + 8.10. [Better colour scheme](#8-10-better-colour-scheme)
9. [Appendix D: Effort](#9-appendix-d-effort)
9.1. [Augmenting `Person` with `Guest` and `Vendor` classes](#9-1-augmenting-person-with-guest-and-vendor-classes)
9.2. [Altering most fields to become Optional](#9-2-altering-most-fields-to-become-optional)
@@ -79,11 +76,13 @@ Refer to the guide [_Setting up and getting started_](SettingUp.md). -------------------------------------------------------------------------------------------------------------------- +
+ ## **3. Design** ### 3.1. Architecture - + The ***Architecture Diagram*** given above explains the high-level design of the App. @@ -117,7 +116,7 @@ Each of the four main components (also shown in the diagram above), 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's being coupled to the implementation of a component), as illustrated in the (partial) class diagram below. - + The sections below give more details of each component. @@ -127,7 +126,7 @@ The sections below give more details of each component. The **API** of this component is specified in [`Ui.java`](https://github.com/AY2324S1-CS2103T-F11-2/tp/tree/master/src/main/java/wedlog/address/ui/Ui.java) - + The UI consists of a `MainWindow` that is made up of parts e.g.`CommandBox`, `ResultDisplay`, `GuestListPanel`, `VendorListPanel`, `StatisticsPanel`, `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. @@ -190,6 +189,8 @@ The `Model` component, * stores a `UserPref` object that represents the user’s preferences. This is exposed to the outside as a `ReadOnlyUserPref` objects. * 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) +
+ **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.
@@ -239,6 +240,8 @@ A `TableNumber` object stores a table number as an integer. It is wrapped in an +
+ #### Design considerations **Aspect: How to store guests and vendors** @@ -269,6 +272,8 @@ Step 1. The user launches the application. The `VersionedAddressBook` will be in Step 2. The user executes `xyz add n/Annette t/friend`, where `xyz` is either `guest` or `vendor`. This allows the user to add a guest or vendor with the name `Annette` and tag `friend`. +
+ Step 3. `AddressBookParser` parses the `xyz` keyword and creates the `XYZCommandParser`. `XYZCommandParser` parses the `add` keyword and creates a `XYZAddCommandParser` object. It also calls `XYZAddCommandParser#parse` to parse the inputted fields. @@ -280,6 +285,8 @@ user input and convert it into field objects (e.g. string representing a new nam +
+ Step 5. Lastly, `XYZAddCommand#execute` adds a `XYZ` with the given values to the `UniqueXYZList`. @@ -299,6 +306,8 @@ Step 2. The user executed `xyz filter r/no`, where `xyz` is either `guest` or `v Step 3. The user executes `xyz delete 1`, to delete the first guest or vendor **in the currently displayed list**. +
+ Step 4. `XYZDeleteCommandParser` parses the `Index` to create a `XYZDeleteCommand`. The following sequence diagram shows how the parsing of a delete command works: @@ -312,6 +321,8 @@ The following sequence diagram shows how the execution of a delete command works +
+ #### Design considerations **Aspect: How to specify a guest or vendor using `Index`** * **Alternative 1:** `Index` refers to the index on the full list. @@ -350,6 +361,7 @@ Step 5. A list view of only the XYZ named John is returned. **However, a XYZ with name "John doe" would be returned as his name contains the keyword "John".**
+ The filtering logic is done with predicate classes that implement Java's Predicate interface: @@ -415,6 +427,8 @@ Step 2. The user executes `guest filter n/John` to show only guests with the nam Step 3. The user executes `guest edit 2 p/` to edit the 2nd guest in **the current list** to have **no phone number**. +
+ Step 4. `GuestEditCommandParser` parses the `Index` and the additional arguments to create an `GuestEditCommand`. The following sequence diagram shows how the parsing of an edit command works: @@ -435,6 +449,8 @@ Step 5. The resulting `GuestEditCommand` object is then executed by the `LogicMa
+
+ #### Design considerations **Aspect: How `EditXYZDescriptor` works:** @@ -468,6 +484,8 @@ These operations are exposed in the `Model` interface as `Model#commitAddressBoo Given below is an example usage scenario and how the undo/redo mechanism behaves at each step. +
+ 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. @@ -524,6 +542,8 @@ Step 6. The user executes `clear`, which calls `Model#commitAddressBook()`. Sinc +
+ The following activity diagram summarizes what happens when a user executes a new command: @@ -555,6 +575,8 @@ The following activity diagram summarizes what happens when a user executes a ne -------------------------------------------------------------------------------------------------------------------- +
+ ## **6. Appendix A: Requirements** ### 6.1. Product scope @@ -617,6 +639,8 @@ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unli
+
+ ### 6.3. Use cases (For all use cases below, the **System** is `WedLog` and the **Actor** is the `user`, unless specified otherwise) @@ -748,6 +772,8 @@ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unli
+
+ **Use case: UC8 - Filter vendors** **MSS:** @@ -793,6 +819,8 @@ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unli
+
+ **Use case: UC10 - Edit a vendor** **MSS:** @@ -832,13 +860,14 @@ Priorities: High (must have) - `* * *`, Medium (nice to have) - `* *`, Low (unli
+
+ ### 6.5. Glossary * **Mainstream OS**: Windows, Linux, Unix, MacOS * **CLI**: Command Line Interface * **GUI**: Graphical User Interface * **JSON**: [JavaScript Object Notation](https://www.json.org/json-en.html) -* **Private contact detail**: A contact detail that is not meant to be shared with others -------------------------------------------------------------------------------------------------------------------- @@ -978,6 +1007,8 @@ Prerequisites: List all vendors using the `vendor list` command. There should be
+
+ ### 7.9. Editing vendors Prerequisites: List all vendors using the `vendor list` command. There should be at least 3, but less than 10,000 vendors in the list. @@ -1026,6 +1057,8 @@ Prerequisites: There should be at least one guest or vendor in the application. -------------------------------------------------------------------------------------------------------------------- +
+ ## **8. Appendix C: Planned enhancements** Given below are the planned enhancements for WedLog, beyond v1.4. This list is not ranked in order of importance. @@ -1160,6 +1193,8 @@ and 'Vegan', WedLog will treat them as different dietary requirements. This can This enhancement will allow WedLog to detect duplicate dietary requirements, regardless of case. A dietary requirement will be stored in WedLog in lowercase, for standardisation. +
+ #### Benefits We understand that our users may assign dietary requirements with the same name but different case. This enhancement will enforce case-insensitivity for the input of dietary requirements, to prevent duplicate dietary requirements from being added to WedLog. @@ -1188,6 +1223,8 @@ This can be done by adding the `resizable="true"` attribute to the relevant `Pan
+
+ ### 8.9. Remove full-screen support for help window (macOS) #### Description We are aware of the issue that some macOS users have with the help window. When the app is running in full-screen mode and the help window is launched, it is also launched in full-screen mode, @@ -1234,6 +1271,8 @@ by changing the relevant style attributes in the `.css` files. -------------------------------------------------------------------------------------------------------------------- +
+ ## **9. Appendix D: Effort** This section documents the effort required to evolve AB3 into WedLog. @@ -1307,6 +1346,8 @@ This involved:
+
+ ### 9.7. Introducing Rsvp Status pie chart and Dietary Requirements statistics panel This involved creating a new UI design and logic that was not available in AB3. diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 8d3f8f3d251..256a6e9fd28 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -6,9 +6,6 @@ # User Guide - - - ## Welcome to WedLog _**Wedding planning made simple**_ @@ -25,8 +22,8 @@ Here's a quick summary of what WedLog can do for you: 1. [How to Use This Guide](#1-how-to-use-this-guide)
1.1 [Notations Used in This Guide](#1-1-notations-used-in-this-guide)
1.2 [New Users](#1-2-new-users)
- 1.3 [Experienced Users](#1-3-experienced-users) -2. [Getting Started](#2-getting-started) + 1.3 [Experienced Users](#1-3-experienced-users)
+2. [Getting Started](#2-getting-started)
3. [Understanding the WedLog Interface](#3-understanding-the-wedlog-interface)
3.1. [User Input and Feedback](#3-1-user-input-and-feedback)
  3.1.1. [Command box](#3-1-1-command-box)
@@ -64,16 +61,16 @@ Here's a quick summary of what WedLog can do for you:   5.6.3. [Redoing last action: `redo`](#5-6-3-redoing-last-action-redo)
  5.6.4. [Clearing guests and vendors: `clear`](#5-6-4-clearing-guests-and-vendors-clear)
  5.6.5. [Exiting the program: `exit`](#5-6-5-exiting-the-program-exit)
-6. [FAQ](#6-faq) -7. [Known Issues](#7-known-issues) -8. [Future Implementations](#8-future-implementations) +6. [FAQ](#6-faq)
+7. [Known Issues](#7-known-issues)
+8. [Future Implementations](#8-future-implementations)
9. [Command Summary](#9-command-summary)
10. [Appendix: Acceptable values for parameters](#10-appendix-acceptable-values-for-parameters) -
- -------------------------------------------------------------------------------------------------------------------- +
+ ## 1. How to Use This Guide ### 1.1 Notations Used in This Guide @@ -126,6 +123,8 @@ If you would like a detailed look into each of the features WedLog has to offer, -------------------------------------------------------------------------------------------------------------------- +
+ ## 2. Getting Started 1. Ensure you have Java version `11` or above installed in your Computer. @@ -177,6 +176,8 @@ The command box is the gateway for you to interact with WedLog, allowing you to -------------------------------------------------------------------------------------------------------------------- +
+ #### 3.1.2. Result display Complementing the command box is the result display, where WedLog presents relevant responses based on the executed commands. When a command is successfully executed, a success message will be displayed. When an invalid command is entered, an error message will be displayed. @@ -197,6 +198,8 @@ To navigate through your extensive lists, a user-friendly scroll bar is provided ![lists.png](images%2Funderstanding-interface%2Flists.png) +
+ #### 3.2.1. Guest list The guest list allows you to meticulously manage and track all information related to your guests. @@ -219,11 +222,13 @@ Vendor cards encapsulate key information such as tags, phone numbers, addresses, -------------------------------------------------------------------------------------------------------------------- +
+ ### 3.3. Quick View Panel The Quick View panel allows you to see an overview of your guests at a glance. It is located on the left side of the window. -WedLog's Quick View panel
+WedLog's Quick View panel
The Quick View panel consists of 2 sections: the RSVP Status panel and the Dietary Requirements panel. @@ -235,7 +240,7 @@ The RSVP Status panel is designed to help you keep track of the proportion of RS represented using a pie chart, with labels indicating the number of guests with each RSVP status. The pie chart is updated automatically whenever you add, delete or edit a guest. -RSVP Status panel
+RSVP Status panel
The pie chart slices are colour-coded as follows: - `Yes`: Green @@ -271,6 +276,8 @@ To kick-start your wedding planning journey with WedLog, explore the tutorial in -------------------------------------------------------------------------------------------------------------------- +
+ ## 4. WedLog Tutorial Welcome to the WedLog Tutorial! In this section, we'll guide you through the basic commands of WedLog to get you started on your wedding planning journey. @@ -327,6 +334,8 @@ This ensures that the tallies on the dietary requirements panel reflect only gue -------------------------------------------------------------------------------------------------------------------- +
+ ### 4.3. Filtering guests Let's narrow down the guest list based on specific criteria using the `guest filter` command. @@ -349,6 +358,8 @@ Your app should now look like this: Now that we have a few guests on our list, let's begin filtering. +
+ First, let's filter for all guests who are friends. The following command will result in a list that contains only guests with the `TAG` `friends`. `guest filter t/friends` @@ -363,6 +374,8 @@ Notice that the number of guests stated at the top of the guest list has changed +
+ Next, let's narrow down our search to filter for all guests who are friends from university. The following command will result in a list that contains only guests with the `TAG` `friends` and `university`. `guest filter t/friends t/university` @@ -377,6 +390,8 @@ Notice that Mary Fowl is no longer included on this list, since she does not hav +
+ Finally, let's filter for all guests who have not been assigned to any table yet. We can use the empty `tn/` label to look for guests without any table numbers associated to them. `guest filter tn/` @@ -397,6 +412,8 @@ Notice that John Doe is not included on this list, since we have previously assi -------------------------------------------------------------------------------------------------------------------- +
+ ### 4.4. What's next? Congratulations! You've completed the essential steps of the WedLog Tutorial, setting the stage for seamless and organized wedding planning. Armed with the knowledge of adding guests, editing details, and filtering, you're well-equipped to make the most of WedLog. @@ -428,6 +445,8 @@ Let's breakdown an example parameter `x/ABC` below.
+
+ ### Understanding the command format Mastering the command format in WedLog is essential for efficient interaction. WedLog's commands allow for flexibility in parameter order and support optional and repeatable elements. @@ -457,6 +476,8 @@ If you are using a PDF version of this document, be careful when copying and pas -------------------------------------------------------------------------------------------------------------------- +
+ ### 5.1 Add Command #### 5.1.1. Adding a guest: `guest add` @@ -500,6 +521,8 @@ Expected behaviour upon failure: -------------------------------------------------------------------------------------------------------------------- +
+ #### 5.1.2. Adding a vendor: `vendor add` Allows you to add a vendor to WedLog, so that you can streamline coordination with the people involved in making your dream wedding a reality. @@ -545,6 +568,8 @@ Expected behaviour upon failure: -------------------------------------------------------------------------------------------------------------------- +
+ ### 5.2. Delete Command #### 5.2.1. Deleting a guest: `guest delete` @@ -647,6 +672,8 @@ If the edited name specified in `n/NAME` corresponds to the name of an existing +
+ Examples: - `guest list` followed by `guest edit 2 p/914624435` edits the phone number of the 2nd guest to be `91462435`. - `guest filter n/Gina` followed by `guest edit 1 n/Ginette` edits the name of the 1st guest in the results of the `filter` command to be `Ginette`. @@ -780,6 +807,8 @@ Format: `guest filter [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [r/RSVP_STATUS] [ +
+ **Note:** @@ -915,6 +944,8 @@ The redo command can be triggered by pressing Control + Y (Windows) or Command + +
+ Examples: - `vendor delete 2`, followed by `undo`, followed by `redo` deletes, then restores, then re-deletes the 2nd vendor in WedLog. @@ -961,6 +992,8 @@ Upon exit, the latest data is saved to your computer at `data/addressbook.json`. -------------------------------------------------------------------------------------------------------------------- +
+ ## 6. FAQ @@ -991,8 +1024,6 @@ unable to help you recover your lost data. **A**: We hope you had a good wedding planning journey with WedLog! If you placed WedLog inside a dedicated folder during the installation process, simply delete the entire folder. Otherwise, you will have to find and delete the following files individually: `wedlog.jar`, `addressbook.log.0`, `preferences.json`, `config.json`, alongside the `data` folder. -
- > [Back to top](#user-guide) -------------------------------------------------------------------------------------------------------------------- @@ -1001,8 +1032,6 @@ simply delete the entire folder. Otherwise, you will have to find and delete the 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. -
- -------------------------------------------------------------------------------------------------------------------- ## 8. Future Implementations